Arduino篇—车辆自动走迷宫

电子说

1.3w人已加入

描述

课程目标

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

相关知识

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

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

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

Arduino

电路搭建

所需材料

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

电路连接

Arduino

程序编写

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

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

图形化方式:

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

Arduino

代码方式:

/* 项目名称:红外控制开关灯
 * 项目时间: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);
  }
}

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

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

Arduino

原理分析:

右手法则逻辑分析。

Arduino

电路接线:

Arduino

图形化方式:

Arduino

代码方式:

/* 项目名称:小车贴墙走
 * 项目时间: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();
    } 
}

练习三:走迷宫小车

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

Arduino

图形化方式:

Arduino

代码方式:

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

/* 项目名称:走迷宫
 * 项目时间: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();
  }
}
打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分