任環(huán)宇 曹虎 李道全
摘要:電動(dòng)車(chē)、摩托車(chē)在為了人們出行提供方便的同時(shí),也帶來(lái)了安全隱患。本設(shè)計(jì)開(kāi)發(fā)了一款用于安裝在電動(dòng)車(chē)、摩托車(chē)后置的危險(xiǎn)探測(cè)裝置。探測(cè)手段主要通過(guò)超聲測(cè)距傳感的方式,盡早地探測(cè)出電動(dòng)車(chē)、摩托車(chē)在行駛過(guò)程中遇到的距離過(guò)近的“危險(xiǎn)”,考慮到電動(dòng)車(chē)、摩托車(chē)在形式過(guò)程中的“視野盲區(qū)”,該設(shè)計(jì)為超聲測(cè)距探頭搭載了旋轉(zhuǎn)舵機(jī),以方便探頭周期性地對(duì)“視野盲區(qū)”的各個(gè)方向進(jìn)行有效探測(cè)。同時(shí)設(shè)計(jì)開(kāi)發(fā)了多種預(yù)警模塊,包括語(yǔ)音提示預(yù)警模塊、燈光閃爍預(yù)警模塊,模塊是基于arduino上位機(jī)、語(yǔ)音芯片做下位機(jī)的技術(shù)實(shí)現(xiàn)的。通過(guò)聲光交替預(yù)警的方式,提高后方車(chē)輛的警惕性,盡可能地避免追尾。
關(guān)鍵詞: arduino;超聲測(cè)距;上位機(jī);串口通信;語(yǔ)音合成;預(yù)警裝置
中圖分類(lèi)號(hào):TP391 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2018)25-0273-04
隨著經(jīng)濟(jì)的快速發(fā)展,人們生活水平的提高,出行方式的選擇成為與百姓生活息息相關(guān)的問(wèn)題。在較為發(fā)達(dá)的城市,為了避免出行的擁堵,越來(lái)越多的人選擇使用電動(dòng)車(chē)、摩托車(chē)等便攜式的出行方式。而在農(nóng)村,電動(dòng)車(chē)、摩托車(chē)也更是成為人們出行的主要交通工具。盡管這些交通工具較為方便,但是安全成為一大隱患,尤其是相對(duì)”鐵包肉”的汽車(chē)來(lái)說(shuō),無(wú)疑增大了安全隱患[1]。本項(xiàng)目旨在通過(guò)相關(guān)的設(shè)計(jì)開(kāi)發(fā)來(lái)解決這一隱患。
1 系統(tǒng)總體設(shè)計(jì)
1.1 總體設(shè)計(jì)概述
本項(xiàng)目的重點(diǎn)在各個(gè)模塊的獨(dú)立開(kāi)發(fā)以及各個(gè)模塊的拼接。通過(guò)調(diào)研,各個(gè)模塊所使用的外設(shè)都在arduino有統(tǒng)一的協(xié)議,有較為豐富的開(kāi)發(fā)資源(Arduino ide),非常方便開(kāi)發(fā)者做各種功能的組合實(shí)現(xiàn)。同時(shí),語(yǔ)音模塊和主控arduino板都是支持統(tǒng)一的串口通信協(xié)議,因此只需要做一個(gè)arduino上位機(jī)的通信邏輯,就可以完成該模塊的設(shè)計(jì)。
整個(gè)系統(tǒng)的功能可以分為如下的幾個(gè)模塊:超聲測(cè)距傳感器測(cè)距、舵機(jī)旋轉(zhuǎn)、燈條閃爍邏輯、語(yǔ)音報(bào)警模塊、主控板與語(yǔ)音模塊的串口通信。
系統(tǒng)的流程圖如圖1所示。
1.2 主要設(shè)備介紹
1.2.1 Arduinomega2560
Arduino是一款便捷靈活、方便上手的開(kāi)源電子原型平臺(tái)[2],如圖2所示。包含硬件(各種型號(hào)的Arduino板)和軟件(Arduino IDE)。Arduino能通過(guò)各種各樣的傳感器來(lái)感知環(huán)境,通過(guò)控制燈光、馬達(dá)和其他的裝置來(lái)反饋、影響環(huán)境。板子上的微控制器可以通過(guò)Arduino的編程語(yǔ)言來(lái)編寫(xiě)程序,編譯成二進(jìn)制文件,燒錄進(jìn)微控制器。同時(shí)其軟件平臺(tái)的高級(jí)設(shè)計(jì)語(yǔ)言是基于c語(yǔ)言開(kāi)發(fā)的,非常利于開(kāi)發(fā)者快速學(xué)習(xí)和開(kāi)發(fā)。同時(shí)其開(kāi)源平臺(tái)里有豐富的庫(kù)可用,降低了編程的難度,并提高了本項(xiàng)目的可行性。
1.2.2 超聲波探測(cè)頭
超聲波模塊是一個(gè)用來(lái)測(cè)量距離的電子模塊,如圖3 所示。本項(xiàng)目采用的超聲模塊有如下參數(shù)特性:工作電壓: 5V DC,工作溫度:-25~+80℃,測(cè)量角度:30度范圍內(nèi),測(cè)量范圍:3-400cm(誤差小于1cm),超聲波頻率:42kHz,控制方式:?jiǎn)螖?shù)字口控制。
根據(jù)其參數(shù)特性我們能夠看到,它的測(cè)量角度難以完成對(duì)“視角盲區(qū)”的全部覆蓋,所以搭載舵機(jī)模塊非常有必要。同時(shí)其的探測(cè)距離是3~400cm,在實(shí)際的使用是非常適合的。
1.2.3 舵機(jī)
本設(shè)計(jì)實(shí)用的舵機(jī)型號(hào)是MEDS15,如圖4。相對(duì)于市面上最便宜的9g小舵機(jī),雖然旋轉(zhuǎn)功能二者都可以實(shí)現(xiàn),但是實(shí)踐設(shè)計(jì)過(guò)程中發(fā)現(xiàn),9g小舵機(jī)的舵機(jī)臂固定超聲模塊非常不穩(wěn)定,而這一款舵機(jī)的舵機(jī)臂有一個(gè)常見(jiàn)尺寸的螺絲口,非常容易進(jìn)行結(jié)構(gòu)上的拓展,如圖5所示。
1.2.4 燈條
針對(duì)燈光閃爍預(yù)警模塊,這里簡(jiǎn)單的LED燈閃爍顯然報(bào)警效果太差,所以這里我們采用的是多個(gè)RGB燈串聯(lián)而組成的燈條,如圖6所示。
1.2.5 語(yǔ)音模塊
語(yǔ)音模塊采用的是外包公司基于固定語(yǔ)料庫(kù)開(kāi)發(fā)的獨(dú)立智能語(yǔ)音模塊,如圖7所示。該模塊本身是為語(yǔ)音處理所進(jìn)行量身剪裁的處理芯片,因此從概念上,語(yǔ)音模塊(語(yǔ)音處理芯片和喇叭)雖然也是作為“外設(shè)”,但是與上面給出的外設(shè)是有一些區(qū)別的。
1.2.6 串口通信、上位機(jī)、下位機(jī)簡(jiǎn)介
上文提到,語(yǔ)音模塊是一個(gè)獨(dú)立的處理芯片,為其獨(dú)立供電時(shí),它可以進(jìn)行固定詞條的識(shí)別和反饋發(fā)聲。加上控制燈條、舵機(jī)、超聲模塊的主控arduino處理芯片,因此在本設(shè)計(jì)中,有兩個(gè)處理器,這就存在處理芯片之間的通信邏輯的實(shí)現(xiàn)以及二者“地位”的關(guān)系,作為要控制燈條、舵機(jī)、超聲模塊、語(yǔ)音模塊的主控板arduino,它是上位機(jī),而語(yǔ)音模塊僅僅是用于接收通信信號(hào)之后,完成特定的預(yù)警輸出,因此它是一個(gè)下位機(jī)。而兩個(gè)處理器都支持統(tǒng)一的串口通信標(biāo)準(zhǔn),因此他們之間的信號(hào)傳輸通過(guò)串口通信協(xié)議實(shí)現(xiàn)即可[3]。上下位機(jī)組合圖如圖8所示。
2 系統(tǒng)實(shí)現(xiàn)
對(duì)照上文給出的模塊功能的分類(lèi),下面依次進(jìn)行模塊化的邏輯過(guò)程設(shè)計(jì)。
2.1 超聲模塊
上文提到,arduino開(kāi)發(fā)資源豐富,針對(duì)超聲模塊,本設(shè)計(jì)的arguinomega2560開(kāi)發(fā)板自帶了常用的模塊函數(shù)庫(kù),針對(duì)超聲模塊,直接調(diào)用函數(shù)即可返回測(cè)距結(jié)果。獨(dú)立模塊的測(cè)試參考如下[4]:
#include"MeMegaPi.h"
#include
#include
MeUltrasonicSensorultraSensor(PORT_8);
void setup(){
Serial.begin(9600);
}
void loop(){
Serial.print("Distance:");
Serial.print(ultraSensor.distanceCm());
Serial.println("cm");
delay(100);
}
2.2 舵機(jī)旋轉(zhuǎn):
舵機(jī)模塊的功能設(shè)計(jì)很簡(jiǎn)單,為了能夠讓其搭載的超聲模塊掃描身后180°的視野盲區(qū),設(shè)計(jì)舵機(jī)有如下的邏輯:
While(1){
舵機(jī)臂轉(zhuǎn)動(dòng)到0°處;
延時(shí)1秒;
舵機(jī)臂轉(zhuǎn)動(dòng)到90°處;
延時(shí)1秒;
舵機(jī)臂轉(zhuǎn)動(dòng)到180°處;
延時(shí)1秒
}
通過(guò)這樣一個(gè)簡(jiǎn)單的算法設(shè)計(jì),我們就能夠保證超聲模塊一直在做周期性的等時(shí)間間距的掃描動(dòng)作。關(guān)于舵機(jī)的驅(qū)動(dòng)程序的設(shè)計(jì)此處略去,主函數(shù)程序如下:
voidloop(){
servo_6_1.write(0);
_delay(1);
servo_6_1.write(90);
_delay(1);
servo_6_1.write(180);
delay(1);
_loop();
}
2.3 燈條閃爍邏輯
考慮到預(yù)警效果,這里燈條的閃爍邏輯為紅燈并且間隔延時(shí)較短。定義Dis是當(dāng)前時(shí)間超聲探頭模塊返回的障礙物距離,單位是厘米。
Void LightWarning()
If(Dis < 250){//后方障礙物距離小于2.5m,有追尾危險(xiǎn),開(kāi)始燈光報(bào)警
燈條各燈的RGB參數(shù)設(shè)置成(255, 0 ,0);
延時(shí)0.2s;
燈條各燈的RGB參數(shù)設(shè)置成(0,0,0);//達(dá)到閃爍效果
延時(shí)0.2s;
}
燈條驅(qū)動(dòng)程序細(xì)節(jié)略去,主程序如下:
void LightWarning(){
rgbled_6_2.setColor(0,255,0,0);
rgbled_6_2.show();
_delay(0.2);
gbled_6_2.setColor(0,0,0,0);
rgbled_6_2.show();
_delay(0.2);
_loop();
}
2.4 語(yǔ)音報(bào)警模塊
上文提及,該模塊是基于語(yǔ)料庫(kù)的外包處理器,使能夠單獨(dú)工作的。其能夠完成固定詞條的識(shí)別、對(duì)應(yīng)反饋文本的語(yǔ)音輸出,在這個(gè)設(shè)計(jì)中,我們只需要它的文本轉(zhuǎn)語(yǔ)音功能,以提示使用本設(shè)計(jì)的自電動(dòng)車(chē)、摩托車(chē)車(chē)主尾部存在追尾危險(xiǎn)。
語(yǔ)音模塊內(nèi)部實(shí)現(xiàn)了一個(gè)語(yǔ)音相關(guān)功能的指令協(xié)議,針對(duì)本設(shè)計(jì)所需要的功能,如下指令有關(guān):
@TextToSpeech#文本$
對(duì)該指令進(jìn)行簡(jiǎn)要的說(shuō)明”@”、“#”、“$”均為指令的控制符,用于指令編譯使用。TextToSpeech是關(guān)鍵字,表示這一條指令的功能是將文本轉(zhuǎn)化成語(yǔ)音。而想要轉(zhuǎn)換的具體的文字就在“文本”中體現(xiàn)。其工作模式是,語(yǔ)音模塊在通電之后自動(dòng)從串口中讀取字符串指令,當(dāng)遇到“$”控制符,完成一條指令的讀取,然后語(yǔ)音模塊中集成的編譯器對(duì)指令進(jìn)行解讀,將其轉(zhuǎn)化成可執(zhí)行代碼,然后執(zhí)行。
將語(yǔ)音模塊與PC進(jìn)行連接,打開(kāi)串口。
2.5 主控板與語(yǔ)音模塊的串口通信
對(duì)照上文給出的數(shù)據(jù)流圖,arduino作為探測(cè)傳感并發(fā)出控制指令的上位機(jī),在探測(cè)到障礙物距離過(guò)近的時(shí)候,將發(fā)送控制指令給串口,語(yǔ)音模塊下位機(jī)將自動(dòng)讀取串口中的數(shù)據(jù)并執(zhí)行指令[5]。算法偽代碼如下:
上位機(jī):
Void SpeechWarning()
Begin:
超聲探測(cè)模塊探測(cè),返回給整型變量Dis;
If(Dis < 250)//超聲模塊返回值單位是cm
Serial.print(“@TexttoSpeech#正前方/左后方/右后方存在障礙!$”);
End;
2.6 模塊綜合
分別完成各個(gè)模塊的獨(dú)立調(diào)試后,需要完成對(duì)各個(gè)模塊的連接工作,參照上文給出的數(shù)據(jù)流圖,本設(shè)計(jì)總的邏輯設(shè)計(jì)如下:
Void Solve(){
If(Dis > 250) retrun;
Else {
SpeechWarning();
LightWarning();
}
}
While(通電){
舵機(jī)旋轉(zhuǎn)到0°;
Dis = getDistance();
Solve();
Delay(1500);
舵機(jī)旋轉(zhuǎn)到90°;
Dis = getDistance();
Solve();
Delay(1500);
舵機(jī)旋轉(zhuǎn)到180°;
Dis = getDistance();
Solve();
Delay(1500);
}
3 結(jié)束語(yǔ)
通過(guò)上述設(shè)計(jì)與實(shí)現(xiàn),完成電動(dòng)車(chē)與摩托車(chē)后置安全的報(bào)警功能。本設(shè)計(jì)的優(yōu)點(diǎn)與創(chuàng)新主要有以下兩點(diǎn):
1) 采用聲音和語(yǔ)音報(bào)警模塊相結(jié)合的方式,對(duì)使用者后車(chē)體尾部的車(chē)進(jìn)行的雙向報(bào)警,這樣的模式能夠大大鏟除潛在危機(jī)。
2) 本設(shè)計(jì)將超聲模塊搭載在舵機(jī)上的創(chuàng)意思維,將超聲測(cè)距模塊的掃描范圍覆蓋了尾部的180°視野盲區(qū),這樣做能夠再次降低危險(xiǎn)發(fā)成的概率。
該系統(tǒng)當(dāng)前階段的缺陷在于,系統(tǒng)的穩(wěn)定性有待于進(jìn)一步測(cè)試和改善,在以后的升級(jí)過(guò)程中,將考慮主控模塊、芯片的進(jìn)一步裁剪工作。
參考文獻(xiàn):
[1] 熊和金.一種電動(dòng)車(chē)安全行駛的智能聲光報(bào)警裝置[P].實(shí)用新型專(zhuān)利:CN201521074280.7,2016.07.06.
[2] Makeblock硬件官方參數(shù)參考表目.http://learn.makeblock.com/cn/megapi/,2017,2.
[3] 趙司琦,俞繼偉,王廣田,謝怡寧.基于Arduino的Tennsy BadUSB改良型共享云盾的設(shè)計(jì)與研究[J].電腦知識(shí)與技術(shù),2017(36):36-38+45.
[4] Wolfram Donat .Chaim Krause. Learn Raspberry PiProgramming with Python[M].韓德強(qiáng)譯.北京:機(jī)械工業(yè)出版社,2017.
[5] 章杰瑞,周屹.基于Arduino和PIC單片機(jī)智能小車(chē)平臺(tái)的研究與設(shè)計(jì)[J].電腦知識(shí)與技術(shù),2017(29):187-190.
【通聯(lián)編輯:梁書(shū)】