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