久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標題: 基于51單片機的手機藍牙遙控小車設計(程序 元件清單 實物圖) [打印本頁]

作者: lll66666    時間: 2019-1-17 23:46
標題: 基于51單片機的手機藍牙遙控小車設計(程序 元件清單 實物圖)
本人一直想做一個遙控車,終于今天實現了,跟大家分享一下。

一、元件清單
1、某寶購買一個智能小車底盤(本人車是四驅的,因此有四個電機,兩塊亞克力板和一些配件螺絲)
2、L298n模塊  兩個(一個298控制兩個電機)
3、HC-06藍牙模塊
4、電池盒跟18650電池3個
5、單片機最小系統
6、杜邦線至少12根,當然越多越好
7、若干根導線(連接電機用的,以及電池盒連到L298N跟單片機)
二、制作過程
  首先,先去了解一下L298N的接線,我當時也是懵逼了好久,反正摸索著也會了,一般店家都有資料。然后是藍牙模塊的使用,拿到藍牙模塊后,有開發板的話(沒有就用單片機的燒錄器),先按照TXD接TXD,RXD接RXD,打開電腦的串口助手與藍牙構建通信,打開AT,發送AT指令集,比如設設波特率,改個名字,改個配對的密碼。但通過藍牙與單片機連接通信的時候,就是TXD接RXD了。最后一個就是,本人在接線的時候經常碰壁。比如,你以為接好的線他其實沒接好,根本沒通,還是拿萬用表B了才知道。
  因為本人忘了買電池盒,所以我是用12V的直流電接著的,導致遙控車拖著跟電線。
三、實物圖
(拖著跟電線以及充電寶供電的車  不過我沒通電)

資料內包括L298N的部分資料,以及藍牙的說明書(看AT指令集就好)和源程序。



app:


