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

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

3天内不再提示

Arduino篇—车辆自动走迷宫

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

课程目标

  • 学习走迷宫的右手法则的应用
  • 根据算法逻辑实现走迷宫功能
  • 能根据场地实际要求进行车辆调试

相关知识

**机器人迷宫项目:**是常见的机器人竞赛项目,在一个搭建好的迷宫场景内,设计机器人,实现从入口顺利抵达出口,根据完成时间的长短来进行评分。

右手法则: 针对有墙壁的迷宫,只要顺着墙壁走,遇到可以转向的口子始终向右,转向失败再向右转到下一个可以走的方向,这种方法只对树形迷宫有效。对于有循环的迷宫就需要设计更加智能化的机器人才能实现。

**红外接近传感器:**红外接近传感器是一种集发射与接收于一体的光电开关传感器。当发出的红外光碰撞到范围内的目标时,它会反射到光电二极管上,从而实现监测判断。

1.jpg

电路搭建

所需材料

ArduinoUNO * 1
红外接近传感器 * 3
上节课的车辆结构 * 1
LED * 1
杜邦线若干

电路连接

图片

程序编写

练习一:红外接近传感器控制开关灯

手靠近传感器时,LED灯开,离开传感器时,LED灯关。

图形化方式:

读取9号管脚上的信号值为低电平,说明有障碍物靠近,这时候点亮2号管脚上的LED。

图片

代码方式:

/* 项目名称:红外控制开关灯
 * 项目时间:2022.04.07
 * 项目作者:MRX
 */
int SensorPin = 9;
int LedPin = 2;
void setup() {
  pinMode(SensorPin,INPUT);
  pinMode(LedPin,OUTPUT);
}


void loop() {
  if(digitalRead(SensorPin)){
    digitalWrite(LedPin,LOW);
  }
  else{
    digitalWrite(LedPin,HIGH);
  }
}

练习二:沿墙面前进的小车

使用一个传感器,让小车能够沿着墙面前行,效果如下:

图片

原理分析:

右手法则逻辑分析。

图片

电路接线:

图片

图形化方式:

图片

代码方式:

