声明:本公众号仅做交流学习,不作为商业用途,如有侵权请告知,谢谢!
如果小编一段时间没有更新,
请您不要离开,
小编一定是在寻找资源,
给您呈现更精彩的文章。
本文首发于《无线电》杂志
这篇文章已经记不起是13年还是12年,闲着没事,写的一篇玩的,里面附有原理图和程序源码,采用的51单片机,程序也很短,动手能力强的可以做给孩子玩,挺好玩的。压缩包里还有一个APP。不知道现在还能不能装在安卓手机里。排版有点乱,也就不修改了.
一直都非常喜欢电子,也是无线电的忠实读者,这是我第一次写东西,希望Android手机蓝牙遥控赛车能够给大家带来乐趣。
设计之初
前些时候,我的老师抱了一辆很大的玩具车给我说,你改装改装这辆车,让它能够用电脑键盘的上下左右键来控制它,我就开始找这方面的资料,上位机,以及无线模块NRF24L01,第一次用NRF24L01最后折腾了一星期,没有眉目,就放弃了,无意中找到了蓝牙模块,通过将近两周的摸索,将老师那辆车改装好了,改好之后想到,要是有一款手机上的软件来控制赛车那就更好了,这样玩起来感觉会更爽,所以我就又在淘宝上花几十块钱买了辆玩具车。因为水平有限,手机端的控制软件不会编写,也是无意中发现360手机助手上有这么一款免费软件,蓝牙小车,所以我就拿这个软件来作为控制软件。
赛车以及内部(内部比较混乱,纯手工的,大家将就着看吧)
功能描述
赛车不仅可以用触屏来控制赛车的前后左右运动,还可以通过手机的重力感应来控制,以前我们用手机玩赛车游戏,而现在通过玩重力感应蓝牙遥控赛车有种让我们身临其境的感觉,并且原来车上自带的遥控器电路我没有拆除,既可以用手机控制又可以用遥控器控制。
结构设计
蓝牙遥控赛车主要用到一下器件:
器件
数量
安卓智能手机
一部
360手机助手里面的蓝牙小车软件
一个
蓝牙接收模块(HC-06)
一块
51单片机最小系统
一块
直流电机驱动(L298)
一块
玩具车模型
一辆
在这些器件中,电机驱动大家可以选择自己手头有的驱动模块,自己焊接的时候一定考虑好驱动和单片机用同一电源的干扰,51最小系统可以自己焊接,不需要串口,玩具车模型尽量大一点,方便把这些模块放在里面,玩具车前面必须可以转向的,并且最好是带锂电池,这样方便供电,蓝牙模块如图一和图二
图一HC-06(正面)
图二(反面)
淘宝上有好多,大家可以自己选择。在蓝牙小车软件中有刹车,加速,减速,四个方向键,以及点击功能键的时候有三个选择键,打开重力感应,关闭重力感应,连接小车。
蓝牙小车软件使用方法:(图三、四、五、六)
1:给蓝牙接收模块供电,打开手机蓝牙并且扫描设备进行配对;
2:配对成功后,打开蓝牙小车软件选择连接小车,配对成功就可以操作了。
3:选择打开重力感应,这样我们就能用重力感应来控制小车了。
图三
图四
图五
图六
51单片机最小系统电路图(图七),L298驱动电路图(图八),网上有很多,大家可以参考我的也可以参考网上的,有条件的话,可以自己制作一个PCB板这样能节省很多空间,驱动电路最小系统连接好后,再将蓝牙模块与单片机连接就行了,蓝牙模块RXD接单片机TXD口,蓝牙模块TXD接单片机RXD口,这样整个蓝牙赛车的硬件就搭建完毕,下面我将程序给大家,我的程序里面没有将加速和减速写进去,所以软件的加速和减速键是不能用的,如果想用的话自己再加到程序里面
图七
图八
程序设计
#include<reg52.h>
#include<math.h>
#define uchar unsigned char
#define uint unsigned int
uchar Buffer[10] = {1}; //从串口接收的数据
uint i,j;
sbit en1=P2^4; /* L298的Enable A */
sbit en2=P2^5; /* L298的Enable B */
sbit s1=P2^0; /* L298的Input 1 */
sbit s2=P2^1; /* L298的Input 2 */
sbit s3=P2^2; /* L298的Input 3 */
sbit s4=P2^3; /* L298的Input 4 */
uchar t=0; /* 中断计数器 */
uchar m1=0; /* 电机1速度值 */
uchar m2=0; /* 电机2速度值 */
uchar tmp1,tmp2; /* 电机当前速度值 */
/********************************************************************
* 名称 : Delay_1ms()
* 功能 : 延时子程序,延时时间为 1ms * x
* 输入 : x (延时一毫秒的个数)
* 输出 : 无
***********************************************************************/
void Delay_1ms(uint i)//1ms延时
{
uchar x,j;
for(j=0;j<i;j++)
for(x=0;x<=148;x++);
}
/********************************************************************
* 名称 : Init()
* 功能 : 初始化,晶振11.0592,波特率9600,使串口中断,同时定时器0控制PWM
* 输入 : 无
* 输出 : 无
***********************************************************************/
void Init(void)
{
TMOD = 0x22;
PCON = 0x00;
SCON = 0x50;
TH0=0x9b;
TL0=0x9b;
TH1 = 0xFd; //设置波特率 9600
TL1 = 0xFd;
TR1 = 1; //启动定时器1
ET0=1;
TR0=1;
ES = 1; //开串口中断
EA = 1; //开总中断
}
void motorL( char speed)
{
m1=abs(speed); /* 取速度的绝对值 */
if(speed>0)
{
s1=0;
s2=1;
}
else
{
s1=1;
s2=0;
}
}
void motorR( char speed)
{
m2=abs(speed); /* 电机2的速度控制 */
if(speed>0)
{
s3=0;
s4=1;
}
else
{
s3=1;
s4=0;
}
}
void GO(void)
{
{
motorL(100);
motorR(100);
}
}
void BACK()
{
{
motorL(-100);
motorR(-100);
}
}
void TR(void)
{
{
motorL(-20);
motorR(20);
}
}
void TL(void)
{
{
motorL(20);
motorR(-20);
}
}
void STOP(void)
{
{
s1=1;
s2=1;
s3=1;
s4=1;
}
}
void main()
{
Delay_1ms(100);
Init();//初始化
while(1)
{
switch(Buffer[0])
{
case 1:STOP(); break; //
case 4:GO(); break;
case 5:TL(); break; //
case 7:BACK();break;//
case 6:TR(); break; //
default:break;
}
}
}
void Com_Int(void) interrupt 4
{
EA = 0;
if(RI == 1) //当硬件接收到一个数据时,RI会置位
{
Buffer[0] =SBUF - 0;
RI = 0;
}
EA = 1;
}
void timer0() interrupt 1 /* T0中断服务程序 */
{
if(t==0) /* 1个PWM周期完成后才会接受新数值 */
{ tmp1=m1;
tmp2=m2;
}
if(t<tmp1) en1=1;else en1=0; /* 产生电机1的PWM信号 */
if(t<tmp2) en2=1;else en2=0; /* 产生电机2的PWM信号 */
t++;
if(t>=100) t=0; /*1个PWM信号由100次中断产生 */
}
结束语
Android手机蓝牙遥控赛车硬件和软件都不算太难,制作下来成本也不贵,如果有现成的玩具车,50块钱就能搞定,但是可玩性比较高,有人会问有遥控器用着,干嘛非要拿着手机玩,但我想说的是我们喜爱电子,通过DIY,我们喜欢这种成功的乐趣。我也希望更多爱好者能改进,使可玩性进一步提高。我则希望有做软件的将蓝牙小车这个软件在进行改进,现在这个软件点一下前进按纽就一直前进,如果点一下就能动一下,手离开屏幕小车就停止,这样体验会更好一些。如果谁有同样的软件只需要将主函数里面的switch语句和Buffer[0] = SBUF - 0; 稍微修改就能用自己的软件来控制,希望能给爱好者们带来乐趣。
关注本公众号将得到各系列车型电控电机拆解报告的PDF文档
转发并回复:“电控”将得到宝马、奥迪、特斯拉等拆解报告的PDF文档
转发并回复:“功能安全”将得到功能安全相关资料
转发并回复:“成本分析”将得到多家电机电控的成本分析报告
转发并回复:“蓝牙赛车”将得到本文相关程序源码和app安装包
未完待续……