單片機源程序如下:
  1. /*手機藍牙遙控小車                APP可以在應用市場搜 藍牙串口助手
  2. 左轉右轉大概是90度   我的是四驅的,如果是只有一個l298N的話就把帶2的刪了
  3. pwm有十級變速*/


  4. #include <reg52.h>

  5. #define Left_moto2_pwm     P0_4           //接驅動模塊ENA        使能端,輸入PWM信號調節速度          左后輪
  6. #define Right_moto2_pwm    P0_5           //接驅動模塊ENB                                                                   右后輪
  7. #define Left_moto_pwm     P1_4           //接驅動模塊ENA        使能端,輸入PWM信號調節速度          左前輪
  8. #define Right_moto_pwm    P1_5           //接驅動模塊ENB                                                                   右前輪
  9. #define uchar unsigned char
  10. #define uint unsigned int

  11. sbit P0_4=P0^4;                 //定義P0_4
  12. sbit P0_5=P0^5;                 //定義P0_5
  13. sbit P1_4=P1^4;                 //定義P1_4
  14. sbit P1_5=P1^5;                 //定義P1_5

  15. /*電機驅動IO定義*/
  16. sbit IN1 = P1^2; //為1 左電機反轉         前輪
  17. sbit IN2 = P1^3; //為1 左電機正轉        前輪
  18. sbit IN3 = P1^6; //為1 右電機正轉         前輪
  19. sbit IN4 = P1^7; //為1 右電機反轉         前輪
  20. /*sbit EN1 = P1^4; //為1 左電機使能
  21.   sbit EN2 = P1^5; //為1 右電機使能        */

  22. sbit IN5 = P0^2; //為1 左電機反轉         后輪
  23. sbit IN6 = P0^3; //為1 左電機正轉         后輪
  24. sbit IN7 = P0^6; //為1 右電機正轉         后輪
  25. sbit IN8 = P0^7; //為1 右電機反轉         后輪
  26. /*sbit EN3 = P0^4; //為1 左電機使能         后輪
  27.    sbit EN4 = P0^5; //為1 右電機使能         后輪           */

  28. bit Right_moto_stop=1;          
  29. bit Left_moto_stop =1;               
  30. unsigned  int  time=0;               
  31. int pwm=1;

  32. #define left_motor_en                EN1 = 1        //左電機使能
  33. #define left_motor_stops        EN1 = 0        //左電機停止
  34. #define right_motor_en                EN2 = 1        //右電機使能
  35. #define right_motor_stops        EN2 = 0        //右電機停止

  36. #define left_motor2_en                EN3 = 1        //左電機使能   后       
  37. #define left_motor2_stops        EN3 = 0        //左電機停止          后
  38. #define right_motor2_en                EN4 = 1        //右電機使能   后
  39. #define right_motor2_stops        EN4 = 0        //右電機停止   后


  40. #define left_motor_go                IN1 = 0, IN2 = 1//左電機正傳
  41. #define left_motor_back                IN1 = 1, IN2 = 0//左電機反轉
  42. #define right_motor_go                IN3 = 1, IN4 = 0//右電機正傳
  43. #define right_motor_back        IN3 = 0, IN4 = 1//右電機反轉

  44. #define left_motor2_go                IN5 = 0, IN6 = 1//左電機正傳
  45. #define left_motor2_back        IN5 = 1, IN6 = 0//左電機反轉
  46. #define right_motor2_go                IN7 = 1, IN8 = 0//右電機正傳
  47. #define right_motor2_back        IN7 = 0, IN8 = 1//右電機反轉

  48. unsigned char pwm_val_left  =0;//變量定義
  49. unsigned char push_val_left =0;// 左電機占空比N/10
  50. unsigned char pwm_val_right =0;
  51. unsigned char push_val_right=0;// 右電機占空比N/10


  52. void delay(uint z)
  53. {
  54.         uint x,y;
  55.         for(x = z; x > 0; x--)
  56.         for(y = 114; y > 0 ; y--);
  57. }



  58. //藍牙初始化
  59. void UART_INIT()
  60. {
  61.         SM0 = 0;
  62.         SM1 = 1;//串口工作方式1
  63.         REN = 1;//允許串口接收                                                                                                                 
  64.         EA = 1;//開總中斷
  65.         ES = 1;//開串口中斷
  66.         TMOD = 0x20;//8位自動重裝模式
  67.         TH1 = 0xfd;
  68.         TL1 = 0xfd;//9600波特率
  69.         TR1 = 1;//啟動定時器1
  70. }

  71. /************************************************************************/
  72.      void  run(void)        //pwm調速函數
  73. {
  74.      push_val_left  =pwm;  //PWM 調節參數1-10   1為最慢,10是最快  改這個值可以改變其速度
  75.          push_val_right =pwm;         //PWM 調節參數1-10   1為最慢,10是最快         改這個值可以改變其速度
  76.                  if(pwm==10) pwm=0;
  77.                 if(pwm==0&&pwm<0) pwm=0;

  78. }


  79. /************************************************************************/
  80. /*                    PWM調制電機轉速                                   */
  81. /************************************************************************/


  82. /*                    左側電機調速                                        */
  83. /*調節push_val_left的值改變電機轉速,占空比            */
  84.                 void pwm_out_left_moto(void)
  85. {  
  86.    if(Left_moto_stop)
  87.    {
  88.     if(pwm_val_left<=push_val_left)
  89.              {  Left_moto_pwm=1;
  90.                     Left_moto2_pwm=1;  }
  91.         else
  92.               { Left_moto_pwm=0;Left_moto2_pwm=0;                 }

  93.         if(pwm_val_left>=10)
  94.         pwm_val_left=0;
  95.    }
  96.    else { Left_moto_pwm=0;Left_moto2_pwm=0;          }
  97. }
  98. /******************************************************************/
  99. /*                    右側電機調速                                  */  
  100.    void pwm_out_right_moto(void)
  101. {
  102.   if(Right_moto_stop)
  103.    {
  104.     if(pwm_val_right<=push_val_right)
  105.              {  Right_moto_pwm=1;
  106.                    Right_moto2_pwm=1;           }
  107.         else
  108.                {Right_moto_pwm=0;
  109.                     Right_moto2_pwm=0;}
  110.         if(pwm_val_right>=10)
  111.             pwm_val_right=0;
  112.    }
  113.    else    {Right_moto_pwm=0;Right_moto2_pwm=0;        }
  114. }
  115. /***************************************************/
  116. ///*TIMER0中斷服務子函數產生PWM信號*/
  117.         void timer0()interrupt 1   using 2
  118. {
  119.      TH0=0XF8;          //1Ms定時
  120.          TL0=0X30;
  121.          time++;
  122.          pwm_val_left++;
  123.          pwm_val_right++;
  124.          pwm_out_left_moto();
  125.          pwm_out_right_moto();
  126. }

  127. //小車前進
  128. void forward()
  129. {
  130.         ET0 = 1;
  131.         run();                          //pwm        程序
  132.         left_motor_go; //左電機前進
  133.         right_motor_go; //右電機前進
  134.         left_motor2_go; //左電機前進   后輪
  135.         right_motor2_go; //右電機前進         后輪
  136. }

  137. void left_go()           //左轉
  138. {
  139.         ET0 = 1;
  140.         run();
  141.         left_motor_back;
  142.         right_motor_go;
  143.         left_motor2_back;
  144.         right_motor2_go;
  145.         delay(700);
  146.         forward();
  147. }
  148. //右轉
  149. void right_go()
  150. {
  151.         ET0 = 1;
  152.         run();
  153.         delay(50);
  154.         right_motor_back;
  155.         left_motor_go;
  156.         right_motor2_back;
  157.         left_motor2_go;
  158.         delay(700);
  159.         forward();
  160. }
  161. //小車左轉圈
  162. void left()
  163. {
  164.         ET0 = 1;
  165.         run();
  166.         delay(50);
  167.         right_motor_go;                  //  右電機前進
  168.         left_motor_back;        // 左電機后退
  169.         right_motor2_go;                  //  右電機前進
  170.         left_motor2_back;        // 左電機后退
  171. }

  172. //小車右轉圈
  173. void right()
  174. {
  175.         ET0 = 1;
  176.         run();
  177.         left_motor_go;
  178.         right_motor_back;  
  179.         left_motor2_go;
  180.         right_motor2_back;
  181. }

  182. //小車后退
  183. void back()
  184. {
  185.         ET0 = 1;
  186.         run();
  187.         left_motor_back;
  188.         right_motor_back;       
  189.         left_motor2_back;
  190.         right_motor2_back;
  191. }

  192. //小車停止
  193. void stop()
  194. {
  195.         ET0 = 0;
  196.         P1=0;
  197.         P0=0;
  198. }

  199.   
  200. //串口中斷
  201. void UART_SER() interrupt 4
  202. {
  203.         if(RI)
  204.         {
  205.                 RI = 0;//清除接收標志
  206.                 switch(SBUF)
  207.                 {
  208.                         case 'g': forward(); break;//前進
  209.                         case 'b': back(); break;//后退
  210.                         case 'l': left(); break;//左轉圈
  211.                         case 'r': right(); break;//右轉圈
  212.                         case 's': stop(); break;//停止
  213.                         case 'z': left_go(); break;//左轉行駛
  214.                          case 'y': right_go(); break;//右轉行駛
  215.                         case 'p': pwm++;break;                //加速
  216.                         case 'c': pwm--;break;                //減速
  217.                 }

  218.         }
  219. }

  220. void main()
  221. {
  222.         TMOD=0X01;
  223.         TH0= 0XF8;                  //1ms定時
  224.         TL0= 0X30;
  225.         TR0= 1;
  226.         ET0= 1;
  227.         EA = 1;
  228.         UART_INIT();//串口初始化
  229.         while(1);
  230. }
