基于Arduino UNO的智能自主避障小车和蓝牙遥控小车 您所在的位置:网站首页 uno汽车 基于Arduino UNO的智能自主避障小车和蓝牙遥控小车

基于Arduino UNO的智能自主避障小车和蓝牙遥控小车

2023-11-07 10:52| 来源: 网络整理| 查看: 265

       Hello,大家好!今天我要给大家分享我近期制作的一个arduino小项目----智能避障小车。之前在某站上无意间刷到某位博主制作的一款智能避障小车,觉得很有意思,便打算自己也做一个来玩玩,于是便制作了一款我自己理解的避障小车。在此基础上,我还增加了蓝牙遥控,让二者可以相互切换,提高项目可玩性。当然,和其他避障小车类似,这款也是采用超声波来测距避障,代码相对其他大佬来说显得比较浅显易懂,对于刚接触Arduino的朋友非常友好。好了,废话不多说,直接看代码!!!

一、代码

/*********************************/ //调取蓝牙模块库,调取伺服电机库 #include //调取库函数 #include //声明调用Servo.h库 SoftwareSerial BT(A0, A1); //新建对象,接收脚为A0--TXD,发送脚为A1--RXD Servo servo; //创建一个舵机对象 /*********************************/ //定义驱动模块串口及变量 int TrigPin = 2; //发出超声波 int EchoPin = 3; //收到反射回来的超声波 int Input1 = 4; //定义uno的pin4向Input1输出 int Input2 = 5; //定义uno的pin5向Input2输出 int Input3 = 6; //定义uno的pin6向Input3输出 int Input4 = 7; //定义uno的pin7向Input4输出 int pos = 118; //创建变量,存储从模拟端口读取的值 float cm; //因为测得的距离是浮点型的,单位为cm int xuan; int choice; //小车功能选择 /********************* ************/ //控制函数部分 void stop() //小车停止 { digitalWrite(Input1,LOW); //给低电平 digitalWrite(Input2,LOW); //给低电平 digitalWrite(Input3,LOW); //给低电平 digitalWrite(Input4,LOW); //给低电平 delay(50); } void forward() //小车前进 { digitalWrite(Input1,HIGH); //给高电平 digitalWrite(Input2,LOW); //给低电平 digitalWrite(Input3,HIGH); //给高电平 digitalWrite(Input4,LOW); //给低电平 delay(50); } void backward() //小车后退 { digitalWrite(Input1,LOW); //给低电平 digitalWrite(Input2,HIGH); //给高电平 digitalWrite(Input3,LOW); //给低电平 digitalWrite(Input4,HIGH); //给高电平 delay(50); } void turnleft() //小车左转 { digitalWrite(Input1,HIGH); //给高电平 digitalWrite(Input2,LOW); //给低电平 digitalWrite(Input3,LOW); //给低电平 digitalWrite(Input4,HIGH); //给高电平 delay(50); } void turnright() //小车右转 { digitalWrite(Input1,LOW); //给低电平 digitalWrite(Input2,HIGH); //给高电平 digitalWrite(Input3,HIGH); //给高电平 digitalWrite(Input4,LOW); //给低电平 delay(50); } void Left() //舵机左转 { while(pos < 180) { pos++; servo.write(pos); //写入舵机角度 delay(15); //延时使舵机转到相应角度 } } void Right() //舵机右转 { while(pos > 60) { pos--; servo.write(pos); delay(15); } } void Ranging() //测量距离 { digitalWrite(TrigPin, LOW); //低电平发一个短时间脉冲去TrigPin delayMicroseconds(2); //delayMicroseconds在更小的时间内延时准确,delayMicroseconds是毫秒级计时单位 digitalWrite(TrigPin, HIGH); //通过这里控制超声波的发射 delayMicroseconds(10); digitalWrite(TrigPin, LOW); //通过这里控制停止超声波的发射 cm = pulseIn(EchoPin, HIGH) / 58.0; //将回波时间换算成cm ,其中pulseIn(接收信号引脚,高低电平)函数用来接收反射回来的声波 cm = (int(cm * 100.0)) / 100.0; //保留两位小数 Serial.print("Distance:"); Serial.print(cm); Serial.print("cm"); Serial.println(); //以上四句在串口监视器中输出 delay(1000); } /****************************************************/ void setup() { Serial.begin(9600); //与电脑串口相连,波特率为9600 servo.attach(9); //9号引脚输出舵机控制信号,仅能使用输出PWM信号的引脚 pinMode(Input1, OUTPUT); //Input1引脚设置为输出模式 pinMode(Input2, OUTPUT); //Input2引脚设置为输出模式 pinMode(Input3, OUTPUT); //Input3引脚设置为输出模式 pinMode(Input4, OUTPUT); //Input4引脚设置为输出模式 pinMode(TrigPin, OUTPUT); //发出超声波串口设置为输出 pinMode(EchoPin, INPUT); //接受超声波接口设为输入 BT.begin(9600); //设置波特率为9600 } void loop() { switch(choice) { case 'X' : //选择避障 Ranging(); //测量距离 if(cm > 10.0) //没有碰到障碍物 forward(); else //碰到障碍物 { backward(); //小车后退 delay(200); //延时确定后退距离 stop(); //小车停止 Right(); //舵机右转 Ranging(); //测量距离 servo.write(118); //舵机回中 if(cm > 10.0) //如果右边满足条件 { turnright(); //小车右转 delay(200); //延时确定转弯角度 } else //如果右边不满足 { Left(); //舵机左转 Ranging(); //测量距离 servo.write(118); //舵机回中 turnleft(); //小车左转 delay(200); //延时确定转弯角度 } } case 'Y' : //选择遥控 while(BT.available()) //蓝牙识别字符 { xuan = BT.read(); //蓝牙读取字符 switch(xuan) { case 'A' : forward(); //调取前进函数 case 'B' : backward(); //调取后退函数 case 'C' : turnleft(); //调取左转函数 case 'D' : turnright(); //调取右转函数 case 'E' : stop(); //调取停止函数 } } } }

