0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Arduino篇—车辆的避障功能

冬至子 来源:X的创客课堂 作者:MRXY 2023-11-02 11:27 次阅读

相关知识

常见的避障方式:

接触式:通过触碰开关来进行判断,经常应用在扫地机器人的挡板上。

非接触式:使用接近传感器实现功能,在没有物理接触的情况下检测物体的运动/存在并将捕获的信息传递为电信号的传感器。在避障小车的应用上,我们通常使用红外接近传感器或者超声波传感器。

超声波原理: 本节课我们主要使用超声波传感器来实现避障功能,这里针对超声波的原理再复习一下。

图片

车辆避障功能设计模型:

图片

电路搭建

所需材料

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版的自动小车,自己写的程序
    发表于 11-24 15:24 0次下载

    基于51单片机的小车电路实现

    介绍模型小车自适应行驶和的一个实例,通过超声波传感器感知车辆行驶 环境,实现小车的自适应巡航、
    发表于 03-24 16:50 31次下载

    基于Arduino单片机的小车机器人

    本文简要介绍了一种基于Arduino新型集成开发环境的超声波小车的工作原理,包括对小车的结构、传感器、执行元件、Arduino单片机软件编程及试验结果的介绍。
    发表于 11-29 15:50 14次下载

    Arduino平台---带舵机云台超声波实验资料下载

    Arduino平台---带舵机云台超声波实验资料
    发表于 02-27 14:21 19次下载

    使用Arduino设计的智能小车自动的接线说明

    本文档的主要内容详细介绍的是使用Arduino设计的智能小车自动的接线说明。
    发表于 11-22 08:00 18次下载
    使用<b class='flag-5'>Arduino</b>设计的智能小车自动<b class='flag-5'>避</b><b class='flag-5'>障</b>的接线说明

    arduino nano机器人

    电子发烧友网站提供《arduino nano机器人.zip》资料免费下载
    发表于 07-19 09:46 9次下载
    <b class='flag-5'>arduino</b> nano<b class='flag-5'>避</b><b class='flag-5'>障</b>机器人

    Arduino机器人

    电子发烧友网站提供《Arduino机器人.zip》资料免费下载
    发表于 08-18 10:20 3次下载
    <b class='flag-5'>Arduino</b>机器人<b class='flag-5'>避</b><b class='flag-5'>障</b>

    如何制作与Arduino配合使用的机器人

    电子发烧友网站提供《如何制作与Arduino配合使用的机器人.zip》资料免费下载
    发表于 10-31 11:36 3次下载
    如何制作与<b class='flag-5'>Arduino</b>配合使用的<b class='flag-5'>避</b><b class='flag-5'>障</b>机器人

    使用Arduino的宠物狗机器人TOMY

    电子发烧友网站提供《使用Arduino的宠物狗机器人TOMY.zip》资料免费下载
    发表于 10-28 09:32 4次下载
    使用<b class='flag-5'>Arduino</b>的宠物狗机器人TOMY<b class='flag-5'>避</b><b class='flag-5'>障</b>

    基于Arduino机器人汽车

    电子发烧友网站提供《基于Arduino机器人汽车.zip》资料免费下载
    发表于 10-31 09:54 5次下载
    基于<b class='flag-5'>Arduino</b>的<b class='flag-5'>避</b><b class='flag-5'>障</b>机器人汽车

    Arduino车开源分享

    电子发烧友网站提供《Arduino车开源分享.zip》资料免费下载
    发表于 11-25 11:51 6次下载
    <b class='flag-5'>Arduino</b><b class='flag-5'>避</b><b class='flag-5'>障</b>车开源分享

    基于Arduino UNO的机器人

    本方案是一个基于 Arduino UNO 的机器人。障碍物检测和避免可以被认为是设计移动机器人的核心问题。机器人是一种智能机器人,可
    发表于 12-22 14:49 1次下载

    如何使用Arduino Uno制作智能机器人

    电子发烧友网站提供《如何使用Arduino Uno制作智能机器人.zip》资料免费下载
    发表于 12-26 10:41 3次下载
    如何使用<b class='flag-5'>Arduino</b> Uno制作智能<b class='flag-5'>避</b><b class='flag-5'>障</b>机器人

    Arduino伺服电机机器人

    电子发烧友网站提供《Arduino伺服电机机器人.zip》资料免费下载
    发表于 06-29 14:38 0次下载
    <b class='flag-5'>Arduino</b>伺服电机<b class='flag-5'>避</b><b class='flag-5'>障</b>机器人