基于Arduino的智能避障小车

一.功能说明

  • 基于Arduino的智能避障小车能够自动行驶前进,当前方有障碍物时,使用超声波测距模块检测小车和障碍物间的距离,结合控制算法,自动判断一条可以安全前进的路线,使智能小车不会碰撞到任何障碍物。
  • 注:后续将增加红外遥控、蓝牙遥控、WiFi遥控、自动循迹等多种功能的讲解。

二.硬件组成

基于Arduino的智能避障小车硬件主要包括:Arduino UNO核心控制板,L298N电机驱动模块、HC-SR04超声波测距模块、SG90 舵机模块、12V电源稳压模块。

三.编程软件

使用官方开源软件Arduino IDE,没有使用其他外部库,软件安装完成后即可运行智能避障源代码。

四.智能避障源代码

#include <Servo.h>

//超声波
#define trigPin 2
#define echoPin 4

//舵机
#define pwmPin 3

//A代表右电机
#define ENA 6
#define inPinA1 7
#define inPinA2 8

//B代表左电机
#define ENB 5
#define inPinB1 12
#define inPinB2 13

//由于硬件原因导致左右电机转速不同,需根据实际情况进行小车直线行驶调节,确定左右电机速度
const int speedA = 80;//右电机速度
const int speedB = 93;//左电机速度

Servo myServo;

void setup() {
  // put your setup code here, to run once:
  pinMode(inPinA1,OUTPUT);
  pinMode(inPinA2,OUTPUT);
  pinMode(inPinB1,OUTPUT);
  pinMode(inPinB2,OUTPUT);

  pinMode(trigPin,OUTPUT);
  pinMode(echoPin,INPUT);
  Serial.begin(9600);

  pinMode(pwmPin,OUTPUT);
  //使用servo库时 电机PWM调速应避开9和10引脚 否则会导致PWM调速失效
  myServo.attach(pwmPin);
}

void loop() {
  // put your main code here, to run repeatedly:
  //舵机恢复到中间位置
  servoRun(90);

  float value1 = 0;
  Serial.print("value1: ");
  value1 = getDistance();
  //距离前方障碍物小于25cm时
  if(value1 < 25)
  {
    //小车停止
    stopA();
    stopB();

    float value2 = 0;
    float value3 = 0;
    //舵机转到最右侧45度
    servoRun(45);
    Serial.print("value2: ");
    value2 = getDistance();
    
    //舵机转到最左侧135度
    servoRun(135);
    Serial.print("value3: ");
    value3 = getDistance();
    
    //舵机恢复到中间位置
    servoRun(90);
	//距离左方和右方障碍物均小于25cm时
    if(value2 < 25 && value3 < 25)
    { 
      //前方、左方、右方具有障碍物时
      //后退
      backwardPwm(speedA, speedB);
      delay(250);
      //右转
      forwardRight(speedB);
      delay(250);
    }
    else if(value2 >= value3)
    {
      //前方和左方有障碍物时  右转
      forwardRight(speedB);
      delay(250);
    } 
    else if(value2 < value3)
    {
      //前方和右方有障碍物时 左转
      forwardLeft(speedB);
      delay(250);
    }
  }
  else
  {
	//无障碍物时 前进
    forwardPwm(speedA, speedB);
  }
}

//获取超声波模块测量的距离
float getDistance()
{
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);

  float valueCM = 0;
  valueCM = float(pulseIn(echoPin,HIGH)*17/1000);

  Serial.print(valueCM);
  Serial.println("cm");
  delay(100);

  return valueCM;
}

//侍服电机旋转的角度取值范围(0~179)
void servoRun(int angle)
{
  myServo.write(angle);
  delay(500);//需延时等待超声波模块稳定
}

//PWM调节小车前进速度
void forwardPwm(int valueA,int valueB)
{
  forwardPwmA(valueA);
  forwardPwmB(valueB);
}
//PWM调节右电机正转
void forwardPwmA(int value)
{
  analogWrite(ENA, value);
  digitalWrite(inPinA1,LOW);
  digitalWrite(inPinA2,HIGH);
}
//PWM调节左电机正转
void forwardPwmB(int value)
{
  analogWrite(ENB, value);
  digitalWrite(inPinB1,LOW);
  digitalWrite(inPinB2,HIGH);
}
//右电机停止
void stopA()
{
  analogWrite(ENA, HIGH);
  digitalWrite(inPinA1,LOW);
  digitalWrite(inPinA2,LOW);
}
//左电机停止
void stopB()
{
  analogWrite(ENB, HIGH);
  digitalWrite(inPinB1,LOW);
  digitalWrite(inPinB2,LOW);
}

//value:0~255
//PWM调节小车后退速度
void backwardPwm(int valueA,int valueB)
{
  backwardPwmA(valueA);
  backwardPwmB(valueB);
}
//PWM调节右电机反转
void backwardPwmA(int value)
{
  analogWrite(ENA, value);
  digitalWrite(inPinA1, HIGH);
  digitalWrite(inPinA2, LOW);
}
//PWM调节左电机反转
void backwardPwmB(int value)
{
  analogWrite(ENB, value);
  digitalWrite(inPinB1, HIGH);
  digitalWrite(inPinB2, LOW);
}

