標(biāo)題: 基于Arduino的藍(lán)牙智能小車(代碼+APP+教程) [打印本頁]

作者: 凌南之楓    時(shí)間: 2019-1-24 16:43
標(biāo)題: 基于Arduino的藍(lán)牙智能小車(代碼+APP+教程)
以arduino為主控板,包含電機(jī)驅(qū)動模塊、藍(lán)牙模塊、語音模塊、超聲波模塊、語音模塊。實(shí)現(xiàn)前進(jìn)后退左轉(zhuǎn)右轉(zhuǎn)(語音同步提醒),藍(lán)牙APP所有按鈕無障礙切換。



一.首先選擇我們需要使用的APP


二.進(jìn)入APP選擇JDY-08設(shè)備



三,進(jìn)入主界面操作


Arduino小車接收到相關(guān)的操作指令:
前進(jìn)---- 0xa
后退----0xb
左---- 0xc
右--- 0xd
停止----0x10
音量+ ----0x11
音量- -----0x12
循跡----0xe
跟隨---0x13
娛樂—0xf

Arduino源程序如下:
  1. #include<SoftwareSerial.h>
  2. /*******************定義**************************/
  3. //蜂鳴器
  4. int beep_pin=A2;
  5. //電機(jī)定義端口
  6. int IN1 = 13;
  7. int IN2 = 12;
  8. int IN3 = 11;
  9. int IN4 = 10;
  10. //語音定義端口
  11. int IO1 = 4;
  12. int IO2 = 3;
  13. int IO3 = 2;
  14. int IO4 = 1;
  15. int IO5 = 0;
  16. int  pin_array[] = {IO5,IO4,IO3,IO2,IO1};
  17. int   fisrt_voice[] = {1,1,1,1,0};
  18. int  second_voice[] = {1,1,1,0,1};
  19. int   third_voice[] = {1,1,0,1,1};
  20. int  fourth_voice[] = {1,0,1,1,1};
  21. int     fif_voice[] = {0,1,1,1,1};
  22. int     six_voice[] = {0,0,1,1,0};
  23. //pwm調(diào)速端口
  24. int left_pin = 5;
  25. int right_pin = 6;
  26. int car_speed = 100;
  27. //超聲波模塊
  28. int TrigPin = A0;
  29. int EchoPin = A1;  //接收輸入的脈沖寬度,
  30. //軟串口定義
  31. SoftwareSerial  mySerial(8,9);
  32. SoftwareSerial dlSerial(SCL, SDA);
  33. unsigned char play_stop_music[] = {0x7E,0x03,0x1E,0x1D,0xEF};
  34. unsigned char play_add_music[] = {0x7E,0x03,0x15,0x16,0xEF};
  35. /*******************函數(shù)**********************/
  36. void play_addd_music()                          //語音加
  37. {
  38.   dlSerial.listen();
  39.   delay(300);
  40.   dlSerial.write(play_add_music,sizeof(play_add_music));
  41. }
  42. void beep()                                  //蜂鳴器
  43. {
  44.   tone(beep_pin,494);
  45.   delay(1000);
  46.   noTone(beep_pin);
  47.   delay(1000);
  48. }
  49. void set_speed()  //[0 ~255]                 //調(diào)速函數(shù)
  50. {
  51.     analogWrite(left_pin,car_speed);  
  52.     analogWrite(right_pin,car_speed);
  53. }
  54. void init_pin()                              //電機(jī)初始化
  55. {
  56.   pinMode(IN1,OUTPUT);
  57.   pinMode(IN2,OUTPUT);
  58.   pinMode(IN3,OUTPUT);
  59.   pinMode(IN4,OUTPUT);
  60.   return;
  61. }
  62. void left_motor_forward()                      //左電機(jī)直行
  63. {
  64.   digitalWrite(IN3,HIGH);
  65.   digitalWrite(IN4,LOW);
  66. }
  67. void left_motor_back()                           //左電機(jī)后退
  68. {
  69.   digitalWrite(IN3,LOW);
  70.   digitalWrite(IN4,HIGH);
  71. }
  72. void right_motor_forward()                        //右電機(jī)直行
  73. {
  74.   digitalWrite(IN1,HIGH);
  75.   digitalWrite(IN2,LOW);
  76. }
  77. void right_motor_back()                            //右電機(jī)后退
  78. {
  79.   digitalWrite(IN1,LOW);
  80.   digitalWrite(IN2,HIGH);
  81. }
  82. void car_forward()                                 //直行
  83. {
  84.   left_motor_forward();
  85.   right_motor_forward();
  86.   delay(1000);
  87. }
  88. void left_stop()                                    //左電機(jī)停
  89. {
  90.   digitalWrite(IN3,LOW);
  91.   digitalWrite(IN4,LOW);
  92.   }
  93.   void right_stop()                                 //右電機(jī)停
  94. {
  95.   digitalWrite(IN1,LOW);
  96.   digitalWrite(IN2,LOW);
  97. }
  98. void car_left()                                     //車左轉(zhuǎn)彎
  99. { left_motor_back();
  100.   right_motor_forward();
  101.   delay(1000);
  102. }
  103. void car_right()                                    //車右轉(zhuǎn)彎
  104. { left_motor_forward();
  105.   right_motor_back();
  106.   delay(1000);
  107. }
  108. void car_stop()                                      //車停
  109. {
  110.   digitalWrite(IN1,LOW);
  111.   digitalWrite(IN2,LOW);
  112.   digitalWrite(IN3,LOW);
  113.   digitalWrite(IN4,LOW);
  114.   delay(1000);
  115.   }
  116. void car_back()                                      //車后退
  117. {
  118.   left_motor_back();
  119.   right_motor_back();
  120.   delay(1000);
  121.   }
  122. void init_yuyin()                                       //語音初始化
  123. {  
  124.     pinMode(IO5,OUTPUT);  
  125.     pinMode(IO4,OUTPUT);  
  126.     pinMode(IO3,OUTPUT);  
  127.     pinMode(IO2,OUTPUT);  
  128.     pinMode(IO1,OUTPUT);
  129.    
  130. }

  131. void play_fisrt_voice()                                 //第一首歌
  132. {
  133.      int i = 0;
  134.      for(i = 0;i < 5;i++)
  135.      {
  136.          digitalWrite(pin_array[i],fisrt_voice[i]);
  137.      }
  138.      delay(1000);
  139. }
  140. void play_second_voice()                                 //第二首歌
  141. {
  142.      int i = 0;
  143.      for(i = 0;i < 5;i++)
  144.      {
  145.          digitalWrite(pin_array[i],second_voice[i]);
  146.      }
  147.      delay(1000);
  148. }
  149. void play_third_voice()                                 //第三首歌
  150. {
  151.      int i = 0;
  152.      for(i = 0;i < 5;i++)
  153.      {
  154.          digitalWrite(pin_array[i],third_voice[i]);
  155.      }
  156.      delay(1000);
  157. }
  158. void play_fourth_voice()                                 //第四首歌
  159. {
  160.      int i = 0;
  161.      for(i = 0;i < 5;i++)
  162.      {
  163.          digitalWrite(pin_array[i],fourth_voice[i]);
  164.      }
  165.      delay(1000);
  166. }
  167. void play_fif_voice()                                 //第五首歌
  168. {
  169.      int i = 0;
  170.      for(i = 0;i < 5;i++)
  171.      {
  172.          digitalWrite(pin_array[i],fif_voice[i]);
  173.      }
  174.      delay(1000);
  175. }
  176. void play_six_voice()                                 //第六首歌
  177. {
  178.      int i = 0;
  179.      for(i = 0;i < 5;i++)
  180.      {
  181.          digitalWrite(pin_array[i],six_voice[i]);
  182.      }
  183.      delay(1000);
  184. }
  185. float getDistance()                                   //得到距離
  186. {
  187.       float  distance;
  188.      digitalWrite(TrigPin,LOW);
  189.      delayMicroseconds(2);
  190.      digitalWrite(TrigPin,HIGH);
  191.      delayMicroseconds(10);
  192.      digitalWrite(TrigPin,LOW);
  193.      distance = pulseIn(EchoPin,HIGH) /58.00;
  194.      return distance;
  195. }
  196. void obstacle()                                       //避障
  197. {
  198.   
  199.    float  distance;
  200.    car_forward();
  201.    while(1)
  202.   {
  203.    distance = getDistance();
  204.    
  205.     if(distance < 100)
  206.     {   beep();
  207.         car_back();
  208.         delay(500);
  209.         car_left();
  210.         delay(1500);
  211.         play_six_voice();
  212.         car_forward();
  213.          mySerial.listen();
  214.         if(mySerial.available() > 0)
  215.             break;
  216.      }
  217.      else
  218.       car_forward();   
  219.   }
  220.   return ;  
  221. }
  222. void setup()                                          //setup
  223. {
  224.   // put your setup code here, to run once:
  225. init_pin();
  226. init_yuyin();
  227. set_speed();
  228. pinMode(beep_pin,OUTPUT);
  229. pinMode(TrigPin,OUTPUT);
  230. pinMode(EchoPin,INPUT);
  231. mySerial.begin(115200);
  232. dlSerial.begin(9600);
  233. }
  234. void loop()                                            //loop
  235. {
  236.   // put your main code here, to run repeatedly:
  237.     int ch = 0,i=0;
  238.     while(1)
  239.     {
  240.         mySerial.listen();
  241.         if(mySerial.available() > 0)
  242.         {
  243.               ch = mySerial.read();
  244.               switch(ch)
  245.               {
  246.                case 0xa:car_forward();play_fisrt_voice();break;
  247.                case 0xb:car_back();play_second_voice();break;
  248.                case 0xd:car_left();play_fourth_voice();break;
  249.                case 0xc:car_right();play_third_voice();break;
  250.                case 0x11:play_addd_music();break;
  251.                case 0xf:obstacle();break;
  252.                case 0x10:i++;car_stop();
  253.                          if(i==1)
  254.                          play_fif_voice();
  255.                          if(i==2)
  256.                          {
  257.                             dlSerial.listen();
  258.                             delay(300);
  259.                             dlSerial.write(play_stop_music,sizeof(play_stop_music));
  260.                             i=0;
  261.                          }
  262.                        break;
  263.                default:break;
  264.                }   
  265.         }
  266.     }
  267. }
