用Android控制Arduino小车

2014-09-27 17:20谢作如刘正云
中国信息技术教育 2014年15期
关键词:串口控件小车

谢作如+++刘正云

用Arduino做一辆小车,原本是一个入门的项目,很多人都做过。但是,这辆小车如果能用Android手机或者平板电脑来控制,无疑就有趣多了。在MIT的App Inventor帮助下,编写Android系统上的App程序,也能够以搭积木的形式完成。同样,Arduino方面的代码,也能够采用一款图形化的编程插件——ArduBlock来编写。用Android控制Arduino小车,就成为一个技术门槛很低,却非常具有挑战性的综合性任务了。

● 项目描述

本项目指设计一辆能够通过Android手机控制的小车,小车控制板采用开源硬件Arduino。通过手机屏幕或者手机的重力传感器,能控制小车的前进、后退、左转、右转、原地转等各种功能。本项目的难度设计为小学生都能完成,所以小车的程序我们选择用ArduBlock编写,手机的程序由App Inventor编写。

因为Arduino机器人的形式很多,如智能灯、机械臂、人形机器人等,所以这个项目具有一定的可扩展性,还可以实现更多的功能。

● 通讯分析

Android手机和Arduino小车的通讯方式很多,但蓝牙方式无疑是最简单、最方便的选择,因为蓝牙已经成为Android手机的标配。App Inventor中有蓝牙的编程模块,能实现通过蓝牙来读取和发送数据。大部分的Arduino控制板,都预设了蓝牙模块的接口,而蓝牙模块的价格也相对低廉,淘宝上随处可买。

手机控制小车的程序设计分为手机程序和小车程序,即上位机与下位机两部分。手机(上位机)部分通过手机自带的蓝牙发送控制命令,如前进、后退、左右转等。小车(下位机)部分则根据蓝牙模块(串口)收到的命令,做出相应的动作。具体的通讯过程如图1所示。

在这个项目中,设计手机和小车的通讯数据格式是关键,即手机发送的数据分别代表什么命令。考虑到ArduBlock教育版只能获取串口数据中的数字,所以我们设计了下面的通讯协议,分别定义了数据和命令的对应关系,如表1。

● Arduino小车搭建和程序设计

1.硬件搭建

我们选择了DFrobot公司的RoMeo V1和MiniQ小车底盘,这是我们设计的开源课程《Arduino创意机器人》中使用的机器人套件(如图2)。《Arduino创意机器人》课程是国内第一个完全开源的STEM课程,所有的教学资源,如微视频、电子教材、教学设计等都能在网上下载,关于小车的搭建步骤详见我们的课程资源,这里不再叙述。《Arduino创意机器人》课程资源下载地址:http://pan.baidu.com/s/1qWFJ0EK。

一般而言,蓝牙模块有4条线需要和Arduino连接,分别为5V、GND、TX和RX。5V和GND要与Arduino上的5V和GND一一对应,但是RX接在Arduino的TX上,TX要接在Arduino的RX上。因为我们选择的蓝牙模块也是同一公司的,小车使用的控制板为RoMeo V1,上面已经集成了蓝牙模块接口,插上就可以直接使用,不用另外接线(如图3)。

2.程序编写

小车的程序比较简单,先将串口读取到的数值赋值给变量a,再使用“如果”模块进行判断即可。这里的数值“1”、“2”、“3”、“4”、“9”分别根据通讯协议(数据和命令对应表)来设置小车的动作,具体代码见图4。

注意:①如果电机M1和M2为150时小车没有前进,反而转弯了,只要调整电机的接线即可。②如果用Arduino下载程序出现错误,请先把蓝牙模块取下,等下载成功后再插入。

3.小车通讯测试

给小车下载程序后,应先做通讯协议方面的测试。这里的测试分为两步:第一步是使用串口监视器测试。先用Arduino的串口监视器,通过USB串口给小车发送1、2、3、4、9几个数字,看小车是否能做出相应的动作。别忘了要把小车的轮子悬空哦!第二步是使用手机蓝牙串口工具测试。如果你的电脑有蓝牙适配器,可以试着连接Arduino的蓝牙模块,然后通过串口监视器发送数据,如果成功,就说明蓝牙模块工作正常。当然也可以直接跳过这一步,直接用手机的蓝牙连接,用“蓝牙串口助手”发送数据来测试。

一般来说,如果第一步测试通过而第二步没有成功,请检查蓝牙模块的波特率。ArduBlock使用的串口波特率是9600,蓝牙模块的波特率也要设置为9600才能正常通讯。蓝牙模块的波特率可以通过AT命令来设置,请查阅技术文档或者询问蓝牙产品的技术人员。