復制代碼

所有資料51hei提供下載:
資料.zip (1.01 MB, 下載次數: 665)



作者: admin    時間: 2019-1-18 02:14
好資料,51黑有你更精彩!!!
作者: aking991    時間: 2019-1-18 08:35
很不錯,我也曾作過,程序上面可作興趣的參考
作者: ifree8    時間: 2019-1-22 16:56
很酷的哦!!!
作者: lll66666    時間: 2019-2-22 09:54

我也是個小白,這是我的連接線路圖,我把前輪的L298N的ENA用跳線帽短接了。然后,后輪的L298N的ENB,拔掉跳線帽后有兩個插口,一個接P14,一個接P04。我也不知道正確的到底怎么接,反正這樣接它就能跑,還請大佬指點。

作者: xiaozhiTZM    時間: 2019-2-22 14:39
從下就對遙控小車很感興趣,正打算做一個呢,剛好又有樓主的資料作為參考,真是開心
作者: stc89czz    時間: 2019-3-2 13:08
哎,本初學者對你的程序有個問題,你的串口中斷函數那里,沒有 ES=0,然后ES=1;  會不會讓程序一直一直循環,我看了郭天祥的書上是這么說的
作者: zpz181818    時間: 2019-3-2 17:21
感興趣,準備做個玩下。
作者: 不傷手的立白    時間: 2019-3-26 20:46
程序113行處有錯誤,而且后面也是相同的錯誤
作者: lll66666    時間: 2019-4-21 21:46
不傷手的立白 發表于 2019-3-26 20:46
程序113行處有錯誤,而且后面也是相同的錯誤

