基于安卓重力感应控制的智能小车设计 作者:高闻灿 指导教师:张涛 摘要:机器人在近几年越来越流行,而传统死板的控制方式已经逐渐不能满足要求。本文借 助智能手机,提出了一种便捷、高效、通用性强的控制方式---基于安卓手机的多功能控制智 能小车。系统由硬件和软件两部分构成,本文通过硬件和软件的全方位解析,详解介绍了通 过安卓手机重力感应控制小车、模拟摇杆控制小车和坐标式指令控制小车的具体实现方案。 关键词:重力控制; 智能小车; 安卓手机 A design of smart-car that controlled with Android phone’s accelerometer Student: Gao Wencan Adviser: Zhang Tao Abstract:The robotics have become more and more popular recent year, but the tradition control mode of it can no longer meet the demand because its rigidity and inadequate interchangeability. This paper proposes a Convenient, efficient and universal control mode based on Android phone to control the smartcar. The system consists of hardware and software systems. This paper analyses the systematic solutions from both hardware and software,and explain the how to build the system and control it in the way of accelerometer controls, analog controls and coordinate frame contrlos. Keywords: Accelerometer controls; Smartcar; Android phone; 智能小车,也叫作轮式机器人,我国的相关研究 起步较晚,近几年发展较为迅速[1]。随着智能设备的 普及和物联网的进步,人们已经不满足于现目前对于 机器人和智能小车的控制方式,人们更倾向于利用现 在的智能设备和互联网来实现对智能小车的多样化控 制。利用智能手机的应用支持平台,可以让小车控制 的通用性、 互换性和人机交互更加强劲和友好。 同时, 无线通信技术的发展为远程和无线控制机器人以及智 能小车提供了可能, 可以通过 WIFI、 蓝牙等非常成熟 的技术手段来传递信号 ,摆脱限制和束缚,随时随 地的实现控制。 [2] 实现人机交互;智能车则以一片单片机为控制核心, 电机、电机驱动和轮子构成移动机构,以充电电池作 为动力源实现执行各种动作。 图 1 系统设计方案 安卓手机作为人机交互界面和控制端,本设计利 用 Google 公司的 App Inventor 开发组件对软件进行编 程,实现利用手机内置陀螺仪、蓝牙等硬件实现与智 能车之间的通讯和控制。 智能小车本身也主要分为硬件和软件两部分。小 车硬件主要由:单片机处理器、电机、电机驱动、电 源、蓝牙模块几部分构成。 1 系统方案设计 在整个项目系统中,硬件作为基础设备,作为小 车的框架、动力和控制核心。系统主要由智能车和手 机端的软件两个部分组成,其中手机选择安卓系统的 智能手机, 在样机中使用了魅族 MX4 手机作为控制端, 口数据,即可得到智能手机发送过来的指令,实现无 2 系统硬件设计 2.1 主控芯片 智能车系统最重要的环节是准确的接收来自手机 控制端的命令,并根据命令去执行不同的动作。设计 中使用了 Arduino 平台作为主控芯片, 具有丰富的 I/O 接口,内置 A/D 转换器,能够高效、可靠的完成控制 任务。它是一款基于开放源代码的 USB 接口 Simple I/O 接口板(包括 12 通道数字 GPIO,4 通道 PWM 输 出,6-8 通道 10bitADC 输入通道) ,并且具有使用类 似 Java, C 语言的 IDE 集成开发环境[3]。 下表是 Arduino 的控制板的相关参数。 表 1 Arduiono 板子参数说明表 线通讯。 图 2 HC-06 蓝牙模块 2.3 电机驱动 Arduino 控制板是无法对电机直接驱动,所以在 硬件中需要电机驱动实现对电机的控制。本设计所使 用的电机驱动是 L298 模块,它是 SGS 公司的产品, 其 中 15 市 场 上 容 易 简 单 买 的 到 一 般 是 15 脚 的 Multiwatt 封装的 L298N, 内部包含了 4 通道逻辑驱动 电路,可以便捷、轻松的驱动 2 路电机[5]。考虑到对 小车模型的要求并不高,本设计使用一块驱动模块, 电机两两并联的方式实现四路电机驱动。 2.4 小车硬件电路连接 在各部分硬件准备好后,需要对小车进行电路连 接和组装并试验其可行性。 小车由一块 7.4V 锂电池进 行供电,L298N 板子上自带 5V 输出口,可以直接为 Arduino 供电,具体电路图如图 3 所示。 项目 核心处理器 工作电压 输入电压(推荐) 数字 I/O 脚口 模拟输入脚口 I/O 直流电流 3.3V 输出脚电流 3.3V 脚直流电流 工作时钟 2.2 无线通讯设计 参数 ATmega328 5V 7~12V 14 (其中 6 个提供 PWM 输出) 6 40mA 40mA 50mA 16MHz 手机对小车的控制需要摆脱有线的束缚,这就要 求手机与智能车可以通过有效、可靠的无线通讯连接 起来。市场上基本所有智能机都内置的无线 WIFI 和 蓝牙两种方式。所以只需要在智能车上安装 WIFI 模 块或者蓝牙模块,与智能手机互联通讯,即可实现远 程的控制。蓝牙模块相对于 WIFI 模块来说,在近距 离一对一通讯中更加稳定有效, 同时蓝牙具有体积小、 功耗低、通过调频技术可消除其他无线设备的干扰建 立临时性的对等连接速度快等优点 [4] 。本设计选用 HC-06 串口蓝牙模块来实现小车与手机之间的通讯。 HC-06 是一个蓝牙串口模块,有 4 个引脚,分别 是:VCC、GND、TX、RX。Arduino 与 HC-06 之间 可以通过串口连接, 由 Arduino 的 3.3V 输出引脚直接 给蓝牙模块供电。整个蓝牙模块封装后,与单片机之 间通讯完全遵守串口通讯协议。Arduino 只要监测串 图 3 小车电路图 3 系统软件设计 对机器人、智能车的控制方式有多种多样,但是 不同产品之间的通用性和互换性比较差,当控制器出 现了问题后想要找到替代品是非常麻烦的事情,甚至 往往需要重新定制相应的控制器。实际上我们手上的 智能手机就是一款高效、便捷和通用性强的控制器, 使用智能手机作为机器人的控制器,成本低廉、通用 性好[6],用户不需要特定的控制器和附加的硬件,只 需要打开手机下载相应的 App 程式就可以对智能车机 器人随心所欲的控制。考虑到智能车机器人在不同环 境和应用下的使用,本项目充分利用了智能手机内置 硬件的优势,对控制方式进行了多样化设计以适应不 同场合、不同环境下的控制:用户不仅可以使用模拟 摇杆控制小车的行进方向,还可以使用重力感应进行 控制, 增加了小车的易用性和控制的乐趣; 另一方面, 项目还设计了坐标式指令控制模式,只需要发送相应 的坐标,就可以让小车自主运动到相应位置,这样自 主式的运动也让智能车能够更好的在特定和复杂的环 境下使用和发挥。 3.1 MIT App Inventor 编程环境 安卓手机的开源特性让程序编写更加方便,而 Google 公司提供的 MIT App Inventor 更是为开发者提 供了一套便捷、方便的图形化程序编写工具[7]。它是 一款在谷歌浏览器下的云端开发工具,利用积木式的 编程理念,让困难和乏味的编程变得轻松易懂,甚至 没有很好编程基础的初学者都可以很快入门编写自己 的程序,也被称为傻瓜化开发工具[8]。 送相关控制指令; ②通过不同按键可以进入三种控制模式,分别是 摇杆、重力感应、坐标式控制; ③按键控制可以监测手机屏幕触点,根据触点的 不同方位定义传输协议和信息,并通过蓝牙发送控制 指令; ④重力控制模式可以根据内置陀螺仪监测手机翻 转角、俯仰角状态,定义相应的变量阈值,并通过蓝 牙发送相应控制指令; ⑤坐标指令发送式,能够通过窗口获取用户输入 的坐标值,根据输入坐标值的不同,循环发送前进、 后退、左转弯、右转弯等指令,直到小车运行到指定 位置; 根据设计要求,手机软件程序可分为:初始化模 块、手机蓝牙连接模块、摇杆控制模块、重力感应控 制模块、坐标式控制模块五个部分。其中初始化模块 用于检测手机陀螺仪、内置传感器等是否存在异常状 态,将全局变量、内部定时器等初始化;手机蓝牙连 接模块需要实现手机与小车的互联,同时需要对手机 进行初始化检查,能够发现并告知用户手机蓝牙的状 态,提醒用户打开蓝牙以正常工作。由于有 3 控制方 式,程序在控制启动前要求用户对控制方式进行选择 才可以开始操作,在选了任意一种控制方式后,可以 进行相关操作, 并随时可以返回并重新选择控制方式。 根据这样的思路,程序的总体框如图 5 所示。 图 4 App Inventor 开发界面(Designer 视图) 上图所示是 App Inventor 的开发界面,它主要分 为两个窗口: “Designer” 和 “Blocks” 。 其中 “Designer” 用于软件界面的设计, “Blocks”用于软件程序具体实 现的语句编程。 3.2 编程任务分析 根据设计要求,对手机控制端的要求有以下几个 方面: ①能够实现与小车蓝牙配对,实现基本通讯,发 图 5 手机 App 程序流程图 3.3 初始化模块 初始化模块在整个程序中没有实质性作用,主要 是对程序的可靠性和稳定性确保。其主要任务是:确 认手机蓝牙是否打开,初始化全局变量,初始化定时 器等。定时器的初始化设定包含定时间隔、定时时间 和运行状态等, 这些功能的实现和启动, 均在 “Blocks” 界面下进行简单的设置即可实现,具体程序如下: 频繁操作导致程序奔溃,在点击后系统立刻弹出提示 “已点击, 请稍等” 。 下图是蓝牙连接前后界面的变化。 图 8 蓝牙连接前后界面变化 3.5 重力感应控制小车 图 6 初始化程序 手机内置陀螺仪可以感受 X、Y、Z 三轴的角速 度、角加速度和转角。X 轴一般称为翻转角、Y 轴成 为俯仰角,在手机中,常常用这两个参量来控制游戏 中的前、后、左、右四个方位。X 轴和 Y 轴在手机水 平放置的时候,其角度值都为 0°,在常规使用中, 一般其角度都不会超过 90°。 考虑到重力感应控制的 灵敏度问题,在多次测量和试验中发现,把阈值设为 20 是比较合适的。使用重力感应控制的思路是:监测 内置陀螺仪翻转角和俯仰角的变化, 当其 X 轴超过 20° 或者 Y 轴超过 20°时根据具体的情况发送相关控制 指令,具体流程图如下。 3.4 蓝牙通讯模块 打开软件后,第一件事情就是要智能手机与小车 的蓝牙设备进行配对,但是日常生活中,人们手中的 智能手机通常有多个配对设备,这就需要用户手动选 择对应的配对设备进行连接。因此在程序设置中,蓝 牙连接的主要由“连接”和“设备列表”两个按键来 实现,如图 7 所示。用户点击“设备列表” ,在已配对 的设备中选择需要连接的蓝牙设备, 选择后, 点击 “连 接”实现互联。 图 7 蓝牙连接界面 打开程序后,用户点击设备列表,这个时候软件 要检测手机蓝牙是否打开。如果手机蓝牙没有打开, 则提示用户 “请打开蓝牙开关” , 否则就断开蓝牙开关, 因为这样才可以在已经连接好的状态下重新打开开关。 “连接”按钮时用户按下后触发的事件,该按钮唯有 用户选择后配对设备后,才变成可以点击的状态。点 击“连接”按钮(When Connect. Click) ,系统开始连 接蓝牙,考虑到连接蓝牙有等待过程,为了避免用户 图 9 重力感应控制流程图 3.6 模拟摇杆控制 模拟摇杆对小车的控制相对于重力感应控制,可 以更加精确、灵敏。在一些复杂的应用环境中,摇杆 它有这直观、方便和准确的特点,但有时操作者没有 办法进行实时的操控,却又需要小车能够到达预定位 置,这种情况前两种操作就不再合适了。为此,本项 目为小车设计了坐标式指令控制,它是一种半自主式 控制智能小车的方式, 用户只需要输入预定的坐标点, 小车即可自动移动的该位置,而不需要操作者的其他 任何的干预和控制。 设计这种半自主式控制的方式主要通过 3 个定时 器实现:一个负责前进和后退的 Y 方向定时器,一个 负责左右的 X 方向定时器, 一个负责转弯控制的转弯 定时器。小车的运动完全依靠蓝牙串口接收的指令, 根据指令进行运动。而每种方式的指令发送频率都是 图 10 重力感应控制程序 10 次/秒,故可以设置定时器的循环发送来实现坐标 化和单位步数的设置。每发送一次指令,都是一个单 位步数,而用户所需要输入的就是小车需要在 X 和 Y 方向上分别走多少步。其程序流程图如下: 无疑是最容易掌握和控制的操作方式。它的最大 特点在于直观和准确的控制,向前推动摇杆,小车就 前进;反之小车后退,非常符合操作习惯。本项目参 考了游戏手柄中摇杆的模型以及用户的使用习惯,将 摇杆简化为屏幕中心桌布上的绿色小球, 如图 11 所示。 用户可以通过拖拽或者点击小球周围屏幕以拉动小球 偏离中心位置,模拟摇杆动作,实现对应的指令发送 以及控制。 图 12 坐标指令控制程序流程图 同 Y 方向控制一样,当 X≠0 时,代表命令中小 车需要做横向移动,在 Y 方向行进完成后,启动转弯 定时器,进行转弯。左转或右转需要根据 X 的值来确 定。当 X>0 时,代表小车的右方,发送指令控制小 车右转弯,反之亦然。在转弯结束后,控制关闭转弯 定时器, 打开 X 定时器, 继续与 Y 坐标方向控制类似 的过程。从以上流程图可以看出,X 和 Y 即小车行进 图 11 模拟摇杆控制界面 的步数,用户使用时需要在程序开始前输入步数或者 坐标值,点击发送后启动定时器。定时器执行一次, 都会根据输入坐标式发送相应的控制指令,发送完一 3.7 坐标指令控制 重力感应和摇杆式操作都是实时性的操控方式, 次指令后,将对输入的 Y 值进行加一或减一操作,循 环执行,直到 Y 值变为 0,结束该方向的运行。 参考文献 [1] 张耀辰 . 基于嵌入式的多功能智能小车的设计与实 现[J]. 才智. 2015(03): 340-342. [2] 彭超. 基于嵌入式的智能小车的研究和设计 [D]. 武 汉理工大学, 2013. [3] 蔡睿妍 . Arduino 的原理及应用 [J]. 电子设计工程 . 2012(16): 155-157. [4] 郑昊,钟志峰,郭昊,等. 基于Arduino/Android的蓝 牙通信系统设计[J]. 物联网技术. 2012(05): 50-51. [5] 蔡睿妍 . 基于 Arduino 的舵机控制系统设计 [J]. 电脑 知识与技术. 2012(15): 3719-3721. [6] 聂茹. 基于Android 手机蓝牙控制的智能小车设计与 实现[J]. 微型电脑应用. 2015(09): 68-69. [7] 郭守超,周睿,邓常梅,等. 基于App Inventor和计 算思 维 的信 息 技术 课 堂教 学研 究 [J]. 中国 电化 教 育 . 2014(03): 91-96. [8] 申健唯,吴丽. 安卓手机游戏的快速开发[J]. 数字技 术与应用. 2014(01): 127-129. 图 13 坐标指令控制程序 4 结论 重力感应控制的智能车是基于单片机、传感器、 电路等多学科交叉的设计项目,本文通过手机软件和 智能车硬件两个部分对系统方案进行详细阐述。其中 手机软件借助 MIT App Inventor 平台,从环境搭建到 模块化分解,将重力感应控制、模拟摇杆控制、坐标 式指令控制三种控制方式从构思到设计以及具体实施 都进行了具体说明,并通过实验验证和样机进一步证 明了系统方案的可行性。随着科学技术的进步和智能 化普及,智能车这种移动机器人的的应用也会越来越 广泛和深入。