Arduino+ESP8266超声波雷达壁障小车-Arduino中文社区 - Powered by Discuz! Archiver

353529281 发表于 2021-8-18 20:34

Arduino+ESP8266超声波雷达壁障小车

本帖最后由 353529281 于 2021-8-28 19:09 编辑

我是新手,欢迎大家指出错误和缺点,共同进步,谢谢。

/*
雷达壁障小车项目 20201年7月31日

功能:
超声波避障

材料:
ESP8266
L298N模块
HC-SR04超声波模块
舵机SG90
小车底盘双电机
电池1块电压(6-12V)
注意:ESP8266控制舵机时有可能需要指定 myservo.attach(SERVOPIN,500,2500) servo加需要指定最大和最小角度的ms值。

作者:九洲创客
QQ:353529281
*/

#include <HCSR04.h> //超声波测距库
#include <Servo.h>//引用舵机库

Servo myservo;//创建舵机对象
#define SERVOPIND2//定义舵机IO脚

UltraSonicDistanceSensor distanceSensor(D0, D1); //创建超声波对象IO脚 D0为trigD1为echo脚
float distance,distance_left,distance_right;   
void scsr(){//雷达检测
distance=distanceSensor.measureDistanceCm();//检测中间距离
if(distance<25){//当距离小于25CM时停止前进
    car_stop();
    myservo.write(0);   //舵机左转
    delay(500);
    distance_left=distanceSensor.measureDistanceCm(); //检测左边距离
    myservo.write(180);//舵机右转
    delay(500);
    distance_right=distanceSensor.measureDistanceCm();//检测左边距离
    myservo.write(90);//舵机转回中间
    delay(500);
    if(distance_left<distance_right){ //如果左边的距离小于右边的距离,那就向左转,否则向左转
      car_right();//右转
      delay(200);
      car_stop();   //停车
      }
      else{
      car_left(); //左转
      delay(200);
      car_stop();//停车
      }
    }
    else{
      car_up();//前进
      }
}
//小车方向4个IO脚
#define CARPIN1 D5
#define CARPIN2 D6
#define CARPIN3 D7
#define CARPIN4 D8
int car_sudu=160;   //小车速度初始化为PWM160

//四个方向,停车函数
void car_up(){//前进
analogWrite(CARPIN1,car_sudu);
digitalWrite(CARPIN2,LOW);
analogWrite(CARPIN3,car_sudu);
digitalWrite(CARPIN4,LOW);
delay(100);
}
void car_down(){//后退
digitalWrite(CARPIN1,LOW);
analogWrite(CARPIN2,car_sudu);
digitalWrite(CARPIN3,LOW);
analogWrite(CARPIN4,car_sudu);
delay(100);
}
void car_left(){    //左转
analogWrite(CARPIN1,car_sudu);
digitalWrite(CARPIN2,LOW);
digitalWrite(CARPIN3,LOW);
analogWrite(CARPIN4,car_sudu);
delay(100);
}
void car_right(){   //右转
digitalWrite(CARPIN1,LOW);
analogWrite(CARPIN2,car_sudu);
analogWrite(CARPIN3,car_sudu);
digitalWrite(CARPIN4,LOW);
delay(100);
}
void car_stop(){    //停车
digitalWrite(CARPIN1,LOW);
digitalWrite(CARPIN2,LOW);
digitalWrite(CARPIN3,LOW);
digitalWrite(CARPIN4,LOW);
delay(100);
}

void setup() {
   
    Serial.begin(9600);
   
   // 初始化小车控制IO
    pinMode(CARPIN1,OUTPUT);
    pinMode(CARPIN2,OUTPUT);
    pinMode(CARPIN3,OUTPUT);
    pinMode(CARPIN4,OUTPUT);
   
    myservo.attach(SERVOPIN,500,2500); //初始化舵机模块
    myservo.write(90);//初始舵机角度
   
}


void loop() {
scsr();//执行雷达监测
delay(100);
}
页: [1]
查看完整版本: Arduino+ESP8266超声波雷达壁障小车