相关知识
常见的避障方式:
接触式:通过触碰开关来进行判断,经常应用在扫地机器人的挡板上。
非接触式:使用接近传感器实现功能,在没有物理接触的情况下检测物体的运动/存在并将捕获的信息传递为电信号的传感器。在避障小车的应用上,我们通常使用红外接近传感器或者超声波传感器。
超声波原理: 本节课我们主要使用超声波传感器来实现避障功能,这里针对超声波的原理再复习一下。
车辆避障功能设计模型:
电路搭建
所需材料
ArduinoUNO * 1
前两节课的车辆结构 * 1
超声波模块 *1
杜邦线若干
电路接线
程序编写
练习一:右转避障
小车在前行的过程中,20cm以内有障碍物,小车能自动右转避开,效果如下:
图形化方式:
具体右转时间可以根据实际情况进行调整。
代码方式:
/* 项目名称:右转避障车
* 项目时间:2022.04.02
* 项目作者:MRX
*/
int IN1 = 2; // IN1 connected to pin 4
int IN2 = 4;
int ENA = 3;
int IN3 = 6; // IN3 connected to pin 6
int IN4 = 7;
int ENB = 5;
int value = 255; // the duty cycle
const int TrigPin = 12;//设置2号数字引脚为触发引脚
const int EchoPin = 13;//设置3号数字引脚为接收引脚
int distance = 0;
void Forward() {
digitalWrite(IN1,HIGH);
digitalWrite(IN2,LOW);
analogWrite(ENA,value);
digitalWrite(IN3,HIGH);
digitalWrite(IN4,LOW);
analogWrite(ENB,value);
}
void Back() {
digitalWrite(IN1,LOW);
digitalWrite(IN2,HIGH);
analogWrite(ENA,value);
digitalWrite(IN3,LOW);
digitalWrite(IN4,HIGH);
analogWrite(ENB,value);
}
void Right() {
digitalWrite(IN1,LOW);
digitalWrite(IN2,HIGH);
analogWrite(ENA,value);
digitalWrite(IN3,LOW);
digitalWrite(IN4,HIGH);
analogWrite(ENB,0);
}
void Left() {
digitalWrite(IN1,LOW);
digitalWrite(IN2,HIGH);
analogWrite(ENA,0);
digitalWrite(IN3,LOW);
digitalWrite(IN4,HIGH);
analogWrite(ENB,value);
}
void Stop() {
digitalWrite(IN1,LOW);
digitalWrite(IN2,LOW);
analogWrite(ENA,0);
digitalWrite(IN3,LOW);
digitalWrite(IN4,LOW);
analogWrite(ENB,0);
}
void setup(){
Serial.begin(9600);
for (int i = 4;i <= 10;i++){
pinMode(i, OUTPUT);
}
pinMode(TrigPin,OUTPUT);//12号脚为输出引脚
pinMode(EchoPin,INPUT);//13号脚为输入状态
}
void loop(){
digitalWrite(TrigPin,LOW);//先设置为低电平
delayMicroseconds(2);//持续2微秒
digitalWrite(TrigPin,HIGH);//设置为高电平
delayMicroseconds(10);//持续10微秒
digitalWrite(TrigPin,LOW);//再设置为低电平,这样模拟出了脉冲信号
distance = pulseIn(EchoPin,HIGH)/58;//返回的是脉冲宽度/58得到实际距离
if (distance <= 20) {
Right();
delay(1000);
} else {
Forward();
}
}
练习二: 车辆自主避障
在前行的过程中,20cm以内有障碍物,小车自动绕开障碍物,然后继续前行,效果如下:
图形化方式:
延时时间数据需根据实际情况调试获得。
代码方式:
/* 项目名称:自动避障车
* 项目时间:2022.04.02
* 项目作者:MRX
*/
int IN1 = 2; // IN1 connected to pin 4
int IN2 = 4;
int ENA = 3;
int IN3 = 6; // IN3 connected to pin 6
int IN4 = 7;
int ENB = 5;
int value = 255; // the duty cycle
const int TrigPin = 12;//设置2号数字引脚为触发引脚
const int EchoPin = 13;//设置3号数字引脚为接收引脚
int distance = 0;
int flag = 1;
void Forward() {
digitalWrite(IN1,HIGH);
digitalWrite(IN2,LOW);
analogWrite(ENA,value);
digitalWrite(IN3,HIGH);
digitalWrite(IN4,LOW);
analogWrite(ENB,value);
}
void Back() {
digitalWrite(IN1,LOW);
digitalWrite(IN2,HIGH);
analogWrite(ENA,value);
digitalWrite(IN3,LOW);
digitalWrite(IN4,HIGH);
analogWrite(ENB,value);
}
void Right() {
digitalWrite(IN1,LOW);
digitalWrite(IN2,HIGH);
analogWrite(ENA,value);
digitalWrite(IN3,LOW);
digitalWrite(IN4,HIGH);
analogWrite(ENB,0);
}
void Left() {
digitalWrite(IN1,LOW);
digitalWrite(IN2,HIGH);
analogWrite(ENA,0);
digitalWrite(IN3,LOW);
digitalWrite(IN4,HIGH);
analogWrite(ENB,value);
}
void Stop() {
digitalWrite(IN1,LOW);
digitalWrite(IN2,LOW);
analogWrite(ENA,0);
digitalWrite(IN3,LOW);
digitalWrite(IN4,LOW);
analogWrite(ENB,0);
}
void setup(){
Serial.begin(9600);
for (int i = 4;i <= 10;i++){
pinMode(i, OUTPUT);
}
pinMode(TrigPin,OUTPUT);//12号脚为输出引脚
pinMode(EchoPin,INPUT);//13号脚为输入状态
}
void loop(){
digitalWrite(TrigPin,LOW);//先设置为低电平
delayMicroseconds(2);//持续2微秒
digitalWrite(TrigPin,HIGH);//设置为高电平
delayMicroseconds(10);//持续10微秒
digitalWrite(TrigPin,LOW);//再设置为低电平,这样模拟出了脉冲信号
distance = pulseIn(EchoPin,HIGH)/58;//返回的是脉冲宽度/58得到实际距离
if (distance <= 20) {
if (flag == 1) {
Right();
delay(500);
flag = flag + 1;
} else if (flag == 2) {
Left();
delay(500);
Forward();
delay(500);
Stop();
while(true);
}
} else {
Forward();
}
}
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
机器人
+关注
关注
210文章
28068浏览量
205764 -
电信号
+关注
关注
1文章
781浏览量
20506 -
超声波传感器
+关注
关注
18文章
574浏览量
35872 -
避障小车
+关注
关注
1文章
24浏览量
19010 -
Arduino
+关注
关注
187文章
6456浏览量
186470
发布评论请先 登录
相关推荐
请问循迹避障当中的四路循迹模块与红外寻光&避障模块有什么区别?
`本人在做arduino寻光避障小车,其中用到的两个模块——四路循迹与红外寻光&避障模块在网上查完后感觉都是通过一个红外发送器发送信
发表于 02-01 10:53
基于Arduino单片机的避障小车机器人
本文简要介绍了一种基于Arduino新型集成开发环境的超声波避障小车的工作原理,包括对小车的结构、传感器、执行元件、Arduino单片机软件编程及试验结果的介绍。
发表于 11-29 15:50
•14次下载
基于Arduino UNO的避障机器人
本方案是一个基于 Arduino UNO 的避障机器人。障碍物检测和避免可以被认为是设计移动机器人的核心问题。避障机器人是一种智能机器人,可
发表于 12-22 14:49
•1次下载
评论