注意:如果使用DFRobot的V7扩展板,一定要记着把板子上的小开关扳到“RUN”一档。

● Android程序设计

1.App界面设计

App Inventor分为在线版和离线版两种,二者在使用上没有什么区别。如果网络够快,就用在线版吧。不过如果是大班教学,应该自己搭建一个离线版的服务器。

控制Arduino小车的App软件在编写上并不难。我们在界面设计上并没有花多大功夫,主要还是侧重于其功能实现(如上页图5)。

App中添加的控件有:①Button按键(上、下、左、右箭头以及stop按键):按下后通过蓝牙发送相应的数字;②ListPicker(Select Device):按下它,会访问到一个列表,用来存储蓝牙信息;③HorizontalArrangement/VerticalArrangement:用于排版,使页面整齐美观;④BluetoothClient:蓝牙连接客户端控件,主要用于配对蓝牙,连接以及通信;⑤Notifier:警示窗口,当软件运行出现意外时,会提示相关信息,以避免程序崩溃。

2.App功能实现

(1)连接蓝牙

点击Select Device时,应该出现选择蓝牙设备的界面(如图6)。

选择ListPicker1控件的BeforePicking事件,编写如图7的代码。

需要说明的是,图6中列出的是手机已经配对过的蓝牙设备。如果还没有配对,请先使用手机系统自带的蓝牙管理器来配对设备。

为了使App操作更加简洁,我们可以在选择设备后,就让手机开始连接蓝牙,连接蓝牙的代码要写在ListPicker1控件的AfterPicking事件中(如图8)。

(2)发送数据

App主要通过上下左右四个箭头控制小车前进、后退、左右转,通过stop键让小车停止,代码如图9。

这样一来,按下不同的按钮,手机就会通过蓝牙发送不同的数据。虽然上述的代码并不是很完善,但是已经基本具备了上位机的功能。赶紧编译程序,安装到手机上试试吧。

● 拓展应用

这个手机控制小车的项目还是比较简单的,最大的不足是无法动态调速。当然,我们可以设计一个摇杆来发送更加复杂的数据给Arduino小车,如1200表示前进200,2100表示后退100等。只要设计好通讯协议,编写代码并不困难。图10是笔者设计的一个用摇杆控制小车速度和方向的App界面。

因为Android手机上有重力加速度传感器(AccelerometerSensor)和方向传感器(OrientationSensor)。如果利用这两个传感器来控制小车的方向和速度,项目的可玩性就更强了。当然,我们要设计的通讯协议也复杂了起来。

● 总结

在这个项目的基础上,我们还可以实现很多其他的功能,如解决单独使用语音模块控制小车声音干扰的问题,制作出无线控制的语音识别模块,或者是直接调用Google的语音库,制作出手机语音控制的机器人小车……不要小看图形化编程软件,App Inventor和ArduBlock已经足够强大了,赶紧动手吧!

endprint

用Arduino做一辆小车,原本是一个入门的项目,很多人都做过。但是,这辆小车如果能用Android手机或者平板电脑来控制,无疑就有趣多了。在MIT的App Inventor帮助下,编写Android系统上的App程序,也能够以搭积木的形式完成。同样,Arduino方面的代码,也能够采用一款图形化的编程插件——ArduBlock来编写。用Android控制Arduino小车,就成为一个技术门槛很低,却非常具有挑战性的综合性任务了。

● 项目描述

本项目指设计一辆能够通过Android手机控制的小车,小车控制板采用开源硬件Arduino。通过手机屏幕或者手机的重力传感器,能控制小车的前进、后退、左转、右转、原地转等各种功能。本项目的难度设计为小学生都能完成,所以小车的程序我们选择用ArduBlock编写,手机的程序由App Inventor编写。

因为Arduino机器人的形式很多,如智能灯、机械臂、人形机器人等,所以这个项目具有一定的可扩展性,还可以实现更多的功能。

● 通讯分析

Android手机和Arduino小车的通讯方式很多,但蓝牙方式无疑是最简单、最方便的选择,因为蓝牙已经成为Android手机的标配。App Inventor中有蓝牙的编程模块,能实现通过蓝牙来读取和发送数据。大部分的Arduino控制板,都预设了蓝牙模块的接口,而蓝牙模块的价格也相对低廉,淘宝上随处可买。

