中文字幕理论片,69视频免费在线观看,亚洲成人app,国产1级毛片,刘涛最大尺度戏视频,欧美亚洲美女视频,2021韩国美女仙女屋vip视频

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
【Arduino學(xué)習(xí)筆記】藍(lán)牙控制手自兩用避障車

學(xué)了arduino一段時間,抽了點時間把避障小車做了一下,現(xiàn)在把小車的制作過程在這里記錄一下,以便日后查閱。

首先說一下用到的材料:

1、小車底盤一套(淘寶淘的現(xiàn)成的,其實也可以自己做)

2、18650電池盒一個(可裝三節(jié)電池 12V)

3、超聲波模塊(HC-SR04)一個

4、紅外模塊(E18-D50NK)一個

5、紅外模塊(E18-D80NK)一個(之前只用了超聲波和D50模塊,結(jié)果效果不怎么好,又多買了一個紅外模塊,50跟80的區(qū)別貌似在于測量的最大距離不同)

6、L298N點擊驅(qū)動模塊一個

7、自制的arduino模塊一個(也可以用其它版本現(xiàn)成的arduino模塊)

8、無線藍(lán)牙模塊一個

用到的就是以上這些模塊,拼接完成后如下圖:


線路圖這里就不做說明了,大家可以看代碼的引腳定義接線,這里有幾點要特別說明一下

小車代碼支持兩種控制模式,見代碼

  1. //定義模式 1-手動模式 2-自動避障模式
  2. int MODE = 1;
手動模式可以使用手機(jī)連接藍(lán)牙設(shè)備進(jìn)行控制,這里提供一個控制軟件itead studio【點擊下載】,當(dāng)小車設(shè)置為自動模式時,小車會自動避障移動,可在軟件中將A和B分別設(shè)置為1和2,就可以任意切換小車模式了



