喻語(yǔ)嫣 肖明杰
(武漢文理學(xué)院信息與計(jì)算機(jī)學(xué)院 湖北武漢 430345)
近年來(lái),隨著科學(xué)技術(shù)的飛速發(fā)展,智能移動(dòng)機(jī)器人技術(shù)也在不斷發(fā)展,傳統(tǒng)的機(jī)械運(yùn)輸方式有被取代的趨勢(shì)。對(duì)可移動(dòng)目標(biāo)能夠自動(dòng)跟隨的智能小車,在搬運(yùn)行李、運(yùn)輸材料以及人們?nèi)粘I钪杏兄鴱V泛的應(yīng)用前景[1-2]。目前,市場(chǎng)上已經(jīng)存在一些具有自主巡線功能的移動(dòng)小車類產(chǎn)品,但是需要提前規(guī)劃好路經(jīng),設(shè)置好程序才能進(jìn)行無(wú)人車運(yùn)行,在小車目標(biāo)跟隨方面考慮得比較少,跟隨效果比較差[3-5]。還有一部分智能小車?yán)脭z像頭來(lái)獲得跟隨目標(biāo)的運(yùn)動(dòng)狀態(tài),然后利用云端計(jì)算機(jī)結(jié)合目標(biāo)檢測(cè)算法對(duì)小車采集到的視頻流進(jìn)行實(shí)時(shí)分析計(jì)算,這種方法跟隨效果較好,抗干擾能力強(qiáng),但實(shí)現(xiàn)過(guò)程比較復(fù)雜,對(duì)技術(shù)有很高的要求[6-10]。本文設(shè)計(jì)了一款基于紅外技術(shù)和超聲波測(cè)距的智能跟隨小車,可實(shí)現(xiàn)小車對(duì)人的自動(dòng)跟隨,并與人保持0.5 m的安全距離,防止碰撞,具有工作穩(wěn)定、成本低、便于推廣的特點(diǎn)。
該系統(tǒng)主要是由硬件和軟件兩部分組成。系統(tǒng)結(jié)構(gòu)圖如圖1所示。
圖1 系統(tǒng)結(jié)構(gòu)圖
它包含穩(wěn)壓電路的設(shè)計(jì)、人體紅外感應(yīng)模塊、超聲波模塊、L298N 驅(qū)動(dòng)模塊。該車以AT89C52 單片機(jī)為核心,通過(guò)3 個(gè)人體紅外模塊識(shí)別人體特有的紅外線信息,同時(shí)通過(guò)超聲波傳感器測(cè)量人與小車的距離,將兩種信號(hào)同時(shí)傳給AT89C52 芯片進(jìn)行處理,將處理后的信號(hào)傳給電機(jī)驅(qū)動(dòng)器來(lái)實(shí)現(xiàn)小車的轉(zhuǎn)彎,直行和后退。當(dāng)左邊傳感器或者左邊和中間傳感器檢均測(cè)到信號(hào)時(shí)小車左轉(zhuǎn);當(dāng)右邊傳感器或者右邊和中間傳感器均檢測(cè)到信號(hào)時(shí)小車右轉(zhuǎn);只有中間傳感器檢測(cè)到信號(hào)時(shí)直行;左右傳感器同時(shí)檢測(cè)到信號(hào)為誤判,小車還是直行;3 個(gè)傳感器均未檢測(cè)到信號(hào)時(shí),小車停止;當(dāng)人與小車的距離小于0.5 m時(shí),小車報(bào)警并后退。
該系統(tǒng)中智能車使用電源控制芯片有MIC29302和SPX2940。如果給車供電的電池電壓過(guò)大,可能擊壞小車的核心控制芯片或者模塊。所以,選擇MIC29302和SPX2940這兩個(gè)穩(wěn)壓芯片來(lái)控制輸入電壓的大小,從而降低損耗。
MIC29302芯片在本設(shè)計(jì)中的作用是將輸入電壓降到6 V之后給驅(qū)動(dòng)模塊供電,防止輸入電壓過(guò)大。電機(jī)驅(qū)動(dòng)芯片的電壓要求是6~12 V,該設(shè)計(jì)使用了兩個(gè)電機(jī),當(dāng)它接入的電壓值過(guò)大時(shí),電機(jī)的轉(zhuǎn)速過(guò)快,導(dǎo)致難以控制,會(huì)給后期調(diào)試帶來(lái)一定的難度,所以用MIC29302芯片將輸入電壓降到6 V。此芯片所能承受的輸入點(diǎn)電壓范圍為2.25~26 V,輸出電壓為1.24~25 V;可承受最大的電流為3 A;6 V 降壓模塊原理圖詳如圖2所示。
圖2 6 V降壓模塊原理圖
SPX2940-5.0 芯片在本設(shè)計(jì)中的作用是將6 V 的輸入電壓降到5 V,從而給AT89C52核心芯片以及其他模塊供電。此芯片輸入電壓最大值為26 V,輸出點(diǎn)電壓為5 V;最大承受電流為1 A;5 V降壓模塊原理圖詳見(jiàn)圖3。
圖3 5 V降壓模塊原理圖
圖3 中1N5819 二極管作用還是用來(lái)判斷電源是否接反了;電容的主要作用是濾波;LED燈是用來(lái)檢查焊接的電路是否正常工作。
此模塊是HC-SR501 模塊,人體紅外感應(yīng)模塊原理圖如圖4所示。
圖4 人體紅外感應(yīng)模塊原理圖
Trig 是輸入觸發(fā)信號(hào)(可以觸發(fā)測(cè)距),Echo 是傳出信號(hào)反響(可以傳回時(shí)間差)。超聲波HC-SR04 采用IO口TRIG觸發(fā)測(cè)距,給一個(gè)最低為10 μs的高電平信號(hào),當(dāng)其在正常頻率工作時(shí)會(huì)隨機(jī)發(fā)射出8 個(gè)頻率在40 kHz 以下的方波,并且它具有自動(dòng)地檢測(cè)有無(wú)信號(hào)返回的功能[11-13]。接收返回的信號(hào)時(shí),ECHO口會(huì)立即自動(dòng)地輸出一個(gè)高電平,超聲波信號(hào)來(lái)回的總的路程與所用的持續(xù)時(shí)間,等于超聲波輸出一個(gè)高電平需要持續(xù)的總時(shí)間長(zhǎng)度。此模塊測(cè)得的最遠(yuǎn)距離為4 m,測(cè)得的最近距離為2 cm,將此超聲波避障測(cè)距模塊固定在車頭前方,作用是測(cè)試前方的人與小車之間的距離。在測(cè)試過(guò)程中發(fā)現(xiàn),當(dāng)小車與人的距離過(guò)近時(shí),人后退而小車后退速度太慢,就很容易踩到小車。經(jīng)過(guò)多次實(shí)驗(yàn),小車與人的距離大于0.5 m 時(shí),人后退就很難踩到小車。基于以上的原因,本設(shè)計(jì)添加了當(dāng)小車與人的距離小于0.5 m時(shí)報(bào)警并后退的功能,保證人與小車之間的安全距離,防止發(fā)生碰撞。
此模塊的作用是用來(lái)顯示紅外模塊和超聲波模塊傳送回來(lái)的信號(hào)值。它的工作電壓為4.5~5.5 V,工作電流為2 mA。5 kΩ 滑動(dòng)變阻器是用來(lái)調(diào)節(jié)LCD1602的顯示亮度的,RS在此模塊中充當(dāng)?shù)氖敲詈蛿?shù)據(jù)區(qū)分的作用,當(dāng)RS處于低電平狀態(tài)時(shí),則它的工作是命令,否則工作狀態(tài)為數(shù)據(jù);RW是讀和寫(xiě)(數(shù)據(jù)或命令)的選擇引腳,當(dāng)RW處于高電平的狀態(tài)時(shí),則是從LCD1602讀取命令或者數(shù)據(jù),否則是向LCD1602寫(xiě)入數(shù)據(jù)或者命令;WR為模塊的使能端。D0-D7對(duì)應(yīng)的是LCD1602的數(shù)據(jù)輸入和輸出引腳。此模塊的最佳工作電壓為5 V,在5 V時(shí)顯示的數(shù)據(jù)最為清楚。
該主控模塊主要的功能是由控制芯片L298N來(lái)同時(shí)控制左右兩個(gè)步進(jìn)電機(jī)的偏正方向或正向反轉(zhuǎn),以及可自動(dòng)地改變正負(fù)兩個(gè)同步電機(jī)轉(zhuǎn)子間電機(jī)的同步與轉(zhuǎn)速。L298N驅(qū)動(dòng)模塊原理圖詳見(jiàn)圖5。
圖5 L298N驅(qū)動(dòng)模塊原理圖
L298N 芯片是一種具有高壓、大輸出電流輸入的雙全橋式驅(qū)動(dòng)器。其SENSEA、SENSEB芯片分別也都是帶有兩個(gè)H橋式的高壓輸出大輸入電流輸出反饋輸出插腳,在不用時(shí)也可進(jìn)行連接。VCC、VS 接口兩端基本都是串接一個(gè)工作電源引腳,電流范圍上一般會(huì)分別設(shè)置約為直流的4.5~7 V、2.5~46 V,在單片機(jī)實(shí)際電路設(shè)計(jì)中使用情況中一般是VCC 輸入輸出端會(huì)單獨(dú)和單片機(jī)電源端在一起用來(lái)共享一個(gè)5 V左右的工作電源,而VS接口輸出電源端口則通常只可以單獨(dú)地用來(lái)接受另一個(gè)6~12 V 供電。ENA、ENB 輸入端是一個(gè)使能的輸出端口,在低的電流平時(shí)它是一個(gè)阻攔電流輸出。IN1、IN2、IN3、IN4 分別設(shè)為數(shù)據(jù)輸出的輸入端口引腳,是用來(lái)控制OUT1、OUT2、OUT3、OUT4 上面的電平的。OUT1、OUT2、OUT3、OUT4分別均設(shè)置為數(shù)據(jù)輸出的輸出引腳控制的是外接的電機(jī)轉(zhuǎn)動(dòng)。D1~D8都是保護(hù)放電二極管(SS34)的二極管,用途是保護(hù)或釋放掉蓄電池在啟動(dòng)電機(jī)后突然停車或放電結(jié)束時(shí)放電產(chǎn)生發(fā)射出來(lái)電流的回響反映尖峰電勢(shì),如果不釋放它則會(huì)擊壞L298。
該車首先通過(guò)51單片機(jī)作為總控芯片,然后通過(guò)紅外模塊進(jìn)行人體檢測(cè),將所采集的信號(hào)以0或1的數(shù)據(jù)返回給單片機(jī);之后使用超聲波模塊,對(duì)前進(jìn)時(shí)的障礙物進(jìn)行距離檢測(cè),當(dāng)前方固定范圍內(nèi)沒(méi)有障礙物存在時(shí)進(jìn)行正常的形式,當(dāng)前方范圍存在障礙物時(shí)進(jìn)行后退報(bào)警;最后將紅外模塊和超聲波模塊所采集到的數(shù)據(jù)在顯示屏上展示出來(lái),智能跟隨小車實(shí)物如圖6所示。
圖6 智能跟隨小車實(shí)物圖
上電之后先進(jìn)行系統(tǒng)初始化,包括定時(shí)器、人體紅外、超聲波、lcd1602等模塊初始化。本系統(tǒng)中定時(shí)器是用于人體紅外模塊檢測(cè),超聲波檢測(cè)和PWM信號(hào)的產(chǎn)生。因?yàn)榧t外和超聲波可以放在一個(gè)定時(shí)器中所以只需要兩個(gè)定時(shí)器并對(duì)其進(jìn)行相關(guān)定時(shí)設(shè)置,在lcd1602初始化完畢之后就進(jìn)入到while(1)循環(huán)當(dāng)中,當(dāng)3個(gè)方位的紅外檢測(cè)信號(hào)返回主芯片,然后主芯片對(duì)它進(jìn)行編碼使它檢測(cè)到人為1,反之則為0,如果信號(hào)為1 則給PWM傳輸高電平,實(shí)現(xiàn)車直行、左轉(zhuǎn)、右轉(zhuǎn)等功能。若返回值為0,則小車停止,等待紅外重新檢測(cè)。在車行駛的過(guò)程中超聲波將以10 μs的間隔檢測(cè)一次。當(dāng)超聲波返回值大于0.5 m且小于4 m時(shí),車將正常行駛。若當(dāng)車與人之間的距離小于0.5 m時(shí),車載蜂鳴器將報(bào)警且車開(kāi)始后退。主程序流程圖如圖7所示。
圖7 主程序流程圖
此模塊對(duì)于檢測(cè)到的物體的返回值只存在兩個(gè)值,當(dāng)檢測(cè)到人體時(shí)返回給單片機(jī)的信號(hào)為1,反之則為0。由于存在著返回值覆蓋的問(wèn)題,所以將它放在了一個(gè)10 μs的定時(shí)器中斷里,這樣就有效地解決了覆蓋問(wèn)題。中斷是由超聲波控制的,所以只要超聲波沒(méi)有接入,那么紅外模塊也不會(huì)檢測(cè)。紅外模塊流程圖見(jiàn)圖8,實(shí)現(xiàn)代碼如下:
圖8 紅外模塊流程圖
超聲波模塊的工作原理就是Trig先發(fā)出一個(gè)高電平信號(hào),延時(shí)一段時(shí)間讓Trig變?yōu)榈碗娖?,Echo端口初始為0,當(dāng)Trig 發(fā)出的信號(hào)遇到障礙物返回來(lái)時(shí)Echo變?yōu)楦唠娖?,通過(guò)這之間的時(shí)間差來(lái)計(jì)算車和物體之間的距離。既然出現(xiàn)了返回值的問(wèn)題,那么就要避免第一個(gè)數(shù)據(jù)還沒(méi)有處理完,第二個(gè)數(shù)據(jù)就要處理的問(wèn)題,所以它也被放在了10 μs 的中斷中,且它的代碼里面是控制定時(shí)器中斷開(kāi)始和關(guān)閉的。由于HC-SR04超聲波模塊是通過(guò)接受反饋信號(hào)來(lái)進(jìn)行距離檢測(cè),并且需要根據(jù)AT89C52 單片機(jī)的晶振周期來(lái)進(jìn)行設(shè)定,所以在11.059 2的晶振下,超聲波模塊流程圖如圖9所示,實(shí)現(xiàn)代碼如下:
圖9 超聲波模塊流程圖
LCD1602主要用來(lái)顯示小車運(yùn)行過(guò)程中傳感器所接收的信號(hào),都是通過(guò)二進(jìn)制來(lái)實(shí)現(xiàn)操作的,對(duì)LCD1602液晶模塊的讀/寫(xiě)操作、顯示屏和光標(biāo)的操作都是通過(guò)編程來(lái)實(shí)現(xiàn)的??梢詫⒊暡ê图t外模塊傳輸回來(lái)的信號(hào)顯示的顯示器上面,當(dāng)然它既然是一個(gè)內(nèi)部的信號(hào)處理代碼,那么外部傳輸?shù)拇a也是得存在的。值得注意的是,對(duì)于LCD1602模塊而言,盡量保證每次在使用前都進(jìn)行一次初始化操作。根據(jù)數(shù)據(jù)手冊(cè)中的時(shí)序圖可知,此模塊反應(yīng)的時(shí)間幾乎都是納秒級(jí)別的,所以它不同于其他顯示模塊可能會(huì)需要給延時(shí)函數(shù)來(lái)進(jìn)行延時(shí),從而達(dá)到避免信號(hào)值覆蓋或者是亂碼的情況,但是由于保險(xiǎn)起見(jiàn),其中需要延時(shí)的地方可以給予1 ms的延時(shí),這個(gè)延時(shí)對(duì)于人的感受而言可以忽略不計(jì),同時(shí)還可以讓模塊有足夠的時(shí)間進(jìn)行程序的運(yùn)行。實(shí)現(xiàn)代碼如圖10所示。
圖10 數(shù)字顯示代碼圖
此次小車的驅(qū)動(dòng)模塊主要是靠超聲波模塊和紅外模塊的傳回來(lái)的信號(hào)值來(lái)判斷是否前進(jìn)、左轉(zhuǎn)、右轉(zhuǎn)、后退等驅(qū)動(dòng)。上面介紹紅外模塊時(shí)已經(jīng)提到,檢測(cè)到人的信號(hào)為1。同時(shí)用超聲波來(lái)判斷距離遠(yuǎn)近,來(lái)選擇如何驅(qū)動(dòng)。例如:當(dāng)正前方有人,那么中間的紅外信號(hào)為1,其他紅外模塊都為0,同時(shí)和超聲波模塊一起,當(dāng)距離大于0.5 m 時(shí)是前進(jìn),小于0.5 m 則代表前面人再后退,這時(shí)車上面帶的蜂鳴器就會(huì)開(kāi)始報(bào)警,提示人們距離過(guò)近的同時(shí)車也會(huì)隨著人的后退而后退。實(shí)現(xiàn)代碼如圖11所示。
圖11 驅(qū)動(dòng)模塊代碼圖
樣車使用的是AT89C52 芯片,所以車所涵蓋的功能有限,后期可以換成tc264、MK60、STM32 等和社會(huì)接軌的主芯片,這些芯片的性能和可帶動(dòng)模塊都比AT89C52芯片的多,不僅可以自主完善小車的性能,同時(shí)也可以給車增加新的功能。例如:增加攝像頭作為輔助判斷,使對(duì)前方是否有人的判斷更為精確;增加陀螺儀來(lái)檢測(cè)車的自生狀態(tài)是否處于上坡?tīng)顟B(tài)或者下坡?tīng)顟B(tài)來(lái)進(jìn)行減速或者加速處理等。本文利用單片機(jī)控制器,結(jié)合人體紅外傳感器和超聲波傳感器設(shè)計(jì)的智能跟隨小車,實(shí)現(xiàn)了小車對(duì)人體的自動(dòng)跟隨,當(dāng)跟隨距離小于0.5 m 時(shí)報(bào)警并后退,保持安全距離。響應(yīng)迅速,跟隨精度較高,性價(jià)比高,可應(yīng)用于商場(chǎng)購(gòu)物、超市搬運(yùn)以及家居使用等生活常見(jiàn)場(chǎng)所。