手机控制小车的程序设计分为手机程序和小车程序,即上位机与下位机两部分。手机(上位机)部分通过手机自带的蓝牙发送控制命令,如前进、后退、左右转等。小车(下位机)部分则根据蓝牙模块(串口)收到的命令,做出相应的动作。具体的通讯过程如图1所示。

在这个项目中,设计手机和小车的通讯数据格式是关键,即手机发送的数据分别代表什么命令。考虑到ArduBlock教育版只能获取串口数据中的数字,所以我们设计了下面的通讯协议,分别定义了数据和命令的对应关系,如表1。

● Arduino小车搭建和程序设计

1.硬件搭建

我们选择了DFrobot公司的RoMeo V1和MiniQ小车底盘,这是我们设计的开源课程《Arduino创意机器人》中使用的机器人套件(如图2)。《Arduino创意机器人》课程是国内第一个完全开源的STEM课程,所有的教学资源,如微视频、电子教材、教学设计等都能在网上下载,关于小车的搭建步骤详见我们的课程资源,这里不再叙述。《Arduino创意机器人》课程资源下载地址:http://pan.baidu.com/s/1qWFJ0EK。

一般而言,蓝牙模块有4条线需要和Arduino连接,分别为5V、GND、TX和RX。5V和GND要与Arduino上的5V和GND一一对应,但是RX接在Arduino的TX上,TX要接在Arduino的RX上。因为我们选择的蓝牙模块也是同一公司的,小车使用的控制板为RoMeo V1,上面已经集成了蓝牙模块接口,插上就可以直接使用,不用另外接线(如图3)。

2.程序编写

小车的程序比较简单,先将串口读取到的数值赋值给变量a,再使用“如果”模块进行判断即可。这里的数值“1”、“2”、“3”、“4”、“9”分别根据通讯协议(数据和命令对应表)来设置小车的动作,具体代码见图4。

注意:①如果电机M1和M2为150时小车没有前进,反而转弯了,只要调整电机的接线即可。②如果用Arduino下载程序出现错误,请先把蓝牙模块取下,等下载成功后再插入。

3.小车通讯测试

给小车下载程序后,应先做通讯协议方面的测试。这里的测试分为两步:第一步是使用串口监视器测试。先用Arduino的串口监视器,通过USB串口给小车发送1、2、3、4、9几个数字,看小车是否能做出相应的动作。别忘了要把小车的轮子悬空哦!第二步是使用手机蓝牙串口工具测试。如果你的电脑有蓝牙适配器,可以试着连接Arduino的蓝牙模块,然后通过串口监视器发送数据,如果成功,就说明蓝牙模块工作正常。当然也可以直接跳过这一步,直接用手机的蓝牙连接,用“蓝牙串口助手”发送数据来测试。

一般来说,如果第一步测试通过而第二步没有成功,请检查蓝牙模块的波特率。ArduBlock使用的串口波特率是9600,蓝牙模块的波特率也要设置为9600才能正常通讯。蓝牙模块的波特率可以通过AT命令来设置,请查阅技术文档或者询问蓝牙产品的技术人员。

注意:如果使用DFRobot的V7扩展板,一定要记着把板子上的小开关扳到“RUN”一档。

● Android程序设计

1.App界面设计

App Inventor分为在线版和离线版两种,二者在使用上没有什么区别。如果网络够快,就用在线版吧。不过如果是大班教学,应该自己搭建一个离线版的服务器。

控制Arduino小车的App软件在编写上并不难。我们在界面设计上并没有花多大功夫,主要还是侧重于其功能实现(如上页图5)。

App中添加的控件有:①Button按键(上、下、左、右箭头以及stop按键):按下后通过蓝牙发送相应的数字;②ListPicker(Select Device):按下它,会访问到一个列表,用来存储蓝牙信息;③HorizontalArrangement/VerticalArrangement:用于排版,使页面整齐美观;④BluetoothClient:蓝牙连接客户端控件,主要用于配对蓝牙,连接以及通信;⑤Notifier:警示窗口,当软件运行出现意外时,会提示相关信息,以避免程序崩溃。

2.App功能实现

(1)连接蓝牙

点击Select Device时,应该出现选择蓝牙设备的界面(如图6)。

选择ListPicker1控件的BeforePicking事件,编写如图7的代码。

需要说明的是,图6中列出的是手机已经配对过的蓝牙设备。如果还没有配对,请先使用手机系统自带的蓝牙管理器来配对设备。

为了使App操作更加简洁,我们可以在选择设备后,就让手机开始连接蓝牙,连接蓝牙的代码要写在ListPicker1控件的AfterPicking事件中(如图8)。

