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]