本人一直想做一個遙控車,終于今天實現了,跟大家分享一下。
一、元件清單
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指令集就好)和源程序。
94931983471821824.jpg (101.12 KB, 下載次數: 206)
下載附件
2019-1-18 00:12 上傳
105776735203218362.jpg (129.21 KB, 下載次數: 170)
下載附件
2019-1-18 00:13 上傳
app:
837108316045614533.jpg (62.9 KB, 下載次數: 180)
下載附件
2019-1-18 00:29 上傳
201007723374054530.jpg (39.78 KB, 下載次數: 172)
下載附件
2019-1-18 00:26 上傳
單片機源程序如下:
- /*手機藍牙遙控小車 APP可以在應用市場搜 藍牙串口助手
- 左轉右轉大概是90度 我的是四驅的,如果是只有一個l298N的話就把帶2的刪了
- pwm有十級變速*/
- #include <reg52.h>
- #define Left_moto2_pwm P0_4 //接驅動模塊ENA 使能端,輸入PWM信號調節速度 左后輪
- #define Right_moto2_pwm P0_5 //接驅動模塊ENB 右后輪
- #define Left_moto_pwm P1_4 //接驅動模塊ENA 使能端,輸入PWM信號調節速度 左前輪
- #define Right_moto_pwm P1_5 //接驅動模塊ENB 右前輪
- #define uchar unsigned char
- #define uint unsigned int
- sbit P0_4=P0^4; //定義P0_4
- sbit P0_5=P0^5; //定義P0_5
- sbit P1_4=P1^4; //定義P1_4
- sbit P1_5=P1^5; //定義P1_5
- /*電機驅動IO定義*/
- sbit IN1 = P1^2; //為1 左電機反轉 前輪
- sbit IN2 = P1^3; //為1 左電機正轉 前輪
- sbit IN3 = P1^6; //為1 右電機正轉 前輪
- sbit IN4 = P1^7; //為1 右電機反轉 前輪
- /*sbit EN1 = P1^4; //為1 左電機使能
- sbit EN2 = P1^5; //為1 右電機使能 */
- sbit IN5 = P0^2; //為1 左電機反轉 后輪
- sbit IN6 = P0^3; //為1 左電機正轉 后輪
- sbit IN7 = P0^6; //為1 右電機正轉 后輪
- sbit IN8 = P0^7; //為1 右電機反轉 后輪
- /*sbit EN3 = P0^4; //為1 左電機使能 后輪
- sbit EN4 = P0^5; //為1 右電機使能 后輪 */
- bit Right_moto_stop=1;
- bit Left_moto_stop =1;
- unsigned int time=0;
- int pwm=1;
- #define left_motor_en EN1 = 1 //左電機使能
- #define left_motor_stops EN1 = 0 //左電機停止
- #define right_motor_en EN2 = 1 //右電機使能
- #define right_motor_stops EN2 = 0 //右電機停止
- #define left_motor2_en EN3 = 1 //左電機使能 后
- #define left_motor2_stops EN3 = 0 //左電機停止 后
- #define right_motor2_en EN4 = 1 //右電機使能 后
- #define right_motor2_stops EN4 = 0 //右電機停止 后
- #define left_motor_go IN1 = 0, IN2 = 1//左電機正傳
- #define left_motor_back IN1 = 1, IN2 = 0//左電機反轉
- #define right_motor_go IN3 = 1, IN4 = 0//右電機正傳
- #define right_motor_back IN3 = 0, IN4 = 1//右電機反轉
- #define left_motor2_go IN5 = 0, IN6 = 1//左電機正傳
- #define left_motor2_back IN5 = 1, IN6 = 0//左電機反轉
- #define right_motor2_go IN7 = 1, IN8 = 0//右電機正傳
- #define right_motor2_back IN7 = 0, IN8 = 1//右電機反轉
- unsigned char pwm_val_left =0;//變量定義
- unsigned char push_val_left =0;// 左電機占空比N/10
- unsigned char pwm_val_right =0;
- unsigned char push_val_right=0;// 右電機占空比N/10
- void delay(uint z)
- {
- uint x,y;
- for(x = z; x > 0; x--)
- for(y = 114; y > 0 ; y--);
- }
- //藍牙初始化
- void UART_INIT()
- {
- SM0 = 0;
- SM1 = 1;//串口工作方式1
- REN = 1;//允許串口接收
- EA = 1;//開總中斷
- ES = 1;//開串口中斷
- TMOD = 0x20;//8位自動重裝模式
- TH1 = 0xfd;
- TL1 = 0xfd;//9600波特率
- TR1 = 1;//啟動定時器1
- }
- /************************************************************************/
- void run(void) //pwm調速函數
- {
- push_val_left =pwm; //PWM 調節參數1-10 1為最慢,10是最快 改這個值可以改變其速度
- push_val_right =pwm; //PWM 調節參數1-10 1為最慢,10是最快 改這個值可以改變其速度
- if(pwm==10) pwm=0;
- if(pwm==0&&pwm<0) pwm=0;
- }
-
- /************************************************************************/
- /* PWM調制電機轉速 */
- /************************************************************************/
- /* 左側電機調速 */
- /*調節push_val_left的值改變電機轉速,占空比 */
- void pwm_out_left_moto(void)
- {
- if(Left_moto_stop)
- {
- if(pwm_val_left<=push_val_left)
- { Left_moto_pwm=1;
- Left_moto2_pwm=1; }
- else
- { Left_moto_pwm=0;Left_moto2_pwm=0; }
- if(pwm_val_left>=10)
- pwm_val_left=0;
- }
- else { Left_moto_pwm=0;Left_moto2_pwm=0; }
- }
- /******************************************************************/
- /* 右側電機調速 */
- void pwm_out_right_moto(void)
- {
- if(Right_moto_stop)
- {
- if(pwm_val_right<=push_val_right)
- { Right_moto_pwm=1;
- Right_moto2_pwm=1; }
- else
- {Right_moto_pwm=0;
- Right_moto2_pwm=0;}
- if(pwm_val_right>=10)
- pwm_val_right=0;
- }
- else {Right_moto_pwm=0;Right_moto2_pwm=0; }
- }
- /***************************************************/
- ///*TIMER0中斷服務子函數產生PWM信號*/
- void timer0()interrupt 1 using 2
- {
- TH0=0XF8; //1Ms定時
- TL0=0X30;
- time++;
- pwm_val_left++;
- pwm_val_right++;
- pwm_out_left_moto();
- pwm_out_right_moto();
- }
- //小車前進
- void forward()
- {
- ET0 = 1;
- run(); //pwm 程序
- left_motor_go; //左電機前進
- right_motor_go; //右電機前進
- left_motor2_go; //左電機前進 后輪
- right_motor2_go; //右電機前進 后輪
- }
- void left_go() //左轉
- {
- ET0 = 1;
- run();
- left_motor_back;
- right_motor_go;
- left_motor2_back;
- right_motor2_go;
- delay(700);
- forward();
- }
- //右轉
- void right_go()
- {
- ET0 = 1;
- run();
- delay(50);
- right_motor_back;
- left_motor_go;
- right_motor2_back;
- left_motor2_go;
- delay(700);
- forward();
- }
- //小車左轉圈
- void left()
- {
- ET0 = 1;
- run();
- delay(50);
- right_motor_go; // 右電機前進
- left_motor_back; // 左電機后退
- right_motor2_go; // 右電機前進
- left_motor2_back; // 左電機后退
- }
- //小車右轉圈
- void right()
- {
- ET0 = 1;
- run();
- left_motor_go;
- right_motor_back;
- left_motor2_go;
- right_motor2_back;
- }
- //小車后退
- void back()
- {
- ET0 = 1;
- run();
- left_motor_back;
- right_motor_back;
- left_motor2_back;
- right_motor2_back;
- }
- //小車停止
- void stop()
- {
- ET0 = 0;
- P1=0;
- P0=0;
- }
-
- //串口中斷
- void UART_SER() interrupt 4
- {
- if(RI)
- {
- RI = 0;//清除接收標志
- switch(SBUF)
- {
- case 'g': forward(); break;//前進
- case 'b': back(); break;//后退
- case 'l': left(); break;//左轉圈
- case 'r': right(); break;//右轉圈
- case 's': stop(); break;//停止
- case 'z': left_go(); break;//左轉行駛
- case 'y': right_go(); break;//右轉行駛
- case 'p': pwm++;break; //加速
- case 'c': pwm--;break; //減速
- }
- }
- }
- void main()
- {
- TMOD=0X01;
- TH0= 0XF8; //1ms定時
- TL0= 0X30;
- TR0= 1;
- ET0= 1;
- EA = 1;
- UART_INIT();//串口初始化
- while(1);
- }
復制代碼
0.png (39.78 KB, 下載次數: 190)
下載附件
2019-1-18 02:11 上傳
所有資料51hei提供下載:
資料.zip
(1.01 MB, 下載次數: 665)
2019-1-18 00:08 上傳
點擊文件名下載附件
包括藍牙的說明書,L298N的一丟丟資料和源程序 下載積分: 黑幣 -5
|