//小车左转
void forwardLeft(int value)
{
  stopB();
  forwardPwmA(value);
}

//小车右转
void forwardRight(int value)
{
  stopA();
  forwardPwmB(value);
}

说明:

  1. 驱动模块使用参考本专栏文章《基于Arduino的L298N电机驱动模块使用》。
  2. 舵机模块使用参考本专栏文章《基于Arduino的SG90舵机驱动》。
  3. 超声波模块使用参考本专栏文章《基于Arduino的超声波测距模块HC-SR04》。
  4. 智能避障控制方法参考本专栏文章《基于Arduino的智能避障小车的控制方法》。

五.运行效果

智能小车根据超声波模块检测到的左方、前方、右方3个方向的障碍物距离,选择距离障碍物大于25cm的方向前进,如果3个方向的距离障碍物都小于25cm,则智能小车先后退、再石转离开障碍物,最后再回正直行。
### 回答1: Arduino红外避障小车是一种基于Arduino开发板和红外线传感器技术的智能小车。它可以通过红外线传感器来检测车体前方的障碍物,并根据检测结果来控制小车的行驶方向,从而实现避障功能。 下面是一个简单的Arduino红外避障小车的制作步骤: 1. 准备材料:Arduino开发板、电机驱动模块、直流电机、红外线传感器、车轮、电源等。 2. 连接电路:将电机驱动模块和Arduino开发板通过杜邦线连接起来,将直流电机和车轮连接到电机驱动模块上,将红外线传感器连接到Arduino开发板上。 3. 编写代码:在Arduino开发环境中编写代码,通过读取红外线传感器的数据,控制小车的运动方向,实现避障功能。 4. 调试测试:将小车放置在测试场地上,进行调试和测试,不断优化程序,直至达到预期效果。 总之,通过Arduino开发板和红外线传感器技术,制作一个红外避障小车并不难,适合初学者进行学习和实践。 ### 回答2: Arduino红外避障小车是一种基于Arduino控制板制作的智能小车,它通过红外传感器来检测周围环境,实现避开障碍物的功能。 小车的核心部分是一个Arduino板,它作为控制中心,接收传感器的信号并根据程序进行相应操作。红外传感器是小车的感知器,它可以发射红外光束,并检测光束是否被障碍物反射,从而判断是否有障碍物靠近。根据传感器的数据,Arduino板会做出避障的决策,通过马达或电机来改变小车的方向,避免与障碍物发生碰撞。 在编写程序时,首先需要配置Arduino开发环境,并用语言类似于C++编写代码。代码的基本逻辑是:读取红外传感器的数值,当数值达到或超过设定的阈值时,判断为有障碍物,根据障碍物的方位决定转向的方式。例如,在前方有障碍物时,小车需要停下来或者转向避免碰撞。 制作这款小车的材料和部件还包括电机、轮子、蓝牙模块或遥控器等。电机和轮子用来驱动小车前进、后退和转动,蓝牙模块或遥控器可以实现远程操控的功能。这样,不仅可以通过编写程序实现自动避障的功能,还可以通过蓝牙或遥控器手动控制小车的运动。 总结来说,Arduino红外避障小车是一种具有智能避障功能的小车,通过红外传感器来感知周围环境,根据传感器数据做出相应决策并控制马达或电机实现小车的运动。它是学习和实践Arduino编程与电子技术的理想项目。 ### 回答3: Arduino红外避障小车是一种基于Arduino开发板的智能小车,具有自动避障功能。小车主要由Arduino控制模块、电机驱动模块、红外传感器和小车底盘等部分组成。 红外避障小车工作原理是通过红外传感器感知前方的障碍物,并根据检测到的信号控制小车的行进方向,实现自动避障。红外传感器接收到红外光线反射回来的信号后,将信号转换为电信号传递给Arduino控制模块。Arduino根据输入的电信号判断是否存在障碍物,如果有障碍物则通过电机驱动模块控制小车停下或改变行进方向,从而避免撞击到障碍物。 红外避障小车的制作过程主要包括以下几个步骤: 1. 硬件准备:准备一块Arduino开发板、电机驱动模块、红外传感器、电池、杜邦线等,并搭建小车底盘。 2. 硬件连接:将Arduino与电机驱动模块、红外传感器等连接起来。确保电机可以通过电机驱动模块进行控制,并且红外传感器可以接收到反射的红外信号。 3. 编程:使用Arduino开发环境编写代码,根据红外传感器的输入信号控制电机驱动模块,实现小车的自动避障功能。可以根据需要调整传感器的灵敏度和小车的运动逻辑。 4. 调试与测试:将编写好的代码上传到Arduino开发板上,通过电池供电启动小车,并观察小车在遇到障碍物时是否能够自动避开。 红外避障小车具有简单、实用的特点,可以用于室内或室外的自动避障任务。它能够帮助我们理解和掌握基础的电子和编程知识,并能应用于更复杂的智能机器人或自动化系统中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码客_人工智能创客高级指导师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值