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