当前位置:   article > 正文

基于Wemos的超声波避障小车(可自行判断方向)_超声波避障小车原理

超声波避障小车原理

 基于Wemos的超声波避障小车(可自行判断方向)

   一. Wemos和超声波测距的原理

                   超声波传感器模块上面通常有两个超声波元器件,一个用于发射,一个用于接收,电路板上有4引脚:VCC(正极),Trig(触发),Echo(回应),GND(接地)    主要参数:

                      1.工作电压与电流:5V,13MA

                      2.感测距离:2~400CM

                      3.感测角度:不大于15度

                      4.被测面积不要小于50cm平方并且尽量平整。

                      5.具备温度补偿电路          

    

                                                                         

       上图为超声波的时序图,有不明白的可直接百度,都会有。

二.硬件平台介绍WeMos D1  (与开发环境的介绍)

       (1)WeMos D1

                 1  基于ESP-8266EX

                 2  ARDUINO兼容, 使用RDUINO IDE来编程

                 3  11*I/O引脚

                 4  1 * ADC 引脚(输入范围0  ~ 3.3)

                 5  板载5V  1A  开关电源  (高输入电压24V)

        (2)软件环境的介绍(ARDUINO)

                  ARDUINo开发环境,和KEIL对比

                  优点:集成很多开发库如串口,网络, SG90等

                           各种硬件开发接口,迅捷开发自带串口调试工具

                  缺点:程序编译速度慢

 三.SG90舵机驱动函数

                   servo类函数的用法(代码中可理解)

 attach              连接舵机(自带库9/10角有效)
  write    角度控制可调节,具体看代码
writeMicroseconds()  更精准的角度控制(um级)
  read()  读上一次舵机转动角度
 attached()   检查舵机及是否连接控制板上
  detach()

    断开舵机连接,使接口(9/10角)可做PWM输出

                          该部份核心的代码参考:

                                              #define PIN_SERVO D3     //定义了D3这个引脚

                                              Servo myservo;                   //定义了一个myservo的类

                                               myservo.attach(PIN_SERVO);    //把D3与舵机连接起来了

                                               myservo.write(30);                      //可自行的定义偏转角度

                      