/* 项目名称:小车贴墙走
 * 项目时间:2022.04.07
 * 项目作者: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 SensorPin = 10;


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 = 2;i <= 7;i++){
    pinMode(i, OUTPUT);
    }
  pinMode(SensorPin,INPUT);
}

void loop(){
  if (digitalRead(SensorPin) == LOW) {
      Left();
    } else{
      Right();
    } 
}

练习三:走迷宫小车

编程控制小车沿着障碍物行走,效果如下:

图片

图形化方式:

图片

代码方式:

项目所涉及到的延时及电机正反转,都要根据自己的接线来进行调整。

/* 项目名称:走迷宫
 * 项目时间:2022.04.07
 * 项目作者: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


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 TurnLeft() {
  digitalWrite(IN1,LOW);
  digitalWrite(IN2,HIGH);
  analogWrite(ENA,100);
  digitalWrite(IN3,HIGH);
  digitalWrite(IN4,LOW);
  analogWrite(ENB,100);
}


void setup(){
  for (int i = 2;i <= 7;i++){
    pinMode(i, OUTPUT);
    }
  for (int i = 8;i <= 10;i++){
    pinMode(i,INPUT);
  }

}

void loop(){
  if (digitalRead(8) == LOW) {
    TurnLeft();
    delay(500);


  } else if (digitalRead(9) == LOW) {
    TurnLeft();
    delay(200);
  } else if (digitalRead(10) == LOW) {
    Left();
  } else {
    Right();
  }
}
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 机器人
    +关注

    关注

    206

    文章

    27033

    浏览量

    201408
  • led灯
    +关注

    关注

    22

    文章

    1554

    浏览量

    107030
  • 红外传感器
    +关注

    关注

    9

    文章

    493

    浏览量

    47227
  • 光电二极管
    +关注

    关注

    10

    文章

    364

    浏览量

    35582
  • Arduino
    +关注

    关注

    184

    文章

    6427

    浏览量

    184834
收藏 人收藏

    评论

    相关推荐

    用单片机做了一个迷宫的小车,偶尔可以偶尔不行

    我用单片机做了一个迷宫的小车然后前边有三个红外对管(前边一个左右俩管方向是偏前放的)用pwm控制马达我用case写的但是小车就是有问题偶尔可以偶尔不行帮我写case里的程序 我对照一下谢谢谢谢了!
    发表于 04-24 16:09

    关于迷宫小车。。。

    各位大神,求较简单的迷宫小车,原理图和迷宫程序。现在我真的是毫无头绪啊。。。求救啊。。。
    发表于 05-05 23:14

    Labview写的迷宫

    基于队列的迷宫解决方案
    发表于 11-01 11:13

    迷宫源程序,利用队列写的,值得学习。

    一个迷宫的源程序,利用队列写的,很不错,值得学习。
    发表于 05-07 14:39

    K60中OLED模块要做一个迷宫,怎么解决的点是否碰到了迷宫图形

    求问K60中OLED模块要做一个迷宫,怎么解决的点是否碰到了迷宫图形呢?
    发表于 06-28 16:25

    【mBot申请】自动走出迷宫

    测前方的障碍物,加上自己的一个步进电机(加步进点击是为了多向测试障碍物,正前方的,左前方,右前方,三个方向的障碍物的距离,做出最合理的判断)左右旋转测量障碍物的距离,做出最合理的判断,然后通过电机驱动模块驱动电机往哪个方向。最后走出自己设计的迷宫
    发表于 10-29 14:14

    基于arduino超声波红外【迷宫】小车设计

    最近到手基于arduino uno Rev3 智能小车。闲暇时间制作了这个迷宫的小车。这个小车通过4个红外模块循迹迷宫地面的黑线。通过超声波传感器检测两侧和前方的距离来进行转向。在制
    发表于 05-06 23:31

    如何利用STC89C51单片机实现智能迷宫小车的设计?

    如何利用STC89C51单片机实现智能迷宫小车的设计?
    发表于 11-10 07:25

    Arduino迷宫游戏

    电子发烧友网站提供《Arduino迷宫游戏.zip》资料免费下载
    发表于 11-04 10:22 1次下载
    <b class='flag-5'>Arduino</b><b class='flag-5'>迷宫</b>游戏

    Arduino Uno平衡迷宫

    电子发烧友网站提供《用Arduino Uno平衡迷宫.zip》资料免费下载
    发表于 12-12 11:58 0次下载
    用<b class='flag-5'>Arduino</b> Uno平衡<b class='flag-5'>迷宫</b>

    自动大理石迷宫求解器

    电子发烧友网站提供《自动大理石迷宫求解器.zip》资料免费下载
    发表于 12-15 09:44 0次下载
    <b class='flag-5'>自动</b>大理石<b class='flag-5'>迷宫</b>求解器

    基于Arduino UNO的迷宫游戏机

    方案介绍该方案源自于疫情期间的闲时,为消磨时间而产生了该项目的想法,同时这个方案只需要很少的组件。1)首先设置滚转和俯仰的舵机2)做任何你想要的迷宫设计3)使用任何滚动物体如花生,青豆之类4)将迷宫与伺服电机结合5)按照原理图制作电路6)上传
    发表于 12-23 10:54 0次下载

    Arduino迷宫游戏开源分享

    电子发烧友网站提供《Arduino迷宫游戏开源分享.zip》资料免费下载
    发表于 06-09 15:19 1次下载
    <b class='flag-5'>Arduino</b><b class='flag-5'>迷宫</b>游戏开源分享

    DIY安卓+Arduino控制迷宫游戏

    电子发烧友网站提供《DIY安卓+Arduino控制迷宫游戏.zip》资料免费下载
    发表于 06-29 14:53 0次下载
    DIY安卓+<b class='flag-5'>Arduino</b>控制<b class='flag-5'>迷宫</b>游戏

    Arduino 3D迷宫

    电子发烧友网站提供《Arduino 3D迷宫.zip》资料免费下载
    发表于 07-10 09:44 0次下载
    <b class='flag-5'>Arduino</b> 3D<b class='flag-5'>迷宫</b>