注:图片不知道怎么显示,可以去我空间的相册里查看图片。
小车分几部分组成:1、安卓手机控制软件:该软件可以通过蓝牙发送前进、后退、左转、右转指令(ASCII码)。2、蓝牙模块:通过与手机连接后,可以接收到手机发送的指令,采用HC_06模块。3、单片机最小系统:蓝牙模块将收到的指令发给单片机,单片机将其解码为二进制数。4、驱动模块:单片机将二进制指令通过IO口发送给驱动模块,驱动小车运动。5、小车底座:具有四个减速电机和轮子的底座。
1、手机控制软件
:
网上下载的,想要无插件的可以留邮箱。
当我们用手按下前进时,手机会通过蓝牙以ASCII码的形式发送一个字符“A”,释放时会发送一个字符“a”;
按下后退时,手机会通过蓝牙以ASCII码的形式发送一个字符“D”,释放时会发送一个字符“d”;
按下左转时,手机会通过蓝牙以ASCII码的形式发送一个字符“C”,释放时会发送一个字符“c”;
按下右转时,手机会通过蓝牙以ASCII码的形式发送一个字符“B”,释放时会发送一个字符“b”;
2、蓝牙模块时HC-05/06。
此模块使用3个管脚,VCC和GND分别接电源高、低电平,TXD管脚接单片机的RXD管脚。蓝牙模块与手机连接后,可以通过手机发送ASCII,蓝牙模块接收到后,发送给单片机的RXD脚,通过程序将数据以二进制的形式发送给驱动模块,供小车驱动。发送波特率为9600。八位数据位,无奇偶校验。
3、最小系统。
板子是自己焊的,5个1.5v的电池供电,一方面7.5v给驱动芯片L298N供电,令一方面经7805降压后给单片机和蓝牙模块供电(此时驱动效果不明显,可以在另用一个9V电源,为L298n供电)。其中所有管脚已经引出,令PO管脚接了10K的上拉电阻。晶振旁边的电容在板子另一面,是两个贴片电容。虽说线路简单,可也是双面板,呵呵。L298N资料网上有很多。。。
程序:
#include<reg52.h>
#defineucharunsignedchar
uchara;
//串口初始化
voidSerial_Init()
{
TMOD=0x20; //方式2,8位自动载入
TH1=0xfd;
TL1=0xfd;//初值,9600波特率
TR1=1;
SCON=0x50;//8位异步收发,波特率可变
EA=1;//开总中断
ES=1; //开串行中断
}
voidSerial()interrupt4
{
ES=0;
RI=0;
a=SBUF;
switch(a)
{
case'A'://前进
P0=0xf5;//P0的低四位控制驱动芯片,当接收到0101时,两个轮子正转,故向前,以下同。
break;
case'B'://右转
P0=0xf9;
break;
case'C'://左转
P0=0xf6;
break;
case'D'://后退
P0=0xfa;
break;
case'a':
P0=0x00;
break;
case'b':
P0=0x00;
break;
case'c':
P0=0x00;
break;
case'd':
P0=0x00;
break;
default:
P0=0xff;
}
ES=1;
}
voidmain()
{
P0=0xff;
Serial_Init();
while(1);
}
程序很简单,利用串口发送数据。
4、驱动模块:
左边的四根线是输出,要连接到下车的马达上,右边的四根线是输入,连接单片机的对应管脚。
5、底座
左边的两个电机并联,右边的两个电极并联。
遇到的问题:
1、在做最小系统的板子时,自己焊的是12M的晶振,但是程序用的是11.0592M晶振写的,所以当蓝牙模块连接上后,单片机却不能收到指令,后来换成11.0592M晶振才得以解决这个问题。
2、开始所有的供电包括驱动芯片L98N的VS管脚用的也是5V供电,连接好后发现不能带动电机。用万用表测量输出管脚电压可以达到4点几伏,但是当连接上电机后,电压为0,当用7.5V的电源给VS管脚供电后,问题得以解决。