請問具體是哪段程序?有什么樣的錯誤?能截個圖看看嗎?多謝
作者: z858445995    時間: 2019-4-22 10:43
謝謝分享
作者: z858445995    時間: 2019-4-22 10:45
厲害了 大兄弟
作者: 565576915    時間: 2019-5-9 01:54
怎么沒有app軟件呢??
作者: 1633941991    時間: 2019-5-11 15:45
請問怎么焊接呢?

作者: 北戈如歌    時間: 2019-5-24 17:02
感謝樓主分享 今年設計做的就是這個
作者: atom52    時間: 2019-5-31 22:01
51單片機和藍牙工作電壓都是5v,樓主你用12v,難道不會燒掉嗎
作者: CEO89    時間: 2019-6-1 14:39
有沒有Proteus仿真圖

作者: cd2333    時間: 2019-6-9 17:40
樓主您好~我們是要做一個實訓項目,內容是手機藍牙控制小車前進,不過不需要左轉、后退等功能,只要求前進和加速減速,我就把您的程序復制下來,把不需要的例如左轉、后退等功能程序刪掉了,留下了我需要的,然后編譯沒有錯誤,有一個警告L16,我就把程序燒進去了,我的單片機是89C52,藍牙模塊是HC-05,下載成功后,連接藍牙成功,用手機發送了前進的指令小車沒反應,沒有動,是什么原因呢?請大神指點~謝謝您!
作者: atom52    時間: 2019-6-11 23:32
cd2333 發表于 2019-6-9 17:40
樓主您好~我們是要做一個實訓項目,內容是手機藍牙控制小車前進,不過不需要左轉、后退等功能,只要求前進 ...

線接對沒有,指令設置正確沒有。都沒錯,你就細心檢查,你會發現你犯的是低級錯誤。。。
作者: zhuyu800    時間: 2019-6-12 00:38
好東西,值得分享
作者: yuzele    時間: 2019-6-30 20:53
厲害牛皮
作者: 卑微小鴿    時間: 2019-7-19 19:30
cd2333 發表于 2019-6-9 17:40
樓主您好~我們是要做一個實訓項目,內容是手機藍牙控制小車前進,不過不需要左轉、后退等功能,只要求前進 ...

試著把字符型改為十六進制
作者: czs小菜雞    時間: 2019-9-3 16:04
lll66666 發表于 2019-2-22 09:54
我也是個小白,這是我的連接線路圖,我把前輪的L298N的ENA用跳線帽短接了。然后,后輪的L298N的ENB,拔掉 ...

能留個聯系方式嗎?
作者: eastl    時間: 2019-9-4 10:35
好資料,51黑有你更精彩!!!
作者: lxa0    時間: 2019-9-15 12:41
沒有app~~~~~~~~~~~~
作者: 曾現路    時間: 2019-9-25 14:41
好帖感覺真新很棒
作者: QSM980405    時間: 2019-11-3 21:48
很棒,贊一個
作者: QHXRPG    時間: 2019-11-5 13:13
您好,請問您的手機藍牙串口助手發送什么指令去控制小車?
作者: DeBoDe    時間: 2019-11-8 16:52
atom52 發表于 2019-5-31 22:01
51單片機和藍牙工作電壓都是5v,樓主你用12v,難道不會燒掉嗎

