DIY手机遥控小车
来源:互联网 发布:加工中心编程软件下载 编辑:程序博客网 时间:2024/05/16 23:58
项目背景
大家好,我是小疯。最近一位朋友的孩子在视频网站看到了手机遥控小车,喜欢的不得了,缠着小疯的朋友做一个。可是小疯的朋友早就把这些知识还给大学老师了,哪里做的出来哦。于是来向小疯求助。小疯花了一些时间,动手做了一个手机遥控小车送给朋友的孩子。孩子非常高兴,小疯的朋友也非常的感激。小疯顺便把整个过程详细记录下来,给需要的朋友们做一个参考。
项目成果
小疯先给大家看看做好后的手机遥控小车的成果。如果你心动了,那就跟着小疯一起DIY吧。下面是腾讯视频中的项目成果。
http://static.video.qq.com/TPout.swf?vid=e0317coesev&auto=0
http://v.qq.com/x/page/e0317coesev.html
项目原理
手机遥控小车最关键的其实是数据的通信。那么目前主流的手机和单片机通信方法其实也就是蓝牙和wifi两种方式。wifi就是通过网络来传输数据,这种方式可以传输比较大的数据量,适合视频啊、音频之类的。而蓝牙相对轻量级一点,一般近距离的传输心灵以及小数据量的传输比较方便。另外就是wifi的配置相对复杂一些,而且还得需要一个无线路由器才能够做数据通信,所以最终小疯选择了蓝牙方式。一方面蓝牙的硬件成本较低,使用简单,比较适合应用于我们的手机遥控小车项目。由于手机自带蓝牙功能,所以手机这边不需要增加硬件。而小车那边需要接受蓝牙,那么需要一个蓝牙模块,小疯选择了蓝牙串口模块,该模块可以将蓝牙数据转换为串口数据和单片机通信,非常的方便单片机接收。下面这张图就是整个手机遥控小车的原理图了。
另外,我们需要制定以下蓝牙的控制指令。只有约定好了控制指令,单片机才能按照手机的目的,正确的驱动小车运动。比如可以约定“0”表示停止;“1”表示前进等等。为了增强指令的抗干扰性以及后期的扩展,小疯制定了8个字节的指令控制码,具体来说就是:
“00000000”:停止运动
“00010000”:停止前进或者后退
“00020000”:前进
“00030000”:后退
“00040000”:停止左转或者右转
“00050000”:左转
“00060000”:右转
项目材料
了解了项目的原理之后,就可以开始准备材料了。好兴奋哦!我们需要小车底盘一个,某宝上面多的是哦;电池模块(小疯喜欢使用充电宝,容量大,充电快,吼吼);单片机开发板(51、avr、auduino通通都可以啦);电机驱动模块(LM298、911也都可以);蓝牙串口模块(就是用来手机和小车通信的哦!)。下图是小疯使用的原材料。由于小疯之前做过“wifi视频小车的时候”,焊接过一块51单片机和电机驱动的集成板,所以这里就没有再使用单片机开发板加电机驱动模块了,但是编写代码都是一样的。
项目代码
在屡清思路以及准备好材料之后,就可以开始快乐的编程了。首先从简单的单片机编程开始吧。小疯用的是51单片机。蓝牙模块通过串口单片机连接,电机驱动模块通过P3-2、P3-3、P3-4、P3-5四个IO口控制两个电机。总的来说单片机这块的代码还是比较简单的,主要是一个蓝牙的指令接收和执行。这里只贴出主流程代码,详细代码请从后面的“项目资源”中下载。
void main()
{
char szCommd[16]={0};//命令字符串
unsignedint iCommdType=0; //命令类型
unsignedint iCommdValue=0;//命令值
char cRet=0;
UART_INIT(); //串口初始化
CarInit_PWM();//小车控制初始化
CarStop_PWM();//先让小车停止运动
while(1)
{
//获取串口传来的命令(蓝牙模块接受到的命令)
while( WaitForChars(8,szCommd)==0);
//从串口命令中解析出命令号
iCommdType = GetCmdType(szCommd);
//根据命令号控制小车运动
switch(iCommdType)
{
//前进命令处理
case CMD_GO_FORWARD:
CarGoForward_PWM();
break;
//后退命令处理
case CMD_GO_BACK:
CarGoBack_PWM();
break;
//左转命令处理处理
case CMD_TURN_LEFT:
CarLeft_PWM();
break;
//右转命令处理
case CMD_TURN_RIGHT:
CarRight_PWM();
break;
//停止命令处理
case CMD_STOP_ALL:
CarStop_PWM();
break;
}
}
}
下面开始编写手机端的代码喽!小疯是个屌丝程序员,一直都没有用过iphone手机,所以下面的代码是小疯编写的android手机操作端,如果是iphone手机的朋友,就只能请大牛来了(吼吼,好凄凉的程序猿!!!)。手机端其实也不复杂,就是判断手机的按键,然后按照事先约定的蓝牙指令发送蓝牙指令就可以了。小疯还是贴出主要流程的代码。
/*触摸屏处理流程*/
@Override
publicboolean onTouchEvent(MotionEvent event)
{
float PushX= event.getX();
float PushY= event.getY();
if(event.getAction()==0)//手按下
{
//获取当前手指触摸的位置
m_iBtnPushDetect=
TouchScreen.PushDetect(
m_Activity,m_iWhichWidget,
PushX,
PushY);
//判断手指触摸的是哪个区域
switch(m_iBtnPushDetect)
{
//前进按钮
case TouchScreen.PUSH_GO:
m_Activity.m_BTServer.BTS_SendDates("00020000");
break;
//后退按钮
case TouchScreen.PUSH_BACK:
m_Activity.m_BTServer.BTS_SendDates("00030000");
break;
//左转按钮
case TouchScreen.PUSH_LEFT:
m_Activity.m_BTServer.BTS_SendDates("00050000");
break;
//右转按钮
case TouchScreen.PUSH_RIGHT:
m_Activity.m_BTServer.BTS_SendDates("00060000");
break;
//软件信息按钮
case TouchScreen.PUSH_MOREINFO:
m_iWhichWidget = WIDGET_MOREINFO;
break;
//退出程序按钮
case TouchScreen.PUSH_EXIT:
m_iWhichWidget = WIDGET_EXIT;
break;
}
}
elseif(event.getAction()==1)//手弹开
{
m_iBtnPushDetect= TouchScreen.PUSH_NONE;
m_Activity.m_BTServer.BTS_SendDates("00000000");
postInvalidate();
}
returntrue;
}
项目资源
好了,上面就是整个手机遥控小车的DIY过程了。单片机源码以及手机控制app小疯已经放在了百度云盘上面了。有需要的可以下载来试试哦!
http://pan.baidu.com/s/1eR3v51g
解压密码为15158106211
- DIY手机遥控小车
- 低成本DIY视频预览遥控小车
- 手机蓝牙遥控小车的制作
- 安卓手机遥控蓝牙小车
- 【DIY】远程手机遥控车 androidbot
- 遥控小车
- 无需编程,DIY自己智能小车的Android蓝牙遥控软件(一)
- 无需编程,DIY自己智能小车的Android蓝牙遥控软件(二)
- 无需编程,DIY自己智能小车的Android蓝牙遥控软件(三)
- 无需编程,DIY自己智能小车的Android蓝牙遥控软件(一)
- 无需编程,DIY自己智能小车的Android蓝牙遥控软件(一)
- 无需编程,DIY自己智能小车的Android蓝牙遥控软件(一)
- 无需编程,DIY自己智能小车的Android蓝牙遥控软件(二)
- 无需编程,DIY自己智能小车的Android蓝牙遥控软件(三)
- 红外遥控智能小车
- arduino 红外遥控小车
- 树莓派遥控小车
- DIY智能小车
- hdu-1251统计难题-字典树的简单应用
- MIDI文件(2)
- 更改工程(项目)名称,对话框资源ID、类名,控件ID、变量名、类名
- 设计模式之状态模式
- I
- DIY手机遥控小车
- 转载小居的文章:http://liunian.info/css-specificity.html
- POJ3581——Sequence(后缀数组)
- JAVA通过java.net发送httpGet请求
- 《Windows环境下32位汇编语言程序设计(第2版)》-chapter4-9部分知识点
- socket端口数量限制问题
- 【leetcode80】Reverse Vowels of a String(元音字母倒叙)
- switch...case和if...else效率比较
- Binary Numbers