DIY手机遥控小车
2016-07-31 17:02
183 查看
项目背景
大家好,我是小疯。最近一位朋友的孩子在视频网站看到了手机遥控小车,喜欢的不得了,缠着小疯的朋友做一个。可是小疯的朋友早就把这些知识还给大学老师了,哪里做的出来哦。于是来向小疯求助。小疯花了一些时间,动手做了一个手机遥控小车送给朋友的孩子。孩子非常高兴,小疯的朋友也非常的感激。小疯顺便把整个过程详细记录下来,给需要的朋友们做一个参考。
项目成果
小疯先给大家看看做好后的手机遥控小车的成果。如果你心动了,那就跟着小疯一起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吧。下面是腾讯视频中的项目成果。
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视频预览遥控小车
- 【STM32 .Net MF开发板学习-20】蓝牙遥控智能小车(手机模式)
- 无需编程,DIY自己智能小车的Android蓝牙遥控软件(一)
- 手机蓝牙遥控小车的制作
- 无需编程,DIY自己智能小车的Android蓝牙遥控软件(一)
- 无需编程,DIY自己智能小车的Android蓝牙遥控软件(二)
- 【STM32 .Net MF开发板学习-20】蓝牙遥控智能小车(手机模式)
- 无需编程,DIY自己智能小车的Android蓝牙遥控软件(三)
- 无需编程,DIY自己智能小车的Android蓝牙遥控软件(一)
- 无需编程,DIY自己智能小车的Android蓝牙遥控软件(二)
- 【STM32 .Net MF开发板学习-20】蓝牙遥控智能小车(手机模式)
- 无需编程,DIY自己智能小车的Android蓝牙遥控软件(三)
- 蓝牙遥控小车设计(三)——Amarino和 Android手机重力感应控制
- 扫二维码,用手机遥控小车
- 无需编程,DIY自己智能小车的Android蓝牙遥控软件(一)
- 基于树莓派3B+,一个可以遥控的小车(一)
- Linux手机DIY.内核初探.系统后台启动简单介绍
- Linux手机DIY.Shell应用扩展一.随机来电铃声(E680系列)
- XP+Android手机DIY家庭视频点播系统-历时3周全力打造吊丝的幸福生活
- Android蓝牙遥控小车软件