基于Arduino的超声波避障小车

基于Arduino的超声波避障小车

利用超声波,判断前方是否有障碍物,如果有小车转向,没有小车直行

所需材料

  1. 小车车架及车轮(可以用sw建模然后利用3D打印机打印,也可以在网上直接购买小车地板,用纸板最廉价O(∩_∩)O哈哈~)
  2. Arduino开发板及扩展板
  3. 两个360度舵机(我是以舵机为驱动的,也可以用电机)
  4. 杜邦线若干
  5. 超声波模块
  6. 锂电池

组装小车及模块调试

舵机调试利用代码使舵机前传后传停止

参考代码如下:

#include <Servo.h>
Servo servo;  //定义舵机
void setup()
{
  servo.attach(2);//舵机串口设为2
}
void loop()
{
    servo.write( 360 );//舵机前转
    delay(1000);
    servo.write( -360 );//舵机后转
    delay(1000);
    servo.write( 90 );//舵机停止
    delay(1000);
}

超声波模块调试:

int Ecoh=A6;//Ecoh为回声脚
int Trig=A7;//Trig为触发脚
int Distance; 
void setup()
{
  Serial.begin(9600);//初始化串口
  pinMode(Ecoh,INPUT);//定义超声波输入脚
  pinMode(Trig,OUTPUT);//定义超声波输出脚 
}
void loop()//距离测试
{
    digitalWrite(Trig,LOW);//给触发脚低电平2微妙
    delayMicroseconds(2);
    digitalWrite(Trig,HIGH);//给触发脚高电平10微妙
    delayMicroseconds(10);
    digitalWrite(Trig,LOW);//给触发脚持续低电平
    float Fdistance=pulseIn(Ecoh,HIGH);//读取高电平时间
    Fdistance=Fdistance/58;//L(m)=t(s)*344/2
    Distance=Fdistance;
    if(Fdistance<400)
    {
      Serial.print("Distance:");//输出距离
      Serial.print(Fdistance);//距离
      Serial.print("cm\n");
    }
    else
      Serial.print("!!!out of range!!!\n");
       
}

小车避障代码.

#include <Servo.h>
Servo servo_pin_right;  //定义右驱动
Servo servo_pin_left;  //定义左驱动
int Ecoh=A6;//Ecoh为回声脚
int Trig=A7;//Trig为触发脚
int Distance; 
void setup()
{
  Serial.begin(9600);//初始化串口
  pinMode(Ecoh,INPUT);//定义超声波输入脚
  pinMode(Trig,OUTPUT);//定义超声波输出脚 
  servo_pin_right.attach(9);//右驱动串口设为9
  servo_pin_left.attach(10);//左驱动串口设为10 
}
//===========小车基本运动===============
//void car_go(int time)//小车直行
void car_go()
{
  servo_pin_left.write( 360 );//左轮前进
  servo_pin_right.write( -360);//右轮前进
  //delay( 100*time );//执行时间
}
void car_left(int time)//小车左转
{
  servo_pin_left.write( 90);//左轮后退
  servo_pin_right.write( -360 );//右轮前进
  delay( 100*time );//执行时间
}
void car_back(int time)//小车后退
{
  servo_pin_left.write( -360 );//左轮后退
  servo_pin_right.write(360 );//右轮后退
  delay( 100*time );//执行时间
}
void car_right(int time)//小车右转
{
  servo_pin_left.write( 360 );//左轮前进
  servo_pin_right.write( 90);//右轮后退
  delay( 100*time );//执行时间
}
void car_stop(int time)//小车停止
{
  servo_pin_left.write( 90 );//左轮停止
  servo_pin_right.write(90 );//右轮停止
  delay( 100*time );//执行时间
}
void Distance_test()//距离测试
{
    digitalWrite(Trig,LOW);//给触发脚低电平2微妙
    delayMicroseconds(2);
    digitalWrite(Trig,HIGH);//给触发脚高电平10微妙
    delayMicroseconds(10);
    digitalWrite(Trig,LOW);//给触发脚持续低电平
    float Fdistance=pulseIn(Ecoh,HIGH);//读取高电平时间
    Fdistance=Fdistance/58;//L(m)=t(s)*344/2
    Distance=Fdistance;
    if(Fdistance<400)
    {
      Serial.print("Distance:");//输出距离
      Serial.print(Fdistance);//距离
      Serial.print("cm\n");
    }
    else
      Serial.print("!!!out of range!!!\n");
       
}
void loop()
{
  while(1)
  {
    Distance_test();
    if(Distance<24)
    {
      while(Distance<24)
      {   
        car_right(2);
        car_stop(1);
        Distance_test();
      }
    }
     else
  	  car_go();
  }
   
}

在这里插入图片描述

以下是一个基于Arduino超声波避障小车代码示例: ```C++ // 引入头文件 #include <Servo.h> // 定义超声波模块引脚 #define trigPin 3 #define echoPin 2 // 定义舵机引脚 #define servoPin 9 // 定义电机引脚 #define motorL1 5 #define motorL2 6 #define motorR1 10 #define motorR2 11 // 定义电机速度 #define speed 200 // 定义超声波测距变量 long duration; int distance; // 创建舵机对象 Servo servo; void setup() { // 初始化串口通信 Serial.begin(9600); // 设置超声波模块引脚为输入/输出 pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); // 设置舵机引脚为输出 servo.attach(servoPin); // 设置电机引脚为输出 pinMode(motorL1, OUTPUT); pinMode(motorL2, OUTPUT); pinMode(motorR1, OUTPUT); pinMode(motorR2, OUTPUT); } void loop() { // 发送超声波信号 digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); // 接收超声波信号 duration = pulseIn(echoPin, HIGH); distance = duration / 58.0; // 输出距离 Serial.print("Distance: "); Serial.print(distance); Serial.println(" cm"); // 根据距离控制舵机和电机运动 if (distance > 20) { // 舵机中心位置 servo.write(90); // 前进 digitalWrite(motorL1, HIGH); digitalWrite(motorL2, LOW); digitalWrite(motorR1, HIGH); digitalWrite(motorR2, LOW); // 设置电机速度 analogWrite(motorL1, speed); analogWrite(motorR1, speed); } else if (distance > 10) { // 舵机向右转 servo.write(45); // 左转 digitalWrite(motorL1, LOW); digitalWrite(motorL2, HIGH); digitalWrite(motorR1, HIGH); digitalWrite(motorR2, LOW); // 设置电机速度 analogWrite(motorL2, speed); analogWrite(motorR1, speed); } else { // 舵机向左转 servo.write(135); // 右转 digitalWrite(motorL1, HIGH); digitalWrite(motorL2, LOW); digitalWrite(motorR1, LOW); digitalWrite(motorR2, HIGH); // 设置电机速度 analogWrite(motorL1, speed); analogWrite(motorR2, speed); } } ``` 该代码使用了一个舵机和两个电机来控制小车的运动,根据超声波模块测量的距离来控制小车的转向和速度。当距离大于20cm时,小车前进;当距离在10-20cm之间时,小车向左转;当距离小于10cm时,小车向右转。你可以根据自己的需要修改代码中的参数来适应不同的场景。
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值