編者按:在科技發(fā)展日新月異的今天,信息技術(shù)教學(xué)已經(jīng)遠(yuǎn)離了開、關(guān)機(jī)還需要反復(fù)講解的時(shí)代,三歲孩童熟練地?cái)[弄著iPad已非奇事。自策劃了“Scratch來了”這一專題之后,編輯深刻感受到研究程序語言的老師的可愛,他們的執(zhí)著、他們的探索,使得程序教學(xué)不再那么枯燥,煥發(fā)出勃勃生機(jī)。因此,雜志特別策劃了這一專欄,將陸續(xù)刊發(fā)一些程序教學(xué)領(lǐng)域有代表性的教學(xué)實(shí)踐。也期待更多老師投身到程序教學(xué)中去,通過自身的踐行,推動(dòng)程序教學(xué)的復(fù)興。
● 什么是Arduino
如果你還頑固地認(rèn)為編程就是坐在電腦屏幕前,不停地敲代碼,利用電子計(jì)算機(jī)自動(dòng)處理問題,做一個(gè)老實(shí)本分的“碼農(nóng)”的話,那你就Out了。今天的Arduino會(huì)讓你對(duì)編程的看法耳目一新。因?yàn)槟阍诰帉懗绦蚯靶枰O(shè)置好自己的電子線路,就像在對(duì)一個(gè)類似于物理的計(jì)算平臺(tái)進(jìn)行相應(yīng)的連線,然后再編寫程序代碼,并且這些程序可以來控制、感知外圍世界一樣。
Arduino是一款開源電子平臺(tái),包含各種型號(hào)的Arduino板,使用的軟件是Arduino IDE,是由意大利教師Massimo Banzi和西班牙籍晶片工程師David Cuartielles聯(lián)手開發(fā)設(shè)計(jì)電路板,并引入Banzi的學(xué)生提供程序設(shè)計(jì)語言的。起初他們是為了解決學(xué)生們?cè)谧鲈囼?yàn)時(shí)找不到便宜好用的微控制器這一問題,但隨后三人又秉承設(shè)計(jì)時(shí)的開放源碼理念,把設(shè)計(jì)圖放到了網(wǎng)上,任何人都被允許生產(chǎn)電路板的復(fù)制品,還能重新設(shè)計(jì),為現(xiàn)在市場(chǎng)上大量的Arduino板奠定了堅(jiān)實(shí)基礎(chǔ)。Arduino不僅是一個(gè)基于開放源碼的軟硬件平臺(tái),并且具有使用類似JAVA、C語言的Processing/Wiring開發(fā)環(huán)境。幾乎任何人,即使不懂電腦編程,也能用Arduino做出很酷的東西,如對(duì)感測(cè)器做出回應(yīng),閃爍燈光,控制馬達(dá)……
● Arduino的特色
1.開放的電路板設(shè)計(jì)
Arduino控制板是采用了開放源代碼的電路圖設(shè)計(jì)的,所以有經(jīng)驗(yàn)的電路設(shè)計(jì)師能夠根據(jù)需求設(shè)計(jì)自己的模塊,可以對(duì)其擴(kuò)展或改進(jìn)。甚至是對(duì)一些相對(duì)沒有什么經(jīng)驗(yàn)的用戶,也可以通過制作試驗(yàn)板來理解Arduino是怎么工作的。而且版權(quán)法只監(jiān)管開源軟體,卻很難用在硬體上,于是Arduino采用了Creative Commons許可,即任何人都被允許生產(chǎn)電路板的復(fù)制品,還能重新設(shè)計(jì),甚至銷售原設(shè)計(jì)的復(fù)制品,而這一切都不需要付版稅。然而,如果你重新發(fā)布了引用設(shè)計(jì),你必須說明原始Arduino團(tuán)隊(duì)的貢獻(xiàn)。如果你調(diào)整或改動(dòng)了電路板,你的最新設(shè)計(jì)必須使用相同或類似的Creative Commons許可,以保證新版本的Arduino電路板也會(huì)一樣的自由和開放,唯一被保留的只有Arduino這個(gè)名字,如圖1的ArduinoMANGOII、圖2的Arduino MEGA2560 R3與圖3的Arduino Robot。
2.編程方式多樣,代碼簡(jiǎn)潔
Arduino編程主要有以下幾種方式:第一種是使用官網(wǎng)Arduino IDE編程環(huán)境(如圖4),這可以在官網(wǎng)下載(http://www.arduino.cc),支持Windows,MacOS,Linux操作系統(tǒng)。第二種是使用微軟的VisualStudio環(huán)境(如圖5),也有Arduino for Microsoft Visual Studio的插件,安裝后可以在Visual Studio里進(jìn)行Arduino的開發(fā)。第三種是如果不太喜歡寫代碼,或者是教小孩子玩Arduino,也有圖形化的編程環(huán)境,如圖6的Ardublock。
Arduino是基于AVR平臺(tái),對(duì)AVR庫進(jìn)行了二次編譯封裝,把端口都打包好了,寄存器、地址指針之類匯編語言的那些東西都給拋開了,取而代之的是高級(jí)語言的簡(jiǎn)單函數(shù)。大大降低了軟件開發(fā)難度,適宜非專業(yè)愛好者使用。Arduino軟件是開源的,同時(shí)與C、JAVA語言在語法上有很大的相似性,有經(jīng)驗(yàn)的程序員可以對(duì)其進(jìn)行擴(kuò)展。圖7是匯編語言編程環(huán)境,圖8是Arduino ide編程環(huán)境。
3.線上燒錄,感知外圍世界
Arduino可使用ICSP線上燒入器,將編制程序燒入芯片,我們只有一根連接線就隨時(shí)隨地向芯片中刷入程序,實(shí)現(xiàn)相應(yīng)的功能。同時(shí)利用Arduino控制板可簡(jiǎn)單地與傳感器,各式各樣的電子元件連接,如紅外線、超音波、熱敏電阻、光敏電阻、電機(jī)馬達(dá)等。從而實(shí)現(xiàn)程序感知外圍世界,控制外圍世界的目的。下頁圖9中的實(shí)驗(yàn)就是LED發(fā)光二極管在受到光線照射時(shí)會(huì)產(chǎn)生微弱的電流,我們用三極管對(duì)其進(jìn)行放大,觸發(fā)Arduino進(jìn)行檢測(cè),如果達(dá)到極值蜂鳴器發(fā)出報(bào)警聲。
Arduino還有很多優(yōu)點(diǎn),如支持安卓系統(tǒng),支持多種互動(dòng)程序,并且由于在軟硬件上都采用開源的設(shè)計(jì)理念,使得Arduino擁有了大量的資源。
● Arduino的典型范例
Arduino編程與其他編程工具最大的區(qū)別在于需要Arduino控制板及一定的硬件支持,編制好的程序首先燒入控制板中,從而實(shí)現(xiàn)感知外圍世界,控制外圍世界,讓虛擬世界與物理世界聯(lián)通,使其具有一定的現(xiàn)實(shí)意義。
例如,光照?qǐng)?bào)警系統(tǒng),孵化車間對(duì)光線的控制是有要求的,當(dāng)光線適當(dāng)時(shí)可以促進(jìn)孵化進(jìn)程;但當(dāng)光線過強(qiáng)時(shí)不但不利于孵化,還有可能導(dǎo)致孵化徹底失敗。請(qǐng)你為該孵化室設(shè)計(jì)一個(gè)光線報(bào)警系統(tǒng),當(dāng)光照強(qiáng)度超過一定值,通過報(bào)警燈告知管理員,對(duì)光線進(jìn)行調(diào)整。
選材:要完成任務(wù)的設(shè)計(jì),首先需要找到感知光線強(qiáng)度的器材,這里我們選擇了光敏三極管,通過它來感知光線強(qiáng)度的變化。
連線:此次實(shí)驗(yàn)的電路略顯復(fù)雜,LED部分比較容易解決,從13號(hào)引腳到地線,中間串接220Ω的保護(hù)電阻,然后就是光敏三極管的部分,光敏三極管有凸起的一邊為發(fā)射極,此端接A0檢測(cè)口,同時(shí)并聯(lián)一個(gè)10KΩ的分壓電阻到地線以擴(kuò)展光敏三極管的靈敏度(此處電阻越小靈敏度越高)。另一極采用5V輸入。
編程:制作完的光照控制系統(tǒng),當(dāng)光線值強(qiáng)度的值小于300時(shí)(如下頁圖10,報(bào)警燈滅;當(dāng)光線強(qiáng)度的值超過300時(shí),報(bào)警燈亮,提示管理員適當(dāng)調(diào)整光照強(qiáng)度。通過傳感器,使得孵化室具備了一定的智能——報(bào)警。這只是其中的一個(gè)小小功能,教師完全可以引導(dǎo)學(xué)生做進(jìn)一步的探究,即作出對(duì)應(yīng)的反應(yīng):關(guān)閉窗簾、調(diào)整孵化燈亮度。而不再需要管理員來進(jìn)行調(diào)整。從而激發(fā)學(xué)生進(jìn)行深入探究。隨后即可進(jìn)行調(diào)試。此實(shí)驗(yàn)的部分代碼如下:
*/
int a =300; //此處需是環(huán)境基礎(chǔ)亮度變量,請(qǐng)查看自己的亮度數(shù)值
void setup ()
{
Serial.begin(9600);
pinMode(13,OUTPUT);
}
void loop()
{
int n = analogRead(A0); //讀取模擬口A0數(shù)值
Serial.println(n);
if (n>= a ) //對(duì)光線強(qiáng)度進(jìn)行判斷,如果比我們的預(yù)設(shè)值大就點(diǎn)亮LED否則就關(guān)閉
{
digitalWrite(13,HIGH);
}
else
{
digitalWrite(13,LOW);
}
}
拓展:現(xiàn)實(shí)生活中,對(duì)于孵化室的要求有很多,如溫度、濕度、光照、氣體等,那么通過本例,我們可拓展利用溫度傳感器、濕度傳感器來實(shí)現(xiàn)孵化指標(biāo)的控制。
將Arduino傳感器等外部設(shè)備引入課程后,使那些具備研究能力的學(xué)生可以自由發(fā)揮自己的想象,使用這些工具將自己的想法在游戲、娛樂、科學(xué)研究中得以實(shí)現(xiàn)。其角色也由之前單一的用戶,向玩家、交互設(shè)計(jì)師、研究者的角度轉(zhuǎn)換。在這個(gè)看似沒有目的、沒有實(shí)用性的實(shí)驗(yàn)中,學(xué)生漸漸懂得了自己適合做什么,喜歡做什么,以及完成一項(xiàng)任務(wù)需要找哪些人來合作。
● 如何開發(fā)Arduino課程
相對(duì)于VB、VC等可視化編程軟件來說,Arduino沒有所見即所得的程序設(shè)計(jì)界面。而多出來的卻是簡(jiǎn)單的電路設(shè)計(jì),但就是這些基于硬件的電路設(shè)計(jì),讓程序的功能從虛擬世界跨步進(jìn)入到了現(xiàn)實(shí)世界中,并實(shí)現(xiàn)了兩者的互通。另外,與傳統(tǒng)的程序設(shè)計(jì)教學(xué)不同,Arduino的教學(xué)要從簡(jiǎn)單的電路設(shè)計(jì)開始,而不是從數(shù)據(jù)結(jié)構(gòu)、程序語法講授開始。因?yàn)锳rduino編程更注重的是硬件的控制,所以傳統(tǒng)編程類軟件課程設(shè)計(jì)思路,不適合Arduino。
開發(fā)Arduino課程要從以下幾個(gè)方面考慮:①了解電子控制系統(tǒng)的基本組成,認(rèn)識(shí)常見的電子元器件,能看懂相關(guān)技術(shù)指標(biāo)參數(shù)。Arduino的編程是建立在一定硬件基礎(chǔ)之上的,如果對(duì)硬件知識(shí)知之甚少,想完成Arduino作品的設(shè)計(jì)可能是有困難的。②熟悉數(shù)字電路設(shè)計(jì),Arduino編程是基于硬件設(shè)備正確的電路連接的,如果程序編寫沒有問題,而電路連接錯(cuò)誤,一樣無法實(shí)現(xiàn)設(shè)計(jì)所要實(shí)現(xiàn)的目標(biāo)。因此,在教學(xué)中對(duì)數(shù)字電路的學(xué)習(xí)可以說是實(shí)現(xiàn)Arduino編程的前提,應(yīng)給予充分重視。③教學(xué)案例的選擇應(yīng)盡量緊密聯(lián)系現(xiàn)實(shí)生活,貼近學(xué)生生活實(shí)際,如聲控?zé)簟囟葓?bào)警裝置等都可作為教學(xué)案例。
目前基礎(chǔ)教育中Arduino的教學(xué)主要以S4A教學(xué)為主,使用Arduino1.0進(jìn)行大班的代碼教學(xué)的情況還比較少見。在基礎(chǔ)教育中,如果開展Arduino的相關(guān)教學(xué),不妨與我們的通用技術(shù)課程(選修)電子控制技術(shù)結(jié)合起來,這樣既使得Arduino可以走進(jìn)日常教學(xué)的課堂,另外也彌補(bǔ)了通用技術(shù)課程缺少相關(guān)配套實(shí)驗(yàn)的缺憾,從而最終實(shí)現(xiàn)技術(shù)課堂的大整合。