聂茹
遥控小车是玩具市场一种很常见的玩具,但是,每个小车都有自己特定的遥控器,原装遥控器坏了很难与其它型号的进行匹配。现在手机使用十分普遍,如果利用手机这个平台,通过软件编程,通过蓝牙来控制我们的玩具小车[1-2],可以很方便的在一个硬件平台实现多种小车的遥控器。 因此,本论文先设计一种手机对智能遥控车的控制方案,利用本系统的控制模块可扩展至对所有家电的控制。
Andriod是一个完全开放的标准平台,在2007年11月5日这天,谷歌公司正式向外界展示了这款名为Android的操作系统,本程序是基于Android 2.1系统,所用开发工具为Eclipse集成开发环境,Eclipse是著名的跨平台的自由集成开发环境,在此开发环境下开发软件非常的方便。
本次设计要求实现一个手机可以远程通过蓝牙控制小车的前进、后退、左转和右转。
本设计是以 AT89C52单片机为核心,以设置手机界面来设置前进、后退、左转、右转、停止等功能。单片机控制电机驱动来控制电机的正反转以实现小车的前进、后退、左转、右转、停止。HC-06为蓝牙接收模块,通过与手机端的蓝牙进行连接配对,从而接收从手机端发送过来的动作指令。接收到的指令再传给单片机,单片机通过分析传递过来的指令不同,而跳转到不同的子程序来控制电机驱动,从而实现小车的前进、后退、左转、右转、停止等不同的动作。电源提供给单片机5V直流电,L298需要从外部接两个电压,一个是给电机的,另一个给L298芯片的[3]。
本系统的系统框图如图1所示:
图1 系统框图
整个系统的硬件可以分为4个模块:电源电路、单片机最小系统、电机驱动模块、蓝牙模块。电源电路为整个系统供电,包括单片机AT89C52、电机驱动、蓝牙模块、及其他外围电路。电源电路分两个部分:(1)接外部电源给电机供电;(2)由4节干电池作为电源,给系统供电,以确保单片机、电机驱动、蓝牙模块的正常运行。在电源电路给系统供电时,绿色指示灯点亮,只是当前供电正常。单片机最小系统部分是整个系统的智能控制部分,也是整个系统的核心部分。电机驱动模块L298需要从外部接两个电压,一个是给电机的,另一个给L298芯片的[4]。
单片机的最小系统就是让单片机能正常工作并发挥其功能时所必须的组成部分,也可理解为是用最少的元件组成的单片机可以工作的系统。对51系列单片机来说,最小系统一般应该包括:单片机、时钟电路、复位电路、输入/输出设备等[5-6]。
L298是SGS公司的产品,比较常见的是15脚Multiwatt封装的L298N,内部同样包含4通道逻辑驱动电路。可以方便的驱动两个直流电机,或一个两相步进电机。L298N芯片输出电压最高可达50V,可以直接通过电源来调节输出电压;电路简单,使用比较方便。1脚和15脚下管的发射极分别单独引出以便接入电流采样电阻,形成电流传感信号。L298可驱动2个电动机,OUT1、OUT2和OUT3、OUT4之间可分别接电动机,本实验装置我们选用驱动一台电动机。5、7、10、12脚接输入控制电平,控制电机的正反转。EnA、EnB接控制使能端,控制电机的停转。
本模块分主机和从机,主机能和从机配对通信,从机与从机之间或主机与主机之间不能通信,从机能和电脑、手机等的蓝牙配对通信,购买时默认为从机。在做智能小车控制时,蓝牙模块主要是实现接收从手机端发送过来的指令,所以我们需要的是从机模块。蓝牙串口在模块功能上,偶数命名的互相兼容,从机命名的也互相兼容,也就是说,HC-04与HC-06,HC-03与 HC-05在功能上是兼容的。HC-04与HC-06是比较早的版本,用户不可以自己切换主机或者从机,AT指令集很少,包括修改蓝牙名(限于从机),修改密码,修改波特率,询问版本号等几个基本功能。在本次设计中我们只需实现简单的通信,因此选用 HC-06模块。HC-06模块只记忆最后一次配对过的从机,并只与该从机配对,直到KEY(26脚)高电平触发时放弃记忆,26脚默认应该为低电平。
在本次设计中,主程序主要是在单片机的控制下,对蓝牙模块输入的信息进行存储分析,来控制电机驱动,以达到控制小车的前进、后退、左转、右转。在这个过程中,单片机首先进行初始化,包括设置单片机各个端口的方向,各个变量的初始化,以及单片机振荡频率的校准等。单片机定时对蓝牙模块串口读数据,如果串口的数据读出,则对读出的数据进行分析,读出的数据如果为 A、B、C、D则分别对应小车的前进、后退、左转、右转。
本程序是基于Android 2.1系统,所用开发工具为Eclipse集成开发环境,Eclipse是著名的跨平台的自由集成开发环境(IDE)。最初主要用来Java语言开发,但是目前亦有人通过插件使其作为其他计算机语言比如 C++、Python和Android的开发工具,在此开发环境下开发软件非常的方便。首先设计本系统手机端软件的程序界面,为了尽快实现程序的功能,本程序没有对软件界面设计做特别美化的设计,仅包含我们所用到的几个按钮和图形显示,以实现我们的功能为最大目标。
(1)手机界面程序设计
在设置手机界面的时候,在Eclipse集成开发环境下,首先,新建一个 android项目工程,兴建路径是File—New—android project—project name,选择 android 1.6版本,工程名命名为Bluetooth-car,选择Create Activity,则自动创建了一个Activity。手机界面图如图2所示:
图2 手机界面图
(2)手机监听程序设计
在Eclipes开发平台上,首先在Layout文件中采用相对布局的形式设计完成手机界面以后,就要考虑为我们的每个Butten按键绑定监听程序,以实现在每个按键按下时,就能通过手机蓝牙发送相应的数据到小车蓝牙接收模块。首先在Layout文件中,每添加一个控件,都会为这个控件设置一个ID,(如android:id="@+id/button1"),然后在R.JAVA文件就会自动生成一个ID地址。然后在主程序里面编写监听程序,当按键按下的时候,通过监听按键的ID地址的不同,采用switch结构,跳转到不同的case里,向小车蓝牙模块发送不同的数据。在程序里直接写进小车蓝牙模块的蓝牙地址(00:12:10:31:01:70),当程序开始运行时,将会自动搜索该地址的蓝牙芯片,当进行过一次配对连接以后,将会记忆该地址,以后每次只要打开手机界面,开始运行时就会自动进行搜索配对连接好[7-8]。
根据电路原理图、实物 图把电路板实物做出来后,下一步就是电路板调试。电路板调试是最关键的一步,前面所做的电路设计的成功与否就是在调试步骤里体现的。本系统的调试主要分为硬件调试、软件调试和系统整体调试等3大部分。
硬件电路调试包括独立元件的检测、单片机最小系统的调试、电源电路的调试、驱动模块的调试4部分。下面,主要介绍驱动模块的调试情况。驱动模块为驱动电机的芯片,L298需要从外部接两个电压,一个是给电机的,另一个给L298芯片的。首先检查驱动芯片与单片机的各个连线是否都正确以后,给芯片通上电源,单片机指示灯点亮以后。运行单片机上的程序,通过单片机 P2口的数据变化来控制L298的IN1、IN2、IN3、IN4的电平的高低。L298输入端的高低电平的变化,通过输入端的LED灯的亮灭来显示。当运行前进程序的时候,IN1、IN2、IN3、IN4的值为1、0、1、0,分别点亮LED1和LED3,左右电机都正转,实现小车前进;运行左转程序的时候,IN1、IN2、IN3、IN4分别为 1、0、0、1,分别点亮 LED1、LED4,左电机正转,右电机反转,实现小车左转;运行右转程序的时候,IN1、IN2、IN3、IN4的值为0、1、1、0,点亮LED2,LED3,左电机反转,右电机正转,实现小车右转;运行后退程序的时候,IN1、IN2、IN3、IN4 的值分别为 0、1、0、1,分别点亮 LED2、LED4,左右电机都反转,实现小车后退。通过调试电机驱动模块能实现基本的功能。其调试图如图3~图6所示:
图3 小车前进指示图
图4 小车后退指示图
图5 小车左转指示图
图6 小车右转指示图
将做好的工程添加进入Eclipes开发环境中,检查各个文件夹下面的程序有没有出现打红色X的问题以及警告,点开下方的problem的文件,检查该工程有没有出现问题,当排除了所有的问题以后。配置一个2.2版本的模拟器,然后启动模拟器,在模拟器上运行该工程,在模拟器上将会出现已经做好的手机界面,运行完成,调试成功。然后将手机连接到电脑上,打开安卓手机的USB接口。接下来点击运行整个工程项目,在手机上出现前面那个做好的蓝牙小车控制界面。点击各个按钮,都无问题,证明该JAVA程序没有问题。
蓝牙控制小车的硬件模块和软件模块分别调试通过后,接下来就可以进行系统的整体测试。首先检查各个模块之间,以及电机驱动与电机的连接都没有出错的情况下,打开给各个模块提供的5V电源以及打开给电机提供的另一个6V电源。此时最小系统模块指示灯点亮,表示单片机供电正常,蓝牙模块指示灯开始闪烁,表示蓝牙模块也供电正常。此时打开安卓手机的蓝牙,搜索该蓝牙芯片,进行配对。然后打开我们做好的手机界面,当界面打开之后,开始自动搜索蓝牙芯片的地址进行连接,当蓝牙芯片的指示灯由闪烁转变为常亮以后,表示蓝牙配对连接成功。在刚开始的时候调试的时候遇到了一些问题,在电机驱动方面,当在手机端的界面上点击前进、后退、左转、右转按钮的时候,蓝牙模块能接受手机端发送的字符 A、B、C、D的ASCII码值,并且能够通过串口相应的传递给单片机,单片机通过分析串口传过来的数据,改变P2口的值分别为65、66、67、68,来控制电机驱动的输入端IN1、IN2、IN3、IN4。相应的电机驱动端的四个指示 LED灯都能根据数据的变化采取不同的亮和灭的组合情况,来相应控制小车的前进、后退、左转、右转。
本文阐述一种通过手机蓝牙遥控小车行走的软、硬件设计。手机蓝牙作为客户端,小车上的蓝牙模块 HC-06作为服务端。客户端采用Eclipse开发环境,JAVA编程,服务端采用单片机控制。双方通过串口进行通信,单片机驱动直流电机控制小车行动。实验结果表明,小车可以接收手机遥控信号并灵活地进行前行、倒退、左转、右转和停止等功能。
[1] 符强,任风华.基于手机蓝牙的遥控小车的设计[J].现代计算机(专业版),2011, (31):77-79.
[2] 林长青,成海量.基于Android系统和蓝牙通信的手机遥控车设计[J].山西电子技术,2012, (03):56-58.
[3] 孙玉艳.实现PC机与单片机的数据通信与控制[J].广东白云职业技术学院广州白云工商高级技工学校学报,2002,(04) : 46-49.
[4] 李学军.如何用MCS-51单片机扩展串口进行通讯[J].宁夏机械,2003,(2) :24-26.
[5] 张毅刚,彭喜元,彭宇.单片机原理及应用[M].北京:高等教育出版社,2010.
[6] 李艳红. 单片机 I/O口不宜用作直接驱动出口[J].电站设备自动化,2003,(2) :20-23.
[7] 张桂珠,刘丽,陈爱国.Java面向对象程序设计[M].北京:北京邮电大学出版社,2007.
[8] Ken Dunham, Mobile Malware Attacks and Defense[M],2008:162.