重要宣告
本人為軟體工程專業,硬體不是本專業的學習范疇,因為本人對硬體感興趣,自學了部分51單片機知識,這個小車是20年上半年因為疫情被困在家中突發奇想做的,現在有空閑時間就想著寫一篇博客,分享給同樣對硬體感興趣的小伙伴,
所需知識準備
了解51單片機、HC-05/06藍牙模塊使用方法!!!!
準備材料
51單片機最小系統板、LM2596降壓模塊、HC-06藍牙模塊、MG995系列180度舵機、L298N電機驅動(160w雙路)、任意品牌遙控車車架帶電機、聚合物鋰電池一塊
部分原材料照片


設計思路和接線示意

原理簡介
因為是自學的51單片機,不會用太復雜的東西,所以用到的原理都很簡單,51單片機與HC-06藍牙模塊串口通信、L298N電機驅動芯片驅動四路舵機、51單片機通過串口輸出PWM波控制舵機,以上原理較為簡單,就不一一詳細闡述了,有一點想提醒和我一樣的萌新:注意看你用的L298N的電流,如果驅動的電流較大,建議和我一樣對它單獨供電,不然會出大問題的!!還有一點就是串口通信時TXD與TRD反接問題,這是串口通信的關鍵,
51程式代碼
下面的代碼是成功的時候最原始的代碼,后續進行過修改因為沒保存,現在找不到了,所以就把最原始的代碼貼出來了,程式比較簡單,應該都看得懂,難一點的地方也加了注釋,有看不懂的地方歡迎評論留言,
/*藍牙小車程式
T0產生PWM控制舵機,T1用于串口通信舵機330hz*/
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit PWM=P0^0; //舵機控制埠
sbit in1=P2^0; //電機控制埠1
sbit in2=P2^1; //電機控制埠2
sbit in3=P2^2; //電機控制埠3
sbit in4=P2^3; //電機控制埠4
sbit FMQ=P0^1; //蜂鳴器控制
uint count=0,jd;
uchar a;
void InitUART() //串口初始化
{
TMOD = 0x21; //設定定時器T1
PCON = 0x00; //關倍頻
SCON = 0x50;
TH1 = 0xFD; //T1 波特率9600
TL1 = 0xFD;
TR1 = 1; //啟動定時器
TR0 = 1;
ES = 1; //開啟串口中斷
PS = 1;
ET0 = 1;
EA = 1; //開啟總中斷
}
void main ()
{
InitUART();
while (1);
}
void Time0_Int() interrupt 1 //中斷程式
{
TH0 = 0xfe; //重新賦值
TL0 = 0x33;
if(count< jd) //判斷0.5ms次數是否小于角度標識
PWM=1; //確實小于,PWM輸出高電平
else
PWM=0; //大于則輸出低電平
count=(count+1); //0.5ms次數加1
count=count%40; //次數始終保持為40 即保持周期為20ms
}
void UARTInterrupt () interrupt 4 //中斷程式 4
{
if(RI==1)
{
RI = 0;
a = SBUF;
if (a == 0x01) //前進
{
in1=1;
in2=0;
in3=1;
in4=0;
}
if (a == 0x02) //后退
{
in1=0;
in2=1;
in3=0;
in4=1;
}
if (a == 0x00) //停止
{
in1=1;
in2=1;
in3=1;
in4=1;
}
if(a == 0x03) //左轉
{
jd=2;
}
if(a == 0x04) //右轉
{
jd=4;
}
if(a == 0x05) //回中
{
jd=3;
}
if(a ==0x06) //蜂鳴器開
{
FMQ=0;
}
if(a ==0x07) //蜂鳴器關
{
FMQ=1;
}
}
}
成品展示

手機遙控界面

總結反思
現在再回去看我的第一個51作品,看著簡單,回想剛開始研究51時的艱辛,各種貼吧網站逛了個遍,四處搜集查找資料,因為一點小問題冥思苦想好幾天,到最后玩上了自己的遙控車,真的是成就感滿滿啊!!!繼續加油吧,,哈哈,有需要以上原始材料相關資料的可以私信我!!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/226946.html
標籤:其他
