本帖最后由 cwbwss 于 2013-1-9 18:29 编辑
安卓
手机遥控小车,顾名思义就是用安卓手机来控制小车前后左右运动。给大家展示一个既可触摸按键控制又可重力感应控制的Android手机软件和DIY小车,废话少说,上图:
Android上位机软件运行界面截图
触摸按键控制模式
重力感应控制模式
更换背景
在手机上的运行图
上DIY小车图片
看完图片还不过瘾,上视频:
[media]http://v.youku.com/v_show/id_XNDgyNDU2NDI4.html[/media]
看完了,感觉还行吧!{:soso_e104:} 不要羡慕,你也可以,下面来一起DIY。
先来看一看下位机也就是小车部分。既然是小车,底盘车轮也就少不了了。
下面是这辆车的底盘
底盘正面
底盘反面
除了小车底盘,我们还得有一个
单片机最小系统来控制吧
正面
需要说明一下的是,别以为它没有晶振,没有电容等——它们都在单片机下面藏起来了。
但这的确是一个“最小系统”,除了I/O口引出了外,什么都没有扩展。
PCB底板,铜线都氧化了{:soso_e115:}
最小系统的
电路应该都知道
底盘和最小系统搞好了,小车还是跑不起来——缺少电机驱动。
单片机的I/O是驱动不了电机的,我选用的是L298N电机专用驱动芯片。
下面是我的电机驱动模块PCB
时间有点长了,看起来不是很好看。但PCB布线排版还可以吧!
底面涂了一层绿油,但没有涂匀。
下面是这个模块的电路图
L298用起来蛮简单,网上的资料很多。但若嫌电路麻烦,
对驱动能力要求又不高的情况下你可以试一下ULN2003驱动芯片
很简单。
再就是
电源部分,我用的是两块手机电池,串联起来用的,一路经7805降压后供
单片机用,一路直接给电机驱动模块供电。
至此,小车的基本部分搭建完毕。下面看一下重量级部分——蓝牙。
说道蓝牙,大家可能觉得很高深,害怕。的确,蓝牙技术是一门高深的技术,蓝牙的
通信协议让人头疼。
但不要害怕,我们是不接触蓝牙底层协议的,况且现在的模块技术是很发达的,HC06——蓝牙转串口模块
看图
它将复杂蓝牙通信协议直接变成了单片机上拥有的,我们也熟悉的RXD TXD串口通信。高兴了吧!
我们只需接3根线就行了——VCC GND就不说了。大家注意一下它的RXD要接51单片机的P3.0,也就是RXD.
为什么RXD接RXD,不是接TXD吗?有人会问。大家注意一下,这个模块上的RXD的意思是告诉你,外部的RXD接我这儿,不是说这个引脚就是RXD,它其实是TXD. TXD也是一样的,要注意一下。
我们只接3根线,TXD不接,因为我们用手机发送指令,蓝牙模块只负责接收就行。STATE EN这两引脚也不用管。
关于这个模块的其它用法,想更改设置波特率,更改设备名称等,网上都有相应资料,解决不了的可以加QQ:1399836578
到这儿,自己将上面几个模块组装一下,所有的硬件部分就完成了。
下面来看软件部分。软件部分又分为两个部分——下位机(单片机程序)和上位机(Android手机控制端);
由于下位机是根据上位机发送的指令来编程的,我们就先看看上位机部分
上位机截图上面已给出了。
由于上位机的编写涉及到Java语言编程知识和Android系统知识,不是十句八句能说清楚的,在这儿就不讨论它是怎样编写出来的。待会儿我会给出 它的APK安装包,下载到手机上直接安装就行。我们先对着上图说说它是怎么工作的。
当我们用手按下 前进 时,手机会通过蓝牙以ASCII码的形式发送一个字符“A”,释放时会发送一个字符“a”;
当我们用手按下 后退 时,手机会通过蓝牙以ASCII码的形式发送一个字符“D”,释放时会发送一个字符“d”;
当我们用手按下 左转 时,手机会通过蓝牙以ASCII码的形式发送一个字符“C”,释放时会发送一个字符“c”;
当我们用手按下 右转 时,手机会通过蓝牙以ASCII码的形式发送一个字符“B”,释放时会发送一个字符“b”;
当使用重力感应模式是,也是根据手机的状态来发送这几个字符的。
同时我们看他查询得ABCDabcd 八个字符的ASCII码值:A-65 a-97 B-66 b-98 C-67 c-99 D-68 d-100.
有了这些,我们就知道怎样写单片机程序了——使用51单片机的串口通信。打开串口中断,我们可以在串口中断服务函数中接收到字符后用 switch() 语句来判断接收到的字符。例如
case:65 break; 表示接收到的字符是A,也就是按 前进 时发送过来的,这时就可以在 break前写上小车前进的代码;
case:97 break;表示接收到的是a,即松开 前进 时发送出来的,既然松开了 前进 按钮 ,就可以再break前加上小车停止的语句。左转,右转也是一样的。至于小车前进后退左转右转的代码,要根据你自己的电机机驱动来写。
下面是我的下位机程序,电机驱动代码要自己写,这个只供参考
#include
#define uchar unsigned char
#define uint unsigned int
uchar a;
void init()
{
TMOD=0X20; //设置定时器1为方式2
TH1=0xfd ;
TL1=0xfd ; //装初值
TR1=1; //启动定时器1
REN=1; // 使能接收
SM0=0;
SM1=1; //设置串口为工作方式1
EA=1; // 打开总中断开关
ES=1; // 打开串口中断开关
}
void main()
{
init();
while(1);
}
void ser() interrupt 4
{
ES=0;
RI=0; //将接受中断标志位清0;
a=SBUF; //将接受到的数据赋值给a
switch(a)
{
case 65: P2=0X17; break; // 发送的是A 前进指令
case 66: P2=0X1B; break; // 发送的是B 右转指令
case 67: P2=0X27; break; // 发送的是C 左转指令
case 68: P2=0X2B; break; // 发送的是D 后退指令
case 97: P2=0X00; break; //发送的是a 停止指令
case 98: P2=0X00; break; //发送的是b 停止指令
case 99: P2=0X00; break; //发送的是c 停止指令
case 100: P2=0X00; break; //发送的是d 停止指令
//P2口是我的电机驱动的控制端
default: break;
}
ES=1;
}
整个过程讲解完毕,想DIY的赶快行动起来吧!(有问题可以加QQ:1399836578)
差点忘了,下面给出编写的安卓手机控制端(上位机)软件
先说一下手机(必须是安卓手机)控制端使用方法
先用手机的蓝牙设置搜索到你的小车的蓝牙,并完成配对。
在手机上打开控制端点击 开始 后会弹出已配对的蓝牙设备,如果是你的小车上的蓝牙模块,就点击 连接小车,完成连接,
在完成连接前,HC06蓝牙转串口模块上的LED等会不停的闪烁,连接完成后,LED灯长亮,停止闪烁。
下面是安卓手机控制端软件和一些文档的资料包
最近,部分网友反映买的蓝牙转串口模块买成了主机,结果不能用。在这里说明一下,这种模块有主从机之分,
我们要选购从机,主机与手机不能通信的。对于疏忽表示歉意。
最后祝想DIY的同学早日成功!