陈军俊
摘要:随着投入仿生六足机器人的研究越来越多,对机器人适应未知环境能力的要求也越来越高。Arduino是一款基于单片机系统开发的软硬件平台,具有控制与之连接的各类传感器来感知周围环境的特点。本文介绍了通过在六足机器人上安装超声波传感器和OLED显示屏,然后基于Arduino技术开发,利用超声波传感器设计原理来实现六足机器人声呐测距功能,并且将测量数据显示在OLED屏上。最后通过多次测试,验证该功能设计实现成功。
关键词:Arduino;超声波传感器;OLED显示屏;声呐测距
中图分类号:TP391 文献标识码:A 文章编号:1009-3044(2018)14-0174-04
Abstract: With the development of bionic six legged robots, more and more robots are required to adapt to the unknown environment. Arduino is a software and hardware platform developed on the basis of single chip microcomputer system. It has all kinds of sensors connected with it to perceive the characteristics of the surrounding environment. This paper introduces the ultrasonic sensor and OLED screen which are installed on six legged robots, and then based on the Arduino technology, using the ultrasonic sensor design principle to realize the sonar ranging function of the six legged robot, and display the measured data on the OLED screen. Finally, several tests have been carried out to verify that the design is successful.
Key words: Arduino; ultrasonic sensor; OLED screen; sonar ranging
近年來在仿生机器人领域的研究愈发受到重视,主要原因是由于目前地球上大多数地形环境均是轮型或链型的交通工具所无法到达的。当前仿生式机器人在非对称非结构化的环境中已经具备良好的运动能力,于是进一步的要求仿生机器人在未知的环境中具有更强大的适应能力,不需经过电脑的复杂运算,即可立即对复杂环境的变化做出反应。
Arduino是一款基于单片机系统开发的软硬件平台,构建于开放源代码Simple I/O接口板,使用类似 Java,C语言的Processing/Wiring开发环境。该平台既包括微处理器、电路控制板等硬件部分,也包括编程接口、语言等软件部分。将Arduino技术应用在仿生六足机器人上,通过在Arduino控制板上连接各种电子设备,例如LED灯、马达、开关、传感器、OLED显示屏等设备来实现仿生机器人可感知环境、适应环境,最终使得六足机器人具有更高的精确性、灵活性和可靠性。
本文介绍了基于Arduino技术开发,根据安装在六足机器人上的超声波传感器和OLED显示屏来设计出相应的电路结构和控制程序,从而实现六足机器人声呐测距并将测量数据显示在OLED屏上这一功能。最后通过多次测试,验证该功能设计实现成功。
1 Arduino控制板
本设计中使用的是作为Arduino平台提供参考的标准模板Arduino Leonardo,是Arduino系列中的最新版本,核心采用的微处理器是ATmega32U4,工作电压5V,具有32KB的Flash(其中4KB被引导程序使用)以及2.5KB的SRAM和1KB的EEPROM,它共有20个数字输入/输出引脚,其中7个用于PWM输出,12个用于模拟输入,每个模拟输入都有10位分辨率(即1024个不同值),一个16 MHZ的晶体振荡器,一个Micro USB接口,一个直流电源接口,一个复位按钮等。Arduino Leonardo可以通过3种方式供电,而且能自动选择供电方式:外部直流电源通过电源插座供电、电池连接电源连接器的GND和VIN引脚、USB接口直接供电,这也提供了供电的低耗和方便供电的特点。
Leonardo不同于之前所有的Arduino控制板,他直接使用了ATmega32u4的USB通信功能,取消了USB转UART芯片。这使得Leonardo不仅可以作为一个虚拟的(CDC)串行/ COM端口,还可以作为鼠标或者键盘连接到计算机。
2 超声波传感器
超声波传感器是将超声波信号转换成其他电信号的传感器。超声波是振动频率高于20KHz的机械波,它具有频率高、波长短、绕射现象小,特别是方向性好、能够成为射线而定向传播等特点。由于超声波指向性强,能量消耗缓慢,在介质中传播的距离较远,因而超声波经常用于距离的测量,如测距仪和物体测量仪等都可以通过超声波来实现。利用超声波检测往往比较迅速方便、计算简单、易于做到实时控制,因此在也用应用于机器人研发上。
本机器人系统使用的HC-SR04是目前市面上使用比较广泛的一种超声波传感器,它采用先进的回波数字滤波跟踪算法,能在嘈杂的电、声噪声中有效捕捉真实的回波。独特的探头设计,改变了由原来的超过一公斤压力不能使用超声波的历史。HC-SR04传感器可提供2cm-400cm的非接触式距离感测功能,测距精度可达高到3mm。
HC-SR04传感器基本工作原理是使用IO口TRIG触发启动测距,提供最少10us的高电平信呈,然后传感器模块会自动发送8个40khz的方波,自动检测是否有信号返回;若有信号返回,通过IO口ECHO输出一个高电平,高电平持续的时间就是超声波从发射到返回的时间。
如时序图所示,使用者提供一个 10us以上脉冲触发信号后,传感器模块内部即刻发出8个40kHz周期电平并检测是否有返回超声波。一旦检测到有回波信号则输出回响信号。回响信号的脉冲宽度与所测的距离成正比,由此我们通过从发射信号到收到回响信号的时间间隔来计算出机器人到障碍物之间的距离,测试距离=(回波时间*声速(340M/S))/2。
受限于传感器规格,在设计实现测距功能后期发现若被测物体的面积小于0.5平方米或者被测物体表面并不平整时,测量结果会出现偏差。为避免此限制影响,在后续测试阶段使用的被测物体面积均大于0.5平方米且表面尽量平整。
3 OLED显示屏
为了将测量数据读出,在机器人上安装一块OLED(Organic Light Emitting Diode)显示屏,即有机发光二极管。OLED具备自发光,不需背光源、对比度高、厚度薄、视角广、反应速度快、可用于挠曲性面板、使用温度范围广、构造及制作流程简单等优异特性,被认为是下一代的平面显示器新兴应用技术。
本系统使用了一块尺寸大小为0.96寸的OLED 显示屏,主要由裸屏和底板PCB组成,裸屏由SSD1306驱动,具有内部升压功能,这也是一种较为广泛使用的LED驱动芯片。该屏驱动电压为3.3-5V,屏幕显示区域为白光字体,黑色底色,分辨率为128*64,使用四针IIC接口,其中有两个信号线接口。
4 设计实现
机器人系统声呐测距以及在OLED屏上显示数值的实现流程可归纳为:机器人启动后首先检测串口是否工作正常,接着检查 HC-SR04传感器和OLED屏是否连接正常,通过命令触发HC-SR04传感器进行测距,若测距成功,在OLED屏显示所测距离数,若OLED屏有亮度却无任何数值显示,则说明测距失败。
为实现上述流程,首先需要将超声波传感器、OLED显示屏和Arduino控制板三者进行物理连接。HC-SR04超声波传感器共有四个引脚,VCC供5V电源,GND为地线,TRIG触发控制信号输入,ECHO回响信号输出。OLED显示屏IIC引脚数也是四个,分别为VCC供5V电源,GND接地接口,SCL在IIC通信中为时钟管脚,SDA在IIC通信中为数据管脚。由于超声波传感与OLED显示屏同时需要与Arduino控制板的5V电源接口和GND接口连接,因此在机器人上加装一个块面包板用于相同引腳的多路连接。超声波传感器的TRIG引脚和ECHO引脚分别与Arduino控制板的IO9号口和IO8号口相连,而OLED显示屏的SCL和SDA管脚分别与Arduino控制板上SCL和SDA接口对应连接。
为了使中文字体呈现在显示屏上,需要预先将中文汉字转换成万国码Unicode。这里使用的转换工具是基于U8glib类库所生成的,U8glib支持众多图形点阵显示器。如下图所示,在输入框输入中文“距离:”,经过转换后即得到每个汉字所对应的十六进制数和调用代码。
六足机器人实现声呐测距以及在OLED屏显示测量数据功能的关键代码实现如下:
#include "U8glib.h" //调用u8glib库
#define Trig 9 //传感器引脚Trig连接控制板9号IO口
#define Echo 8 //传感器引脚Echo连接控制板8号IO口
int gDistance; //定义距离变量
float temp;
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE | U8G_I2C_OPT_DEV_0); //实例化OLED类
void setup() {
Serial.begin(9600);
pinMode(Trig, OUTPUT);
pinMode(Echo, INPUT);
}
//用到的字模数据
const u8g_fntpgm_uint8_t ChineseCode[] U8G_SECTION(".progmem.ChineseCode") = {
0, 16, 16, 0, 254, 0, 0, 0, 0, 0, 1, 3, 0, 14, 254, 0,
//Chinese "距",Unicode:\u8DDD, 调用代码:\x01
15, 14, 28, 16, 0, 255, 125, 254, 69, 0, 69, 0, 69, 0, 125, 252,
17, 4, 17, 4, 93, 4, 81, 4, 81, 252, 81, 0, 93, 0, 225, 0,
1, 254,
//Chinese "离",Unicode:\u79BB, 调用代码:\x02
15, 16, 32, 16, 0, 254, 2, 0, 1, 0, 255, 254, 0, 0, 20, 80,
19, 144, 20, 80, 31, 240, 1, 0, 127, 252, 66, 4, 68, 68, 79, 228,
68, 36, 64, 20, 64, 8,
//Chinese ":",Unicode:\uFF1A, 调用代码:\x03
2, 8, 8, 16, 7, 0, 192, 192, 0, 0, 0, 0, 192, 192
}; //End Chiness Code
void sonar() {
//给Trig发送一个低高低的短时间脉冲,触发测距
digitalWrite(Trig, LOW); //给Trig发送一个低电平
delayMicroseconds(2); //等待 2微妙
digitalWrite(Trig,HIGH); //给Trig发送一个高电平
delayMicroseconds(10); //等待 10微妙
digitalWrite(Trig, LOW); //给Trig发送一个低电平
temp = float(pulseIn(Echo, HIGH)); //存储回波等待时间,
//pulseIn函数会等待引脚变为HIGH,开始计算时间,再等待变为LOW并停止计时
//返回脉冲的长度
//声速是:340m/1s 换算成 34000cm / 1000000μs => 34 / 1000
//因为发送到接收,实际是相同距离走了2回,所以要除以2
//距离(厘米) = (回波时间 * (34 / 1000)) / 2
//简化后的计算公式为 (回波时间 * 17)/ 1000
gDistance = (temp * 17 )/1000; //把回波时间换算成cm
delay(100);
}
void draw() { //OLED绘制,更新
u8g.firstPage();
do {
u8g.setFont(ChineseCode); //设置字体为chinese_test
u8g.drawStr( 0, 19 + 20, "\x01\x02\x03"); //显示字符串 距离:
u8g.setFont(u8g_font_unifont); //设置字体为u8g_font_unifont
u8g.setPrintPos(18 * 2 + 10, 19 + 20); //设置位置为 (46,39)
u8g.print(gDistance); //显示超声波测到的距离
u8g.print(" cm"); //显示单位"cm"
} while ( u8g.nextPage());
}
void loop() {
draw(); //OLED绘制,更新
sonar(); //声纳测距,更新
}
5 验证测试
由于HC-SR04超声波传感器测距范围在2cm-400cm之间,为充分验证六足机器人声呐测距及在OLED屏上显示距离功能是否达到了預期设想,总共进行七次不同距离上的测试,目的就在于保证声呐测距功能的成功率和稳定性,及时发现隐藏缺陷及时修复,同时找出可优化项,加以完善改进。
测试步骤如下:
(1)启动机器人系统,初始化后确保机器人处于高姿态立正静止状态,同时OLED屏开始工作,屏幕上显示“距离:”字样。
(2)使用一块表面较为平整的木板作为测试道具,放置在机器人传感器正前方,超声波传感器被触发测距功能,测距成功后在OLED屏上显示所测距离。同时使用精密直尺手工测量超声波传感器与木板之间的距离,与OLED屏显示数值进行对比。
(3)重复测试7次,每次机器人系统与木板之间距离均不相同,范围在3cm-400cm之间,验证声呐测距功能成功率。
本次声呐测距功能测试最小距离3cm,最大距离超过400cm,超过400cm后超声波传感器会接收不到信号,无法测量。测试结果如表1所示:
6 误差分析
从上表数据可以发现,当超声波传感器与木板之间距离越远,越接近传感器测距最大范围时,传感器测试距离与手工测量距离出现了偏差。出现偏差原因一方面是因为所用木板表面并非完全垂直光滑,实际表面存在凹凸不平,因此对测距产生一定影响;另一方面,由于手工直尺测量距离时只用肉眼观测,并无精确测量仪器,所以也会产生一定的误差。
7 结语
在今年的两会上“人工智能”被多次提及,工业和信息化部、国家发展改革委、财政部等三部委联合印发了《机器人产业发展规划(2016-2020年)》,明确指出机器人产业发展要推进重大标志性产品率先突破。具有高智能、高精度,高可靠性的机器人将在百姓生活、民用工业、军事、太空计划等领域被得到更多广泛使用。本文研究工作在于基于Arduino技术,选择合适的超声波传感器和OLED显示屏安装在六足机器人上,并且设计传感器、显示屏与Arduino控制板的连接电路和控制程序,从而实现六足机器人声呐测距并显示测量数值的新功能。
参考文献:
[1] 许宏岩, 付宜利, 王树国,等.仿生机器人的研究[J].机器人,2014,26( 3):283-288.
[2] SHIBENDU S R, DILIP K P.Soft computing-based expert systems to predict energy consumption and stability margin in turning gaits of six-legged robots[J].Expert Systems with Applications,2012,39:5460-5469.
[3] [澳]John BOXALL.翁恺,译. 动手玩转Arduino[M]. 人民邮电出版社,2014:204-210.
[4] 陈吕洲. Arduino程序设计基础[M].北京航空航天大学出版社,2014.
[5] 程晨. Arduino电子设计实战指南[M].机械工业出版社,2013.
[6] 孙骏荣. Arduino一试就上手[M].机械工业出版社,2012.
[7] Dale wheat. Arduino技术内幕[M]. 人民邮电出版社,2013.
[8] 毛勇. 机器人的天空[M].清华大学出版社,2014.
[9] 麦可罗伯茨. Arduino从基础到实践[M].人民邮电出版社,2010.