Hello,大家好!今天我要给大家分享我近期制作的一个arduino小项目----智能避障小车。之前在某站上无意间刷到某位博主制作的一款智能避障小车,觉得很有意思,便打算自己也做一个来玩玩,于是便制作了一款我自己理解的避障小车。在此基础上,我还增加了蓝牙遥控,让二者可以相互切换,提高项目可玩性。当然,和其他避障小车类似,这款也是采用超声波来测距避障,代码相对其他大佬来说显得比较浅显易懂,对于刚接触Arduino的朋友非常友好。好了,废话不多说,直接看代码!!!
一、代码
/*********************************/ //调取蓝牙模块库,调取伺服电机库
#include <SoftwareSerial.h> //调取库函数
#include <Servo.h> //声明调用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打印实现。
当然,小车并不只限于轮式结构,履带式小车相较轮式适应路况的性能更优秀,是不错的选择哦。文章来源:https://www.toymoban.com/news/detail-428813.html
手机端蓝牙遥控器用的是‘手机蓝牙调试器’,在应用商店里就可以下载到。相对应的A,B,C,D,E,X,Y在按键操作里编辑即可。文章来源地址https://www.toymoban.com/news/detail-428813.html
到了这里,关于基于Arduino UNO的智能自主避障小车和蓝牙遥控小车的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!