(2)发送数据

App主要通过上下左右四个箭头控制小车前进、后退、左右转,通过stop键让小车停止,代码如图9。

这样一来,按下不同的按钮,手机就会通过蓝牙发送不同的数据。虽然上述的代码并不是很完善,但是已经基本具备了上位机的功能。赶紧编译程序,安装到手机上试试吧。

● 拓展应用

这个手机控制小车的项目还是比较简单的,最大的不足是无法动态调速。当然,我们可以设计一个摇杆来发送更加复杂的数据给Arduino小车,如1200表示前进200,2100表示后退100等。只要设计好通讯协议,编写代码并不困难。图10是笔者设计的一个用摇杆控制小车速度和方向的App界面。

因为Android手机上有重力加速度传感器(AccelerometerSensor)和方向传感器(OrientationSensor)。如果利用这两个传感器来控制小车的方向和速度,项目的可玩性就更强了。当然,我们要设计的通讯协议也复杂了起来。

● 总结

在这个项目的基础上,我们还可以实现很多其他的功能,如解决单独使用语音模块控制小车声音干扰的问题,制作出无线控制的语音识别模块,或者是直接调用Google的语音库,制作出手机语音控制的机器人小车……不要小看图形化编程软件,App Inventor和ArduBlock已经足够强大了,赶紧动手吧!

endprint

用Arduino做一辆小车,原本是一个入门的项目,很多人都做过。但是,这辆小车如果能用Android手机或者平板电脑来控制,无疑就有趣多了。在MIT的App Inventor帮助下,编写Android系统上的App程序,也能够以搭积木的形式完成。同样,Arduino方面的代码,也能够采用一款图形化的编程插件——ArduBlock来编写。用Android控制Arduino小车,就成为一个技术门槛很低,却非常具有挑战性的综合性任务了。

● 项目描述

本项目指设计一辆能够通过Android手机控制的小车,小车控制板采用开源硬件Arduino。通过手机屏幕或者手机的重力传感器,能控制小车的前进、后退、左转、右转、原地转等各种功能。本项目的难度设计为小学生都能完成,所以小车的程序我们选择用ArduBlock编写,手机的程序由App Inventor编写。

因为Arduino机器人的形式很多,如智能灯、机械臂、人形机器人等,所以这个项目具有一定的可扩展性,还可以实现更多的功能。

● 通讯分析

Android手机和Arduino小车的通讯方式很多,但蓝牙方式无疑是最简单、最方便的选择,因为蓝牙已经成为Android手机的标配。App Inventor中有蓝牙的编程模块,能实现通过蓝牙来读取和发送数据。大部分的Arduino控制板,都预设了蓝牙模块的接口,而蓝牙模块的价格也相对低廉,淘宝上随处可买。

手机控制小车的程序设计分为手机程序和小车程序,即上位机与下位机两部分。手机(上位机)部分通过手机自带的蓝牙发送控制命令,如前进、后退、左右转等。小车(下位机)部分则根据蓝牙模块(串口)收到的命令,做出相应的动作。具体的通讯过程如图1所示。

在这个项目中,设计手机和小车的通讯数据格式是关键,即手机发送的数据分别代表什么命令。考虑到ArduBlock教育版只能获取串口数据中的数字,所以我们设计了下面的通讯协议,分别定义了数据和命令的对应关系,如表1。

● Arduino小车搭建和程序设计

1.硬件搭建

我们选择了DFrobot公司的RoMeo V1和MiniQ小车底盘,这是我们设计的开源课程《Arduino创意机器人》中使用的机器人套件(如图2)。《Arduino创意机器人》课程是国内第一个完全开源的STEM课程,所有的教学资源,如微视频、电子教材、教学设计等都能在网上下载,关于小车的搭建步骤详见我们的课程资源,这里不再叙述。《Arduino创意机器人》课程资源下载地址:http://pan.baidu.com/s/1qWFJ0EK。

一般而言,蓝牙模块有4条线需要和Arduino连接,分别为5V、GND、TX和RX。5V和GND要与Arduino上的5V和GND一一对应,但是RX接在Arduino的TX上,TX要接在Arduino的RX上。因为我们选择的蓝牙模块也是同一公司的,小车使用的控制板为RoMeo V1,上面已经集成了蓝牙模块接口,插上就可以直接使用,不用另外接线(如图3)。

2.程序编写

小车的程序比较简单,先将串口读取到的数值赋值给变量a,再使用“如果”模块进行判断即可。这里的数值“1”、“2”、“3”、“4”、“9”分别根据通讯协议(数据和命令对应表)来设置小车的动作,具体代码见图4。

