☆王偉民
(浙江省上虞中學(xué),浙江紹興 312300)
為推動(dòng)普通高中辦學(xué)多樣化、特色化發(fā)展,從2013年開始,浙江省教育廳開展“普通高中特色示范學(xué)?!苯ㄔO(shè)評估,我校也開始了特色學(xué)校的創(chuàng)建之路。在全校教師及校外力量的共同努力下,在不到1年的時(shí)間里,開設(shè)了100多門校本選修課程,筆者開設(shè)的《創(chuàng)意機(jī)器人》也名列其中。
在課程的開設(shè)過程中,筆者發(fā)現(xiàn)目前高中生在機(jī)器人方面的基礎(chǔ)普遍較差,從連續(xù)兩年對高一選修本課程的學(xué)生(總?cè)藬?shù)為60)的調(diào)查結(jié)果來看,學(xué)過機(jī)器人的學(xué)生人數(shù)為零,學(xué)過編程的只有1人,學(xué)過電子小制作的也為零,可見機(jī)器人或與其相關(guān)的技術(shù)學(xué)科在小學(xué)階段和初中階段的普及教育還是一片空白,小學(xué)和初中雖然都有機(jī)器人的相關(guān)教材,但許多學(xué)校并不開設(shè)課程,或僅作簡單介紹。因此,現(xiàn)階段高中開設(shè)機(jī)器人選修課時(shí),教師仍需要對學(xué)生進(jìn)行機(jī)器人基礎(chǔ)知識的普及教育。
這一現(xiàn)狀導(dǎo)致目前高中階段的機(jī)器人教學(xué)深度和難度不夠,教和學(xué)均停留在簡單機(jī)器人的學(xué)習(xí)和制作上。但其實(shí)高中生的智力水平遠(yuǎn)遠(yuǎn)高于小學(xué)生和初中生,應(yīng)當(dāng)適當(dāng)涉及復(fù)雜編程;另外,大多數(shù)學(xué)校開設(shè)這門課是希望從中挑選優(yōu)秀的學(xué)生去參加各類機(jī)器人比賽。從這兩方面考慮,教師有必要向?qū)W生介紹復(fù)雜編程的相關(guān)知識,因此,我們在每學(xué)期結(jié)束前均會安排2-3節(jié)課,引導(dǎo)學(xué)生從簡單編程過渡到復(fù)雜編程,本文介紹的是其中一節(jié)課的相關(guān)情況,以期與同行交流。
機(jī)器人項(xiàng)目一般有一定的復(fù)雜度,特別是高智能、多功能機(jī)器人,不光硬件復(fù)雜,其軟件部分也非常復(fù)雜。為了降低編程難度,便于多人合作編程,通常采用模塊化編程。對于高中生而言,掌握利用機(jī)器人解決一些較復(fù)雜問題的策略和思路,不但可以鍛煉學(xué)生的思維能力、綜合應(yīng)用能力和面對復(fù)雜問題時(shí)的決策能力,也有利于學(xué)生創(chuàng)意的發(fā)揮,從而能制作出功能更加新穎和強(qiáng)大的機(jī)器人。
復(fù)雜編程相對于簡單編程,不僅僅是代碼的長度更長,也不是一段段的簡單程序的簡單堆砌,復(fù)雜編程有著獨(dú)特的結(jié)構(gòu)。在編程中,通常會用到函數(shù)和函數(shù)調(diào)用、復(fù)合條件的使用、程序嵌套、并行驅(qū)動(dòng)等知識,對于初次接觸復(fù)雜編程的初學(xué)者,建議從復(fù)合條件的使用入手。
我校選用的是雍異教育機(jī)器人,采用C51語言,它是在標(biāo)準(zhǔn)C語言的基礎(chǔ)上根據(jù)51單片機(jī)的特性進(jìn)行了適當(dāng)改造而成的,和標(biāo)準(zhǔn)C語言高度相似。
我們知道,智能機(jī)器人必須要用到傳感器,在編程時(shí),通常采用IF語句或WHILE語句來實(shí)現(xiàn)傳感器狀態(tài)的判斷,簡單的機(jī)器人可能只用到了一個(gè)傳感器,相應(yīng)的IF語句或WHILE語句的()內(nèi)的條件也比較簡單,屬于單一條件。
復(fù)雜的智能機(jī)器人,通常要用到多個(gè)傳感器,相應(yīng)地IF語句或WHILE語句的()內(nèi)的條件也會變得更加復(fù)雜,不再是單一條件,而是復(fù)合條件。復(fù)合條件通常是由多個(gè)單一條件用與、或邏輯運(yùn)算符連接而成的。
在C語言中,&&表示“與”,||表示“或”。
||是“或”運(yùn)算符,當(dāng)條件1或條件2至少有一個(gè)滿足時(shí),執(zhí)行循環(huán)體語句,然后返回,再次判斷……
當(dāng)“爸爸給買玩具娃娃”或“媽媽給買小紅裙”時(shí),小女孩不斷地笑……顯然小女孩微笑的條件是寬松的,只要能得到小紅裙或者玩具娃娃中的任何一件,她就心滿意足了。
前面例子中的||變成了這里的&&,其他沒有變,顯然小女孩微笑的要求更高了,兩樣?xùn)|西都得到才會笑。
在實(shí)際教學(xué)中,建議通過一個(gè)具體的項(xiàng)目來引導(dǎo)學(xué)生了解復(fù)雜編程的相關(guān)知識。
針對使用的這款機(jī)器人的硬件條件,筆者設(shè)計(jì)了一個(gè)名為“各就各位”的項(xiàng)目。地面上有一條黑色的起跑線,小車離該線有一段距離,其前進(jìn)方向與起跑線不垂直,編程讓小車前進(jìn)到起跑線,并讓其前進(jìn)方向與起跑線垂直,并停車。這個(gè)任務(wù)類似于運(yùn)動(dòng)員起步時(shí)在起跑線上各就各位,做好起跑準(zhǔn)備。
學(xué)生明確任務(wù)后,往往不知道從何下手,這時(shí)教師需要對學(xué)生進(jìn)行思路引導(dǎo),可以讓學(xué)生在單片機(jī)內(nèi)編曲寫一個(gè)停車程序,然后給小車通電,用手移動(dòng)小車前進(jìn),我們先假設(shè)夾角小于90°(如圖1)。
當(dāng)小車運(yùn)動(dòng)到黑線時(shí),裝在車頭左側(cè)的光電開關(guān)指示燈狀態(tài)發(fā)生變化,只要我們將該光電開關(guān)的輸出通過一根電線接到單片機(jī)的任一IO腳上,單片機(jī)就能知道小車左側(cè)已經(jīng)到黑線位置,然后思考這個(gè)時(shí)候小車還能繼續(xù)前進(jìn)嗎?如果繼續(xù)前進(jìn),小車車頭的左邊就到黑線前面,學(xué)生自然就想到左輪應(yīng)該停止,小車的右邊還沒有到黑線,右輪要繼續(xù)前進(jìn),這個(gè)時(shí)候小車應(yīng)該是左轉(zhuǎn)彎,當(dāng)裝在車頭右側(cè)的光電開關(guān)指示燈狀態(tài)發(fā)生變化時(shí),小車右邊也到達(dá)黑線,此時(shí)停車即可。
顯然,學(xué)生要用到小車車頭左右2個(gè)光電開關(guān),將它們的輸出腳用2根導(dǎo)線連到單片機(jī)的任何2個(gè)IO腳上即可。
圖1
有了思路,我們還需要將它轉(zhuǎn)換成C語言語句。利用已學(xué)知識,學(xué)生很容易寫出下面的程序:
實(shí)際運(yùn)行后,學(xué)生會發(fā)現(xiàn)大致能對齊,但不是對得非常齊,原因是左輪停止、右輪前進(jìn)時(shí),小車左側(cè)會有少許滑動(dòng)。如果要求準(zhǔn)確對齊,可以在程序中加入更精確的調(diào)整語句,程序修改如下:
程序運(yùn)行后,發(fā)現(xiàn)對得非常齊了。
程序可以順利運(yùn)行了,但演示時(shí)必須保證夾角小于90°,如果取消這一限制,即小車與黑線的夾角為任何角度時(shí),小車都能前進(jìn)到黑線前,并與黑線對齊成90°角,還需要進(jìn)一步動(dòng)腦筋。
如果事先知道夾角小于90°,必定是左邊的傳感器狀態(tài)先發(fā)生改變,所以,學(xué)生應(yīng)先判斷左邊的傳感器狀態(tài)是否改變;如果事先知道夾角大于90°,必定是右邊的傳感器狀態(tài)先發(fā)生改變,應(yīng)先判斷右邊的傳感器狀態(tài)是否改變。但這個(gè)夾角事先是不知道的,它可能小于90°,可能大于90°,也等于90°,該如何判斷傳感器的狀態(tài)呢?
這種情況下,需要用到前面講過的復(fù)合條件和與或的知識。傳感器判斷語句寫成下面的形式:
里面的條件是一個(gè)復(fù)合條件,兩個(gè)傳感器,如果都檢測到白紙,說明沒有到達(dá)黑線位置,所以不作任何處理,繼續(xù)前進(jìn);當(dāng)其中一個(gè)傳感器檢測到黑線時(shí),說明小車的左邊或右邊到了黑線位置,此時(shí),已到黑線的一側(cè)要停止前進(jìn),沒有到黑線的一側(cè)要繼續(xù)前進(jìn)。有的學(xué)生在這里又會被難住,因?yàn)橄鹊胶诰€的可能是左側(cè)也可能是右側(cè),可以通過一個(gè)IF語句判斷當(dāng)前是左側(cè)傳感器探測到黑線還是右側(cè)傳感器探測到黑線,再用分支語句分情況處理。
最后,我們寫出各就各位的完整版程序如下:
通過對學(xué)生循序漸進(jìn)的思路引導(dǎo),幾乎所有學(xué)生都能編寫出這個(gè)復(fù)雜程序,更重要的是學(xué)生知道了一個(gè)道理,即使是最復(fù)雜的程序也是由簡單程序組合而來或者變形而來的,只要不畏懼困難,肯動(dòng)腦,同時(shí)掌握一定的復(fù)雜編程知識和技巧,更復(fù)雜的程序也是可以寫出來的。當(dāng)學(xué)生在心理上克服了對復(fù)雜程序的恐懼感,就會變得更加自信,對于他們將來進(jìn)入大學(xué)完成較高難度的學(xué)習(xí)和研究也有很大益處。
[1]謝作如.Arduino創(chuàng)意機(jī)器人[J].浙江教育資源網(wǎng),2015.
[2]孫丹江.如何在中小學(xué)開展機(jī)器人普及課程—以我校機(jī)器人普及課程的開設(shè)為例[J].中國信息技術(shù)教育,2012.