arduino蓝牙小车

一、实验准备

  1. arduino开发板

  1. 电机驱动模块

  1. 电机和车轮子

  1. 电池和电池盒

  1. 杜邦线若干

  1. 车架(可自己设计打印)

  1. 蓝牙模块

  1. 蓝牙调试器(一个蓝牙调试APP,可在商店应用下载)

  1. 面包板

二、器材组装

如下图:

正面:

左面:

右面:

原理图(连线图):

略(懒得画了,不懂的可以私信我😃)

三、原理分析

使用手机下载“蓝牙调试器”,并用蓝牙调试器连接蓝牙模块,使用蓝牙调试器向蓝牙模块发送消息,arduino通过接收到的消息,去控制小车的运动,只要改变左右相应电机的转速,就可以达到控制小车运动的效果。

四、源码

char serialData;

#define LeftMotor1 4  //Arduino的4号引脚
#define LeftMotor2 5   //Arduino的5号引脚
#define RightMotor1 6 //Arduino的6号引脚
#define RightMotor2 7 //Arduino的7号引脚

//初始化函数
void setup() {
  Serial.begin(9600);//设置波特率为9600

  //电机引脚初始化,设置为输出模式
  pinMode(LeftMotor1, OUTPUT);
  pinMode(LeftMotor2, OUTPUT);
  pinMode(RightMotor1, OUTPUT);
  pinMode(RightMotor2, OUTPUT);
}

//前进函数
void moveForward() {
  digitalWrite(LeftMotor1, HIGH);
  digitalWrite(LeftMotor2, LOW);
  digitalWrite(RightMotor1, LOW);
  digitalWrite(RightMotor2, HIGH);
}

//后退函数
void moveBackward() {
  digitalWrite(LeftMotor1, LOW);
  digitalWrite(LeftMotor2, HIGH);
  digitalWrite(RightMotor1, HIGH);
  digitalWrite(RightMotor2, LOW);
}
//左旋转函数
void turnLeft() {
  digitalWrite(LeftMotor1, LOW);
  digitalWrite(LeftMotor2, LOW);
  digitalWrite(RightMotor1, LOW);
  digitalWrite(RightMotor2, HIGH);
}
//右旋转函数
void turnRight() {
  digitalWrite(LeftMotor1, HIGH);
  digitalWrite(LeftMotor2, LOW);
  digitalWrite(RightMotor1, LOW);
  digitalWrite(RightMotor2, LOW);
}
//停止函数
void turnStop() {
  digitalWrite(LeftMotor1, LOW);
  digitalWrite(LeftMotor2, LOW);
  digitalWrite(RightMotor1, LOW);
  digitalWrite(RightMotor2, LOW);
}

void loop(){
   //如果接收到来自蓝牙的消息
  if( Serial.available()){ 
    
    serialData =  Serial.read();//读取蓝牙的消息
    Serial.println(serialData);//将消息打印到串口监视器,方便调试代码

    //根据接收到的指令控制小车运动
    if (serialData == 'G') {
      moveForward();
    } else if (serialData == 'K') {
      moveBackward();
    } else if (serialData == 'H') {
      turnLeft();
    } else if (serialData == 'J') {
      turnRight();
    }
    else if (serialData == 'I') {
      turnStop();
    }
  }
}
  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在终端打印小车相对于map坐标系的位姿,你可以按照以下步骤进行操作: 1. 在你的ROS节点中导入所需的库,包括tf2和geometry_msgs等。 2. 在ROS节点中创建一个订阅tf2变换消息的回调函数。 3. 在回调函数中使用tf2库提供的函数,通过坐标系的名称获取小车相对于map坐标系的变换信息。 4. 解析变换信息,获取小车的位姿数据,包括位置和姿态。 5. 将位姿数据打印到终端。 以下是一个示例代码片段,展示了如何在ROS节点中实现上述功能: ```python import rospy import tf2_ros from geometry_msgs.msg import TransformStamped def pose_callback(msg): if msg.header.frame_id == "map" and msg.child_frame_id == "car": # 解析位姿数据 position = msg.transform.translation orientation = msg.transform.rotation # 打印位姿数据 rospy.loginfo("Car pose relative to map:") rospy.loginfo("Position: x={}, y={}, z={}".format(position.x, position.y, position.z)) rospy.loginfo("Orientation: x={}, y={}, z={}, w={}".format(orientation.x, orientation.y, orientation.z, orientation.w)) def main(): rospy.init_node("pose_listener") tf_buffer = tf2_ros.Buffer() tf_listener = tf2_ros.TransformListener(tf_buffer) rospy.Subscriber("/tf", TransformStamped, pose_callback) rospy.spin() if __name__ == "__main__": main() ``` 在上述示例中,我们创建了一个ROS节点,订阅了`/tf`话题上的tf2变换消息。在回调函数中,我们检查消息的父坐标系和子坐标系是否为"map"和"car",然后提取位姿数据并进行打印。请注意,你需要将代码中的"car"替换为你实际使用的小车坐标系名称。 运行该节点后,你将在终端上看到小车相对于map坐标系的位姿信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值