DIY手机遥控小车

项目背景

大家好,我是小疯。最近一位朋友的孩子在视频网站看到了手机遥控小车,喜欢的不得了,缠着小疯的朋友做一个。可是小疯的朋友早就把这些知识还给大学老师了,哪里做的出来哦。于是来向小疯求助。小疯花了一些时间,动手做了一个手机遥控小车送给朋友的孩子。孩子非常高兴,小疯的朋友也非常的感激。小疯顺便把整个过程详细记录下来,给需要的朋友们做一个参考。

 

项目成果

         小疯先给大家看看做好后的手机遥控小车的成果。如果你心动了,那就跟着小疯一起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

 

 

最近用51单片机写了一个最简单的蓝牙遥控智能小车,基本上榨干了51单片机的资源,用了定时器T1作为波特率发送器编写串口打印程序,接收串口蓝牙接收的信息产生中断,并且写了一个串口打印函数send()作为单片机操作响应返回给蓝牙发送端手机。定时器T0作为PWM发生使用,目的是作为舵机sg90控制信号,当时做一个蓝牙自怕用到,虽然小车没搭建舵机,但是可以方便扩展,也方便买家学习舵机PWM控制技术。 小车全身照如下: 全部零部件都是购买的配件:按照实物图购买响应的模块组装成小车,L298N,电源模块,电池夹和18650电池两个,电源变压器、51单片机最小系统板、HC05串口蓝牙模块、小车底座 单片机最小系统板彩图:某宝有卖很便宜 单片机最小系统板原理图: 小车是用安卓手机蓝牙调试助手用指令发送的形式来控制的,所以说是最简单的蓝牙遥控小车,呵呵。不过加上舵机和机械手和操控摇杆或者是手机控制app,就变得高端了,敬请期待。这个版本是免费的,但是功能还是很齐全和强大的,代码也写得通俗易懂,不拖泥带水。 下面是源码截图:(新鲜出炉) 手机app遥控效果如下:(买家注意了有车子返回响应的回复的) 感兴趣的买家可以找我私人定制功能之类的也是没有问题的。这款小车大概就这个情况了,敬请期待我更好的作品。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值