王凡,周文輝,劉保軍,劉金華,彭芳
(電子科技大學中山學院,中山 528400)
作為計算機、自動化、機械等非電類理工科重要實踐課程,《電子設計實踐》旨在學生完成電路分析、模擬電子技術、數(shù)字電子技術課程之后,能夠理論聯(lián)系實際,在實踐課程中運用所學的電路知識,設計并制作出具有一定實用價值的電子產品,從而提高學生的動手實踐以及科學創(chuàng)新能力。然而對于非電類專業(yè)的學生在學習《電子設計實踐》的過程中主要出現(xiàn)以下不足:
(1)相對薄弱的電路知識。對于非電類的理工科學生,由于電路類課程的學時一般都比較少,并且沒有高頻電子線路等后續(xù)課程。學生在課堂上多為傳統(tǒng)灌輸式教學,又缺乏對應的實踐課程,使得學生一直處于被動接受狀態(tài)。特別是隨著課程的深入,學生累積的問題愈來愈多。
(2)原有的實踐課程多以驗證型的實驗為主,所選取的實驗內容已經無法反應當今電子技術的進步。并且實驗所用的電子制作大都可以在網(wǎng)上買到半成品,學生只需要簡單的調試即可完成,實際并未真正參與到設計與制作的整個流程之中。
(3)學生在選擇電子設計類的畢業(yè)設計題目時,往往出現(xiàn)無從下手的局面。多數(shù)會重復往年的課題,達不到畢業(yè)設計對于學生創(chuàng)新能力的要求。
針對上述這些問題,很多高校都建設了創(chuàng)新型的新型實驗室[1],采用單片機或PLC等設備作為電子設計的核心控制器。但是這些實驗設備往往出于統(tǒng)一性與模塊化的考慮,所有的擴展電路都必須采用相同的模塊設計,導致了設計內容的單一。隨著近幾年開源硬件的興起,本文提出了一種將開源硬件Arduino作為核心控制器應用于《電子設計實踐》課程的教學改革,讓學生通過完全自主的選題與制作,實現(xiàn)主動學習,從而培養(yǎng)其創(chuàng)新思維。
Arduino是一個誕生于意大利的教學用開源控制器,目前使用最廣泛的Arduino UNO主控板采用AT?mega328處理器作為主控單片機[2]。在這塊處理器的周圍有14個數(shù)字輸入/輸出端口,6個模擬輸入端口,6個PWM輸出端口,2路外部中斷,并且支持SPI、IIC、UART通信,其結構如圖1所示。2005年,Arduino開發(fā)團隊采用CC授權方式在網(wǎng)上公開了硬件設計圖,這樣任何人都可以復制生產Arduino電路板,而無需任何費用。Arduino在全球范圍了推動了開源硬件和創(chuàng)客運動的快速發(fā)展,其應用范圍可以從3D打印機到四軸飛行器這些最流行的電子設計,使得Arduino成為了一個開放的電子開發(fā)平臺。

