有这样一款基于Arduino的小车,不通过循迹,红外,超声波?
Hello,大家好!今天我要给大家分享一下我近期制作的一个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的pin5向Input1输出
int Input2 = 5; //定义uno的pin5向Input2输出
int Input3 = 6; //定义uno的pin5向Input3输出
int Input4 = 7; //定义uno的pin5向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() //舵机左转
{undefined
while(pos < 180)
{undefined
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.杜邦线若干
以上这些素材我制作时所用到,都是能够在某1个宝上买到的。当然对于小车底盘,有才能的朋友,能够自己设计建模一款小车底盘,然后通过3D打印机打印出来也是很好的。
手机端蓝牙遥控器用的是‘手机蓝牙调试器’,在应用商店里就能够下载到。相对应的A,B,C,D,E,X,Y在按键 *** 作里编辑即可。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)