馬永幸
(西京學(xué)院,陜西西安,710123)
中國(guó)是一個(gè)擁有巨大基數(shù)人口的國(guó)家,盲人數(shù)量也是占了全國(guó)很大的比重,據(jù)統(tǒng)計(jì)盲人每年都會(huì)出現(xiàn)大批盲人,還會(huì)出現(xiàn)大量弱視力者[1],這些弱勢(shì)群體的生活各種問(wèn)題是我們國(guó)家重要的思考問(wèn)題,雖然這段時(shí)間中國(guó)經(jīng)濟(jì)發(fā)展很迅速,但是為盲人提供各種服務(wù)也會(huì)消耗大量精力和財(cái)力,我國(guó)為了幫助盲人實(shí)現(xiàn)日常的外出,建設(shè)了特定的盲道,盲人可以在這指定的道路上行走,盲人也可以借助自己的拐杖來(lái)試探著往前走,所以解決上述問(wèn)題實(shí)現(xiàn)盲人出行得自主化,確定盲人的安全性就是設(shè)計(jì)基于物聯(lián)網(wǎng)導(dǎo)盲機(jī)器人的意義。
圖1 系統(tǒng)結(jié)構(gòu)框圖
具體功能如下:
(1)微控制器通過(guò)紅外發(fā)射器對(duì)路上的黑線進(jìn)行循跡,這樣可以根據(jù)指定路線前行;
(2)如在規(guī)劃好的路上遇到突發(fā)狀況如遇到障礙物等,紅外傳感器便可以根據(jù)算法與電路執(zhí)行相應(yīng)的策略——避障;
(3)當(dāng)紅外發(fā)射器發(fā)出的紅外線被障礙物返回的時(shí)候系統(tǒng)在避障的同時(shí),在該電路上的蜂鳴器也會(huì)發(fā)出嗡嗡嗡的聲音提示盲人注意避障;
(4)如果路上行人過(guò)多,蜂鳴器在報(bào)警的同時(shí),燈光交互模塊也會(huì)因?yàn)楣饩€的變化而發(fā)射不同的燈光,從而提示路人注意躲避避障盲人;
(5)如果盲人外出時(shí)間過(guò)長(zhǎng),家人可以通過(guò)手機(jī)端連接線車的無(wú)線模塊進(jìn)行手動(dòng)控制引領(lǐng)盲人回家;
(6)如果路線偏航,盲人的家人可以通過(guò)手機(jī)APP 端,打開(kāi)小車上的攝像頭,因?yàn)樾≤囀窃谥付肪€上行駛,通過(guò)手機(jī)端顯示的環(huán)境可以檢測(cè)到老人所處的位置。
圖2 UML 示例圖
本系統(tǒng)微控制器采用的是STM32F103RCT6,使用它的數(shù)字引腳和模擬引腳來(lái)讀取傳感器數(shù)據(jù)與控制模塊。原理圖如圖3 所示。
圖3 STM32F103C8T6 管腳圖
用單片機(jī)電平的高低等級(jí)來(lái)自動(dòng)反應(yīng)循跡的過(guò)程,將信號(hào)直接發(fā)送給一個(gè)單片機(jī)的 I/O 口,就這樣我們可以直接完成循跡的功能,關(guān)于設(shè)計(jì)的循跡算法,首先從連線說(shuō)起,把左右循跡紅外探頭的輸出端接在了單片機(jī)的PB14 與PB13兩個(gè)串口上,然后通過(guò)讀取這兩個(gè)接口的數(shù)值來(lái)對(duì)驅(qū)動(dòng)模塊進(jìn)行控制,在本實(shí)驗(yàn)中將左右驅(qū)動(dòng)電機(jī)的線接到了PA0,PA1,PA2,PA3 這四個(gè)接口中,舉個(gè)例子,如果PB14 檢測(cè)到了黑線,那小車就要左轉(zhuǎn),左轉(zhuǎn)就需要讓控制的0 和1兩個(gè)接口復(fù)位,讓它停止,這樣左側(cè)車輪就會(huì)停下,右側(cè)車輪保持不變,就會(huì)實(shí)現(xiàn)左轉(zhuǎn)。再就是關(guān)于避障,首先把避障用的兩個(gè)紅外傳感器的輸出口接到了PA4 與PA5 兩個(gè)接口上,同時(shí)把蜂鳴器的接口接到了PB12 上,這樣同樣是通過(guò)讀取4 和5 兩個(gè)端口的狀態(tài)就可以,之后改變小車的轉(zhuǎn)向,與循跡不同的是,改變了小車左轉(zhuǎn)右轉(zhuǎn)的實(shí)現(xiàn),小車循跡時(shí)讓他左轉(zhuǎn)是通過(guò)讓左側(cè)車輪停下,而在避障過(guò)程中,如果讓小車左轉(zhuǎn)是通過(guò),改變左側(cè)車輪的旋轉(zhuǎn)方向,也就是改變電機(jī)的正轉(zhuǎn)與反轉(zhuǎn)來(lái)實(shí)現(xiàn),關(guān)于蜂鳴器,把它接到單片機(jī)上,然后寫(xiě)到程序的避障程序里,讓它跟電機(jī)的正反轉(zhuǎn)屬于同一個(gè)級(jí)別。這樣遇到障礙物,單片機(jī)的PB12 口就會(huì)輸出低電平來(lái)讓蜂鳴器進(jìn)行工作。
最后關(guān)于這個(gè)燈光交互模塊,運(yùn)用到了光敏電阻,將光敏電阻接到了單片機(jī)的PA6 接口,這樣只要將LED 接到單片機(jī)的一個(gè)能控制PWM 輸入的串口即可,我查閱了一下開(kāi)發(fā)板的資料,找到了這樣一個(gè)接口,并將LED 接上去,就可以實(shí)現(xiàn)小車的亮度改變。黑白線傳感器連接電路如圖4 所示。
圖4 黑白線傳感器連接電路圖
采用紅外傳感與超聲波模塊進(jìn)行避障,這樣兼容了兩大避障模塊的優(yōu)點(diǎn),如果超聲波探測(cè)受限,還可以用紅外避障,這樣可以實(shí)現(xiàn)互補(bǔ),也就更實(shí)用,更安全。
左右避障紅外線傳感器的工作原理:其中v1 是一個(gè)紅外線接地發(fā)射器,在圖中我們可以清楚地看到它已經(jīng)被紅外線接地了,也就是說(shuō)只要vccbat 開(kāi)始給它供電,那么v1就一定會(huì)持續(xù)地發(fā)射紅外線,v3 是一個(gè)紅外接收器,他有一個(gè)特殊的物理性質(zhì)那就是,接收到這個(gè)紅外線的信號(hào)時(shí)候,電阻就會(huì)變小,根據(jù)一個(gè)串聯(lián)的分壓,當(dāng)接收到有紅外光的時(shí)候,v3 電阻變小,它的輸出分壓也就變小了,于是3 引腳的輸入電壓將大大地小于2 腳的輸出電壓,于是根據(jù)計(jì)算機(jī)電路中比較器原理,當(dāng)同相輸出的電壓小于逆交換機(jī)輸入的電壓時(shí)將有可能會(huì)使計(jì)算機(jī)輸出一個(gè)更低的電平,就這樣1 管腳輸出低電平。于是D3將會(huì)變亮。若沒(méi)有任何障礙物,將會(huì)進(jìn)行一個(gè)與上面的相反過(guò)程,1 口將向輸出高電平。這樣D3 將會(huì)熄滅。圖中的變阻器對(duì)應(yīng)著車上的靈敏度改變。原理也是進(jìn)行分壓。第二個(gè)方案可以采用超聲波避障[6],超聲波模塊同樣有4個(gè)接口[7]。
紅外避障實(shí)物圖如圖5 所示,超聲波傳感器連接電路圖如圖6 所示。
圖5 紅外與超聲波避障實(shí)物圖
圖6 超聲波傳感器連接電路圖
燈光交互模塊就是將光敏傳感器與LED 燈串接而成的電路接在單片機(jī)的管腳上,光敏電阻的物理特性就是光照越強(qiáng)電阻越小,這樣LED 燈的亮度就會(huì)變亮,相反在光照環(huán)境差的地方,電阻比較大所以會(huì)發(fā)射近光燈。當(dāng)與LED 燈端口相連接的單片機(jī)管腳發(fā)出低電平時(shí),整個(gè)電路就可以形成電流,于是LED 燈就會(huì)發(fā)光。
該模塊的編程也是類似于蜂鳴器模塊的編程。首先定義LED 占用哪個(gè)端口。然后在小車遇到障礙物時(shí)會(huì)發(fā)出低電平讓LED 點(diǎn)亮。這個(gè)具體實(shí)現(xiàn)在代碼中就是改變高低電平的占空比在實(shí)現(xiàn)亮暗。燈光交互實(shí)物圖如圖7 所示。
圖7 燈光交互模塊實(shí)物圖
我們使用的是有源式蜂鳴器,自身內(nèi)部都設(shè)置有振蕩、驅(qū)動(dòng)等電路。只要附帶一個(gè)電源也就可以聽(tīng)到響,優(yōu)點(diǎn)是使用起來(lái)比較省事,缺點(diǎn)是頻率已經(jīng)固定了,就只剩下一個(gè)獨(dú)立的音。蜂鳴器本系統(tǒng)采用的模塊是一種有源蜂鳴器,通電就可以,單片機(jī)在 p12 端口上輸入一個(gè)低電平,這樣便可以進(jìn)行發(fā)射集與集電極之間便是聯(lián)通的,這樣 vccbat所發(fā)出的高電平將不再需要通過(guò)與三極管接地就可以形成了一個(gè)具有電流的回路,因?yàn)榉澍Q器本身都是有源的,所以蜂鳴器就不再需要發(fā)出任何聲音。該蜂鳴器模塊主要用來(lái)在輸入低電平時(shí)產(chǎn)生的聲音。低電平有效,實(shí)物圖如8所示。
圖8 蜂鳴器實(shí)物圖
關(guān)于驅(qū)動(dòng)式電源的設(shè)計(jì)方案選擇主要有兩種,電源模塊的功能和作用是進(jìn)行電壓轉(zhuǎn)換,它們就是把交流或者直流電轉(zhuǎn)換成您所需的交流或者直流電。采用太陽(yáng)能鋰電池進(jìn)行供電,鋰電池可以持續(xù)地供電,充分利用了太陽(yáng)能源,供電也很平穩(wěn),時(shí)鐘頻率不受任何交流電的干擾,存儲(chǔ)量較大,如果使用干電池,它的供電時(shí)間較短,同時(shí)會(huì)導(dǎo)致電流供應(yīng)不平穩(wěn)。它可以進(jìn)行充電,比較環(huán)保。本模塊采用 L298N芯片控制[9]。在本次系統(tǒng)中用到了4 個(gè)輸入口,還用到了2個(gè)輸出口,四個(gè)輸入口通過(guò)單片機(jī)檢測(cè)到的端口電平來(lái)實(shí)現(xiàn)控制,輸出口通過(guò)檢測(cè)電平高低來(lái)控制電機(jī)的正轉(zhuǎn)反轉(zhuǎn)來(lái)實(shí)現(xiàn)轉(zhuǎn)彎,對(duì)于機(jī)器人的轉(zhuǎn)彎我設(shè)計(jì)了兩個(gè)方案:第一個(gè)方案是通過(guò)控制兩個(gè)車輪的速度也就是說(shuō)讓兩個(gè)車輪之間形成一個(gè)速度差,這樣比如左轉(zhuǎn)就可以采用PWM 算法來(lái)實(shí)現(xiàn)讓左車輪慢下來(lái),右車輪用和之前同樣的速度右轉(zhuǎn)也是同理,可以采用復(fù)位與置位的算法來(lái)實(shí)現(xiàn)小車的轉(zhuǎn)彎,也就是說(shuō)左轉(zhuǎn)的時(shí)候可以直接通過(guò)置位高電平來(lái)讓左車轱轆停止,右車轱轆保持原有的速度。
首先要對(duì)手機(jī)端的屏幕與你想設(shè)計(jì)的布局構(gòu)思好,在Android Studio 上面進(jìn)行布局與設(shè)計(jì),因?yàn)樽约涸O(shè)計(jì)的內(nèi)容是不僅要實(shí)現(xiàn)小車的攝像頭監(jiān)控,還要實(shí)現(xiàn)小車的控制,所以在一開(kāi)始設(shè)計(jì)畫(huà)布的時(shí)候,還設(shè)計(jì)了好多按鍵,在系統(tǒng)里,把攝像頭連接到無(wú)線模塊,是通過(guò)USB 接口接到無(wú)線模塊,然后給模塊通上電,因?yàn)殚_(kāi)發(fā)板VCC 與GND 被占用,所以只能給電池上接上公對(duì)公的杜邦線引出來(lái)把另一邊割開(kāi),露出銅絲來(lái)這樣接到串聯(lián)在一起的電池上,試過(guò)用單獨(dú)的充電寶給它供電,但是不行。這個(gè)無(wú)線模塊的工作電壓是5V 上下10%,所以把兩節(jié)電池串聯(lián)起來(lái),單獨(dú)給WiFi 模塊的開(kāi)發(fā)板供電,實(shí)現(xiàn)效果也還不錯(cuò),不過(guò)以后最好是要在板子上引出來(lái),因?yàn)檫@樣供電更穩(wěn)定。然后手機(jī)就可以連接到無(wú)線模塊發(fā)出的無(wú)線,就可以通過(guò)手機(jī)所設(shè)計(jì)的APP 來(lái)進(jìn)行連接。
在建立與攝像頭連接的過(guò)程,要清楚的知道攝像頭的IP 地址,只有在獲取了IP 地址后,才能把它里面的數(shù)據(jù)“抓”出來(lái),傳輸?shù)角懊嬉呀?jīng)布置好的畫(huà)布上,在本次系統(tǒng)中,用到的視頻傳輸協(xié)議是TCP/IP 協(xié)議。
手機(jī)APP 中的功能就是顯示出攝像頭采集到的數(shù)據(jù),并將它一幀一幀地顯示出來(lái)。將這個(gè)功能的實(shí)現(xiàn)圖放在下面,實(shí)現(xiàn)的效果如圖9 所示。
圖9 手機(jī)視頻圖
(1) 驅(qū)動(dòng)模塊的調(diào)試
在結(jié)束完導(dǎo)盲機(jī)器人這個(gè)項(xiàng)目時(shí),首先要確保機(jī)器人能走,也就是驅(qū)動(dòng)可以讓小車跑起來(lái),在測(cè)試過(guò)程中我們只需將驅(qū)動(dòng)與車輪連接到一起,安裝好鋰電池,打開(kāi)開(kāi)關(guān),然后燒入一個(gè)簡(jiǎn)單的程序,就可以觀察小車是否可移動(dòng),如果小車完成了移動(dòng),則驅(qū)動(dòng)模塊連接成功,否則,就是小車驅(qū)動(dòng)出現(xiàn)問(wèn)題。
(2) 循跡模塊的調(diào)試
在小車進(jìn)行黑白線循跡的過(guò)程中,要進(jìn)行現(xiàn)車的循跡,首先在地上貼上一道黑色膠帶,然后將循跡程序燒進(jìn)單片機(jī)里,觀察小車是否在黑線上循跡,如果小車在黑線上行走成功,則說(shuō)明循跡沒(méi)問(wèn)題。
(3) 避障模塊的調(diào)試
例如當(dāng)一輛小車在既定道路上繼續(xù)行走時(shí),首先將避障程序燒錄在微控制器里,然后將其放在路線上再次放上障礙物,可以說(shuō)是盒子與書(shū)本,一定要高于其他小車的高度,因?yàn)橹挥姓系K物的高度遠(yuǎn)遠(yuǎn)大于其他小車高度上,紅外發(fā)射器所能夠發(fā)出的一個(gè)紅外光才有機(jī)會(huì)被其他障礙物所產(chǎn)生的反彈而通過(guò)紅外傳感器接受。當(dāng)一輛小車在碰到了障礙物并進(jìn)行逃跑時(shí),小車的回位避障系統(tǒng)模塊正常,相反出現(xiàn)其他情況就要進(jìn)行排除了。
(4) 蜂鳴器模塊的調(diào)試
將蜂鳴器連接進(jìn)入電路后,燒進(jìn)程序給蜂鳴器,如果前方有障礙時(shí)蜂鳴器會(huì)報(bào)警,查看蜂鳴器軟件代碼,一般情況下,先進(jìn)行端口配置,在進(jìn)行初始化,我們可以配置好時(shí)鐘周期,讓蜂鳴器每隔一段時(shí)間就發(fā)出聲音。
(5) 光敏傳感器的調(diào)試
剛開(kāi)始記錄一下原始的亮度,然后用手機(jī)打開(kāi)手電筒功能,照向光敏傳感器,此時(shí)小車的指示燈應(yīng)該是變亮的,如果小車的指示燈沒(méi)有變亮,則需要查看光敏傳感器,先用黑布料將光敏電阻覆蓋起來(lái),查看阻值,也就是通過(guò)萬(wàn)用表查看,查看指針搖擺幅度的大小來(lái)判斷光敏傳感器是好是壞的。
(6) 紅外傳感模塊的調(diào)試
將手放到小車在前面如果指示燈亮,則說(shuō)明紅外傳感器沒(méi)有問(wèn)題,如果沒(méi)有亮,則另需檢查,最好是燒錄進(jìn)程序之后進(jìn)行判斷,這樣才能知道是否出現(xiàn)問(wèn)題。也可以檢查電路的電壓。
(1)將小車組裝好之后,燒錄進(jìn)循跡程序,在地上貼好黑線,小車可以沿著黑線勻速前進(jìn)。實(shí)現(xiàn)效果如圖10所示,小車沿著黑線進(jìn)行循跡。
圖10 循跡模塊的實(shí)現(xiàn)
(2)將相關(guān)避障代碼燒錄進(jìn)單片機(jī)后,在小車正前方放置一本書(shū)或者是將我的手放在前面,發(fā)現(xiàn)小車可以實(shí)現(xiàn)進(jìn)行避障。實(shí)現(xiàn)效果如圖11 所示,小車在遇見(jiàn)我的手后發(fā)生轉(zhuǎn)彎。
圖11 避障效果演示
(3)參考第二步,當(dāng)小車遇到障礙物時(shí),小車不但可以進(jìn)行避障,還可以進(jìn)行蜂鳴器播報(bào)。
(4)將小車在不同光線環(huán)境下測(cè)試其二極管的發(fā)光亮度,發(fā)現(xiàn)小車在光線差一點(diǎn)的地方發(fā)射近光燈,在光線亮的時(shí)候,小車將會(huì)發(fā)射遠(yuǎn)光燈,完美地實(shí)現(xiàn)了預(yù)期功能。實(shí)現(xiàn)效果如圖12 所示,當(dāng)燈光越亮,燈就會(huì)越亮。
圖12 燈光交互實(shí)現(xiàn)
在進(jìn)行WiFi 控制時(shí),手機(jī)APP 打開(kāi)不了小車前的攝像頭,原因是沒(méi)有與控制攝像頭的無(wú)線模塊進(jìn)行連接,WiFi模塊沒(méi)有供電,剛開(kāi)始采用方案一,通過(guò)USB 接口與數(shù)據(jù)線連接插頭進(jìn)行供電,可是不知道什么原因,手機(jī)WiFi 模塊沒(méi)有穩(wěn)壓電路所以不行,然后采用了方案二,通過(guò)杜邦線連接STM32單片機(jī)的VCC與CND,這樣實(shí)現(xiàn)了WiFi的控制,這樣通過(guò)無(wú)線模塊發(fā)出的WiFi 連接手機(jī)可以查看小車的周邊環(huán)境。
小車在進(jìn)行運(yùn)動(dòng)時(shí),由于速度太快導(dǎo)致小車不能按照指定路線行走,換成兩輪驅(qū)動(dòng)就好了,這樣馬力也小一些,這個(gè)方法可行,也可以通過(guò)方案二,在程序里面修改小車的速度。紅外傳感在一開(kāi)始行走時(shí),不夠靈敏,剛開(kāi)始考慮是因?yàn)樗俣忍?,但是?dāng)我把速度調(diào)到合適速度后,還是不行,然后考慮是否因?yàn)榧t外探頭不夠靈敏,是不是小車的紅外傳感太高了,然后將傳感器由之前的橫著放,改為了豎著放,果然解決了問(wèn)題,還可以去換成反應(yīng)更靈敏,探測(cè)距離更遠(yuǎn)的探頭去實(shí)現(xiàn)。
還遇到了當(dāng)循跡過(guò)程中小車總是把雙手放上去都是可以感知到,也就是說(shuō)是可以實(shí)現(xiàn)的,但是它就是不循跡,這個(gè)時(shí)候就考慮是不是傳感器的靈敏度不夠,于是把小車放在地上調(diào)試,原來(lái)紅外循跡光線對(duì)小車的影響也很大,每次到不同的地方都要進(jìn)行調(diào)試。