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

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 3895|回复: 0

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

[复制链接]
发表于 2021-8-18 20:34 | 显示全部楼层 |阅读模式
本帖最后由 353529281 于 2021-8-28 19:09 编辑

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

小车

小车

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

  3. 功能:
  4. 超声波避障

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

  13. 作者:九洲创客
  14. QQ:353529281
  15. */

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

  18. Servo myservo;  //创建舵机对象
  19. #define SERVOPIN  D2  //定义舵机IO脚

  20. UltraSonicDistanceSensor distanceSensor(D0, D1); //创建超声波对象IO脚 D0为trig  D1为echo脚
  21. float distance,distance_left,distance_right;   
  22. void scsr(){  //雷达检测
  23.   distance=distanceSensor.measureDistanceCm();  //检测中间距离
  24.   if(distance<25){  //当距离小于25CM时停止前进
  25.     car_stop();
  26.     myservo.write(0);   //舵机左转
  27.     delay(500);
  28.     distance_left=distanceSensor.measureDistanceCm(); //检测左边距离
  29.     myservo.write(180);//舵机右转
  30.     delay(500);
  31.     distance_right=distanceSensor.measureDistanceCm();//检测左边距离
  32.     myservo.write(90);//舵机转回中间
  33.     delay(500);
  34.     if(distance_left<distance_right){ //如果左边的距离小于右边的距离,那就向左转,否则向左转
  35.       car_right();  //右转
  36.       delay(200);
  37.       car_stop();   //停车
  38.       }
  39.       else{
  40.         car_left(); //左转
  41.         delay(200);
  42.         car_stop();//停车
  43.         }
  44.     }
  45.     else{
  46.       car_up();  //前进
  47.       }
  48. }
  49. //小车方向4个IO脚
  50. #define CARPIN1 D5
  51. #define CARPIN2 D6
  52. #define CARPIN3 D7
  53. #define CARPIN4 D8
  54. int car_sudu=160;   //小车速度初始化为PWM160

  55. //四个方向,停车函数
  56. void car_up(){  //前进
  57.   analogWrite(CARPIN1,car_sudu);
  58.   digitalWrite(CARPIN2,LOW);
  59.   analogWrite(CARPIN3,car_sudu);
  60.   digitalWrite(CARPIN4,LOW);
  61.   delay(100);
  62.   }
  63. void car_down(){  //后退
  64.   digitalWrite(CARPIN1,LOW);
  65.   analogWrite(CARPIN2,car_sudu);
  66.   digitalWrite(CARPIN3,LOW);
  67.   analogWrite(CARPIN4,car_sudu);
  68.   delay(100);
  69.   }
  70. void car_left(){    //左转
  71.   analogWrite(CARPIN1,car_sudu);
  72.   digitalWrite(CARPIN2,LOW);
  73.   digitalWrite(CARPIN3,LOW);
  74.   analogWrite(CARPIN4,car_sudu);
  75.   delay(100);
  76.   }
  77. void car_right(){   //右转
  78.   digitalWrite(CARPIN1,LOW);
  79.   analogWrite(CARPIN2,car_sudu);
  80.   analogWrite(CARPIN3,car_sudu);
  81.   digitalWrite(CARPIN4,LOW);
  82.   delay(100);
  83.   }
  84. void car_stop(){    //停车
  85.   digitalWrite(CARPIN1,LOW);
  86.   digitalWrite(CARPIN2,LOW);
  87.   digitalWrite(CARPIN3,LOW);
  88.   digitalWrite(CARPIN4,LOW);
  89.   delay(100);
  90.   }

  91. void setup() {
  92.    
  93.     Serial.begin(9600);
  94.    
  95.    // 初始化小车控制IO
  96.     pinMode(CARPIN1,OUTPUT);
  97.     pinMode(CARPIN2,OUTPUT);
  98.     pinMode(CARPIN3,OUTPUT);
  99.     pinMode(CARPIN4,OUTPUT);
  100.    
  101.     myservo.attach(SERVOPIN,500,2500); //初始化舵机模块
  102.     myservo.write(90);  //初始舵机角度
  103.    
  104. }


  105. void loop() {
  106.   scsr();//执行雷达监测
  107.   delay(100);
  108. }
复制代码

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-28 06:44 , Processed in 0.104113 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表