復(fù)制代碼

所有資料51hei提供下載:
基于arduino的藍(lán)牙智能小車.zip (296.17 KB, 下載次數(shù): 194)






作者: 江上人愁    時(shí)間: 2019-3-20 17:02
寫的很規(guī)整,佩服。
作者: 低調(diào)低調(diào)013    時(shí)間: 2019-4-12 22:08
請問藍(lán)牙模塊四線接哪里啊
作者: zhlip    時(shí)間: 2019-4-25 11:20
不錯,下載了
作者: migo-robben    時(shí)間: 2019-6-18 23:30
我很想下載啊
作者: sh-fluke    時(shí)間: 2020-2-21 21:37
好資料,謝謝樓主分享。
作者: sswwqq    時(shí)間: 2020-3-2 21:58
新手,先觀望一下,謝謝
作者: ejdad    時(shí)間: 2020-4-11 23:23
謝謝  。。。 剛好是我需要的
作者: ycs89554171    時(shí)間: 2020-5-20 16:48
新手,先觀望一下,謝謝...
作者: williambe    時(shí)間: 2020-5-22 00:19
沒有藍(lán)牙模塊,慎重提醒,只有APP
作者: newforce    時(shí)間: 2020-6-14 20:55
新手,先觀望一下,謝謝
作者: chomou    時(shí)間: 2020-6-17 11:45
謝謝分享




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1