黄丽雯, 韩荣荣, 宋江敏
(重庆理工大学 a. 电子信息与自动化学院; b. 数学与统计学院, 重庆 400054)
基于Arduino/Android 的语音控制小车设计
黄丽雯a, 韩荣荣a, 宋江敏b
(重庆理工大学 a. 电子信息与自动化学院; b. 数学与统计学院, 重庆 400054)
基于促进学生构建系统性的知识结构,开发了包含手机语音识别模块、蓝牙通信模块、小车控制模块的手机语音远程控制小车案例作为综合课程设计性项目。信息发送端是Android手机客户端——在Eclipse跨平台的自由集成开发环境下开发的语音控制小车apk;信息接收控制端以ATmega32U4芯片为核心单元,利用Arduino IDE开发控制程序,通过DF-Bluetooth蓝牙模块实现通信连接,根据接收的语音命令控制转向显示灯工作,并给不同舵机写不同角度,利用URM37 V3.0超声波传感器检测路面反馈信息,从而控制舵机运动,构成闭合控制系统。试验结果表明:系统能很好地控制小车实现前轮转向并同时伴随转向灯的开启,后轮进退且自主避障,系统性能良好。
综合课程设计; 蓝牙通信; 语音控制; Arduino; Android
综合课程设计是实验教学改革的重要环节,它强调各个课程之间的联系,避免过分区别各课程并为它们分清界限,从而防止各个领域之间彼此孤立, 因此,课程设计项目的内容和形式设计对实现教学目标至关重要。本项目综合电子信息工程的两大知识板块——通信,微机系统+传感器,涉及信号获取、信息传输和信息处理三方面,以项目驱动模式,整合和优化知识结构,培养学生工程素质,实现创新教育教学目标。
目前,移动终端技术取得快速发展,使智能手机在人们生活中应用越来越普及[1],作为当前我国用户量最大的移动终端Android系统,以其开放性、稳定性以及应用丰富性吸引了众多的开发者,这一基于Linux平台的开源手机操作系统,因其允许开发者自由获得和修改源代码,而且可以与Google公司提供的各种服务如地图、邮件、搜索、语音识别等无缝结合[2],各种创新软件也层出不穷。
Arduino是一个基于开放原始码的软硬件平台,它是基于单片机系统开发的,具有类似Java、C语言的IDE (Integrated Development Environment)集成开发环境[3]。板子上的微控制器可以通过Arduino的编程语言来编写程序,广泛应用在电子系统设计领域。Google公司在2011年I/O年会上发布了基于Arduino开发板的Android平台下的SDK(Software Development Kit)软件开发工具包,使得Arduino应用更加广泛[4],发展空间更加广阔。本文在设计智能小车硬件模型及安卓手机应用、Arduino平台建立、蓝牙通信基础上研究如何实现用手机控制小车模型,加之利用Google公司提供的语音识别功能[5],最终实现语音控制小车模型的构建。
语音控制智能小车是一款基于Android智能手机和Arduino开发板开发的智能玩具车模型,其系统工作原理为:① 个体发出的语音信号经嵌入到智能手机控制端应用程序的语音识别模块(Google公司提供)进行语音识别,转换成数字形式的控制命令;② 控制命令经蓝牙模块传送到Arduino开发板,Arduino开发板接收命令并做出响应;③ 小车模型实现前进,后退,左转,右转,避障等动作。其中,Arduino接收端控制程序和Android发送端控制程序需要按控制要求开发完成后,从PC机上下载到开发板及手机上。
智能手机语音控制小车硬件系统框图和软件系统框图见图1。
本项目是基于Android/Arduino平台,硬件需要基于Android系统的智能手机发送信息,Arduino开发板接收信息并实现对小车的各项控制。
2.1 Arduino开发板
本项目采用RomeoV2控制板,主芯片是ATmega32U4,它是基于Arduino开放源代码的Simple I/O平台,并且具有使用类似Java,C语言的开发环境。 RomeoV2不仅可直插各类开关,传感器等输入设备,同样可直插多类LED,舵机等输出设备。本项目将舵机插到11,12,13引脚上,工作电压是5 V,建议输入电压为7~12 V。数字I/O: D0-D16,A0-A5,模拟I/O: A0-A5,A6-A11(在数字接口4,6,8,9,10,12上),7个PWM口(数字引脚3,5,6,9,10,11和13)。支持USB供电与外部供电自动切换,集成APC220无线数传/DF-Bluetooth蓝牙模块接口可以实现用DF-Bluetooth蓝牙模块的无缝连接[6]。
(a) 硬件
2.2 小车设计与制作
小车用探索者机器人试验箱的各种零部件、螺丝等做支架,用3个舵机做轮子,小车上还安装有超声波传感器、转向灯[7],舵机,超声波传感器除了与RomeoV2的电源,大地端相连外,其中3个舵机分别有管脚与RomeoV2的数字I/O口引脚相连,且设置相关引脚为输出口;两个转向灯分别有管脚与引脚相连,引脚作为输出口;超声波传感器的D3引脚作为输入口,D5引脚作为输出口[8]。硬件系统小车模块的控制原理图见图2。
2.3 蓝牙模块
本项目中应用蓝牙模块连接智能手机和小车,实现数据的传递。
蓝牙技术是目前一项十分先进的无线网络技术,它以低成本、短距离的无线连接为基础,能取代电缆将一定范围的计算机和通信设备连接起来,实现不同设备之间的快速互联,是一种短距离无线通信技术[9],它基于蓝牙基带协议,采用跳频技术,使用2.4 GHz ISM全球通用频段,结合了电路交换与分组交换的特点,能同时传送语音和数据[10]。本文中采用DF-Bluetooth 蓝牙模块,它体积小,宽电压供电(3.5~8 V),排针接口能适用于大多场合,并且采用电平转换适用于各种3.3 V与5 V供电的单片机系统,LINK指示灯用于显示模块工作状态:闪烁表示没有蓝牙连接,常亮表示蓝牙已连接并打开了端口,自带高效板载天线,天线外露使信号质量更好发射,距离更远,透明串口,可与各种蓝牙适配器、蓝牙手机配对。本项目中首先将蓝牙模块连接到PC机上,调试完成与手机的配对,然后将蓝牙模块连接到RomeoV2控制板的DF-Bluetooth蓝牙模块接口,VCC:接Arduino的5 V。GND:接Arduino的GND。TXD:表示蓝牙模块的发送端,接Arduino的RX。RXD:蓝牙模块的接收端,接Arduino的TX。从而可以连接手机与RomeoV2控制板。
图2 小车模块控制原理图
本项目的软件部分包括Android手机控制端软件设计和Arduino控制端软件设计,前者用Java语言实现,兼容语音识别功能,并建立蓝牙通信,后者用类C语言编写实现对小车的各项控制。
3.1 Android手机控制端软件设计
手机是基于Android系统的智能手机,将在Eclipse平台中创建的APK(Application Package File)应用程序包文件传到智能手机上执行安装后便能够实现对小车各项运动的控制。
Android操作系统架构由Linux内核、Android Runtime、库、应用程序框架和应用程序5个部分组成。本项目在Android 操作系统中实现,首先进行手机界面的设计及相关控件的监听实现;其次建立与蓝牙的连接。Android应用程序框架层提供了Android Bluetooth APIs(应用程序接口),这为用户使用蓝牙功能提供了便利。具有蓝牙功能的各个设备间可以通过这些APIs建立无线连接。
本项目中手机界面包含“选择语言”单选组框 ,“开始识别”按钮,上、下、左、右箭头等。在应用程序中使用intent来调出语言识别界面,
Intent intent = new Intent( RecognizerIntent.ACTION_RECOGNIZE_SPEECH)表示开始语音识别,startActivityForResult(intent, 1)调出识别界面。并给出了语音识别正确与错误的条件,录音并识别后将识别的字串返回给应用程序。
语音识别成功后要将信号发送至Arduino端,本项目应用蓝牙通信实现。应用程序使用蓝牙APIs实现:① 初始化与本地蓝牙设备器配对的设备; ② 建立RFCOMM信道; ③ 连接设备; ④ 在设备间传输数据[11]。
首先使用一个已知的MAC地址来初始化远端蓝牙设备DF-Bluetooth:
BluetoothDevice device = mBluetoothAdapter.get-RemoteDevice(address);
然后判断DF-Bluetooth是否支持蓝牙,并且可用:
mBluetoothAdapter = BluetoothAdapter.getDefault-Adapter();
若mBluetoothAdapter不为空,则DF-Bluetooth可用。
本项目通过调用Connect方法来连接蓝牙设备,若调用成功程序会返回一个Socket套接字,成员变量btSocket会保存这个套接字:
btSocket = device.createInsecure-RfcommSocket-ToServiceRecord(MY_UUID);
建立连接后,再创建一个处理数据传输的线程,此线程首先会创建输出流:
try {
outputStream = btSocket.getOutputStream();
message = Integer.toString(what);
} catch (Exception e) {
}
然后BluetoothService类提供Write方法实现数据的发送:
msgBuffer = message.getBytes();
try {
outputStream.write(msgBuffer);
} catch (Exception e) {
}
在对小车的控制程序中调用以上数据传输流方法,就可以实现将识别成功的语音信息传递到DF-Bluetooth。Android手机控制端软件流程图见图3。
3.2 Arduino 控制端软件设计
Arduino控制端程序包括:控制舵机转动方向,转向灯的开关,实现避障。通过改变舵机角度的大小,可以控制小车的前进,后退,左转,右转,加速,减速。首先定义3个舵机对象,分别代表小车的前轮、左后轮和右后轮;然后存储舵机的位置,初始化舵机,使其静止。将引脚11,12,13上的舵机与声明的舵机对象连接起来,并且写角度到舵机:directionServo.write(90)。最后根据判断条件给不同舵机写不同角度,实现对舵机的控制,从而控制小车的运动[12]。
本项目中将LED连接到Roemvo2上,用变量whatLED的值来判断LED的亮、灭,从而实现小车转向的同时伴随转向灯的开启。避障是通过将超声波传感器连接到Roemvo2上,检测到距离小于一定值时,控制舵机转向来实现的[13]。Arduino控制端软件流程图见图4。
本项目是基于Android控制端和Arduino接收端,以蓝牙通信作为信号传输模块,并兼有Goolge语音识别模式,从而使小车完成前进,后退,转弯,变速,避障等功能。项目方案设计时,学生对Arduino接收端的微处理器芯片选择是多样化的,可以是DSP或者单片机[14]等;对通信模块的选择也是多样化的,可以是WiFi,ZigBee等;并且可以选择不同的传感器实现不同的检测指标。通过本文的项目可以培训学生整合贯通专业知识,掌握通信模块、微控制器模块的软、硬件设计技能。实践证明:该综合课程设计项目对培养学生工程素质以及学生的创新能力有很大帮助[15],同样提升了其综合素质。
[1] 刘 磊,周作栋,彭永昱. 安卓手机的前景与现状[J]. 成功(教育),2013(1):295.
[2] 吴浩权. 基于Android的智能家居系统的研究与设计[D]. 杭州:浙江工业大学,2013.
[3] 郑 昊,钟志峰. 基于Arduino/Android的蓝牙通信系统设计[J]. 物联网技术,2012(5):50-51.
[4] 辛光红. 基于Android系统的Arduino智能车设计[J]. 电脑与电信,2014(3):62-64.
[5] 梁昌银,周丽娴,汝 荣. Google语音识别技术的研究与开发[J]. 现代电信科技,2013(9):39-44.
[6] 张玉真. 数据采集蓝牙无线传输模块研制[D]. 西安:西北工业大学,2004.
[7] 曾 建,荣联城. 基于arduino平台的智能遥控小车设计[J]. 电子世界,2014(7):142.
[8] 纪欣然. 基于Arduino开发环境的智能寻光小车设计[J]. 现代电子技术,2012,35( 15 ):161-163.
[9] 侯惠芳,侯 芳. 基于安卓手机蓝牙控制的智能电灯开关设计[J]. 科技视界,2014(13):105-106.
[10] 盛红梅,李旭伟. 蓝牙技术主要原理综述[J]. 计算机时代,2009(3):6-7,10.
[11] 陈志崇,张 祺. 基于Android的蓝牙通信接口[J]. 电子世界,2013(6):16-17.
[12] 朱丹峰,葛主冉,林晓雷. 基于Android平台的无线遥控智能小车[J]. 电子器件,2013,36(3):408-412.
[13] 余炽业,宋 跃,雷瑞庭. 基于STC12C5A60S2的智能循迹小车[J]. 实验室研究与探索,2014,33(11):46-49,121.
[14] 王宝萍. 玩具智能小车控制系统的设计与实现[D]. 成都:电子科技大学,2012.
[15] 吕云芳,陈帅帅,郝兴森,等. 基于C51高级语言程序控制的智能循迹小车设计与实现[J]. 实验室研究与探索,2015(3):142-145.
·名人名言·
没有实验,任何新的东西都不能深知。
——培根
A Design of Voice Control Car Based on Arduino/Android
HUANGLi-wena,HANRong-ronga,SONGJiang-minb
(a. College of Electronic Information and Automation; b. College of Mathematics and Statistics,Chongqing University of Technology, Chongqing 400054, China)
To help students build a systematic knowledge structure, we design and develop a speech recognition module in cell-phone to control car remotely. The design contains cell-phone voice recognition module, Bluetooth communication module, car control module. The information sender is Android mobile client where a voice control car apk is developed under free cross-platform integrated development environment based on Eclipse platform. The information receiver and controller are designed by using ATmega32U4 microcontroller chip as a core, control module is programmed on Arduino IDE platform. The communication is via DF-Bluetooth Bluetooth module. Turn lights are implemented, and different angles are realized according to the received voice command control. URM37 V3.0 ultrasonic sensors is used to detect pavement feedback so as to control servo motion. All parts constitute a closed control system. The results show that: the system can achieve good control of the car's front wheel to turn right and left companied by the opening turn signals, rear wheel to back and forth and avoid obstacle autonomously, and has good system performance.
integrated curriculum design; Bluetooth communication; voice control; Arduino; Android
2015-03-12
黄丽雯(1967-),女,重庆人,教授,现主要从事智能信息处理研究。Tel.:15310988082; E-mail: cqhlw@cqut.edu.cn
TP 273
A
1006-7167(2015)12-0053-04