圖1 Arduino UNO結構圖
采用Arduino進行電子開發(fā),不需要了解控制器的內部結構和寄存器設置;Arduino語言基于AVR-Libc這個優(yōu)秀的開源項目,其編程語言的風格非常類似于C語言,使得學生非常容易上手。同時在全球有著大量的Arduino開發(fā)者,他們提供了眾多的開源實例和第三方硬件,在GitHub就可以找到非常豐富的類庫。這樣使用者可以快速地擴展自己的Arduino項目功能。
為了提高學生的自主學習和創(chuàng)新與動手能力,在《電子設計實踐》課程中采用項目驅動的學習方式。即結合學生的愛好、專業(yè)而自主選擇理論與實際結合具有一定研究價值的課題。
在課堂開始,首先需要激發(fā)學生的興趣點,才能達到“做中學、玩中學”的效果。教師需要收集大量Ardu?ino的現(xiàn)有實例,特別是與手機、玩具結合的情況。讓學生可以利用Arduino去實現(xiàn)自己的興趣。
課程初期,學生對于實驗設備和所需要使用的儀器還比較陌生。教師需要對基本電子元器件辨別以及使用進行一定的講解。學生經過初期的學習之后應該對電子設計的基本流程、常用工具、仿真軟件、調試與故障排查都能有一定的了解。
課程中期,需要對Arduino進行概述講解。雖然無法面面俱到,但是主要功能都要有所涉及,包括了數(shù)字與模擬I/O的基本使用,串口的輸入輸出,PWM的使用,以及第三方擴展庫的使用。在講解的過程中教師應該同時使用硬件進行相應的演示,讓學生可以體會到開源硬件的便利與優(yōu)勢。
在學生掌握了基礎知識之后,就可以根據(jù)自選題目再繼續(xù)深入研究。此時教師的角色將從授課者變?yōu)榱溯o助者。不再需要由教師來講解具體的電路知識,而是引導學生去自主解決電路設計與制作遇到問題。
傳統(tǒng)的實踐考核方式很大程度采用最后的實踐報告評分來體現(xiàn),而改革實踐評分應注重整個項目環(huán)節(jié),對于課堂考勤、資料收集、電路設計、模擬仿真及最終作品完成情況都需列為考核環(huán)節(jié),并且最終對設計作品進行答辯。以百分制的考評機制,促進評分的精確與細化。
學生自由組成小組合作完成設計。若學生的自擬題目具有可行性,應該更多鼓勵學生的自主選題。教師在選題時可以預先準備好大約40個不同的設計,準備的課題應該符合以下幾個要求:①趣味性,題目應該多結合生活實際,能夠激發(fā)學生自主學習的興趣;②均衡性,不同的題目之間的難度不能相差太大,要考慮到學生的知識儲備,動手能力;③擴展性,題目需要具有一定的開放性,學生可以根據(jù)自己的想法對項目進行一定的擴展。④協(xié)作性,每個小組的人數(shù)需要合理安排,在整個項目完成過程中需要有軟件仿真,軟件編程,硬件制作等環(huán)節(jié),因此每組人數(shù)不能超過4人。這樣在整個的實踐過程中每人都有自己的任務,同時又鍛煉了團隊合作能力。
在小組選定好課題之后,所有組員通過討論分配任務,并開始撰寫實踐項目設計書及預算編制表。從分配任務到課題答辯之間會安排大約1個月的時間,在此期間教師每周會安排至少2次的答疑時間,以幫助學生解決設計中遇到的問題,從而推進項目的正常進行。
基于Arduino友好的硬件支持環(huán)境以及代碼驅動資源。可實踐的項目非常豐富。利用傳感器所采集的數(shù)據(jù),可以顯示數(shù)據(jù)或者控制機械。
以超聲波測距倒車雷達作為實踐項目之一,引導學生進行項目分析,得到其目標為采用Arduino為系統(tǒng)核心,使用超聲波傳感器,通過監(jiān)測發(fā)射一連串調制后的超聲波及其回波的時間差來得知傳感器與目標物體間的距離值。并將傳感器所接收的信號在Arduino的處理后通過LED數(shù)碼管實時顯示出來,當檢測距離小于或等于設置值時,提供蜂鳴器報警。其系統(tǒng)構成如圖2所示。

圖2 超聲波測距的倒車雷達系統(tǒng)組成
采用Arduino作為主控制板,主要負責信號的采集與處理,在控制的過程中可以采用模塊化的思想,將功能需求采用層次化的形式表示處理,如圖3所示。

圖3 聲波測距的倒車雷達系統(tǒng)功能分解
通過對具體項目功能的逐步分解,其設計涉及到模擬電路,數(shù)字電路,C語言,傳感器技術等。教師可幫助學生將復雜問題分解為多門課程的有機結合。其具體實現(xiàn)可分解為:
(1)超聲波傳感器測距
超聲波是頻率很高的聲音,其頻率超出了人類可以聽到的聲音的頻率范圍。一個超聲波脈沖通過超聲波傳感器的一個元件的轉化器發(fā)出,當超聲波碰到物體時發(fā)生反射,通過同一個轉化器得到回聲[3]。通過計算脈沖的往返時間,可以計算傳感器到反射物的距離。其具體計算公式為:

