燕哲

摘要:隨著電子技術的不斷發展,單片機技術顯得越來越重要,很多技工學校都把單片機技術作為電子專業或者自動化控制專業的一門必修課程。但是在單片機的教學中,也存在著很多困難,尤其是對于技工類學校,學生多為初中畢業生,英文基礎較為薄弱,學習起來難度較大,老師教起來也頗為費勁,教學效果不是很理想。Arduino作為一款開源軟件,簡單靈活,使用方便,配合ArduBlock的圖形化編程,可以極大地降低單片機學習的難度。本文以七段數碼管的顯示為例,結合技工院校學生的實際情況,探索單片機教學的新思路,僅供大家參考。
關鍵詞:單片機教學 Arduino ArduBlock ArduBlock圖形化編程
一、技工院校中單片機教學的現狀
筆者是一名技工院校教師,從事單片機教學也有幾年時間。單片機作為電子或者自動化控制專業的一門必修課程,在很多學校都有開設。在多數技工院校,生源多為初中畢業生,且經過優秀普通高中的篩選后,進入到學校就讀的學生基礎并不扎實,學習主動性也不是很高,而單片機作為一門需要語言編程,需要英文基礎又需要邏輯思維能力的課程,在實際教學中學生學習起來頗有難度。學生即便剛開始有興趣,但是碰到編程就不會,看到英文就頭疼,久而久之,對學生的學習積極性造成很大影響,教學效果也不盡如人意。
以筆者的實際教學效果為例,筆者學校學生多為初中畢業生,根據專業方向的區別一般在二年級或者三年級開設單片機課程。學生在剛開始流水燈教學時基本上都能熟練掌握;當加入定時器,進入數碼管學習后,只有一半學生能夠掌握;繼續進行到中斷,點陣液晶顯示后只能有四分之一的學生能夠跟上了;到了后期的各種傳感器控制、雙機通信等學生更是一頭霧水,只有極少數學生能夠跟上進度。因此越往后進行就越難教學,多數學生只是機械地把老師給出的程序敲進去進行驗證,并不理解。課程學完后,學生只能說是了解了單片機,并不能夠掌握。因此,在多數技工院校中,單片機課程變成了極少數精英學生才愿意學、學得懂的課程,多數老師也不愿意承擔該課程的教學工作。
二、Arduino和ArduBlock圖形化編程軟件介紹
1.Arduino介紹
Arduino是一款便捷靈活、方便上手的開源電子原型平臺。包含硬件(各種型號的Arduino板)和軟件(Arduino IDE)。它是由一個歐洲開發團隊于2005年冬季開發的,目前可以說還處于起步階段,市場上的應用還不是很多。Arduino包含兩個主要的部分:硬件部分是可以用來做電路連接的Arduino電路板;另外一個則是Arduino IDE,計算機中的程序開發環境。
2.ArduBlook圖形化編程軟件
ArduBlock是一款專門為Arduino設計的圖形化編程軟件,由上海新車間創客開發。ArduBlock軟件是一款Arduino官方編程環境的第三方軟件,目前必須依附于Arduino軟件下運行,區別于Arduino傳統的文本式編程環境。ArduBlock是以圖形化積木搭建的方式編程的。這樣的方式會使編程的可視化和交互性加強,編程門檻大大降低,即使沒有編程經驗的人也可以輕松嘗試給Arduino控制器編寫程序。具體的軟件界面在后面應用實例中大家會看到。
Arduino結合ArduBlock可以讓教師非常方便地完成程序編寫,下載調試,對于沒有語言基礎的技工院校學生是非常方便的。因為免去了傳統單片機的C語言或者匯編語言的學習,不需要英文基礎,同時加入了圖形化編程,學生學習起來會非常直觀,也可以大大激發學生的學習興趣。下面本人通過實際教學中的案例(七段數碼管的控制)來為大家介紹下這兩款軟件的使用。
三、教學實例:控制七段數碼管顯示器
在此例子中,教師選用的是Arduino Uno。這是一款基于ATmega328P芯片的單片機開發板,ATmega328P具有32KB閃存(其中0.5KB被啟動加載器占用),它還具有2KB SRAM和1KB EEPROM(可以利用EEPROM庫讀取和寫入)。該開發板由14路數字輸入/輸出引腳(其中6路可以用作PWM輸出)、6路模擬輸入、1個16MHz的石英晶體振蕩器、一個USB接口、1個電源接頭、1個ICSP數據頭以及1個復位按鈕組成。Arduino Uno包含了單片機運行所需的所有要素,只需要用USB連接線將其連接到計算機,或利用AC-DC適配器或者電池供電后即可啟動。Arduino Uno的特色在于將Atmega16U2編程為一個USB-to-serial轉換器,以便能簡單、輕松和自由地安裝驅動程序。目前,Arduino Uno已成為Arduino主推的產品。
七段數碼管顯示器是人們生活中常用的顯示器件,也是單片機教學中非常重要的一部分,具體原理我們在此就不再介紹。在此教學案例中教師選用單個七段共陽型數碼管(不控制小數點)。分析電路圖可知我們需要用到Arduino的6個數字引腳,在此我們使用引腳3-8。因為七段數碼管顯示器也是LED顯示的一種,因此我們需要加上1kΩ的限流電阻。
因為選用的數碼管為共陽型,根據數碼管顯示原理,只有當Arduino的引腳輸出低電位時,對應的LED才會點亮。因此,教師需要在程序的初始化中將每個針腳都輸出高電平,然后再將需要的引腳降低為低電平,以便確保數碼管能夠穩定顯示。在此先嘗試顯示單個數字6,然后再擴展0到9循環顯示。根據數碼管的顯示原理可知,教師要將數碼管的a、c、d、e、f、g置為低電平,對應的需要將Arduino的3-8腳改變為低(初始化為高)。在此因為印刷問題,圖不再此文顯示。
在ArduBlock軟件中,各個函數命令被做成了一個個的功能方塊,需要什么命令教師只需要從左邊找到對應的方塊拖到右邊編輯區即可。若是想要移除某個功能,直接拖到左半邊即可,使用起來非常方便。數字6的數碼管顯示程序編輯完成后點擊界面上方的“上載到Arduino”按鈕,程序便會被上傳到Arduino開發板中,同時軟件會自動生成對應的程序代碼,不需要手動編寫。上傳后自動生成的程序代碼如下圖所示。
從圖中可以看出,即便是語言編程,Arduino也并不復雜,看起來也是簡單明了。以上例子是單獨顯示一個數字6的程序,那么如果要顯示0到9,是不是程序會很長效率又很低呢?當然不是,C語言中教師經常會用到子程序來簡化程序,主程序中我們只需要調用相應的子程序即可。在ArduBlock軟件中,教師同樣可以引入子程序,該功能模塊也在“控制”中,名稱即為“子程序”,點擊該模塊教師可以對它進行重命名。在此教師將剛剛設置好的初始化程序命名為reset子程序,數字6的函數命名為set6子程序。以此類推,我們分別寫出數字0到9的子程序,分別命名為set0到set9。因為是0到9循環顯示,還需要用到延遲函數。ArduBlock也把延遲函數做成了功能模塊,只需要拖出來,修改好后面的時間即可,不像傳統單片機還需要計算延時時間。引入子程序后整個程序看起來就簡單多了,也很容易理解。這些子程序的模塊只需要擺放到右側空余地方即可,堆疊起來也沒有關系。在此因為印刷問題,圖不再此文顯示。
通過這樣一個實際教學案例,相信大家對Arduino和ArduBlock都已經有了一個初步的認識。可以看出,在ArduBlock軟件中,沒有了傳統的c語言出現,各種命令都被做成了小模塊,而且可以漢化過來變成全中文界面,看起來非常直觀,搭積木的形式也可以很清楚的理清程序的流程,讓學生更加容易理解。實際教學中利用ArduBlock圖形化編程軟件配合Arduino開發板使用,可以讓學生真正做到零基礎學習程序控制,降低單片機學習難度,大大激發學生的學習興趣。
四、小結
筆者在經過一個學期兩個班級的實際教學后,將教學效果總結如下:對于流水燈相關的程序,所有學生都能熟練掌握,而且可以自主變化;對于串口通信、馬達控制、傳感器驅動等相關的程序,絕大多數學生也可以熟練掌握。最為重要的是,學生覺得單片機不再高深莫測,而是觸手可及的東西,稍微動動腦子就可以完成很多有意思的試驗,極大地提高了學生學習單片機的興趣。
當然,Arduino在目前來說也有一定的局限性,筆者認為更適合做一些小型的項目,市場應用也不是很廣泛,可以作為單片機學習的入門,如果要真正深入學習單片機,可能還是要去學習AVR、ARM嵌入式等。但是對于零基礎的技校生來說剛剛合適,當然在實際教學中教師也可以讓學生先接觸Arduino,當學生有了學習興趣和一定的程序基礎后再去學習AVR、ARM等,讓學生也有一個循序漸進的過程,以后接受語言編程相對也會更加容易一些。正所謂師傅領進門,修行在個人,作為老師,需要做的也就是幫學生打開單片機學習的大門,剩下的就是靠興趣去引導學生不斷探索學習。