找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 13697|回复: 11
打印 上一主题 下一主题
收起左侧

基于Arduino的蓝牙智能小车(代码+APP+教程)

  [复制链接]
跳转到指定楼层
楼主
以arduino为主控板,包含电机驱动模块、蓝牙模块、语音模块、超声波模块、语音模块。实现前进后退左转右转(语音同步提醒),蓝牙APP所有按钮无障碍切换。



一.首先选择我们需要使用的APP


二.进入APP选择JDY-08设备



三,进入主界面操作


Arduino小车接收到相关的操作指令:
前进---- 0xa
后退----0xb
左---- 0xc
右--- 0xd
停止----0x10
音量+ ----0x11
音量- -----0x12
循迹----0xe
跟随---0x13
娱乐—0xf

Arduino源程序如下:
  1. #include<SoftwareSerial.h>
  2. /*******************定义**************************/
  3. //蜂鸣器
  4. int beep_pin=A2;
  5. //电机定义端口
  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调速端口
  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. /*******************函数**********************/
  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]                 //调速函数
  50. {
  51.     analogWrite(left_pin,car_speed);  
  52.     analogWrite(right_pin,car_speed);
  53. }
  54. void init_pin()                              //电机初始化
  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()                      //左电机直行
  63. {
  64.   digitalWrite(IN3,HIGH);
  65.   digitalWrite(IN4,LOW);
  66. }
  67. void left_motor_back()                           //左电机后退
  68. {
  69.   digitalWrite(IN3,LOW);
  70.   digitalWrite(IN4,HIGH);
  71. }
  72. void right_motor_forward()                        //右电机直行
  73. {
  74.   digitalWrite(IN1,HIGH);
  75.   digitalWrite(IN2,LOW);
  76. }
  77. void right_motor_back()                            //右电机后退
  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()                                    //左电机停
  89. {
  90.   digitalWrite(IN3,LOW);
  91.   digitalWrite(IN4,LOW);
  92.   }
  93.   void right_stop()                                 //右电机停
  94. {
  95.   digitalWrite(IN1,LOW);
  96.   digitalWrite(IN2,LOW);
  97. }
  98. void car_left()                                     //车左转弯
  99. { left_motor_back();
  100.   right_motor_forward();
  101.   delay(1000);
  102. }
  103. void car_right()                                    //车右转弯
  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. }
复制代码

所有资料51hei提供下载:
基于arduino的蓝牙智能小车.zip (296.17 KB, 下载次数: 194)





评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏9 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:494764 发表于 2019-3-20 17:02 | 只看该作者
写的很规整,佩服。
回复

使用道具 举报

板凳
ID:504448 发表于 2019-4-12 22:08 | 只看该作者
请问蓝牙模块四线接哪里啊
回复

使用道具 举报

地板
ID:318672 发表于 2019-4-25 11:20 来自手机 | 只看该作者
不错,下载了
回复

使用道具 举报

5#
ID:566277 发表于 2019-6-18 23:30 | 只看该作者
我很想下载啊
回复

使用道具 举报

6#
ID:652804 发表于 2020-2-21 21:37 | 只看该作者
好资料,谢谢楼主分享。
回复

使用道具 举报

7#
ID:396693 发表于 2020-3-2 21:58 | 只看该作者
新手,先观望一下,谢谢
回复

使用道具 举报

8#
ID:726701 发表于 2020-4-11 23:23 | 只看该作者
谢谢  。。。 刚好是我需要的
回复

使用道具 举报

9#
ID:632112 发表于 2020-5-20 16:48 | 只看该作者
新手,先观望一下,谢谢...
回复

使用道具 举报

10#
ID:719935 发表于 2020-5-22 00:19 | 只看该作者
没有蓝牙模块,慎重提醒,只有APP
回复

使用道具 举报

11#
ID:118488 发表于 2020-6-14 20:55 | 只看该作者
新手,先观望一下,谢谢
回复

使用道具 举报

12#
ID:727081 发表于 2020-6-17 11:45 | 只看该作者
谢谢分享
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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