陳軍俊
摘要:隨著投入仿生六足機(jī)器人的研究越來越多,對(duì)機(jī)器人適應(yīng)未知環(huán)境能力的要求也越來越高。Arduino是一款基于單片機(jī)系統(tǒng)開發(fā)的軟硬件平臺(tái),具有控制與之連接的各類傳感器來感知周圍環(huán)境的特點(diǎn)。本文介紹了通過在六足機(jī)器人上安裝超聲波傳感器和OLED顯示屏,然后基于Arduino技術(shù)開發(fā),利用超聲波傳感器設(shè)計(jì)原理來實(shí)現(xiàn)六足機(jī)器人聲吶測(cè)距功能,并且將測(cè)量數(shù)據(jù)顯示在OLED屏上。最后通過多次測(cè)試,驗(yàn)證該功能設(shè)計(jì)實(shí)現(xiàn)成功。
關(guān)鍵詞:Arduino;超聲波傳感器;OLED顯示屏;聲吶測(cè)距
中圖分類號(hào):TP391 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):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
近年來在仿生機(jī)器人領(lǐng)域的研究愈發(fā)受到重視,主要原因是由于目前地球上大多數(shù)地形環(huán)境均是輪型或鏈型的交通工具所無法到達(dá)的。當(dāng)前仿生式機(jī)器人在非對(duì)稱非結(jié)構(gòu)化的環(huán)境中已經(jīng)具備良好的運(yùn)動(dòng)能力,于是進(jìn)一步的要求仿生機(jī)器人在未知的環(huán)境中具有更強(qiáng)大的適應(yīng)能力,不需經(jīng)過電腦的復(fù)雜運(yùn)算,即可立即對(duì)復(fù)雜環(huán)境的變化做出反應(yīng)。
Arduino是一款基于單片機(jī)系統(tǒng)開發(fā)的軟硬件平臺(tái),構(gòu)建于開放源代碼Simple I/O接口板,使用類似 Java,C語言的Processing/Wiring開發(fā)環(huán)境。該平臺(tái)既包括微處理器、電路控制板等硬件部分,也包括編程接口、語言等軟件部分。將Arduino技術(shù)應(yīng)用在仿生六足機(jī)器人上,通過在Arduino控制板上連接各種電子設(shè)備,例如LED燈、馬達(dá)、開關(guān)、傳感器、OLED顯示屏等設(shè)備來實(shí)現(xiàn)仿生機(jī)器人可感知環(huán)境、適應(yīng)環(huán)境,最終使得六足機(jī)器人具有更高的精確性、靈活性和可靠性。
本文介紹了基于Arduino技術(shù)開發(fā),根據(jù)安裝在六足機(jī)器人上的超聲波傳感器和OLED顯示屏來設(shè)計(jì)出相應(yīng)的電路結(jié)構(gòu)和控制程序,從而實(shí)現(xiàn)六足機(jī)器人聲吶測(cè)距并將測(cè)量數(shù)據(jù)顯示在OLED屏上這一功能。最后通過多次測(cè)試,驗(yàn)證該功能設(shè)計(jì)實(shí)現(xiàn)成功。
1 Arduino控制板
本設(shè)計(jì)中使用的是作為Arduino平臺(tái)提供參考的標(biāo)準(zhǔn)模板Arduino Leonardo,是Arduino系列中的最新版本,核心采用的微處理器是ATmega32U4,工作電壓5V,具有32KB的Flash(其中4KB被引導(dǎo)程序使用)以及2.5KB的SRAM和1KB的EEPROM,它共有20個(gè)數(shù)字輸入/輸出引腳,其中7個(gè)用于PWM輸出,12個(gè)用于模擬輸入,每個(gè)模擬輸入都有10位分辨率(即1024個(gè)不同值),一個(gè)16 MHZ的晶體振蕩器,一個(gè)Micro USB接口,一個(gè)直流電源接口,一個(gè)復(fù)位按鈕等。Arduino Leonardo可以通過3種方式供電,而且能自動(dòng)選擇供電方式:外部直流電源通過電源插座供電、電池連接電源連接器的GND和VIN引腳、USB接口直接供電,這也提供了供電的低耗和方便供電的特點(diǎn)。
Leonardo不同于之前所有的Arduino控制板,他直接使用了ATmega32u4的USB通信功能,取消了USB轉(zhuǎn)UART芯片。這使得Leonardo不僅可以作為一個(gè)虛擬的(CDC)串行/ COM端口,還可以作為鼠標(biāo)或者鍵盤連接到計(jì)算機(jī)。
2 超聲波傳感器
超聲波傳感器是將超聲波信號(hào)轉(zhuǎn)換成其他電信號(hào)的傳感器。超聲波是振動(dòng)頻率高于20KHz的機(jī)械波,它具有頻率高、波長(zhǎng)短、繞射現(xiàn)象小,特別是方向性好、能夠成為射線而定向傳播等特點(diǎn)。由于超聲波指向性強(qiáng),能量消耗緩慢,在介質(zhì)中傳播的距離較遠(yuǎn),因而超聲波經(jīng)常用于距離的測(cè)量,如測(cè)距儀和物體測(cè)量?jī)x等都可以通過超聲波來實(shí)現(xiàn)。利用超聲波檢測(cè)往往比較迅速方便、計(jì)算簡(jiǎn)單、易于做到實(shí)時(shí)控制,因此在也用應(yīng)用于機(jī)器人研發(fā)上。
本機(jī)器人系統(tǒng)使用的HC-SR04是目前市面上使用比較廣泛的一種超聲波傳感器,它采用先進(jìn)的回波數(shù)字濾波跟蹤算法,能在嘈雜的電、聲噪聲中有效捕捉真實(shí)的回波。獨(dú)特的探頭設(shè)計(jì),改變了由原來的超過一公斤壓力不能使用超聲波的歷史。HC-SR04傳感器可提供2cm-400cm的非接觸式距離感測(cè)功能,測(cè)距精度可達(dá)高到3mm。
HC-SR04傳感器基本工作原理是使用IO口TRIG觸發(fā)啟動(dòng)測(cè)距,提供最少10us的高電平信呈,然后傳感器模塊會(huì)自動(dòng)發(fā)送8個(gè)40khz的方波,自動(dòng)檢測(cè)是否有信號(hào)返回;若有信號(hào)返回,通過IO口ECHO輸出一個(gè)高電平,高電平持續(xù)的時(shí)間就是超聲波從發(fā)射到返回的時(shí)間。
如時(shí)序圖所示,使用者提供一個(gè) 10us以上脈沖觸發(fā)信號(hào)后,傳感器模塊內(nèi)部即刻發(fā)出8個(gè)40kHz周期電平并檢測(cè)是否有返回超聲波。一旦檢測(cè)到有回波信號(hào)則輸出回響信號(hào)。回響信號(hào)的脈沖寬度與所測(cè)的距離成正比,由此我們通過從發(fā)射信號(hào)到收到回響信號(hào)的時(shí)間間隔來計(jì)算出機(jī)器人到障礙物之間的距離,測(cè)試距離=(回波時(shí)間*聲速(340M/S))/2。
受限于傳感器規(guī)格,在設(shè)計(jì)實(shí)現(xiàn)測(cè)距功能后期發(fā)現(xiàn)若被測(cè)物體的面積小于0.5平方米或者被測(cè)物體表面并不平整時(shí),測(cè)量結(jié)果會(huì)出現(xiàn)偏差。為避免此限制影響,在后續(xù)測(cè)試階段使用的被測(cè)物體面積均大于0.5平方米且表面盡量平整。
3 OLED顯示屏
為了將測(cè)量數(shù)據(jù)讀出,在機(jī)器人上安裝一塊OLED(Organic Light Emitting Diode)顯示屏,即有機(jī)發(fā)光二極管。OLED具備自發(fā)光,不需背光源、對(duì)比度高、厚度薄、視角廣、反應(yīng)速度快、可用于撓曲性面板、使用溫度范圍廣、構(gòu)造及制作流程簡(jiǎn)單等優(yōu)異特性,被認(rèn)為是下一代的平面顯示器新興應(yīng)用技術(shù)。
本系統(tǒng)使用了一塊尺寸大小為0.96寸的OLED 顯示屏,主要由裸屏和底板PCB組成,裸屏由SSD1306驅(qū)動(dòng),具有內(nèi)部升壓功能,這也是一種較為廣泛使用的LED驅(qū)動(dòng)芯片。該屏驅(qū)動(dòng)電壓為3.3-5V,屏幕顯示區(qū)域?yàn)榘坠庾煮w,黑色底色,分辨率為128*64,使用四針I(yè)IC接口,其中有兩個(gè)信號(hào)線接口。
4 設(shè)計(jì)實(shí)現(xiàn)
機(jī)器人系統(tǒng)聲吶測(cè)距以及在OLED屏上顯示數(shù)值的實(shí)現(xiàn)流程可歸納為:機(jī)器人啟動(dòng)后首先檢測(cè)串口是否工作正常,接著檢查 HC-SR04傳感器和OLED屏是否連接正常,通過命令觸發(fā)HC-SR04傳感器進(jìn)行測(cè)距,若測(cè)距成功,在OLED屏顯示所測(cè)距離數(shù),若OLED屏有亮度卻無任何數(shù)值顯示,則說明測(cè)距失敗。
為實(shí)現(xiàn)上述流程,首先需要將超聲波傳感器、OLED顯示屏和Arduino控制板三者進(jìn)行物理連接。HC-SR04超聲波傳感器共有四個(gè)引腳,VCC供5V電源,GND為地線,TRIG觸發(fā)控制信號(hào)輸入,ECHO回響信號(hào)輸出。OLED顯示屏IIC引腳數(shù)也是四個(gè),分別為VCC供5V電源,GND接地接口,SCL在IIC通信中為時(shí)鐘管腳,SDA在IIC通信中為數(shù)據(jù)管腳。由于超聲波傳感與OLED顯示屏同時(shí)需要與Arduino控制板的5V電源接口和GND接口連接,因此在機(jī)器人上加裝一個(gè)塊面包板用于相同引腳的多路連接。超聲波傳感器的TRIG引腳和ECHO引腳分別與Arduino控制板的IO9號(hào)口和IO8號(hào)口相連,而OLED顯示屏的SCL和SDA管腳分別與Arduino控制板上SCL和SDA接口對(duì)應(yīng)連接。
為了使中文字體呈現(xiàn)在顯示屏上,需要預(yù)先將中文漢字轉(zhuǎn)換成萬國(guó)碼Unicode。這里使用的轉(zhuǎn)換工具是基于U8glib類庫(kù)所生成的,U8glib支持眾多圖形點(diǎn)陣顯示器。如下圖所示,在輸入框輸入中文“距離:”,經(jīng)過轉(zhuǎn)換后即得到每個(gè)漢字所對(duì)應(yīng)的十六進(jìn)制數(shù)和調(diào)用代碼。
六足機(jī)器人實(shí)現(xiàn)聲吶測(cè)距以及在OLED屏顯示測(cè)量數(shù)據(jù)功能的關(guān)鍵代碼實(shí)現(xiàn)如下:
#include "U8glib.h" //調(diào)用u8glib庫(kù)
#define Trig 9 //傳感器引腳Trig連接控制板9號(hào)IO口
#define Echo 8 //傳感器引腳Echo連接控制板8號(hào)IO口
int gDistance; //定義距離變量
float temp;
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE | U8G_I2C_OPT_DEV_0); //實(shí)例化OLED類
void setup() {
Serial.begin(9600);
pinMode(Trig, OUTPUT);
pinMode(Echo, INPUT);
}
//用到的字模數(shù)據(jù)
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, 調(diào)用代碼:\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, 調(diào)用代碼:\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, 調(diào)用代碼:\x03
2, 8, 8, 16, 7, 0, 192, 192, 0, 0, 0, 0, 192, 192
}; //End Chiness Code
void sonar() {
//給Trig發(fā)送一個(gè)低高低的短時(shí)間脈沖,觸發(fā)測(cè)距
digitalWrite(Trig, LOW); //給Trig發(fā)送一個(gè)低電平
delayMicroseconds(2); //等待 2微妙
digitalWrite(Trig,HIGH); //給Trig發(fā)送一個(gè)高電平
delayMicroseconds(10); //等待 10微妙
digitalWrite(Trig, LOW); //給Trig發(fā)送一個(gè)低電平
temp = float(pulseIn(Echo, HIGH)); //存儲(chǔ)回波等待時(shí)間,
//pulseIn函數(shù)會(huì)等待引腳變?yōu)镠IGH,開始計(jì)算時(shí)間,再等待變?yōu)長(zhǎng)OW并停止計(jì)時(shí)
//返回脈沖的長(zhǎng)度
//聲速是:340m/1s 換算成 34000cm / 1000000μs => 34 / 1000
//因?yàn)榘l(fā)送到接收,實(shí)際是相同距離走了2回,所以要除以2
//距離(厘米) = (回波時(shí)間 * (34 / 1000)) / 2
//簡(jiǎn)化后的計(jì)算公式為 (回波時(shí)間 * 17)/ 1000
gDistance = (temp * 17 )/1000; //把回波時(shí)間換算成cm
delay(100);
}
void draw() { //OLED繪制,更新
u8g.firstPage();
do {
u8g.setFont(ChineseCode); //設(shè)置字體為chinese_test
u8g.drawStr( 0, 19 + 20, "\x01\x02\x03"); //顯示字符串 距離:
u8g.setFont(u8g_font_unifont); //設(shè)置字體為u8g_font_unifont
u8g.setPrintPos(18 * 2 + 10, 19 + 20); //設(shè)置位置為 (46,39)
u8g.print(gDistance); //顯示超聲波測(cè)到的距離
u8g.print(" cm"); //顯示單位"cm"
} while ( u8g.nextPage());
}
void loop() {
draw(); //OLED繪制,更新
sonar(); //聲納測(cè)距,更新
}
5 驗(yàn)證測(cè)試
由于HC-SR04超聲波傳感器測(cè)距范圍在2cm-400cm之間,為充分驗(yàn)證六足機(jī)器人聲吶測(cè)距及在OLED屏上顯示距離功能是否達(dá)到了預(yù)期設(shè)想,總共進(jìn)行七次不同距離上的測(cè)試,目的就在于保證聲吶測(cè)距功能的成功率和穩(wěn)定性,及時(shí)發(fā)現(xiàn)隱藏缺陷及時(shí)修復(fù),同時(shí)找出可優(yōu)化項(xiàng),加以完善改進(jìn)。
測(cè)試步驟如下:
(1)啟動(dòng)機(jī)器人系統(tǒng),初始化后確保機(jī)器人處于高姿態(tài)立正靜止?fàn)顟B(tài),同時(shí)OLED屏開始工作,屏幕上顯示“距離:”字樣。
(2)使用一塊表面較為平整的木板作為測(cè)試道具,放置在機(jī)器人傳感器正前方,超聲波傳感器被觸發(fā)測(cè)距功能,測(cè)距成功后在OLED屏上顯示所測(cè)距離。同時(shí)使用精密直尺手工測(cè)量超聲波傳感器與木板之間的距離,與OLED屏顯示數(shù)值進(jìn)行對(duì)比。
(3)重復(fù)測(cè)試7次,每次機(jī)器人系統(tǒng)與木板之間距離均不相同,范圍在3cm-400cm之間,驗(yàn)證聲吶測(cè)距功能成功率。
本次聲吶測(cè)距功能測(cè)試最小距離3cm,最大距離超過400cm,超過400cm后超聲波傳感器會(huì)接收不到信號(hào),無法測(cè)量。測(cè)試結(jié)果如表1所示:
6 誤差分析
從上表數(shù)據(jù)可以發(fā)現(xiàn),當(dāng)超聲波傳感器與木板之間距離越遠(yuǎn),越接近傳感器測(cè)距最大范圍時(shí),傳感器測(cè)試距離與手工測(cè)量距離出現(xiàn)了偏差。出現(xiàn)偏差原因一方面是因?yàn)樗媚景灞砻娌⒎峭耆怪惫饣?,?shí)際表面存在凹凸不平,因此對(duì)測(cè)距產(chǎn)生一定影響;另一方面,由于手工直尺測(cè)量距離時(shí)只用肉眼觀測(cè),并無精確測(cè)量?jī)x器,所以也會(huì)產(chǎn)生一定的誤差。
7 結(jié)語
在今年的兩會(huì)上“人工智能”被多次提及,工業(yè)和信息化部、國(guó)家發(fā)展改革委、財(cái)政部等三部委聯(lián)合印發(fā)了《機(jī)器人產(chǎn)業(yè)發(fā)展規(guī)劃(2016-2020年)》,明確指出機(jī)器人產(chǎn)業(yè)發(fā)展要推進(jìn)重大標(biāo)志性產(chǎn)品率先突破。具有高智能、高精度,高可靠性的機(jī)器人將在百姓生活、民用工業(yè)、軍事、太空計(jì)劃等領(lǐng)域被得到更多廣泛使用。本文研究工作在于基于Arduino技術(shù),選擇合適的超聲波傳感器和OLED顯示屏安裝在六足機(jī)器人上,并且設(shè)計(jì)傳感器、顯示屏與Arduino控制板的連接電路和控制程序,從而實(shí)現(xiàn)六足機(jī)器人聲吶測(cè)距并顯示測(cè)量數(shù)值的新功能。
參考文獻(xiàn):
[1] 許宏巖, 付宜利, 王樹國(guó),等.仿生機(jī)器人的研究[J].機(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.翁愷,譯. 動(dòng)手玩轉(zhuǎn)Arduino[M]. 人民郵電出版社,2014:204-210.
[4] 陳呂洲. Arduino程序設(shè)計(jì)基礎(chǔ)[M].北京航空航天大學(xué)出版社,2014.
[5] 程晨. Arduino電子設(shè)計(jì)實(shí)戰(zhàn)指南[M].機(jī)械工業(yè)出版社,2013.
[6] 孫駿榮. Arduino一試就上手[M].機(jī)械工業(yè)出版社,2012.
[7] Dale wheat. Arduino技術(shù)內(nèi)幕[M]. 人民郵電出版社,2013.
[8] 毛勇. 機(jī)器人的天空[M].清華大學(xué)出版社,2014.
[9] 麥可羅伯茨. Arduino從基礎(chǔ)到實(shí)踐[M].人民郵電出版社,2010.