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();
  }
}
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 机器人
    +关注

    关注

    206

    文章

    27039

    浏览量

    201416
  • 电信号
    +关注

    关注

    1

    文章

    488

    浏览量

    20107
  • 超声波传感器

    关注

    18

    文章

    552

    浏览量

    35602
  • 避障小车
    +关注

    关注

    1

    文章

    23

    浏览量

    18928
  • Arduino
    +关注

    关注

    184

    文章

    6427

    浏览量

    184842
收藏 人收藏

    评论

    相关推荐

    msp430的超声波测距和循迹小车程序,跪求!

    msp430的超声波测距和循迹小车程序,跪求!
    发表于 04-17 17:58

    寻人小车

    想做一个自动寻人小车,人身上装有特定的信号源,小车捕捉信号源跟着人走,行走途中可以自动(可以用红外探测器或声波实现),,离开人距离太远时可以报警,请问从哪儿下手,哪位高手可以指
    发表于 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

    stm32-循迹遥控多功能小车

    stm32-循迹遥控多功能小车
    发表于 07-11 15:46

    循迹小车

    我是一名电子信息工程的大一新生,目前没有学习专业知识,想要自己做一个循迹小车,想要一个制作循迹小车的全部信息来学习,求大神帮忙!!!
    发表于 10-02 00:09

    请问循迹当中的四路循迹模块与红外寻光&模块有什么区别?

    `本人在做arduino寻光小车,其中用到的两个模块——四路循迹与红外寻光&模块在网上查完后感觉都是通过一个红外发送器发送信
    发表于 02-01 10:53

    常见的有哪几种?

    常见的有红外和超声波壁介绍
    发表于 11-11 06:50

    大佬可以教教如何做Arduino UNO小车的智能嘛?

    `Arduino UNO小车的智能要作为作业提交,期限将至,然而还是没有头绪。单单听上课讲的完全不会。。。可能因为女孩子动手能力太差了吧,完全没有基础。。。唉~~希望有大佬帮忙呀十分感谢~~`
    发表于 12-20 20:56

    一台能实现功能小车的设计资料分享

    使用51单片机+超声波传感器来设计一台能实现功能的小车,使小车对其运动方向受到的阻碍作出各种躲避障碍的动作。
    发表于 11-18 06:01

    怎样去设计基于单片机的红外循迹小车

    设计简介:本设计是基于单片机的红外、循迹小车,主要实现以下功能:小车可通过手机控制实现红外与循迹
    发表于 11-26 08:25

    Arduino蓝牙小车制作过程

    来玩玩,使用了类与中断的概念,若有不足,敬请指正。一、材料4节南孚电池。L298N电机驱动板。面包板一块。Arduino uno 。两个红外模块。四个直流电机。小车套装。若干杜邦线。...
    发表于 01-05 08:20

    如何利用面向对象语言去设计一台超声波arduino小车呢

    面向对象是指什么?有何作用呢?如何利用面向对象语言去设计一台超声波arduino小车呢?
    发表于 03-01 07:12

    一个流行的arduino nano机器人项目

    描述arduino nano机器人这是一个流行的 Arduino 机器人项目。为了避免大量的电线连接,我为它设计了一个PCB。该机器人项目的 PCB设计精良,易于制作。您可以使用此
    发表于 08-02 06:44