[蘇神保 劉丹]
Mind+是一款基于Scratch3.0開(kāi)發(fā)的青少年編程軟件,支持arduino、micro:bit、掌控板等各種開(kāi)源硬件,用戶(hù)只需要拖動(dòng)圖形化程序塊即可完成編程,還可以使用python/c/c++等高級(jí)編程語(yǔ)言,讓大家輕松體驗(yàn)創(chuàng)造的樂(lè)趣。對(duì)于使用Mind+的用戶(hù)來(lái)說(shuō),可以根據(jù)自己的想法,結(jié)合Arduino開(kāi)發(fā)板以及擴(kuò)展面包板或者智能小車(chē)機(jī)器人,借助不同的傳感器如電位器、聲音、光敏、熱敏、火焰、傾斜、有害氣體、紅外、人體熱釋電、超聲波、溫濕度等來(lái)創(chuàng)造不同的產(chǎn)品。Mind+還集成有各式各樣的傳感器、執(zhí)行器、顯示器和通信模塊,用戶(hù)只需直接調(diào)用即可,無(wú)需重新調(diào)用或者編寫(xiě)庫(kù)函數(shù)。Mind+工作于實(shí)時(shí)模式時(shí),可以實(shí)現(xiàn)視頻偵測(cè)、文字朗讀、語(yǔ)音識(shí)別、AI圖像人臉識(shí)別等功能,在目前人工智能領(lǐng)域應(yīng)用較為廣泛。
Mind+的工作模式分為實(shí)時(shí)執(zhí)行模式和上傳模式兩種。實(shí)時(shí)執(zhí)行模式下可以實(shí)現(xiàn)硬件與舞臺(tái)角色的交互,以及可以實(shí)時(shí)的控制硬件而不需要上傳程序,通過(guò)計(jì)算機(jī)鍵盤(pán)、鼠標(biāo)、語(yǔ)音等實(shí)時(shí)來(lái)控制硬件的工作,工作過(guò)程中全程需要數(shù)據(jù)線連接。上傳模式與傳統(tǒng)單片機(jī)下載程序類(lèi)似,可以將根據(jù)用戶(hù)硬件需求編寫(xiě)的積木代碼通過(guò)串口(需安裝驅(qū)動(dòng)程序)燒錄至Arduino開(kāi)發(fā)板,硬件脫機(jī)工作。Arduino還預(yù)留有串口通信接口,可以通過(guò)串口藍(lán)牙或者串口WIFI模塊實(shí)現(xiàn)手機(jī)端藍(lán)牙控制或者WIFI控制。
Arduino開(kāi)發(fā)板提供14路數(shù)字輸入輸出接口,除了本身的高低電平輸入輸出功能外,某些IO口還具有其它特定用途,如0、1管腳用作串口通信,可以外接串口通信設(shè)備,3、5、6、9、10、11六個(gè)管腳可以輸出脈沖寬度調(diào)制PWM信號(hào),提供6路8位即(0~255)輸出信號(hào),該P(yáng)WM信號(hào)通常用于調(diào)速、調(diào)光等實(shí)驗(yàn)。Arduino開(kāi)發(fā)板還提供6路模擬輸入信號(hào)(A0-A5),每一路具有10位(210=1024)的分辨率,通常用于連續(xù)變化模擬量的輸入,可以將該模擬輸入信號(hào)(0~1024)映射MAP至PWM端口(0~255)實(shí)現(xiàn)PWM控制。13管腳是Arduino專(zhuān)門(mén)用于測(cè)試LED的保留接口,輸出為高時(shí)點(diǎn)亮LED,輸出為低時(shí)LED熄滅。
Arduino開(kāi)發(fā)板配合相關(guān)傳感器,可以完成很多實(shí)驗(yàn)如閃爍LED燈、流水燈、按鍵控制LED燈、呼吸燈、電子鋼琴、調(diào)光燈、聲控?zé)?、光控?zé)簟崦魣?bào)警器、火焰報(bào)警器、人體熱釋電感應(yīng)報(bào)警器、繼電器控制、紅外遙控、藍(lán)牙遙控等,也是目前創(chuàng)客使用較多的單片機(jī)。Arduino開(kāi)發(fā)板配合智能小車(chē)機(jī)器人底板可以實(shí)現(xiàn)智能小車(chē)的紅外遙控控制、紅外循跡、紅外避障、超聲波避障等相關(guān)實(shí)驗(yàn)。
Arduino開(kāi)發(fā)板控制智能小車(chē)前進(jìn)與左轉(zhuǎn)程序如圖1所示,5腳控制左輪前進(jìn),6腳控制右輪前進(jìn),9腳控制左輪后退,10腳控制右輪后退,因5、6、9、10的輸出值范圍為0~255,通過(guò)改變每個(gè)PWM引腳的輸出值即可以實(shí)現(xiàn)智能小車(chē)機(jī)器人的前進(jìn)、后退、左轉(zhuǎn)、右轉(zhuǎn)、停止以及速度的變化[1],下圖只列出了前進(jìn)和左轉(zhuǎn)程序,當(dāng)需要智能小車(chē)機(jī)器人完成其它動(dòng)作時(shí),修改引腳PWM值即可。
圖1 智能小車(chē)機(jī)器人前進(jìn)與左轉(zhuǎn)程序
在實(shí)際避障實(shí)驗(yàn)中,可以將小車(chē)的前進(jìn)、后退、左轉(zhuǎn)、右轉(zhuǎn)、停止五種狀態(tài)分別用子函數(shù)MOTORRUN、MOTORBACK、MOTORLEFT、MOTORRIGHT、MOTORSTOP來(lái)定義模塊,在主程序中調(diào)用即可。
Mind+的傳感器模塊中已經(jīng)包含有HC-SR04超聲波傳感器,用戶(hù)只需直接調(diào)用即可。在進(jìn)行避障實(shí)驗(yàn)前,可以先用串口測(cè)試一下超聲波模塊的距離測(cè)量功能,將超聲波模塊的觸發(fā)腳Trig接至Arduino開(kāi)發(fā)板第8腳(也可以根據(jù)程序來(lái)設(shè)定),回響腳Echo接至第12腳,其測(cè)距程序如圖2所示,前方障礙物的距離通過(guò)串口打印窗口顯示出來(lái)[2]。
圖2 串口輸出超聲波測(cè)距程序
超聲波測(cè)距模塊需要Arduino開(kāi)發(fā)板在Trig管腳輸入一個(gè)10 μs以上的高電平,系統(tǒng)便可發(fā)出8個(gè)40 kHz的超聲波脈沖,然后檢測(cè)回波信號(hào)。當(dāng)檢測(cè)到回波信號(hào)后,通過(guò)Echo管腳輸出。由于聲音的傳播速度為340 m/s,根據(jù)Echo管腳輸出高電平的持續(xù)時(shí)間可以計(jì)算距離值[3]。其距離值為(公式1):
HC-SR04超聲波測(cè)距模塊可提供大約2 cm~400 cm的非接觸式距離測(cè)量功能,測(cè)距精度可達(dá)高到3 mm。通過(guò)超聲波測(cè)量到前方障礙物距離后,需要智能小車(chē)機(jī)器人根據(jù)這個(gè)距離做出判斷。當(dāng)距離小于或等于某一標(biāo)準(zhǔn)值(如20 cm)則后退左轉(zhuǎn),而當(dāng)距離大于這一標(biāo)準(zhǔn)值則前進(jìn)。流程圖與程序設(shè)計(jì)如圖3所示。
圖3 超聲波避障流程圖與Mind+程序設(shè)計(jì)
Arduino智能小車(chē)機(jī)器人和51單片機(jī)智能小車(chē)一樣,在小車(chē)底板上都設(shè)置有紅外循跡探頭與紅外避障探頭,紅外循跡探頭位于小車(chē)底板背面,用于檢測(cè)地面黑線。紅外避障探頭位于小車(chē)的左右兩邊,分別由一對(duì)紅外發(fā)射管與紅外接收管構(gòu)成。紅外發(fā)射管發(fā)射出一定頻率的紅外線,當(dāng)檢測(cè)前方遇到障礙物時(shí),紅外線反射回來(lái)并被接收管接收,經(jīng)過(guò)LM324比較器電路處理之后,輸出LED燈會(huì)亮起,信號(hào)輸出接口輸出一個(gè)低電平信號(hào),同時(shí)將這一信號(hào)送至Arduino開(kāi)發(fā)板的數(shù)字輸入輸出管腳,Arduino通過(guò)檢測(cè)這一關(guān)鍵信息后對(duì)小車(chē)的行駛路線做出改變即可以實(shí)現(xiàn)避障的目的:當(dāng)左側(cè)紅外探頭檢測(cè)到障礙物控制小車(chē)右轉(zhuǎn),右側(cè)紅外探頭檢測(cè)到障礙物控制小車(chē)左轉(zhuǎn),前方無(wú)障礙物時(shí)小車(chē)前進(jìn),左右兩側(cè)均有障礙物時(shí)小車(chē)后退左轉(zhuǎn)??梢酝ㄟ^(guò)電位器旋鈕調(diào)節(jié)紅外檢測(cè)距離的靈敏度,有效距離范圍2~30 cm左右[4]。
程序設(shè)計(jì)流程圖如圖4所示。
圖4 紅外避障程序設(shè)計(jì)流程圖
將左右兩側(cè)紅外感應(yīng)信號(hào)P3.4,P3.5分別接至Arduino數(shù)字輸入輸出口的2、3引腳。主程序代碼如下:(全部程序因篇幅有限未列出,小車(chē)的運(yùn)行狀態(tài)用子函數(shù)列出。)
在人工智能時(shí)代領(lǐng)域,智能傳感的應(yīng)用越來(lái)越廣泛,各種不同傳感器的使用也給人們的生活帶來(lái)了諸多方便。Mind+軟件在程序設(shè)計(jì)方面較傳統(tǒng)的單片機(jī)開(kāi)發(fā)軟件如keil、Arduino等都具有更通俗、更直觀的優(yōu)點(diǎn),尤其適合高等職業(yè)教育單片機(jī)入門(mén)教學(xué)。
自主避障機(jī)器人主要依靠超聲波傳感器和紅外傳感器來(lái)實(shí)現(xiàn),超聲波傳感器通過(guò)發(fā)射超聲波信號(hào)來(lái)測(cè)量機(jī)器人與障礙物之間的距離,當(dāng)接近障礙物時(shí),Arduino通過(guò)PWM改變智能小車(chē)機(jī)器人的行駛方向。紅外傳感器主要是通過(guò)發(fā)射與反射紅外線來(lái)判斷前方是否有障礙物,雖無(wú)測(cè)距功能,但其避障原理與超聲波類(lèi)似。上述兩種傳感器結(jié)合Arduino雖然能實(shí)現(xiàn)簡(jiǎn)單的避障功能,但檢測(cè)方式過(guò)于單一,超聲波方面可以考慮通過(guò)加裝舵機(jī)的方式來(lái)檢測(cè)180°范圍內(nèi)障礙物的情況,同時(shí)可以加裝LCD1602液晶顯示模塊來(lái)實(shí)時(shí)顯示目前的距離。紅外感應(yīng)方面則可以通過(guò)使用光電開(kāi)關(guān)E18-D80NK來(lái)取代普通的紅外發(fā)射與接收二極管,從而提高其感應(yīng)距離和靈敏度,提高避障的準(zhǔn)確性。