王凡,周文輝,劉保軍,劉金華,彭芳
(電子科技大學(xué)中山學(xué)院,中山 528400)
作為計(jì)算機(jī)、自動(dòng)化、機(jī)械等非電類理工科重要實(shí)踐課程,《電子設(shè)計(jì)實(shí)踐》旨在學(xué)生完成電路分析、模擬電子技術(shù)、數(shù)字電子技術(shù)課程之后,能夠理論聯(lián)系實(shí)際,在實(shí)踐課程中運(yùn)用所學(xué)的電路知識(shí),設(shè)計(jì)并制作出具有一定實(shí)用價(jià)值的電子產(chǎn)品,從而提高學(xué)生的動(dòng)手實(shí)踐以及科學(xué)創(chuàng)新能力。然而對(duì)于非電類專業(yè)的學(xué)生在學(xué)習(xí)《電子設(shè)計(jì)實(shí)踐》的過程中主要出現(xiàn)以下不足:
(1)相對(duì)薄弱的電路知識(shí)。對(duì)于非電類的理工科學(xué)生,由于電路類課程的學(xué)時(shí)一般都比較少,并且沒有高頻電子線路等后續(xù)課程。學(xué)生在課堂上多為傳統(tǒng)灌輸式教學(xué),又缺乏對(duì)應(yīng)的實(shí)踐課程,使得學(xué)生一直處于被動(dòng)接受狀態(tài)。特別是隨著課程的深入,學(xué)生累積的問題愈來愈多。
(2)原有的實(shí)踐課程多以驗(yàn)證型的實(shí)驗(yàn)為主,所選取的實(shí)驗(yàn)內(nèi)容已經(jīng)無法反應(yīng)當(dāng)今電子技術(shù)的進(jìn)步。并且實(shí)驗(yàn)所用的電子制作大都可以在網(wǎng)上買到半成品,學(xué)生只需要簡(jiǎn)單的調(diào)試即可完成,實(shí)際并未真正參與到設(shè)計(jì)與制作的整個(gè)流程之中。
(3)學(xué)生在選擇電子設(shè)計(jì)類的畢業(yè)設(shè)計(jì)題目時(shí),往往出現(xiàn)無從下手的局面。多數(shù)會(huì)重復(fù)往年的課題,達(dá)不到畢業(yè)設(shè)計(jì)對(duì)于學(xué)生創(chuàng)新能力的要求。
針對(duì)上述這些問題,很多高校都建設(shè)了創(chuàng)新型的新型實(shí)驗(yàn)室[1],采用單片機(jī)或PLC等設(shè)備作為電子設(shè)計(jì)的核心控制器。但是這些實(shí)驗(yàn)設(shè)備往往出于統(tǒng)一性與模塊化的考慮,所有的擴(kuò)展電路都必須采用相同的模塊設(shè)計(jì),導(dǎo)致了設(shè)計(jì)內(nèi)容的單一。隨著近幾年開源硬件的興起,本文提出了一種將開源硬件Arduino作為核心控制器應(yīng)用于《電子設(shè)計(jì)實(shí)踐》課程的教學(xué)改革,讓學(xué)生通過完全自主的選題與制作,實(shí)現(xiàn)主動(dòng)學(xué)習(xí),從而培養(yǎng)其創(chuàng)新思維。
Arduino是一個(gè)誕生于意大利的教學(xué)用開源控制器,目前使用最廣泛的Arduino UNO主控板采用AT?mega328處理器作為主控單片機(jī)[2]。在這塊處理器的周圍有14個(gè)數(shù)字輸入/輸出端口,6個(gè)模擬輸入端口,6個(gè)PWM輸出端口,2路外部中斷,并且支持SPI、IIC、UART通信,其結(jié)構(gòu)如圖1所示。2005年,Arduino開發(fā)團(tuán)隊(duì)采用CC授權(quán)方式在網(wǎng)上公開了硬件設(shè)計(jì)圖,這樣任何人都可以復(fù)制生產(chǎn)Arduino電路板,而無需任何費(fèi)用。Arduino在全球范圍了推動(dòng)了開源硬件和創(chuàng)客運(yùn)動(dòng)的快速發(fā)展,其應(yīng)用范圍可以從3D打印機(jī)到四軸飛行器這些最流行的電子設(shè)計(jì),使得Arduino成為了一個(gè)開放的電子開發(fā)平臺(tái)。
圖1 Arduino UNO結(jié)構(gòu)圖
采用Arduino進(jìn)行電子開發(fā),不需要了解控制器的內(nèi)部結(jié)構(gòu)和寄存器設(shè)置;Arduino語(yǔ)言基于AVR-Libc這個(gè)優(yōu)秀的開源項(xiàng)目,其編程語(yǔ)言的風(fēng)格非常類似于C語(yǔ)言,使得學(xué)生非常容易上手。同時(shí)在全球有著大量的Arduino開發(fā)者,他們提供了眾多的開源實(shí)例和第三方硬件,在GitHub就可以找到非常豐富的類庫(kù)。這樣使用者可以快速地?cái)U(kuò)展自己的Arduino項(xiàng)目功能。
為了提高學(xué)生的自主學(xué)習(xí)和創(chuàng)新與動(dòng)手能力,在《電子設(shè)計(jì)實(shí)踐》課程中采用項(xiàng)目驅(qū)動(dòng)的學(xué)習(xí)方式。即結(jié)合學(xué)生的愛好、專業(yè)而自主選擇理論與實(shí)際結(jié)合具有一定研究?jī)r(jià)值的課題。
在課堂開始,首先需要激發(fā)學(xué)生的興趣點(diǎn),才能達(dá)到“做中學(xué)、玩中學(xué)”的效果。教師需要收集大量Ardu?ino的現(xiàn)有實(shí)例,特別是與手機(jī)、玩具結(jié)合的情況。讓學(xué)生可以利用Arduino去實(shí)現(xiàn)自己的興趣。
課程初期,學(xué)生對(duì)于實(shí)驗(yàn)設(shè)備和所需要使用的儀器還比較陌生。教師需要對(duì)基本電子元器件辨別以及使用進(jìn)行一定的講解。學(xué)生經(jīng)過初期的學(xué)習(xí)之后應(yīng)該對(duì)電子設(shè)計(jì)的基本流程、常用工具、仿真軟件、調(diào)試與故障排查都能有一定的了解。
課程中期,需要對(duì)Arduino進(jìn)行概述講解。雖然無法面面俱到,但是主要功能都要有所涉及,包括了數(shù)字與模擬I/O的基本使用,串口的輸入輸出,PWM的使用,以及第三方擴(kuò)展庫(kù)的使用。在講解的過程中教師應(yīng)該同時(shí)使用硬件進(jìn)行相應(yīng)的演示,讓學(xué)生可以體會(huì)到開源硬件的便利與優(yōu)勢(shì)。
在學(xué)生掌握了基礎(chǔ)知識(shí)之后,就可以根據(jù)自選題目再繼續(xù)深入研究。此時(shí)教師的角色將從授課者變?yōu)榱溯o助者。不再需要由教師來講解具體的電路知識(shí),而是引導(dǎo)學(xué)生去自主解決電路設(shè)計(jì)與制作遇到問題。
傳統(tǒng)的實(shí)踐考核方式很大程度采用最后的實(shí)踐報(bào)告評(píng)分來體現(xiàn),而改革實(shí)踐評(píng)分應(yīng)注重整個(gè)項(xiàng)目環(huán)節(jié),對(duì)于課堂考勤、資料收集、電路設(shè)計(jì)、模擬仿真及最終作品完成情況都需列為考核環(huán)節(jié),并且最終對(duì)設(shè)計(jì)作品進(jìn)行答辯。以百分制的考評(píng)機(jī)制,促進(jìn)評(píng)分的精確與細(xì)化。
學(xué)生自由組成小組合作完成設(shè)計(jì)。若學(xué)生的自擬題目具有可行性,應(yīng)該更多鼓勵(lì)學(xué)生的自主選題。教師在選題時(shí)可以預(yù)先準(zhǔn)備好大約40個(gè)不同的設(shè)計(jì),準(zhǔn)備的課題應(yīng)該符合以下幾個(gè)要求:①趣味性,題目應(yīng)該多結(jié)合生活實(shí)際,能夠激發(fā)學(xué)生自主學(xué)習(xí)的興趣;②均衡性,不同的題目之間的難度不能相差太大,要考慮到學(xué)生的知識(shí)儲(chǔ)備,動(dòng)手能力;③擴(kuò)展性,題目需要具有一定的開放性,學(xué)生可以根據(jù)自己的想法對(duì)項(xiàng)目進(jìn)行一定的擴(kuò)展。④協(xié)作性,每個(gè)小組的人數(shù)需要合理安排,在整個(gè)項(xiàng)目完成過程中需要有軟件仿真,軟件編程,硬件制作等環(huán)節(jié),因此每組人數(shù)不能超過4人。這樣在整個(gè)的實(shí)踐過程中每人都有自己的任務(wù),同時(shí)又鍛煉了團(tuán)隊(duì)合作能力。
在小組選定好課題之后,所有組員通過討論分配任務(wù),并開始撰寫實(shí)踐項(xiàng)目設(shè)計(jì)書及預(yù)算編制表。從分配任務(wù)到課題答辯之間會(huì)安排大約1個(gè)月的時(shí)間,在此期間教師每周會(huì)安排至少2次的答疑時(shí)間,以幫助學(xué)生解決設(shè)計(jì)中遇到的問題,從而推進(jìn)項(xiàng)目的正常進(jìn)行。
基于Arduino友好的硬件支持環(huán)境以及代碼驅(qū)動(dòng)資源。可實(shí)踐的項(xiàng)目非常豐富。利用傳感器所采集的數(shù)據(jù),可以顯示數(shù)據(jù)或者控制機(jī)械。
以超聲波測(cè)距倒車?yán)走_(dá)作為實(shí)踐項(xiàng)目之一,引導(dǎo)學(xué)生進(jìn)行項(xiàng)目分析,得到其目標(biāo)為采用Arduino為系統(tǒng)核心,使用超聲波傳感器,通過監(jiān)測(cè)發(fā)射一連串調(diào)制后的超聲波及其回波的時(shí)間差來得知傳感器與目標(biāo)物體間的距離值。并將傳感器所接收的信號(hào)在Arduino的處理后通過LED數(shù)碼管實(shí)時(shí)顯示出來,當(dāng)檢測(cè)距離小于或等于設(shè)置值時(shí),提供蜂鳴器報(bào)警。其系統(tǒng)構(gòu)成如圖2所示。
圖2 超聲波測(cè)距的倒車?yán)走_(dá)系統(tǒng)組成
采用Arduino作為主控制板,主要負(fù)責(zé)信號(hào)的采集與處理,在控制的過程中可以采用模塊化的思想,將功能需求采用層次化的形式表示處理,如圖3所示。
圖3 聲波測(cè)距的倒車?yán)走_(dá)系統(tǒng)功能分解
通過對(duì)具體項(xiàng)目功能的逐步分解,其設(shè)計(jì)涉及到模擬電路,數(shù)字電路,C語(yǔ)言,傳感器技術(shù)等。教師可幫助學(xué)生將復(fù)雜問題分解為多門課程的有機(jī)結(jié)合。其具體實(shí)現(xiàn)可分解為:
(1)超聲波傳感器測(cè)距
超聲波是頻率很高的聲音,其頻率超出了人類可以聽到的聲音的頻率范圍。一個(gè)超聲波脈沖通過超聲波傳感器的一個(gè)元件的轉(zhuǎn)化器發(fā)出,當(dāng)超聲波碰到物體時(shí)發(fā)生反射,通過同一個(gè)轉(zhuǎn)化器得到回聲[3]。通過計(jì)算脈沖的往返時(shí)間,可以計(jì)算傳感器到反射物的距離。其具體計(jì)算公式為:
其中L為測(cè)試距離;Δt為發(fā)射波與反射波的時(shí)間間隔;C0為超聲波在常溫下干空氣中的速度,一般取340m/s;T為絕對(duì)溫度。
URM37 v3.2超聲波傳感器使用工業(yè)級(jí)的AVR控制器作為主控單元,內(nèi)置溫度傳感器輔助校正距離值,具有RS-232和TTL電平的串口,可以通過電腦串口采集數(shù)據(jù)。同時(shí)傳感器具有PWM脈寬輸出模式,可以使用Arduino直接讀取脈沖。
(2)LED數(shù)碼顯示設(shè)計(jì)
LED數(shù)碼管常用段數(shù)一般為7段有的另加一個(gè)小數(shù)點(diǎn),LED數(shù)碼管根據(jù)LED的接法不同分為共陰和共陽(yáng)兩類。項(xiàng)目中采用共陰極的7段LED數(shù)碼管。由于采用了多位LED顯示,所以采用了Maxim公司的MAX7219芯片作為L(zhǎng)ED驅(qū)動(dòng)。MAX7219為緊湊的串行輸入/輸出共陰極顯示驅(qū)動(dòng)器,用于連接微處理器與8位7段LED數(shù)碼管顯示器、條形圖顯示器或64個(gè)獨(dú)立的LED。器件內(nèi)置BCD B碼譯碼器、多路復(fù)用掃描電路、段和位驅(qū)動(dòng)器以及存儲(chǔ)每位數(shù)字的8x8靜態(tài)RAM。只需一個(gè)外部電阻即可設(shè)置所有LED的段電流。
在本項(xiàng)目設(shè)計(jì)中,由于使用了LED顯示,所以要確保Arduino的庫(kù)文件夾中已有LedControl.h庫(kù)。生成LedControl對(duì)象并且設(shè)置到用到引腳和芯片數(shù)量[4]。
LedControl lc=LedControl(DataIn, CLK, LOAD,NumChips);
為了確保顯示可用,需要設(shè)置亮度為中間值,清除顯示器顯示。
lc.shutdown(0,false);
lc.setIntensity(0,8);
lc.clearDisplay(0);
為了將平滑處理后的傳感器數(shù)據(jù)在LED 7段數(shù)碼管上顯示,定義一個(gè)displayDigit()函數(shù),參數(shù)為一個(gè)浮點(diǎn)數(shù),通過setDigit函數(shù)顯示每位的數(shù)字。
(3)可調(diào)節(jié)報(bào)警設(shè)計(jì)
作為倒車?yán)走_(dá)對(duì)使用者的警示作用,項(xiàng)目設(shè)計(jì)中通過一個(gè)可調(diào)節(jié)的變阻器來調(diào)整報(bào)警傳感器的范圍,當(dāng)距離小于或等于設(shè)置范圍時(shí)將提供蜂鳴器報(bào)警。
設(shè)計(jì)中將定義一個(gè)readPot函數(shù)用于從變阻器中讀取設(shè)置。
float readPot(){
float potValue=analogRead(potPin);
alarmRange=500*(potValue/1024);//把變阻器讀出的值換算為傳感器測(cè)量范圍
return alarmRange;}
當(dāng)傳感器的測(cè)量值小于或者等于alarmRange的值時(shí),將調(diào)用自定義的startAlarm()函數(shù)。
將完整控制的代碼通過Arduino的IDE環(huán)境燒錄到控制板之后,將會(huì)實(shí)時(shí)顯示距離障礙物的距離,當(dāng)與障礙物距離小于或者等于報(bào)警設(shè)置值時(shí),將會(huì)發(fā)出高低起伏的報(bào)警。經(jīng)學(xué)生調(diào)試組裝之后的超聲波測(cè)距雷達(dá)倒車系統(tǒng)如圖4所示。
基于Arduino的電子設(shè)計(jì)實(shí)踐激發(fā)了學(xué)生對(duì)電子設(shè)計(jì)課程的興趣,激發(fā)了學(xué)生的學(xué)習(xí)興趣,促進(jìn)了學(xué)生綜合素質(zhì)的培養(yǎng)。通過由學(xué)生自行設(shè)計(jì)、制作和調(diào)試的項(xiàng)目設(shè)計(jì)過程使學(xué)生得到設(shè)計(jì)思想、設(shè)計(jì)技能、調(diào)試技能與研究技能等一次較為全面的工程實(shí)踐訓(xùn)練,有利于培養(yǎng)和提高學(xué)生的自學(xué)能力、設(shè)計(jì)能力和綜合運(yùn)用電子技術(shù)理論知識(shí)去分析和解決工程實(shí)際問題的能力。并且由于開源硬件具有的優(yōu)秀擴(kuò)展性,一定高水平的項(xiàng)目也適合于未來畢業(yè)設(shè)計(jì)的選題。
圖4 超聲波測(cè)距雷達(dá)倒車系統(tǒng)實(shí)物圖