基于加速度传感器的手势操作 arduino 自动避障小车 · 驱动单元:arduino l293d...
TRANSCRIPT
基于加速度传感器的手势操作 Arduino 自动避障小车--贾小雨、蔡永青、闫维义
基于加速度传感器的手势操作 Arduino 自动避障小车
一、作品简介
1、背景、目的及创新点
如今遥控的实现大多利用摇杆,而摇杆的操作往往需要双手并且硬件设备较
大,而加速度传感器可以敏捷的感知三轴方位,本作品首先利用加速度传感器实
现对小车的遥控;避障小车的设计中,超声波测距避障较红外避障灵敏度更高,
利用超声波测距实现了灵敏的避障功能。
2、功能
本作品利用加速度传感器实现对小车的遥控并利用超声波测距实现了灵敏
的避障功能。
3、应用前景
基于加速度传感器的手势操作 Arduino 自动避障小车利用加速度传感器实现
了手势操作,可以简单地单手控制小车的行进,如果将该作品有线的遥控改进为
无线遥控后,手势操作将更加轻便、限制更小。本产品的应用前景主要有如下两
个方面:1、自平衡双轮电动车,在目前已经投入生产和使用的电动车中加上加
速度传感器单元,通过单片机的快速计算能力,可以实现两平行轮的自平衡,这
将是一种轻便、灵敏、实用的电动车,在该电动车的基础上增加避障模块可以有
效增加安全系数;2、空中手势操作,通过加速度传感器实现位置感知,增加高
集成度的芯片和无线通信后可以拓宽应用领域,如无线手势鼠标、玩具遥控器、
智能家居的家电操作等等。
二、硬件设计思路
1、硬件组成
CPU:Arduino mega2560
Arduino Mega2560是采用USB接口的核心电路板,具有54路数字输入输出,
适合需要大量 IO 接口的设计。处理器核心是 ATmega2560, 同时具有 54 路数字
输入/输出口(其中 16 路可作为 PWM 输出),16 路模拟输入,4 路 UART 接口,
基于加速度传感器的手势操作 Arduino 自动避障小车--贾小雨、蔡永青、闫维义
一个 16MHz 晶体振荡器,一个 USB 口,一个电源插座,一个 ICSP header 和一个
复位按钮。Arduino Mega2560 也能兼容为 Arduino UNO 设计的扩展板。我们的产
品选用该系统板作为处理器。
手势操作单元:ADXL345 加速度传感器
ADXL345 是一款小而薄的超低功耗 3 轴
加速度计,分辨率高(13 位),测量范围达±
16g。数字输出数据为 16 位二进制补码格式,
可通过 SPI(3 线或 4 线)或 I2C 数字接口访问。
ADXL345 非常适合移动设备应用。它可以在
倾斜检测应用中测量静态重力加速度,还可
以测量运动或冲击导致的动态加速度。其高分辨率(3.9mg/LSB),能够测量不到 1.0°
的倾斜角度变化。
ADXL345 作为一款完整的 3 轴加速度测量系统,可选择的测量范围有±2g,
±4g,±8g 或±16g。既能测量运动或冲击导致的动态加速度,也能测量静止加
速度,例如重力加速度,使得器件可作为倾斜传感器使用。
壁障单元:HC-SR01 超声波测距模块
控制口发一个 10US 以上的高电平,就可
以在接收口等待高电平输出.一有输出就可
以开定时器计时,当此口变为低电平时就可
以读定时器的值,此时就为此次测距的时间,
方可算出距离.如此不断的周期测,就可以达
到移动测量的值。
驱动单元:Arduino L293D motor shield
可驱动 4 路直流电机或者 2 路步进电机的同时还能驱动 2 路舵机。
2、电路原理图
详见报告会所附大图
基于加速度传感器的手势操作 Arduino 自动避障小车--贾小雨、蔡永青、闫维义
三、软件流程介绍
1、核心功能实现
手势操作单元的软件核心:控制加速度传感器沿 X 轴和 Y 轴所偏转的角度,
将输出的数据整理归一化为 Xg、Yg,小车左右轮马达的速度为|(Xg*255)|-Yg*100,
通过调节左右马达的转速控制校车的前进后退和转弯。为防止小车转向过度,当
|Yg|>0.7 时,小车将原地打转。另外,为了消除加速度传感器分辨率过高(能够
测量到不到 1°的倾角变化)造成的“抖动效应”,当|Xg|,|Yg|<0.1 时,小车将
原地不动。即,用 Xg 的值定义小车的“前”或“后”的行进及行进速度,用 Yg
的值定义小车左右轮的转速差来实现小车的“左”或“右”转向,当 Xg 和 Yg 的
值精确值 0.1,防止过度的精确导致控制的不稳定。
超声波避障单元的软件核心:控制口发一个 10US 以上的高电平,就可以在
接收口等待高电平输出,一有输出就可以开定时器计时,当此口变为低电平时就
可以读定时器的值,此时就为测距的时间,方可算出距离。若距离小于 30cm,
触发蜂鸣器,小车将往相反的方向适当移动,从而达到避障的目的。
基于加速度传感器的手势操作 Arduino 自动避障小车--贾小雨、蔡永青、闫维义
2、软件流程图
注:Xg、Yg 分别是 X 轴和 Y 轴方向的加速度大小。
开始
系统初始化
障碍物距
离>30cm?
|Yg|>0.1
|Yg|>0.7
小车原地打转
|Xg|>0.1
Xg>0.1
小车后转弯
小车前行并转弯
小车原地打转
Xg>0.1
|Xg|>0.1
小车后退
小车前进
小车原地不动
基于加速度传感器的手势操作 Arduino 自动避障小车--贾小雨、蔡永青、闫维义
四、作品操作说明
1、手势操作方法
将加速度传感器使用松紧绳固定在手掌上,将手放平,打开小车的供电开关
后即可工作,目前装置能够识别以下的手势并实现相应的小车动作:
手掌前倾:小车前行,倾角越大则前进速度越大,反之越小;
手掌后仰:小车后退,仰角越大则后退速度越大,反之越小;
手掌前倾并略向右转:小车前行右转,手掌转角越大则右转越快,反之越慢;
手掌前倾并略向左转:小车前行左转,手掌转角越大则左转越快,反之越慢;
手掌后仰并略向右转:小车后退右转,手掌转角越大则右转越快,反之越慢;
手掌后仰并略向左转:小车后退左转,手掌转角越大则左转越快,反之越慢;
手掌水平后右转:小车原地顺时针转动,手掌转角越大则转速越大;
手掌水平后左转:小车原地逆时针转动,手掌转角越大则转速越大。
2、自动避障的实现
当小车前进(后退)过程中和障碍物的距离不足 30 厘米,则小车停止行进,
此时蜂鸣器鸣声提示。
五、测试成果展示
1、Arduino motor shield 的测试
2、ADXL345 加速度传感器的功能实现
基于加速度传感器的手势操作 Arduino 自动避障小车--贾小雨、蔡永青、闫维义
3、HC-SR01 超声波测距传感器的测试
基于加速度传感器的手势操作 Arduino 自动避障小车--贾小雨、蔡永青、闫维义
4、系统整体的测试
下表为产品的部分测试结果记录:
第 N 次测试 前后行进测试结果 左右拐动测试结果 原地打转测试结果
1 方向正常,速度变化
过分灵敏,左右轮转
速略微不同
失败 成功,基本达到预
期效果
2 左右轮转速测试正常 可以拐弯,但操作
误识率高
未测试
3 正常,基本满意 误识率较高 成功
……
基于加速度传感器的手势操作 Arduino 自动避障小车--贾小雨、蔡永青、闫维义
测试项目 测试次数 成功次数
前后行进测试 35 23
左右拐动测试 35 15
原地打转测试 35 32
超声避障测试 28 21
以上测试结果所展示的为作品硬件搭建结束后作品调试过程的结果记录,在
测试过程中我们对程序在不断优化,最终所做到的识别率请见下表:
测试项目 识别率
前后行进 20/20=100%
左右拐动 17/20=85%
原地打转 19/20=95%
超声避障 19/20=95%
六、产品继续优化及展望
1、无线控制
因时间和预算的限制,我们的作品只能选择使用有线控制,现在已经决定在
将来继续优化我们的产品,我们将使用无线的遥控来实现对小车的控制,我们将
尝试无线遥控或者蓝牙智能手机遥控。使用无线传送数据将更加轻便,也可以更
快的将作品推广至其他领域,如制作成无线空中手势鼠标来操作电脑。
2、实现两轮自平衡
本次设计使用的为三轮小车(其中两个轮为主动轮,另一个为被动轮),如
去掉被动轮,并使用加速度传感器以及陀螺仪的精确感知,加上单片机强大的运
算功能,我们可以将小车改造为仅需两个平行轮的自平衡小车,则活动更为敏捷、
自由。
3、摄像头单元
如果在小车上增加摄像头,则小车可以增加拍摄功能,小车则可以增大活动
范围,在操作人员看不到的地方也可以远程操作小车,这将可以应用于地震搜救、
资源探测,甚至于地外行球上使用的的探测车。
基于加速度传感器的手势操作 Arduino 自动避障小车--贾小雨、蔡永青、闫维义
4、机械手臂
目前的手势操作小车仅能实现移动,而不能进行其他工作,我们组计划在小
车上安装灵活的机械臂,这样小车就可以完成抓取等更复杂的任务;使用机械臂
的小车将可以到人们无法触及的偏僻、危险地带进行工作,如拆弹、大型设备抢
修等。
六、器材清单及花销
1、材料及元件:
序号 名称 规格型号 数量 价格
1 Arduino Mega2560 1 \
2 加速度传感器 ADXL345 1 20.8 元
3 Lcd 显示屏 L1602 1 20 元
4 超声波测距模块 HC-SR01 2 18 元
5 直流马达驱动 L293D×2 1 38 元
6 小车底盘 亚克力 1
46 元 7 胶皮轮胎 \ 2
8 万向轮 \ 1
9 直流电机 \ 2
10 螺丝、螺母 \ 若干 5 元
11 1KΩ电阻 \ 2 \
12 杜邦线 \ 若干 40 元
合计 187.8 元
2、工具
实验室提供
【附件】
1、 硬件连接图
基于加速度传感器的手势操作 Arduino 自动避障小车--贾小雨、蔡永青、闫维义
基于加速度传感器的手势操作 Arduino 自动避障小车--贾小雨、蔡永青、闫维义
进度报告(一)
拟定课题及前期采购
2013 年 4 月 3 日-20 日
4 月 3 日,我们小组开始了单片机之旅。通过这些天单片机课程的学习和实
验操作,我们对单片机有了很深的了解,并对我们接下来的课程设计充满了兴趣
和信心。
首先是单片机课程设计的主题。诺贝尔获得者丁肇中教授 2011 年来访山大
时曾对我们说过一句话,“选择一个好的课题,并一直做下去,你终将会有所突
破。”选择一个好的课题是成功的先决条件,课题的重要性可见一斑。我们小组
三人在知新楼 B 区聚在一起,各抒己见,踊跃地提出自己的想法,PM2.5 检测计,
超声波雷达自动避障小车,手势控制开关灯,超声波多普勒效应实现空中手势操
作,手势操控小车,自平衡小车……最终我们经过分析讨论,一致决定把课题定
为基于超声波多普勒效应的空中手势操作。后来我们向李老师阐明了我们的想法,
寻求李老师的意见和建议。李老师指出,由于手在空中的速度很慢,多普勒效应
不明显,很难实现手势识别。于是,经过一番讨论,我们最后决定把课题定为手
势操控自动避障小车。
定好课题后,我们就开始分析并初步制作了完成课题所需的器材元件的清单。
手势操控可通过三轴加速度传感器实现,自动避障可通过超声波测距模块实现,
至于单片机电路板,我们选择了操作灵活简便的 Arduino mega2560 电路板,由
实验室免费提供。接下来,我们先后在网上购买了小车底盘、万向轮、胶皮轮胎、
ADXL345 加速度传感器、LCD1602 显示屏、超声波测距模块,赴欧亚电子市场买
了杜邦线和螺丝螺母。
进度报告(二)
硬件连接及调试
2013 年 4 月 21 日-5 月 25
日
课题所需的器材元件到位
后,我们开始对各个模块进行测
试。完成小车的组装后,我们开
始对各个模块进行检测。首先
LCD1602 显示屏的测试。将显示
屏连接到 arduino 电路板上,运
行库函数里的样函数,显示屏上图 1 5 月 14 日首次使用 Arduino 及电机驱动带动电机
基于加速度传感器的手势操作 Arduino 自动避障小车--贾小雨、蔡永青、闫维义
显示“hello word!”,测试良好。
接下来是 ADXl345 加速度传
感器。我们将加速度传感器连接
到 arduino 上,用 LCD1602 显示屏
显示其输出的数据。调节三轴加
速度传感器的在各个轴方向的倾
角,发现显示器始终显示零。尝试
用 Arduino 串口调试助手,结果显
示输出仍然是零,一周内对加速
度传感器调试多次失败。期间我
们查了大量资料,发现 ADXL345 加速
度传感器使用 I2C 通讯,需要对通
讯初始化和地址定义。通过查阅课
本,我们自学了 I2C 通讯;通过
ADXL345 的中文说明,我们知道了
其通讯地址的定义。于是我们重新
对电路图进行分析论证,对加速度
传感器选择了四口连接方式,并焊
接了两个 1KΩ 的上拉电阻,使用
Arduino上的 I2C通讯 SCL、SDA口
进行连接,并在程序中重新定义地
址,最终实现了 x、y、z三轴加速
度值的准确输出。
然后我们对直流电机驱动模块
进行测试。在测试中,我们发现,该
驱动模块不能进行速度的调节,仅能
控制转向。于是我们重新购买了
L293D 电机驱动模块,有四个直流电
机接口。程序运行后,设定同一速度
后,我们发现两马达控制的车轮转速
不一样。我们用万用表测量了设定速
度最大时马达两端的电压,一个是
1.7V,一个是 1.2V。供电过低,且驱
动电路输出的电压值不一样。后来我们使用 1.5V×8电池供电,并改用另两个电
图 3 5 月 19 日首次成功调试 Lcd 显示
图 2 5 月 22 日首次实现加速度传感器三轴数据在
Lcd 屏幕上的输出
图 4 5 月 23 日超声波测距模块调试成功
基于加速度传感器的手势操作 Arduino 自动避障小车--贾小雨、蔡永青、闫维义
机驱动接口连接马达,最终成功调试,小车速度明显加快,而且设定同一速度值
时,两马达的电压相等,达到了预期效果。最后用 LCD显示屏进行超声波模块和
蜂鸣器的测试。写入程序后,改变物体与超声波模块的距离,显示屏上的距离在
相应变化,用尺子测量物体与模块的距离,基本和显示屏上显示的一致。当距离
小于 20cm 时,蜂鸣器被触发,开始报警,测试良好。
进度报告(三)
核心程序调试
2013 年 5 月 25 日-6 月 5 日
完成各个模块的测试并对出现的问题一一解决后,我们开始了硬件平台的搭
建。
我们将小车马达、ADXL345 加速
度传感器、LCD1602 显示屏、超声波
测距模块、蜂鸣器连接到 arduino 电
路板上,写入程序并进行测试。结果
电机的马达没什么反应,而且
arduino 的指示灯在亮,有不正常的
声音。把其他模块的程序删去,只测
试马达,依然没反应,我们初步判断
是电池盒出了问题,拆开电池盒,认
真检查了每个电池后,发现两个电池
有电解液流出,于是我们又换了两个
电池,安装后,马达工作恢复
正常。然后写入完整的程序,
马达依然工作不正常。将超声
波程序删除后,马达工作正常。
我们推断马达驱动占用了全
部 PWM接口,而超声波测距的
输入及输出均需 PWM 接口,在
公用接口后发现冲突,导致电
机工作失灵。两天内我们查了
大量关于 L293D 电机驱动模
块的电路图和资料,均为发现
电机驱动占用的 arduino 电
路板上的 PWM口。于是我们决定改变方案,对所有的 PWM接口进行了超声波测距
图 6 5 月 25 日完成 ADXL345 控制电机硬件
搭建
图 5 6 月 3 日电池盒出现问题后拆开查错
基于加速度传感器的手势操作 Arduino 自动避障小车--贾小雨、蔡永青、闫维义
模块的共用试验,在大量试验后发现 PWM口中 2、13接口为空闲,可以连接超声
波测距模块,但预期需要的两个超声波测距模块只能并联至仅有的两个空闲接口
上。
图 7 6 月 1 日完成组装并开始结尾调试
进度报告(四)
收尾调试及报告撰写
2013 年 6 月 5 日-6 月 8 日
解决了驱动电机和超声波共用 PWM 口影响马达转动的瓶颈后,我们的课题
设计也进入了收尾阶段。在固定电路板、电池盒时,小车地板上的螺丝口与电路
板不能配对,无法用螺钉固定。我们使用“一拉得”塑料绑线对电池盒、电路板
等进行了捆绑固定,取得了良好的效果。
一切准备就绪,我们对整个模块进行最后的调试:
将加速度传感器使用松紧绳固定在手掌上,将手放平,打开小车的供电开关,
手掌前倾:小车前行,倾角越大则前进速度越大,反之越小;
手掌后仰:小车后退,仰角越大则后退速度越大,反之越小;
手掌前倾并略向右转:小车前行右转,手掌转角越大则右转越快,反之越慢;
手掌前倾并略向左转:小车前行左转,手掌转角越大则左转越快,反之越慢;
手掌后仰并略向右转:小车后退右转,手掌转角越大则右转越快,反之越慢;
基于加速度传感器的手势操作 Arduino 自动避障小车--贾小雨、蔡永青、闫维义
手掌后仰并略向左转:小车后退左转,手掌转角越大则左转越快,反之越慢;
手掌水平后右转:小车原地顺时针转动,手掌转角越大则转速越大;
手掌水平后左转:小车原地逆时针转动,手掌转角越大则转速越大。
当小车前进(后退)过程中和障碍物的距离不足 30 厘米,蜂鸣器报警,小
车停止行进。
最终,手势操控自动避障小车顺利通过了测试,我们开始论文和报告的写作,
我们圆满完成了单片机课程设计。
基于加速度传感器的手势操作 Arduino 自动避障小车--贾小雨、蔡永青、闫维义
课程设计总结报告
一.出现的问题及解决方案
(一)硬件连接过程中的问题及解决方案:
1、电机工作需要的电流过大。而单片机 I\O 口最大输出电流只有 20mA,故
电机无法直接由单片机驱动。
问题解决:使用电机驱动模块对电流、功率进行放大。
2、首次购买的电机驱动模块不能进行速度的调节,仅能控制转向。
解决方法:使用了芯片为 L293D 的电机驱动模块,实现了转速、转向的调
控。
3、一周内对 ADXL345 加速度传感器的多次调试连续失败。
问题解决:对加速度传感器选择了四口连接方式,并焊接了两个 1KΩ 的上
拉电阻,使用 Arduino 上的 I2C 通讯 SCL、SDA 口进行连接,程序中重新定义地
址成功解决,实现了 x、y、z 三轴加速度值的准确输出。
4、马达驱动接口的连接及供电问题:接口多次连接错误,使用 USB 供电时
电机转速低、不稳定。
问题解决:使用 1.5V×8 电池供电,最终成功调试,达到了预期效果。
5、马达驱动占用了全部 PWM 接口,而超声波测距的输入及输出均需 PWM
接口,在公用接口后发
现冲突,导致电机工作
失灵。
问题解决:对所有
的 PWM 接口进行了超
声波测距模块的共用
试验,在大量试验后发
现 PWM 口中 2、13 接
口为空闲,可以连接超
声波测距模块,但预期
需要的两个超声波测
距模块只能并联至仅
有的两个空闲接口上。
6、电路板、电池盒
的固定,小车地板上的螺丝口与电路板不能配对,无法用螺钉固定。
问题解决:使用“一拉得”塑料绑线对电池盒、电路板等进行了捆绑固定。
图 8 6 月 3 日电池盒出现问题后拆开查错
基于加速度传感器的手势操作 Arduino 自动避障小车--贾小雨、蔡永青、闫维义
(二)程序调试过程中出现的问题及解决方案:
1、Arduino 为全新的系统,前期没有任何接触。
问题解决:团队成员们在一周内将《Arduino 开发实战指南(AVR 篇)》一书
进行了通读并讨论,基本熟悉了 Arduino 的编程方法和硬件结构。
2、ADXL345加速度传感器使用 I2C通讯,需要解决通讯初始化和地址定义。
问题解决:通过查阅课本,我们自学了 I2C 通讯;通过 ADXL345 的中文说
明,我们知道了其通讯地址的定义。
3、马达驱动模块的程序使用和 L293D 芯片不同,不能直接使用 I/O 口输出
指令。
问题解决:通过在网上的查阅,我们了解到:这种模块的使用需要库文件及
函数的引用,在找到并安装库文件后,实现了马达的控制。
4、使用 Xg、Yg、Zg 值对小车移动进行控制。
问题解决:用 Xg 的值定义小车的“前”或“后”的行进及行进速度,用 Yg 的
值定义小车左右轮的转速差来实现小车的“左”或“右”转向,当 Xg 和 Yg 的值精
确值 0.1,防止过度的精确导致控制的不稳定。
二.团队管理的心得体会
作为一个整体,团队成员之间做到了相互信赖,相互帮助,相互学习。虽然
多多少少会产生些意见上的差异,但是面对困难,团队内部成员之间都能调节自
己的情绪,避免了相互指责,相互批评的事情发生。团队是需要一个核心的,这
个核心便是实现最初的课题,在团队合作中,团队应该充分调动成员的积极性,
使每个成员都能够充分的挖掘自己的潜能。因为人与人的性格不同,在管理过程
中,要充分照顾到每一个成员的意见,也不能过分依赖某一个人。对于不同意见,
要拿到桌面上大家一起分析它们的长处和不足,通过大家的智慧,得到一个最佳
结果。所以,我们总的体会是民主高效,而又对自己的任务认真负责。
三.课程设计的心得体会
从拟定课题到着手准备硬件,再到学习 Arduino、调试程序,整个过程中,
由最初的通过超声波多普勒效应实现空中手势操作到最终以加速度传感器实现
有线的手势操作,团队的课题思路也在一直变化。也许单片机课程正是需要这个
过程,不断的发现问题、解决问题,不断地创新、思考,对于单片机的认识也在
不断加深。在整个过程中,我们从硬件、软件两个方面下手,既锻炼了动手能力,
又第一次将软件编程应用于实际,当看到自己的作品从简单慢慢的变得复杂,从
模型被逐渐搭建为可以工作的作品,在此过程中,我们在提升中体会到了很多快
乐。
基于加速度传感器的手势操作 Arduino 自动避障小车--贾小雨、蔡永青、闫维义
四.成员分工及工作情况
姓 名 贡献排序及贡献值 主要工作
贾小雨 0.35 团队统筹协调、硬件搭建、软件调试
蔡永青 0.33 软件调试、日常记录
闫维义 0.32 论文报告的撰写、电路图的整理绘制
六. 课程改革的建议
1、课程应以作品为主,而书面文件的数量可以适当减少;
2、实验课课程可以更加丰富,适当增加内容,让同学们充分利用一个下午
的时间,学到更多、更有趣的知识,锻炼动手能力;
3、在理论课课堂上,教师可以直接使用硬件设备做演示,或者更好的与实
验课结合,既能提高课程的趣味性,又能更直观的教学。