l298N驅動電機 有個5v 輸出 應該是用這個給單片機供電 ,12v 接在 l298n上
作者: 歡迎新會員    時間: 2019-11-8 21:09
好資料,51黑有你更精彩!!!
作者: 我來下載軟件    時間: 2019-11-11 11:52
好資料,51黑有你更精彩!!
作者: Li5151    時間: 2019-11-13 18:51
lll66666 發表于 2019-2-22 09:54
我也是個小白,這是我的連接線路圖,我把前輪的L298N的ENA用跳線帽短接了。然后,后輪的L298N的ENB,拔掉 ...

樓主我知道你的問題了,你的L298n模塊沒有和單片機共地。系統的GND是參考電平,平常所說的IN1=1,IN2=0,這里的1和0是相對GND的,所以一定要連在一起(說明書上這么說的)。你如果用充電寶供電,要從單片機引一條地線出來和L298n的底線連在一起。
作者: 小九九就是我    時間: 2019-11-14 11:00
APP在壓縮包里嗎
作者: 我來下載軟件    時間: 2019-11-14 16:03
資料已下載 謝謝
作者: lc3070    時間: 2019-11-15 15:36
樓主,那個app就叫藍牙串口助手嗎?在哪里下載的
作者: 宇宙浪子521    時間: 2019-11-26 17:14
不錯 ,謝謝大佬,學習了!
作者: 煉獄小刀    時間: 2019-11-27 21:18
有藍牙串口app的具體使用步驟就好了
作者: 372614983    時間: 2020-1-9 16:33
謝謝大佬,學習了
作者: 3285875635    時間: 2020-2-9 00:33
好資料,51黑有你更精彩!!!
作者: 老小怪    時間: 2020-4-5 20:23
cd2333 發表于 2019-6-9 17:40
樓主您好~我們是要做一個實訓項目,內容是手機藍牙控制小車前進,不過不需要左轉、后退等功能,只要求前進 ...

請問你解決了嗎
作者: 老小怪    時間: 2020-4-7 15:21
樓主,請問我的小車沒有反應是為什么
作者: koi666    時間: 2020-4-26 21:42
很好,值得學習
作者: koi666    時間: 2020-4-26 21:45
準備參考這個
作者: ycs89554171    時間: 2020-4-29 09:42
好資料,51黑有你更精彩!!!
作者: anjeny    時間: 2020-5-17 11:44
很棒哦
作者: amd1217    時間: 2020-5-26 22:20
支持一下
作者: 滬閔    時間: 2020-6-9 09:15
請問樓主,我是小白,不知道四輪驅動可以用一個L298N嗎
作者: newforce    時間: 2020-6-14 20:27
51黑有你更精彩!!!
作者: 黃尼瑪a    時間: 2020-6-15 11:07
謝謝研發
作者: swustlx86    時間: 2020-6-17 09:01
好資料,51黑有你更精彩!!!
作者: billyR    時間: 2020-6-19 19:01
我覺得很不錯,最近我在弄

作者: zhangxiaobu    時間: 2020-6-21 14:08
lll66666 發表于 2019-4-21 21:46
請問具體是哪段程序?有什么樣的錯誤?能截個圖看看嗎?多謝

你讓他等于1了,這樣子沒任何意義,因該是等于你《=的那個值
作者: 軒某人    時間: 2020-6-23 07:40
挺好的
作者: 不來也不去    時間: 2020-8-17 21:35
謝謝樓主分享,我自己也準備弄一個玩玩

作者: 1024030997    時間: 2020-9-15 10:50
好強,感覺應該很好用我覺得
作者: lll66666    時間: 2020-10-18 15:55
565576915 發表于 2019-5-9 01:54
怎么沒有app軟件呢??

APP軟件就是在華為應用商城下載的,名字就叫“藍牙串口助手”,很小的,就幾M。
作者: lll66666    時間: 2020-10-18 15:59
QHXRPG 發表于 2019-11-5 13:13
您好,請問您的手機藍牙串口助手發送什么指令去控制小車?

