電子制作要與時(shí)俱進(jìn)就必須要智能化,電子工程師和廣大的電子愛好者希望能降低計(jì)算機(jī)編程難度,又能制作出高智能的電子產(chǎn)品。本文通藍(lán)牙機(jī)器人小車的制作,啟發(fā)您如何用最簡(jiǎn)單的圖形編程,制作出高智能的電子產(chǎn)品。 本文選用Arduino uno單片機(jī)作為開發(fā)主板,選用Mixly(米思齊)圖形編程軟件編程,避免繁瑣復(fù)雜的編程程序(例如在51單片機(jī)和其他計(jì)算機(jī)中使用中斷和計(jì)數(shù)編程達(dá)到PWM電機(jī)調(diào)速和硬件延時(shí)功能,要編很多程序還要調(diào)用頭文件,還要編譯復(fù)雜的超聲波避障程序)。現(xiàn)在我們?cè)贏rduino單片機(jī)上用Mixly(米思齊)圖形編程軟件編程,不僅使得編程更容易,而制作出的產(chǎn)品依然能保障高質(zhì)量。 首先按照藍(lán)牙機(jī)器人小車的實(shí)物圖a.b.c.d從淘寶購(gòu)買模塊和元器件。
下面具體說一下主板和主要元件的選擇: Adiuino 單片機(jī)主板: 意大利進(jìn)口原裝單片機(jī)主板淘寶參考價(jià)85-168元左右見圖: 國(guó)產(chǎn)兼容Arduino UNO單片機(jī)主板16—48元左右見圖: 經(jīng)本人實(shí)際使用國(guó)產(chǎn)主板在性能上不比原裝的差,是原裝主板四分之一的價(jià)格。建議追求經(jīng)濟(jì)實(shí)惠的朋友購(gòu)買。 擴(kuò)展板淘寶價(jià)10元左右,用來擴(kuò)展接口方便接線,給兩個(gè)參考圖: 藍(lán)牙HC-05 主從機(jī)一體藍(lán)牙模塊淘寶參考價(jià)28元:
小車車體最好選擇兩個(gè)電機(jī)轉(zhuǎn)速相近的: 超聲波模塊2塊,用途:測(cè)距,距離達(dá)到設(shè)定范圍后讓小車前后避障。 紅外避障模塊4塊,用途:距離達(dá)到設(shè)定范圍后讓小車在四個(gè)角避障。 L298N電機(jī)驅(qū)動(dòng)模塊 由于單片機(jī)主板的功率較小帶負(fù)載能力弱,所以要采用電機(jī)驅(qū)動(dòng)模塊來驅(qū)動(dòng)電機(jī)運(yùn)轉(zhuǎn),還要外加7.2V的鋰電池供電。 左圖的L298N電機(jī)驅(qū)動(dòng)模塊是大功率的,能驅(qū)動(dòng)4個(gè)電機(jī),有PWM使能控制接口,用跳線帽選擇。右圖的模塊能驅(qū)動(dòng)2個(gè)電機(jī),本例采用的是這款,這款電機(jī)驅(qū)動(dòng)模塊體積小,耗電量低,價(jià)格非常低,沒有PWM脈寬調(diào)制調(diào)速使能接口,適合Arduino單片機(jī)不適合51單片機(jī)。 數(shù)字電壓表模塊: 數(shù)字電壓表模塊用來顯示鋰電池的電壓,防止使用中鋰電池電壓降到安全電壓以下使鋰電池報(bào)廢。 USB-TTL串口模塊用來和串口軟件調(diào)試和設(shè)置藍(lán)牙模塊,參考價(jià)5元(輔助調(diào)試器件,具體操作可查看商家給的技術(shù)操作手冊(cè)。本例中如果藍(lán)牙通訊正常也可不用)。 硬件備齊后我們來安裝手機(jī)APP軟件。 我們藍(lán)牙模塊型號(hào)選用HC-05,能和HC-05藍(lán)牙模塊兼容的上位機(jī)APP軟件很多,不象JDY-18藍(lán)牙模塊通訊距離60米挺遠(yuǎn),但藍(lán)牙模塊基本上找不到兼容的手機(jī)軟件,本人推薦兩個(gè)軟件,編程兼顧兩個(gè)軟件設(shè)置。 藍(lán)牙小車:軟件控制方式是觸屏方式發(fā)指令。下圖分別是藍(lán)牙小車軟件圖標(biāo),藍(lán)牙小車操作界面,藍(lán)牙小車指令設(shè)置圖界面。
這個(gè)軟件操作比較簡(jiǎn)單,但是非常好用。手指放到方向箭頭上是運(yùn)行,手指離開是停止;方向鍵的設(shè)置是自己定義的。 藍(lán)牙智能小車:軟件控制方式有語(yǔ)音模式、按鍵模式、重力模式、手勢(shì)模式、多種方式見圖:
手機(jī)軟件安裝好后我們來安裝Mixly(米思齊)圖形編程軟件。 下載后安裝到你的電腦系統(tǒng)上,接下來把Arduin開發(fā)板插到電腦USB口上,鼠標(biāo)右鍵單擊這臺(tái)電腦,點(diǎn)設(shè)備管理器,打開端口小三角記下端口號(hào)。 現(xiàn)在我們用它來編寫藍(lán)牙模塊和手機(jī)APP軟件通信程序。 打開米思齊軟件按下圖把程序?qū)懞煤簏c(diǎn)編譯,成功后在右下角的主板型號(hào)選擇項(xiàng)目 中點(diǎn)選Arduino Uno,端口號(hào)選你剛才電腦端口上測(cè)到的那個(gè)號(hào),我這里是COM9,見下圖: 然后點(diǎn)上傳將程序燒到單片機(jī)中,關(guān)閉單片機(jī)電源。現(xiàn)在把藍(lán)牙模塊用杜邦線按下圖連接到Arduino主板上,LED就不要接了,用串口監(jiān)視器查看窗口的數(shù)碼和字符串顯示就行了。
藍(lán)牙模塊的 TX 與 Arduino RX 連接,RX 與 Arduino TX 連接,藍(lán)牙模塊的VCC連接Arduino 5V,藍(lán)牙模塊的GND連接Arduino GND
現(xiàn)在上電打開端口,點(diǎn)擊串口監(jiān)視器將其打開觀察串口信號(hào)我們發(fā)現(xiàn)全是16進(jìn)制的F這是手機(jī)沒有發(fā)指令。現(xiàn)在我們用藍(lán)牙智能小車的APP軟件發(fā)指令,按上下左右停鍵在單片機(jī)串口分別顯示2、8、6、7、3。測(cè)試語(yǔ)音指令前進(jìn)、后退、左轉(zhuǎn)、右轉(zhuǎn)、停止分別得到:2、8、9、16、3.見圖:
接下來我們用相同的方法對(duì)藍(lán)牙小車軟件的指令進(jìn)行測(cè)試。先在手機(jī)軟件中將前后左右停分別設(shè)置成大寫字母A、B、L、R、S。然后拔掉藍(lán)牙模塊的VCC 5V電壓的導(dǎo)線(向Arduino主板燒寫程序一般是斷開藍(lán)牙模塊和主板的連接,否則不僅上傳失敗還可能損壞模塊)。打開米思齊軟件按下圖編程測(cè)試結(jié)果如圖。 藍(lán)牙小車上位機(jī)發(fā)出的指令不是16進(jìn)制數(shù),而是常用字符,所以我們要打印讀取字符串。(此時(shí)如果用串口監(jiān)視器觀察智能小車發(fā)的指令會(huì)發(fā)現(xiàn)是象制表符一樣的特殊符號(hào),因?yàn)橛行┓?hào)本人找不到,所以改用16進(jìn)制接受。而藍(lán)牙小車軟件不存在這種問題)。打開串口監(jiān)視器我們把手指放到上下左右停止鍵上對(duì)應(yīng)串口監(jiān)視器顯示ABLRS,當(dāng)手指離開后都會(huì)顯示S。到這一步藍(lán)牙模塊和手機(jī)通訊已經(jīng)成功!接下來我們按照測(cè)試結(jié)果在米思齊軟件上編出能與這兩種手機(jī)軟件匹配的藍(lán)牙智能小車的程序。見圖: 下圖是各函數(shù)模塊折疊后的程序圖,是不是感覺很清爽,這是因?yàn)槲覀兙幊绦虻姆椒ㄊ怯煤瘮?shù)編程。需要了解函數(shù)時(shí)我們把它逐條展開來,你一看就明白不用我解釋程序;這是圖形編程的好處。
我們按下圖連接元器件。
將兩個(gè)電機(jī)分別接到電機(jī)A和電機(jī)B上,在電機(jī)驅(qū)動(dòng)模塊上用杜邦線將A1,A2分別接到Arduino主板的接口5和接口6上;B1,B2分別接到Arduino主板的接口9和接口10上。將Arduino主板的接口5V和GND分別接到電機(jī)驅(qū)動(dòng)板的“+”和“-”上。在小車上接完線如果安裝了車輪要讓輪子懸空,請(qǐng)不要連接藍(lán)牙模塊。接著將程序裝到主板里,關(guān)機(jī)。接下來在Arduino主板連上藍(lán)牙模塊,用手機(jī)發(fā)送前進(jìn)指令,觀察兩電機(jī)車輪的旋轉(zhuǎn)方向是否是前進(jìn)轉(zhuǎn)向,如果不相符將插在Arduino主板上的5和6或9和10杜邦線插頭對(duì)調(diào),調(diào)整到兩車輪轉(zhuǎn)動(dòng)方向都是前進(jìn)就OK了。兩個(gè)輪子的速度調(diào)整我們采用(PWM)脈沖寬度調(diào)制,速度的賦值范圍可在120-255之間選擇。兩個(gè)輪子電機(jī)轉(zhuǎn)速如果不同小車就不能走直線,就要做相應(yīng)的調(diào)整,數(shù)值越大轉(zhuǎn)速越快。接下來我們給機(jī)器人安裝超聲波避障模塊和紅外避障模塊。 我們展開超聲波函數(shù)的程序: 程序中前面的超聲波模塊的Trig發(fā)射和Echo接受是分別接在Arduino主板的第7和第8接口上的,我們用杜邦線將它們連接在一起;再把模塊的VCC和GND分別接到Arduino主板的5V和GND上。把小車后面的超聲波模塊的Trig發(fā)射和Echo接受分別接在Arduino主板的第A2和第A3接口上,再把模塊的VCC和GND分別接到Arduino主板的5V和GND上。程序中小車的避障距離是小于12mm,進(jìn)入避障范圍后向反方向運(yùn)行1秒后停止。如果加轉(zhuǎn)向和復(fù)雜的動(dòng)作會(huì)在電池電量不足的時(shí)候小車遙控失靈,直接STOP,就沒有這種現(xiàn)象。接下來打開紅外避障函數(shù)程序: 程序中小車4個(gè)角的紅外避障模塊的OUT輸出分別接到Arduino主板的A1.A4.A5.13接口,并將各自的VCC和GND分別接到Arduino主板的5V和GND上。程序中非數(shù)字輸入管腳的意思是這個(gè)管腳輸入的是低電平,紅外接收管沒有收到紅外發(fā)射波。紅外管收到信號(hào)時(shí)串口監(jiān)視器中顯示“1”就是高電平,受到障礙是顯示“0”模塊連接好后給機(jī)器人小車供電,最好是7.2V(兩節(jié)1650鋰電池串聯(lián),如果用2個(gè)這樣的串聯(lián)電池再并聯(lián)效果更好,能讓小車工作時(shí)間加倍還能保護(hù)鋰電池,如本例電源)。用十字螺絲刀調(diào)整各紅外模塊的避障范圍,具體是用手掌放到模塊前,前后慢慢移動(dòng)手掌,旋轉(zhuǎn)模塊上的電位器調(diào)到距離大約4-6cm兩個(gè)LED燈都亮為止,4個(gè)角的模塊都要這樣調(diào)好。 藍(lán)牙遙控程序見上圖:程序是按藍(lán)牙智能小車和藍(lán)牙小車的多種模式編的,程序中語(yǔ)音控制的9和16是加了延時(shí)200毫秒和STOP函數(shù)的限制轉(zhuǎn)動(dòng)的角度在20度左右。大家可以根據(jù)自己的需要靈活制定轉(zhuǎn)動(dòng)角度。
由于小車后輪是萬(wàn)向輪所以走直線不如4驅(qū)小車,動(dòng)力也比4驅(qū)小,但比4驅(qū)省電。兩驅(qū)制作完,四驅(qū)小車的制作你會(huì)覺的易如反掌: 采用4驅(qū)電機(jī)驅(qū)動(dòng)模塊見上圖,按圖接線,程序稍加改動(dòng)再連接4個(gè)接口(3、4、11、12),將左邊兩個(gè)電機(jī)并聯(lián)再將右邊的兩個(gè)電機(jī)并聯(lián)即可其他都不改動(dòng)。讀者還可根據(jù)自己的需要增加其他功能,例如WiFi遠(yuǎn)程遙控?cái)z像智能小車,無人駕駛高清攝像飛機(jī)等。
作者: 薛 成 |