代码看起来是不是很通俗易懂呢!!!

接下来给你们介绍我理解的手机蓝牙通讯和电脑串口通讯:

手机:BT.begin(9600); 

电脑:Serial.begin(9600);

括号里是波特率。二者更深层次的含义由于学术不精,无法给出具体解释,但经过实际测试是正确的。

        代码中涉及的伺服电机角度,是根据我购买的伺服电机结合制作时的需要所测量和设定的角度,只具有参考性。各位可以根据自己购买的伺服电机来进行修改。

void Left()                               //舵机左转 {    while(pos < 180)     {       pos++;       servo.write(pos);      //写入舵机角度         delay(15);//延时使舵机转到相应度        } }

        该部分控制舵机转动采用while循环来实现,主要是使舵机逐角度的变化,也可以直接使用

servo.write(pos);

写入需要的角度,但会使的舵机转动到所设定角度的时间很短,可能会对舵机造成伤害(个人观点)。

二、所需材料

1.Arduino UNO开发板

2.HC-SR04超声波模块

3.HC-06蓝牙模块

4.L298N电机驱动板模块

5.智能小车底盘

6.18650充电电池及电池仓

7.杜邦线若干

        以上这些材料是我制作时用到的,均可在淘宝上购买到。对于小车框架,可以直接在网上购买或者自己制作。有能力的朋友,可以自己设计建模一款小车框架,然后通过3D打印实现。

         当然,小车并不只限于轮式结构,履带式小车相较轮式适应路况的性能更优秀,是不错的选择哦。

         手机端蓝牙遥控器用的是‘手机蓝牙调试器’,在应用商店里就可以下载到。相对应的A,B,C,D,E,X,Y在按键操作里编辑即可。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有