就是239-247行的英文字母,g、b、l、s這些,就是按下前進鍵,就會發送英文字母g過去。
作者: lll66666    時間: 2020-10-18 16:02
Li5151 發表于 2019-11-13 18:51
樓主我知道你的問題了,你的L298n模塊沒有和單片機共地。系統的GND是參考電平,平常所說的IN1=1,IN2=0,這 ...

感謝指點!
作者: lll66666    時間: 2020-10-18 16:03
lc3070 發表于 2019-11-15 15:36
樓主,那個app就叫藍牙串口助手嗎?在哪里下載的

對對對,就在華為應用商城,一個幾M的小軟件。不好意思 很久沒上了
作者: lll66666    時間: 2020-10-18 16:04
小九九就是我 發表于 2019-11-14 11:00
APP在壓縮包里嗎

APP在華為應用商城下載 就叫“藍牙串口助手”
作者: lll66666    時間: 2020-10-18 16:10
感謝各位的關注和討論,不過由于我很久沒上了,錯了了大家很多的提問。很多朋友問APP,APP是在華為應用商城下載的,名字就叫“藍牙串口助手”。這里的程序可能會有一些問題,比如當時L298N的接法其實有點奇怪,然后有個優化改進的地方是,當時這個程序是按了前進后就會一直前進,不過速度快的話這樣容易撞車;另一個問題是如果藍牙斷開連接,這輛車是不會停下來的。
作者: YinJie1    時間: 2020-11-23 16:24
挺好的,可能是我太小白,有的地方看著有點難懂

作者: tst200706    時間: 2020-11-24 10:36
很有趣
作者: louis9432    時間: 2020-12-1 19:07
太好了,終于找到解決方案了
作者: lqh_fairy    時間: 2021-5-13 08:19
大佬,有原理圖和仿真圖嗎,本人學生,想嘗試一下
作者: Letitia    時間: 2021-7-31 13:30
cd2333 發表于 2019-6-9 17:40
樓主您好~我們是要做一個實訓項目,內容是手機藍牙控制小車前進,不過不需要左轉、后退等功能,只要求前進 ...

你先用串口助手測速有沒有問題,能不能收發
作者: lhpsnd    時間: 2021-7-31 14:38
我今年也買了一個跟你的一樣,我現在是想要用我之前焊好的LCD1602液晶屏與藍牙模塊之間進行交流,用手機鏈接上藍牙在手機上個小車發送一個指令,同時在小車的屏幕上顯示我發送的指令,還有外接按鍵是來調節我發送的指令。這個問題我想了好久,還是沒有想到辦法。希望大佬們能給我點提示或者思路。本人在此謝過了!!!
作者: Martinku    時間: 2021-12-14 10:49
這資料對學習51的遙控小車很有幫助性作用,給樓主贊一下!




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 欧美日韩在线国产 | 国产精品国产三级国产aⅴ无密码 | 97视频在线看| 久久首页 | 欧美区在线| 精品中文字幕在线 | 男女精品久久 | 日韩av在线中文字幕 | 中国一级特黄视频 | av一区二区三区四区 | 噜噜噜噜狠狠狠7777视频 | 成年人免费看的视频 | 国产激情福利 | 亚洲视频1区 | 中文日韩在线视频 | 中文字幕亚洲视频 | 精品久久久久久久久久久久 | www免费视频| 欧美日韩不卡在线 | 欧美成人h版在线观看 | 亚洲精品在线免费观看视频 | 亚洲一区精品在线 | 午夜丁香视频在线观看 | 日本色婷婷 | 欧美精品一区二区免费视频 | 国产精品网页 | 欧洲av在线 | 亚洲成人精品久久 | 波多野结衣中文字幕一区二区三区 | 中文字幕日韩欧美 | 懂色中文一区二区三区在线视频 | 欧美久久一区二区三区 | 亚洲一区二区三区在线 | 观看av| 成人视屏在线观看 | 美女黄色在线观看 | 黄色成人免费在线观看 | 久久久成人一区二区免费影院 | 久久人人网 | 欧美成人免费在线视频 | 天天艹日日干 |