注意:①如果电机M1和M2为150时小车没有前进,反而转弯了,只要调整电机的接线即可。②如果用Arduino下载程序出现错误,请先把蓝牙模块取下,等下载成功后再插入。

3.小车通讯测试

给小车下载程序后,应先做通讯协议方面的测试。这里的测试分为两步:第一步是使用串口监视器测试。先用Arduino的串口监视器,通过USB串口给小车发送1、2、3、4、9几个数字,看小车是否能做出相应的动作。别忘了要把小车的轮子悬空哦!第二步是使用手机蓝牙串口工具测试。如果你的电脑有蓝牙适配器,可以试着连接Arduino的蓝牙模块,然后通过串口监视器发送数据,如果成功,就说明蓝牙模块工作正常。当然也可以直接跳过这一步,直接用手机的蓝牙连接,用“蓝牙串口助手”发送数据来测试。

一般来说,如果第一步测试通过而第二步没有成功,请检查蓝牙模块的波特率。ArduBlock使用的串口波特率是9600,蓝牙模块的波特率也要设置为9600才能正常通讯。蓝牙模块的波特率可以通过AT命令来设置,请查阅技术文档或者询问蓝牙产品的技术人员。

注意:如果使用DFRobot的V7扩展板,一定要记着把板子上的小开关扳到“RUN”一档。

● Android程序设计

1.App界面设计

App Inventor分为在线版和离线版两种,二者在使用上没有什么区别。如果网络够快,就用在线版吧。不过如果是大班教学,应该自己搭建一个离线版的服务器。

控制Arduino小车的App软件在编写上并不难。我们在界面设计上并没有花多大功夫,主要还是侧重于其功能实现(如上页图5)。

App中添加的控件有:①Button按键(上、下、左、右箭头以及stop按键):按下后通过蓝牙发送相应的数字;②ListPicker(Select Device):按下它,会访问到一个列表,用来存储蓝牙信息;③HorizontalArrangement/VerticalArrangement:用于排版,使页面整齐美观;④BluetoothClient:蓝牙连接客户端控件,主要用于配对蓝牙,连接以及通信;⑤Notifier:警示窗口,当软件运行出现意外时,会提示相关信息,以避免程序崩溃。

2.App功能实现

(1)连接蓝牙

点击Select Device时,应该出现选择蓝牙设备的界面(如图6)。

选择ListPicker1控件的BeforePicking事件,编写如图7的代码。

需要说明的是,图6中列出的是手机已经配对过的蓝牙设备。如果还没有配对,请先使用手机系统自带的蓝牙管理器来配对设备。

为了使App操作更加简洁,我们可以在选择设备后,就让手机开始连接蓝牙,连接蓝牙的代码要写在ListPicker1控件的AfterPicking事件中(如图8)。

(2)发送数据

App主要通过上下左右四个箭头控制小车前进、后退、左右转,通过stop键让小车停止,代码如图9。

这样一来,按下不同的按钮,手机就会通过蓝牙发送不同的数据。虽然上述的代码并不是很完善,但是已经基本具备了上位机的功能。赶紧编译程序,安装到手机上试试吧。

● 拓展应用

这个手机控制小车的项目还是比较简单的,最大的不足是无法动态调速。当然,我们可以设计一个摇杆来发送更加复杂的数据给Arduino小车,如1200表示前进200,2100表示后退100等。只要设计好通讯协议,编写代码并不困难。图10是笔者设计的一个用摇杆控制小车速度和方向的App界面。

因为Android手机上有重力加速度传感器(AccelerometerSensor)和方向传感器(OrientationSensor)。如果利用这两个传感器来控制小车的方向和速度,项目的可玩性就更强了。当然,我们要设计的通讯协议也复杂了起来。

● 总结

在这个项目的基础上,我们还可以实现很多其他的功能,如解决单独使用语音模块控制小车声音干扰的问题,制作出无线控制的语音识别模块,或者是直接调用Google的语音库,制作出手机语音控制的机器人小车……不要小看图形化编程软件,App Inventor和ArduBlock已经足够强大了,赶紧动手吧!

endprint

猜你喜欢
串口控件小车
追车
使用“填表单”微信小程序 统计信息很方便
基于.net的用户定义验证控件的应用分析
积木小车
MCS—51单片机中的多串口通讯技术的应用
去修理厂
全国计算机等级考试机房准备工作探讨
微机串口的测试诊断
利用VF6.0的Timer控件实现动画效果
智能小车