代碼如下:

  1. #include <SoftwareSerial.h>
  2. //定義電機(jī)控制引腳
  3. #define IN1 5
  4. #define IN2 6
  5. #define IN3 7
  6. #define IN4 8
  7. //定義電機(jī)PWM引腳
  8. #define speedPinA 9
  9. #define speedPinB 10
  10. //定義紅外測距模塊E18數(shù)據(jù)引腳
  11. #define E18D50Pin 3
  12. #define E18D80Pin 4
  13. //定義超聲波數(shù)據(jù)引腳
  14. const int TrigPin = 2;
  15. const int EchoPin = 11;
  16. //超聲波模塊測出的距離
  17. float distance = 0;
  18. //藍(lán)牙模塊接收的數(shù)據(jù)
  19. char rec= ' ';
  20. //定義模式 1-手動模式 2-自動避障模式
  21. int MODE = 1;
  22. //定義軟串口,數(shù)據(jù)測試用
  23. SoftwareSerial mySerial(12, 13); // RX, TX
  24. void setup()
  25. {
  26. //初始化串口
  27. Serial.begin(9600);
  28. mySerial.begin(4800);
  29. //初始化電機(jī)引腳
  30. _initmPin();
  31. //初始化超聲波引腳
  32. _initSR04Pin();
  33. //電機(jī)保持不動。
  34. _cStop();
  35. }
  36. void loop()
  37. {
  38. if(MODE==1){
  39. while(Serial.available()){
  40. rec=Serial.read();
  41. if(rec=='1'){
  42. MODE=1;
  43. }else if(rec=='2'){
  44. MODE=2;
  45. }
  46. if(MODE!=1)
  47. break;
  48. if(rec=='f'){
  49. _cForward();
  50. setFSpeed();
  51. }else if(rec=='b'){
  52. _cBack();
  53. setBSpeed();
  54. }else if(rec=='l'){
  55. _cLeft();
  56. setLSpeed();
  57. }else if(rec=='r'){
  58. _cRight();
  59. setRSpeed();
  60. }else{
  61. _cStop();
  62. }
  63. //設(shè)置電機(jī)轉(zhuǎn)速
  64. rec= ' ';
  65. }
  66. }
  67. if(MODE==2){
  68. if(Serial.available()){
  69. rec=Serial.read();
  70. if(rec=='1'){
  71. MODE=1;
  72. }
  73. else if(rec=='2'){
  74. MODE=2;
  75. }
  76. }
  77. _getDistance();
  78. mySerial.println(distance);
  79. if(distance>25.0&&digitalRead(E18D50Pin)==HIGH&&digitalRead(E18D80Pin)==HIGH){
  80. _cForward();
  81. setFSpeed();
  82. }else{
  83. _cRight();
  84. setRSpeed();
  85. }
  86. }
  87. //設(shè)置電機(jī)轉(zhuǎn)速
  88. rec= ' ';
  89. }
  90. //由于買的電機(jī)速度不同,這里用pwm的方式調(diào)了一下速
  91. void setFSpeed(){
  92. _mSetSpeed(speedPinA,65);
  93. _mSetSpeed(speedPinB,70);
  94. }
  95. void setLSpeed(){
  96. _mSetSpeed(speedPinA,47);
  97. _mSetSpeed(speedPinB,50);
  98. }
  99. void setRSpeed(){
  100. _mSetSpeed(speedPinA,47);
  101. _mSetSpeed(speedPinB,50);
  102. }
  103. void setBSpeed(){
  104. _mSetSpeed(speedPinA,69);
  105. _mSetSpeed(speedPinB,70);
  106. }
  107. //通過超聲波模塊獲取障礙物距離
  108. void _getDistance(){
  109. // 產(chǎn)生一個10us的高脈沖去觸發(fā)TrigPin
  110. digitalWrite(TrigPin, LOW);
  111. delayMicroseconds(2);
  112. digitalWrite(TrigPin, HIGH);
  113. delayMicroseconds(10);
  114. digitalWrite(TrigPin, LOW);
  115. // 檢測脈沖寬度,并計算出距離
  116. distance = pulseIn(EchoPin, HIGH) / 58.00;
  117. delay(100);
  118. }
  119. //初始化電機(jī)引腳
  120. void _initmPin(){
  121. pinMode(IN1,OUTPUT);
  122. pinMode(IN2,OUTPUT);
  123. pinMode(IN3,OUTPUT);
  124. pinMode(IN4,OUTPUT);
  125. pinMode(speedPinA,OUTPUT);
  126. pinMode(speedPinB,OUTPUT);
  127. }
  128. //初始化微波模塊引腳
  129. void _initSR04Pin(){
  130. pinMode(TrigPin,OUTPUT);
  131. pinMode(EchoPin,INPUT);
  132. }
  133. void _cForward()//小車向前移動
  134. {
  135. _mRight(IN1,IN2);
  136. _mRight(IN3,IN4);
  137. }
  138. void _cBack()//小車向后移動
  139. {
  140. _mLeft(IN1,IN2);
  141. _mLeft(IN3,IN4);
  142. }
  143. void _cStop()//小車停止
  144. {
  145. _mStop(IN1,IN2);
  146. _mStop(IN3,IN4);
  147. }
  148. void _cLeft()//小車向左旋轉(zhuǎn)
  149. {
  150. _mRight(IN1,IN2);
  151. _mLeft(IN3,IN4);
  152. }
  153. void _cRight()//小車向右旋轉(zhuǎn)
  154. {
  155. _mLeft(IN1,IN2);
  156. _mRight(IN3,IN4);
  157. }
  158. //
  159. void _mRight(int pin1,int pin2)//電機(jī)右轉(zhuǎn),電機(jī)到底是右轉(zhuǎn)還是左轉(zhuǎn)取決于電機(jī)端的接線和控制腳的順序
  160. {
  161. digitalWrite(pin1,HIGH);
  162. digitalWrite(pin2,LOW);
  163. }
  164. void _mLeft(int pin1,int pin2)//電機(jī)左轉(zhuǎn),電機(jī)到底是右轉(zhuǎn)還是左轉(zhuǎn)取決于電機(jī)端的接線和控制腳的順序
  165. {
  166. digitalWrite(pin1,LOW);
  167. digitalWrite(pin2,HIGH);
  168. }
  169. void _mStop(int pin1,int pin2)//電機(jī)停止
  170. {
  171. digitalWrite(pin1,HIGH);
  172. digitalWrite(pin2,HIGH);
  173. }
  174. void _mSetSpeed(int pinPWM,int SpeedValue)//控制電機(jī)速度
  175. {
  176. analogWrite(pinPWM,SpeedValue);
  177. }


歡迎加入QQ群:254267969,共同交流學(xué)習(xí)~~~~

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Arduino小車
Arduino 語法
Arduino在中斷函數(shù)里面怎么延時
Simplest and Cheapest Arduino
<font style="vertical-align: inherit;"><font style="vertical-align: inherit;">實驗室:使用^ h橋的直流電機(jī)控制</font></font>
DIY 電動滑軌
更多類似文章 >>
生活服務(wù)
熱點新聞
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服