相关知识
常见的避障方式:
接触式:通过触碰开关来进行判断,经常应用在扫地机器人的挡板上。
非接触式:使用接近传感器实现功能,在没有物理接触的情况下检测物体的运动/存在并将捕获的信息传递为电信号的传感器。在避障小车的应用上,我们通常使用红外接近传感器或者超声波传感器。
超声波原理: 本节课我们主要使用超声波传感器来实现避障功能,这里针对超声波的原理再复习一下。
车辆避障功能设计模型:
电路搭建
所需材料
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();
}
}
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
机器人
+关注
关注
206文章
27039浏览量
201416 -
电信号
+关注
关注
1文章
488浏览量
20107 -
超声波传感器
+关注
关注
18文章
552浏览量
35602 -
避障小车
+关注
关注
1文章
23浏览量
18928 -
Arduino
+关注
关注
184文章
6427浏览量
184842
发布评论请先 登录
相关推荐
寻人避障小车
想做一个自动寻人避障小车,人身上装有特定的信号源,小车捕捉信号源跟着人走,行走途中可以自动避障(可以用红外探测器或声波实现),,离开人距离太远时可以报警,请问从哪儿下手,哪位高手可以指
发表于 10-11 16:28
基于Arduino官方开发板的蓝牙小车(含避障,循迹,遥控多功能)
本帖最后由 子不语我投降 于 2015-11-5 12:32 编辑
在官方uno开发板,使用蓝牙模块HC,L298N电机驱动模块,SR-04超声波避障模块,龙邱科技4路循迹模块以及亚克力底板
发表于 11-03 11:30
【mBot申请】智能寻光寻线避障小车
的学习记录,与学友们分享入门过程中的各种问题。全面拆解这台机器人,并完成一个小项目。项目描述:全面拆解学习,并利用开发套件平台,实现小车的寻线,寻光,自动避障功能。
发表于 11-11 11:02
纯手工打造基于Arduino UNO的自动避障小车(开发环境mblock)
` 本帖最后由 jianren2 于 2015-11-16 22:19 编辑
基于Arduno UNO自动避障小车,刚刚接触了Mblock,开发起来特别方便,能实时显示小车的工作状态,更重
发表于 11-16 21:48
请问循迹避障当中的四路循迹模块与红外寻光&避障模块有什么区别?
`本人在做arduino寻光避障小车,其中用到的两个模块——四路循迹与红外寻光&避障模块在网上查完后感觉都是通过一个红外发送器发送信
发表于 02-01 10:53
大佬可以教教如何做Arduino UNO小车的智能避障嘛?
`Arduino UNO小车的智能避障要作为作业提交,期限将至,然而还是没有头绪。单单听上课讲的完全不会。。。可能因为女孩子动手能力太差了吧,完全没有基础。。。唉~~希望有大佬帮忙呀十分感谢~~`
发表于 12-20 20:56
Arduino蓝牙避障小车制作过程
来玩玩,使用了类与中断的概念,若有不足,敬请指正。一、材料4节南孚电池。L298N电机驱动板。面包板一块。Arduino uno 。两个红外避障模块。四个直流电机。小车套装。若干杜邦线。...
发表于 01-05 08:20
一个流行的arduino nano避障机器人项目
描述arduino nano避障机器人这是一个流行的 Arduino 机器人项目。为了避免大量的电线连接,我为它设计了一个PCB。该机器人项目的 PCB设计精良,易于制作。您可以使用此
发表于 08-02 06:44
评论