其中L為測試距離;Δt為發(fā)射波與反射波的時間間隔;C0為超聲波在常溫下干空氣中的速度,一般取340m/s;T為絕對溫度。
URM37 v3.2超聲波傳感器使用工業(yè)級的AVR控制器作為主控單元,內置溫度傳感器輔助校正距離值,具有RS-232和TTL電平的串口,可以通過電腦串口采集數(shù)據(jù)。同時傳感器具有PWM脈寬輸出模式,可以使用Arduino直接讀取脈沖。
(2)LED數(shù)碼顯示設計
LED數(shù)碼管常用段數(shù)一般為7段有的另加一個小數(shù)點,LED數(shù)碼管根據(jù)LED的接法不同分為共陰和共陽兩類。項目中采用共陰極的7段LED數(shù)碼管。由于采用了多位LED顯示,所以采用了Maxim公司的MAX7219芯片作為LED驅動。MAX7219為緊湊的串行輸入/輸出共陰極顯示驅動器,用于連接微處理器與8位7段LED數(shù)碼管顯示器、條形圖顯示器或64個獨立的LED。器件內置BCD B碼譯碼器、多路復用掃描電路、段和位驅動器以及存儲每位數(shù)字的8x8靜態(tài)RAM。只需一個外部電阻即可設置所有LED的段電流。
在本項目設計中,由于使用了LED顯示,所以要確保Arduino的庫文件夾中已有LedControl.h庫。生成LedControl對象并且設置到用到引腳和芯片數(shù)量[4]。
LedControl lc=LedControl(DataIn, CLK, LOAD,NumChips);
為了確保顯示可用,需要設置亮度為中間值,清除顯示器顯示。
lc.shutdown(0,false);
lc.setIntensity(0,8);
lc.clearDisplay(0);
為了將平滑處理后的傳感器數(shù)據(jù)在LED 7段數(shù)碼管上顯示,定義一個displayDigit()函數(shù),參數(shù)為一個浮點數(shù),通過setDigit函數(shù)顯示每位的數(shù)字。
(3)可調節(jié)報警設計
作為倒車雷達對使用者的警示作用,項目設計中通過一個可調節(jié)的變阻器來調整報警傳感器的范圍,當距離小于或等于設置范圍時將提供蜂鳴器報警。
設計中將定義一個readPot函數(shù)用于從變阻器中讀取設置。
float readPot(){
float potValue=analogRead(potPin);
alarmRange=500*(potValue/1024);//把變阻器讀出的值換算為傳感器測量范圍
return alarmRange;}
當傳感器的測量值小于或者等于alarmRange的值時,將調用自定義的startAlarm()函數(shù)。
將完整控制的代碼通過Arduino的IDE環(huán)境燒錄到控制板之后,將會實時顯示距離障礙物的距離,當與障礙物距離小于或者等于報警設置值時,將會發(fā)出高低起伏的報警。經學生調試組裝之后的超聲波測距雷達倒車系統(tǒng)如圖4所示。
基于Arduino的電子設計實踐激發(fā)了學生對電子設計課程的興趣,激發(fā)了學生的學習興趣,促進了學生綜合素質的培養(yǎng)。通過由學生自行設計、制作和調試的項目設計過程使學生得到設計思想、設計技能、調試技能與研究技能等一次較為全面的工程實踐訓練,有利于培養(yǎng)和提高學生的自學能力、設計能力和綜合運用電子技術理論知識去分析和解決工程實際問題的能力。并且由于開源硬件具有的優(yōu)秀擴展性,一定高水平的項目也適合于未來畢業(yè)設計的選題。

圖4 超聲波測距雷達倒車系統(tǒng)實物圖