祝洲杰,甘 偉,黃 暢,胡章豪,馮晨韜
(浙江機(jī)電職業(yè)技術(shù)學(xué)院,杭州 310053)
近年來,隨著信息技術(shù)和人工智能技術(shù)的飛速發(fā)展,國家對(duì)于青少年的科技智能教育越來越重視[1],明確指出要從中小學(xué)階段開始設(shè)置人工智能相關(guān)課程,逐步推廣編程教育,建設(shè)人工智能學(xué)科,培養(yǎng)復(fù)合型人才,因而基于青少年的編程、信息化教育在近幾年呈現(xiàn)出日漸火爆的趨勢(shì)。
與成年教育不同,青少年教育如何在教學(xué)過程和教學(xué)載體中重視趣味性、階段目標(biāo)和項(xiàng)目的易實(shí)現(xiàn)性,從而克服編程及信息化教學(xué)中的難點(diǎn)和枯燥是非常重要的[2]。一款好的科教機(jī)器人可以兼顧機(jī)器人結(jié)構(gòu)設(shè)計(jì)、搭建和編程學(xué)習(xí),能及時(shí)在教學(xué)中提供趣味性和階段反饋,是非常重要的教學(xué)載體。
目前中國的青少年機(jī)器及編程學(xué)習(xí)采用的基本為依托Lego、MakeBlock 為代表的成熟體系和以Scratch、Python 為代表的編程兩方面[3],前者以積木式圖形化編程為主,教學(xué)載體較封閉,開放性不足,因而教學(xué)項(xiàng)目往往局限于避障、循跡、走線等基本的機(jī)器人功能和編程思維,對(duì)于新功能的開發(fā)、創(chuàng)造和編程實(shí)現(xiàn)則涉足較少;后者則基本以設(shè)計(jì)游戲作為趣味點(diǎn),主要為電腦端操作,實(shí)體的教學(xué)載體較少,而目前能兼顧兩者教學(xué)特點(diǎn)的自主研發(fā)教學(xué)載體并不多。
針對(duì)上述現(xiàn)狀和問題,設(shè)計(jì)和研發(fā)了一款小型模塊化多功能科教機(jī)器人,該機(jī)器人充分考慮了“STEM”的教育理念,在結(jié)構(gòu)上可適配多種模塊,且選用開放平臺(tái),能在實(shí)現(xiàn)常用功能的基礎(chǔ)上,為新功能的開發(fā)和創(chuàng)新提供便利;另一方面,也能兼顧編程思維和代碼學(xué)習(xí),為編程學(xué)習(xí)提供實(shí)感的教學(xué)反饋,是將兩方面教學(xué)特點(diǎn)結(jié)合較好的教學(xué)載體。
考慮到該移動(dòng)機(jī)器人的設(shè)計(jì)初衷是青少年可以模塊化搭接并實(shí)現(xiàn)各種外擴(kuò)功能的學(xué)習(xí)和研究載體,并能兼容Scratch類型的積木式圖形化編程和常規(guī)代碼編程。因而在方案設(shè)計(jì)時(shí),為其設(shè)定的目標(biāo)是:(1)功能模塊搭建需簡單,不使用焊接或特殊接頭等不便于快速搭建的方式,在搭建時(shí)只需簡單插接即可完成功能系統(tǒng)。除此之外,還需要考慮和現(xiàn)有成熟體系模塊的兼容性;(2)控制系統(tǒng)開放性強(qiáng),便于實(shí)現(xiàn)更多的功能拓展訴求,交互性要好,同時(shí)還需要配套的軟件開發(fā)環(huán)境,能具備良好的功能模塊庫支持,并能支持形式較多樣的編程方式。
基于上述設(shè)定的目標(biāo),選擇在Arduino平臺(tái)架構(gòu)的基礎(chǔ)上設(shè)計(jì)搭建機(jī)器人系統(tǒng)。Arduino平臺(tái)的優(yōu)勢(shì)在于其硬件和軟件開發(fā)環(huán)境都是開源的,開放性好,功能拓展較簡單,與各類終端設(shè)備及功能模塊的對(duì)接方便,交互性強(qiáng),很適合新功能的創(chuàng)新實(shí)現(xiàn)[4];而從軟件開發(fā)環(huán)境來說,Arduino 軟件開發(fā)環(huán)境既可以結(jié)合如ArduBlock等插件進(jìn)行圖形化編程,也可以直接使用類似于Java、C 語言的Processing/Wiring 開發(fā)環(huán)境進(jìn)行代碼編程,在功能的軟件實(shí)現(xiàn)上也比較符合需求。
在該移動(dòng)機(jī)器人的功能設(shè)定方面,除了常規(guī)的系統(tǒng)控制、電機(jī)驅(qū)動(dòng)、循線、避障功能之外,還從功能拓展性出發(fā),增加設(shè)計(jì)了抓取、搬運(yùn)、書寫、噴水等動(dòng)作模塊作為可選模塊。在這些功能的基礎(chǔ)上,還可以創(chuàng)新設(shè)計(jì)其他功能,使之能真正成為“STEM”教學(xué)中的良好載體。系統(tǒng)總體框圖如圖1所示。
圖1 系統(tǒng)總體框圖
在機(jī)器人的結(jié)構(gòu)設(shè)計(jì)上,由于外擴(kuò)功能模塊眾多且不確定,為了兼顧教學(xué)的趣味性和搭建的方便,系統(tǒng)采用了各獨(dú)立模塊與主體小車自由聯(lián)接的結(jié)構(gòu)形式,且在各模塊聯(lián)接至主體時(shí),設(shè)計(jì)了一種快換結(jié)構(gòu),效果示意如圖2所示。其中,主體小車與擴(kuò)展功能模塊的接口處設(shè)計(jì)使用彈簧鎖聯(lián)接。當(dāng)需要聯(lián)接時(shí),只需在彈簧的作用下將鎖芯套入功能模塊內(nèi),起到定位鎖緊的作用;當(dāng)需要松開功能模塊時(shí),只需向外拉動(dòng)鎖芯即可。這樣的形式可以使兩者在聯(lián)接過程中無需使用安裝工具,也不存在裝配的難度,適合學(xué)習(xí)和研究過程中的任意搭接。
圖2 快換結(jié)構(gòu)示意
圖3 便于外接Lego等搭建模塊的設(shè)計(jì)
除此之外,考慮到Lego和Makeblock等成熟體系中模塊在“STEM”教學(xué)中同樣承擔(dān)重要的載體作用,在該機(jī)器人上設(shè)計(jì)了相應(yīng)的適配位置和模塊,如圖3所示。這樣的模塊便于后續(xù)可以使用如Lego 等搭建模塊與主體聯(lián)接,實(shí)現(xiàn)更多樣的功能,使其具備更好的兼容性。
在硬件設(shè)計(jì)方面,如前文所述的方案設(shè)計(jì),基于對(duì)各擴(kuò)展功能模塊的硬件需求分析,選擇系統(tǒng)控制模塊以Arduino UNO作為主控單元,其核心是ATmega328-AU單片機(jī),能滿足對(duì)大部分功能如紅外、超聲波傳感器及舵機(jī)等硬件的控制[5]。而電機(jī)的控制則需要附加相應(yīng)的擴(kuò)展板作為電機(jī)驅(qū)動(dòng)模塊,藍(lán)牙通訊和其余擴(kuò)展功能模塊等也需要相應(yīng)地根據(jù)需求增加和擴(kuò)展。
出于搭建便捷度的考慮,各模塊與主控單元的連接全部采用類似杜邦接頭的接插頭,在連接時(shí)只需確定接口完成接插即可,連接非常簡單方便。
針對(duì)機(jī)器人結(jié)構(gòu)和硬件的配套設(shè)計(jì),可以大大降低搭建難度,減少常規(guī)組建硬件系統(tǒng)的繁復(fù)操作。比如,超聲波避障功能的搭接,只需將避障模塊通過快換完成與主體的搭接,并將信號(hào)線與相應(yīng)的接口完成插接即可,非常便于學(xué)習(xí)。
避障功能是移動(dòng)機(jī)器人的常規(guī)功能之一,是通過超聲波傳感器來實(shí)現(xiàn)的。超聲波傳感器可實(shí)現(xiàn)前方障礙物的檢測(cè),當(dāng)小車到障礙物的距離達(dá)到設(shè)定距離時(shí),超聲波傳感器測(cè)出距離值,進(jìn)而小車實(shí)現(xiàn)停車或者轉(zhuǎn)向等避障活動(dòng)[6]。
循跡功能也是移動(dòng)機(jī)器人的常規(guī)功能之一,大多是通過紅外傳感器實(shí)現(xiàn)的。循跡模塊可以檢測(cè)到白底中的黑線,實(shí)現(xiàn)機(jī)器人沿黑線的前進(jìn)、左右轉(zhuǎn)彎、停止等動(dòng)作[7]。在本產(chǎn)品中,循跡模塊被設(shè)計(jì)成如圖4所示。與避障功能類似,只需將接插件插入主控板相應(yīng)位置即可。
圖4 循跡功能模塊
圖5 藍(lán)牙模塊控制
作為一款科教機(jī)器人,藍(lán)牙功能是必須的,這是完成Arduino 平臺(tái)和Android App 端的重要方式,Android App 端的引入可以為教學(xué)提供更好的反饋和趣味性。Arduino平臺(tái)適配的藍(lán)牙模塊使用非常普遍,如圖5所示,實(shí)現(xiàn)控制也較簡單。
抓取動(dòng)作是展示機(jī)器人功能的最佳方式,在本產(chǎn)品中,抓手模塊與其余模塊一樣被設(shè)計(jì)成快換式,抓手的動(dòng)作由舵機(jī)來驅(qū)動(dòng),舵機(jī)通過角度的變化來控制抓手的張開和閉合。Arduino 平臺(tái)對(duì)于舵機(jī)的支持較為豐富,因而安裝也較為簡單,只需將接插件插入主控板相應(yīng)位置即可。
搬運(yùn)功能在本產(chǎn)品中展現(xiàn)為類似于叉車的抬升功能。從控制的實(shí)現(xiàn)來說,該功能的實(shí)現(xiàn)并不復(fù)雜,抬升和下降的動(dòng)作由一臺(tái)電機(jī)控制螺桿正反轉(zhuǎn),從而使鏟板上升或下降即可。電機(jī)的控制與機(jī)器人本身的驅(qū)動(dòng)輪一致,連接至擴(kuò)展板的電機(jī)驅(qū)動(dòng)模塊即可。
相比于上述的抓取和搬運(yùn)功能,噴水功能屬于較創(chuàng)新的功能,該功能可向指定方向噴水。這個(gè)功能實(shí)現(xiàn)的關(guān)鍵是需要系統(tǒng)完成對(duì)氣泵的控制,如圖6 所示。對(duì)于 Arduino 平臺(tái)來說,氣泵電機(jī)的控制較簡單,只需將接插件插入主控板相應(yīng)位置即可。
諸如此類可開發(fā)的新功能還有很多,由于使用了開放性的平臺(tái),使得該機(jī)器人可以作為功能拓展的良好載體。
圖6 Arduino的氣泵控制
由于使用的主控單元為Arduino UNO,因而上述機(jī)器人功能的實(shí)現(xiàn)即是通過Arduino的軟件開發(fā)環(huán)境來完成?;跈C(jī)器人的功能,軟件端程序分為Arduino 端程序和Android 端軟件。Android端軟件主要為藍(lán)牙模塊的通信和通過移動(dòng)端進(jìn)行機(jī)器人的控制。Arduino端程序則主要實(shí)現(xiàn)通過計(jì)算機(jī)完成圖形化編程或代碼編程,也是主要的學(xué)習(xí)工具。
Android端軟件主要是完成藍(lán)牙模塊的配對(duì)和控制。在機(jī)器人開啟的情況,藍(lán)牙模塊開始工作,進(jìn)入控制界面后,執(zhí)行開啟藍(lán)牙的功能,使用Bluetooth Adapter.start-discover()方法命令手機(jī)端自動(dòng)搜索周邊設(shè)備。同時(shí)桌面顯示出設(shè)備鏈表,用戶可以在設(shè)備鏈表中查看周邊可用的藍(lán)牙設(shè)備,選取移動(dòng)機(jī)器人藍(lán)牙模塊對(duì)應(yīng)的藍(lán)牙設(shè)備名稱,創(chuàng)建Bluetooth-Socket 進(jìn)行自主連接,創(chuàng)建RFCOMM 通信通道。待連接完成后,使用Item.setvisible()方法使方向控制按鈕顯示出來。連接完成后,點(diǎn)擊前進(jìn)、后退、左轉(zhuǎn)、右轉(zhuǎn)、停止等按鈕即可控制移動(dòng)機(jī)器人的運(yùn)動(dòng)。軟件監(jiān)聽每個(gè)的ButtonClick()點(diǎn)擊事件。在移動(dòng)機(jī)器人的Arduino部分,通過其藍(lán)牙接收從安卓手機(jī)藍(lán)牙發(fā)送出來的控制指令,經(jīng)過分析處理后指揮移動(dòng)機(jī)器人進(jìn)行相應(yīng)的運(yùn)動(dòng)。
在Arduino端,用戶可以選擇借助ArduBlock和Arduino設(shè)計(jì)助手等插件進(jìn)行圖形化編程,前者作為圖形化插件可以支持類似于Scratch 的編程思想,后者則通過形象化的搭建電路幫助設(shè)計(jì)新功能的實(shí)現(xiàn),如圖7~8所示。圖形化的編程和設(shè)計(jì)插件可以使編程過程變得更形象,比較適合編程初級(jí)學(xué)習(xí),編程完成后可直接保存成Arduino傳至控制板,比較方便。
圖7 ArduBlock輔助圖形化編程
圖8 使用Arduino設(shè)計(jì)助手搭建控制電路
除使用插件之外,也可直接使用默認(rèn)的Arduino軟件進(jìn)行Processing/Wiring 開發(fā)環(huán)境代碼編程。其編程思路與Java、C語言類似[8]。圖9所示的代碼中,編寫了對(duì)于左右驅(qū)動(dòng)輪的控制,這種類型的編程語言是與底層代碼的學(xué)習(xí)相對(duì)應(yīng)的。
由上述可知,Arduino 的軟件開發(fā)環(huán)境可以適配多種程序?qū)W習(xí)的需求,既能滿足圖形化編程,也可以進(jìn)行底層代碼的學(xué)習(xí),具備比較好的開放性,是非常適合作為軟件學(xué)習(xí)載體的。
圖9 Arduino代碼編程
在完成了系統(tǒng)全部的結(jié)構(gòu)、硬件和軟件設(shè)計(jì)之后,對(duì)該機(jī)器人進(jìn)行了大量測(cè)試去驗(yàn)證是否達(dá)到了設(shè)計(jì)要求,并需要判斷是否能達(dá)到最初的設(shè)計(jì)預(yù)期。在測(cè)試了機(jī)器人的自主移動(dòng)功能之后,又通過試驗(yàn)避障、循跡等基礎(chǔ)功能和抓取、搬運(yùn)物品等功能,整個(gè)系統(tǒng)可以較好地滿足各功能的實(shí)現(xiàn),并且也達(dá)到了快速安裝的設(shè)計(jì)目的,具有非常好的功能擴(kuò)展性。
為了測(cè)試該機(jī)器人是否能達(dá)到預(yù)期的教育載體的研發(fā)目的,將該機(jī)器人嘗試應(yīng)用于編程教育,在使用的過程中,大家普遍比較歡迎圖像化編程模式,并對(duì)于使用該機(jī)器人開發(fā)新功能,并快速編程實(shí)現(xiàn)的教學(xué)方式非常認(rèn)可,效果比較好。
本文設(shè)計(jì)和實(shí)現(xiàn)了一種基于Arduino的多功能模塊化科教機(jī)器人,由于其特殊的設(shè)計(jì)初衷,講解了其獨(dú)特的結(jié)構(gòu)設(shè)計(jì)和功能模塊設(shè)計(jì),并闡述了其軟硬件實(shí)現(xiàn)方法。測(cè)試結(jié)果表明,該科教機(jī)器人搭建簡單、結(jié)構(gòu)靈活、運(yùn)行穩(wěn)定、硬件功能擴(kuò)展性好。本機(jī)器人系統(tǒng)是青少年“STEM”教育的良好教學(xué)載體,具有較為廣闊的應(yīng)用前景,并為后續(xù)繼續(xù)研究提供了重要的參考價(jià)值。