三. 代码的演示历程

  1. #include<ESP8266WiFi.h>
  2. #include<Servo.h>
  3. #define DuoPIN D3 //设置舵机的引脚输出
  4. Servo myDuoJi; //定义一个类
  5. #define Dong1 D6 //定义引脚的名称
  6. #define Dong2 D7
  7. #define Zhuan1 D4
  8. #define Zhuan2 D5
  9. #define Echo D2 //超声波传感器端E
  10. #define Trig D8 //超声波传感器端D
  11. #define den D9 //警示灯的引脚
  12. char* ssid ="electric";
  13. char* passwd ="dianzixiehui";
  14. int port = 8888;//设置端口号
  15. WiFiServer server(port);//设置服务器端口号
  16. long getTime() //获取波在空气中的时间
  17. {
  18. digitalWrite(Trig,HIGH);//发送一个10us的脉冲,
  19. delayMicroseconds(10);
  20. digitalWrite(Trig,LOW);
  21. return pulseIn(Echo,HIGH); // 波传输的过程中echo高电平,计算高电平时间,就是获取波传输的
  22. // 时间,单位是us(微秒)
  23. }
  24. void initWifiSta()
  25. {
  26. WiFi.mode(WIFI_STA);
  27. WiFi.begin(ssid,passwd);
  28. while(WiFi.status() != WL_CONNECTED){
  29. Serial.print(".");
  30. delay(500);
  31. }
  32. }
  33. void initL9110s() //四个引脚的初始化 为输出引脚
  34. {
  35. pinMode(Dong1,OUTPUT);
  36. pinMode(Dong2,OUTPUT);
  37. pinMode(Zhuan1,OUTPUT);
  38. pinMode(Zhuan2,OUTPUT);
  39. }
  40. void zuo() //向左
  41. {
  42. digitalWrite(Dong2,LOW);
  43. digitalWrite(Zhuan1,HIGH);
  44. }
  45. void you(){ // 向右
  46. digitalWrite(Dong2,HIGH);
  47. digitalWrite(Zhuan1,LOW);
  48. }
  49. void qian() // 向前
  50. {
  51. digitalWrite(Dong2,HIGH);
  52. digitalWrite(Zhuan1,HIGH);
  53. }
  54. void hou() // 停止
  55. {
  56. digitalWrite(Dong1,LOW);
  57. digitalWrite(Dong2,LOW);
  58. digitalWrite(Zhuan1,LOW);
  59. digitalWrite(Zhuan2,LOW);
  60. }
  61. void tui() // 退后
  62. {
  63. digitalWrite(Dong1,LOW);
  64. digitalWrite(Dong2,LOW);
  65. digitalWrite(Zhuan1,LOW);
  66. digitalWrite(Zhuan2,HIGH);
  67. }
  68. void setup() {
  69. initL9110s();
  70. pinMode(Echo,INPUT); //初始化超声波引脚
  71. pinMode(Trig,OUTPUT);
  72. pinMode(den,OUTPUT); //初始化指示灯的控制引脚
  73. Serial.begin(115200); //初始化串口(重要)
  74. myDuoJi.attach(DuoPIN);
  75. initWifiSta();
  76. server.begin();//启动服务器
  77. Serial.println(WiFi.localIP());//通过串口打印wemos的IP地址
  78. }
  79. void loop() {
  80. char cmd;
  81. int mark = 0;
  82. long dis;
  83. long y;
  84. long z;
  85. long q;
  86. qian();
  87. delay(50);
  88. dis = getTime()/58; //取超声波的探测的距离
  89. Serial.print(dis);
  90. if(dis < 10){
  91. tui(); //当小车探到的距离是 dis< 10 时的会后退
  92. delay(500); // 这是后退的时间可调节
  93. hou(); // 后退完是先停留一小段时间,小车停留的这段时间,警示灯会亮启,
  94. delay(500);
  95. digitalWrite(den,HIGH); /*******************这段时间是小车亮起的时间************************/
  96. delay(500);
  97. digitalWrite(den,LOW);
  98. delay(500);
  99. digitalWrite(den,HIGH);
  100. delay(500);
  101. digitalWrite(den,LOW);
  102. delay(500);
  103. digitalWrite(den,HIGH);
  104. delay(500);
  105. digitalWrite(den,LOW); /******************* 灯会一闪一闪********************/
  106. myDuoJi.write(0); // 舵机向左转90度 这先说明一下,因为每个人舵机放的位
  107. // 置都不经相同,因此调节的话可更改括号里的值
  108. delay(2000);
  109. y = getTime()/58; //重新获取超声波的探测的距离
  110. delay(500);
  111. myDuoJi.write(180); // 舵机向左转180度 这先说明一下,因为每个人舵机放的位置都
  112. // 不经相同,因此调节的话可更改括号里的值
  113. digitalWrite(den,HIGH); /*****************************这段时间是小车亮起的时间***********************/
  114. delay(500);
  115. digitalWrite(den,LOW);
  116. delay(500);
  117. digitalWrite(den,HIGH);
  118. delay(500);
  119. digitalWrite(den,LOW);
  120. delay(500);
  121. digitalWrite(den,HIGH);
  122. delay(500);
  123. digitalWrite(den,LOW);/****************************************************************************/
  124. delay(500);
  125. z = getTime()/58; //旋转180度后再次获取该方向的超声波的距离,先说一下为什么要
  126. // 获取两次不同方向的距离,因为我的代码是当小车向前开碰到障碍
  127. // 物时,会探测左和右的障碍误的距离,然后选择更好的一个方向
  128. // 去行驶
  129. delay(500);
  130. myDuoJi.write(90);
  131. delay(500);
  132. q = getTime()/58; // 获取前方的超声波的距离
  133. digitalWrite(den,HIGH);
  134. delay(500);
  135. digitalWrite(den,LOW);
  136. delay(300);
  137. if(z<y) //当右边的距离大于左边时
  138. {
  139. zuo();
  140. delay(800);
  141. }else if(y<z){ //当左边的大于右边时
  142. you();
  143. delay(800);
  144. }
  145. }else{ // 否则向前
  146. qian();
  147. }
  148. /*if(mark == 0)
  149. {
  150. switch(cmd){
  151. case 'q':
  152. qian();
  153. break;
  154. case 'h':
  155. hou();
  156. break;
  157. case 'y':
  158. zuo();
  159. break;
  160. case 'z':
  161. you();
  162. break;
  163. }
  164. }
  165. */
  166. }
  167. //}
  168. //}

四.总结

                 每一份代码都得用心去写,这样你会学到更多,编写这段代码,我也调试的蛮久的,但过程是非常的愉快的,因为疫情在家很无聊因此让自己动起来很重要,在项目与实验中方能体会到那种美好而忙碌的感觉。希望能帮得到每一正在经历的你们。

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/article/detail/46380
推荐阅读
相关标签
  

闽ICP备14008679号