李娜 孟東曉
摘? 要:Arduino UNO控制多個LED實驗在硬件連接不變的情況下,通過改變程序?qū)崿F(xiàn)多種特效,展現(xiàn)不同的效果。將各項功能封裝成不同的模塊,初始化模塊和其他功能模塊組合可實現(xiàn)不同的功能特效。通過項目實例化教學手段舉一反三引導學生深入思考,加深理解,讓學生敢于靈活使用和改變程序,使學習過程更加生動。通過對功能模塊設(shè)計和分析,Arduino UNO控制多個LED特效模塊,達到操作使用簡單明了,特效清晰直觀的效果。
關(guān)鍵詞:Arduino UNO;LED;項目實例化;模塊化
中圖分類號:TP211;TN873? ? ? 文獻標識碼:A 文章編號:2096-4706(2020)22-0045-03
Arduino UNO Controls Multiple LEDs to Achieve Multiple Special Effects
LI Na1,MENG Dongxiao2
(1.Department of Mechanical and Electrical Engineering,Tianjin Hedong District Staff and Workers University,Tianjin? 300162,China;2.Coficab(Tianjin)Co.,Ltd.,Tianjin? 301726,China)
Abstract:Arduino UNO controls multiple LED experiments,under the condition that the hardware connection remains unchanged,various special effects are realized by changing the program to show different effects. The various functions are packaged into different modules,and the initialization module and other function modules are combined to achieve different function special effects. Through the teaching method of project instantiation,we can draw inferences from one instance,guide students to think deeply,deepen their understanding,let students dare to use and change the program flexibly,and make the learning process more vivid. Through the design and analysis of functional modules,Arduino UNO controls multiple LED special effect modules to achieve the effect of simple operation and clear and intuitive special effects.
Keywords:Arduino UNO;LED;project instantiation;modularization
0? 引? 言
2020年我校創(chuàng)建“人工智能+傳感器”實訓課程體系,引入Arduino UNO套件,深入研究開發(fā)相關(guān)課程內(nèi)容,為創(chuàng)建適應我校發(fā)展的人工智能實訓室奠定基礎(chǔ)。作者在開發(fā)課程體系中研究發(fā)現(xiàn)Arduino UNO控制多個LED項目有待深入拓展和挖掘,以此激發(fā)學生思考,學習融會貫通,敢于創(chuàng)造創(chuàng)新。
Arduino是2005年誕生于意大利的一種可編程單片機電路板,到現(xiàn)在已經(jīng)有15年的歷史。Arduino是一個開源平臺、采用知識共享協(xié)議,其硬件原理圖和PCB圖、軟件源碼及其他資源都可以免費獲得、使用、修改和再發(fā)布。隨著時間的推移,Arduino開發(fā)板的型號也在不斷豐富,從Arduino UNO、Arduino Mega2560、Arduino Pro Mini已經(jīng)進化出多種不同的型號,但是Arduino UNO開發(fā)板是最常見也是使用最多的一種型號。項目的研究就是建立在Arduino UNO Rev3(下文簡稱Arduino UNO)開發(fā)板的基礎(chǔ)之上。Arduino UNO控制多個LED是在控制單個LED基礎(chǔ)上進行延伸和拓展,具有硬件連接簡單,實驗特效多變,直觀明了的特點。
1? 總體結(jié)構(gòu)設(shè)計
“人工智能+傳感器”實訓課程體系以Arduino UNO為平臺,圍繞“傳感器”元器件創(chuàng)建一系列實訓課程,其中控制多個LED項目是其中的基礎(chǔ)入門課程。
1.1? 結(jié)構(gòu)設(shè)計
Arduino UNO控制多個LED包括硬件設(shè)計和軟件設(shè)計兩部分內(nèi)容,硬件設(shè)計需要根據(jù)實驗接線圖完成接線。軟件設(shè)計是項目設(shè)計的主要板塊,根據(jù)目標分析,將程序分為初始化模塊和循環(huán)體模塊,初始化模塊和不同循環(huán)體模塊組合實現(xiàn)不同的特效。
1.2? 硬件設(shè)計
Arduino UNO控制多個LED設(shè)計實驗接線實物圖如圖1所示,接線原理圖如圖2所示,均采用Fritzing電子設(shè)計軟件制。使用Arduino UNO一塊,LED 6個,電阻(220 Ω)6個,面包板一塊,杜邦線若干。圖中所有LED正極通過電阻分別與Arduino UNO引腳2~7連接,LED負極通過面包板與Arduino UNO的GND引腳連接。
1.3? 軟件設(shè)計
根據(jù)硬件系統(tǒng)控制要求,采用與Arduino UNO對應的Arduino IDE編程軟件進行編程,程序主要分為初始化模塊和循環(huán)體模塊兩大類,各循環(huán)體模塊可與初始化模塊獨立組合,呈現(xiàn)不同的功能效果。
(1)初始化模塊。初始化模塊主要用于定義時間間隔和設(shè)置引腳為輸出模式,程序中“//”后面表示注釋內(nèi)容,下文為初始化模塊程序設(shè)計:
int timer =100;? ? ? ? ? ? ? ? ? ? ? ? ? ?//定義時間間隔為100ms,可以根據(jù)需要設(shè)置時間間隔。
void setup(){? ? ? ? ? ? ? ? ? ? ? ? ? ?//初始化
for (int thisPin=2; thisPin<8; thisPin++)? ? ? ?//for語句,定義引腳范圍2~7
{
pinMode(thisPin,OUTPUT);? ? ? ? ? ? ? ?//定義引腳為輸出模式
}
}
(2)循環(huán)體模塊一:LED從右到左閃爍。通過for語句實現(xiàn)對引腳2~7逐個訪問,每次訪問時對引腳先輸出高電平保持100 ms后輸出低電平,實現(xiàn)該引腳對應的LED閃爍效果。把程序放在void loop循環(huán)體內(nèi)實現(xiàn)對引腳的無限次循環(huán)訪問。實現(xiàn)該功能的代碼程序為:
void loop()? ? ? ? ? ? ? ? ? ? ? ? ? ? //自帶循環(huán)功能
{
for (int thisPin=2; thisPin<8; thisPin++){? ?//for語句,指明引腳范圍2~7
digitalWrite(thisPin,HIGH);? ? ? ? ? ? //定義引腳為高電平,LED亮
delay(timer);? ? ? ? ? ? ? ? ? ? ? //延遲100ms,否則看不出閃爍的效果
digitalWrite(thisPin,LOW);? ? ? ? ? //定義引腳為低電平,LED滅
}
}
(3)循環(huán)體模塊二:LED從右到左閃爍,再從左到右閃爍,不斷循環(huán)。在模塊一的基礎(chǔ)上再加入反向的閃爍動作即可實現(xiàn)該功能,所以程序的編寫需要再加入一個反向的循環(huán)體。引腳設(shè)置從高到底,其他內(nèi)容不變。需要增加的代碼程序為:
for (thisPin=7; thisPin>1; thisPin--)? ? ?//for語句,指明引腳范圍為7~2
{
digitalWrite(thisPin,HIGH);? ? ? ? ? ? //定義引腳為高電平,LED亮
delay(timer);? ? ? ? ? ? ? ? ? ? ? //延遲100ms
digitalWrite(thisPin,LOW);? ? ? ? ? //定義引腳為低電平,LED滅
}
(4)循環(huán)體模塊三:LED從右到左亮,再從右到左滅。模塊三和模塊二的主要為模塊三的第一次循環(huán)只有亮的過程,第二次循環(huán)才是滅的過程。根據(jù)要求,模塊中應包括兩個for循環(huán),第一個for循環(huán)引腳設(shè)置從2~7,逐個設(shè)置引腳為高電平,LED從右到左亮,保持常亮;第二個for循環(huán),引腳設(shè)置從2~7,逐個設(shè)置引腳為低電平,LED從右到左熄滅。
(5)循環(huán)體模塊四:LED1、3、5先亮,2、4、6再亮;LED1、3、5先滅,2、4、6再滅。根據(jù)模塊功能要求,可以知道需要四個循環(huán)體來實現(xiàn)相關(guān)功能,循環(huán)體1實現(xiàn)LED1、3、5先亮,循環(huán)體2實現(xiàn)LED2、4、6后亮,循環(huán)體3實現(xiàn)LED1、3、5先滅,循環(huán)體4實現(xiàn)LED2、4、6后滅。分析LED1、3、5對應的引腳為7、5、3,故初始化引腳設(shè)定為7,減量應為2。所以第一個和第三個for循環(huán)應變更為for (intthisPin=7; thisPin>2; thisPin= thisPin-2)。LED2、4、6對應
的引腳為6、4、2,所以第二個和第四個for循環(huán)應變更為for ( thisPin=6; thisPin>1; thisPin= thisPin-2)。
(6)循環(huán)體模塊五:LED從兩邊向中間亮,從兩邊向中間滅。模塊五要求引腳7和2對應的LED先亮,引腳6和3對應的LED再亮,引腳5和4對應的LED最后亮,熄滅過程也是如此。程序編寫可以對引腳逐個控制,先對引腳7和2輸出高電平,延遲一定時間,再對引腳6和3輸出高電平,延遲一定時間,最后對引腳5和4輸出高電平。由于引腳7和2輸出高電平的程序,順序執(zhí)行,間隔很短,眼睛看到的效果是引腳7和引腳2對應的LED同時變亮。對引腳設(shè)置低電平即可實現(xiàn)兩邊向中間熄滅。設(shè)定引腳7和2為高電平的過程可以參考以下程序,其他引腳設(shè)置程序相同:
int thisPin=7;
digitalWrite(thisPin,HIGH);
thisPin=2;
digitalWrite(thisPin,HIGH);
delay(timer);
(7)循環(huán)體模塊六:隨機一個LED閃爍,并在串口監(jiān)視器上顯示出引腳。根據(jù)題目要求,選擇使用random隨機函數(shù)。random語法格式random(Max)或random(Min,Max),由于引腳端口限制為2~7,所以此處選擇random(Min,Max),返回值為Min和Max之間的隨機數(shù)。隨機數(shù)包含Min不包含Max,所以確定Min=2,Max=8,定義返回值引腳為高電平,此時LED亮,若為低電平,LED熄滅。在初始化中需要使用Serial類庫函數(shù)begin()建立與串口監(jiān)視器通信,在循環(huán)體中使用Serial類庫函數(shù)println()向串口監(jiān)視器輸出需要顯示的引腳。該模塊程序編寫參考以下內(nèi)容:
int thisPin=random(2,8);
digitalWrite(thisPin,HIGH);
Serial.println(thisPin);? ? ? ?//初始化中需要加入程序“Serial.begin (9600);”設(shè)置通信波特率
delay(timer);? ? ? ? ? ? ? ? ?//必須有一定的延遲時間
digitalWrite(thisPin,LOW);
delay(timer);
2? 結(jié)? 論
Arduino UNO控制多個LED在教學設(shè)計中采用項目實例化教學方法,教學過程中進行功能模塊化設(shè)計輔助教學,利用教學反思手段拓展教學內(nèi)容,培養(yǎng)學生創(chuàng)新創(chuàng)造能力,具體操作要求和注意事項如下所示:
(1)項目實例化教學即把教學內(nèi)容形象化和實體化。學習各種編程語言都是建立在各種命令和函數(shù)基礎(chǔ)之上,Arduino UNO也不例外。熟練掌握Arduino UNO的命令和函數(shù)是學好Arduino UNO的基礎(chǔ)。在學習過程中,學會將命令和函數(shù)應用在實例中,通過驗證實例深刻理解命令和函數(shù),并觀察其所實現(xiàn)的效果,有助于將抽象的命令和函數(shù)形象化、實體化。
(2)功能模塊化設(shè)計,邏輯清晰,功能直觀。初始化模塊和不同循環(huán)體模塊組合將實現(xiàn)不同的功能特效,模塊化處理方法有助于加強對Arduino UNO控制多個LED整體認識和理解。
(3)舉一反三,在源程序基礎(chǔ)上進行引申和創(chuàng)新。Arduino UNO控制多個LED實現(xiàn)的特效絕不僅僅是文中提到的這些效果,采用不同的函數(shù)組合會實現(xiàn)多種不同的效果。學生在學習中善于將題目進行進一步的開發(fā)和探索,并觀察實驗效果,有助于加深對程序的理解,提升創(chuàng)新和創(chuàng)造能力。
Arduino UNO是一款能實時展現(xiàn)編程效果,將軟硬件結(jié)合得非常好的實用工具。Arduino UNO開發(fā)板和套件組合能實現(xiàn)各種各樣的實驗,要注重在實驗中檢驗學習理論,思考學習內(nèi)容,總結(jié)學習方法,提升操作技能。
參考文獻:
[1] 黃煥林,丁昊.從零開始學Arduino電子設(shè)計 [M].北京:機械工業(yè)出版社,2018.
[2] 陳呂洲.Arduino程序設(shè)計基礎(chǔ):第2版 [M].北京:北京航空航天大學出版社,2015.
[3] 譚浩強.C程序設(shè)計:第3版 [M].北京:清華大學出版社,2005.
[4] 彭秋潔,劉凱磊,康紹鵬,等.基于Arduino的多功能自動跟隨行李箱設(shè)計 [J].物聯(lián)網(wǎng)技術(shù),2020,10(8):63-65+70.
作者簡介:李娜(1984—),女,漢族,山東泰安人,教師,講師,碩士研究生,研究方向:電氣自動化;孟東曉(1980—),男,漢族,山東聊城人,維修經(jīng)理,工程師,學士學位,研究方向:電氣自動化。