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