吳健翔,蔣志恒,卓展星
(澳門(mén)大學(xué)科技學(xué)院,澳門(mén) 999078)
在日常生活中,我們可以看到各種五顏六色的霓虹燈、廣告燈箱,甚至酒店和夜總會(huì)的各種燈光,當(dāng)今時(shí)代的智能控制電子技術(shù),給人們的生活帶來(lái)了方便和舒適,而每到晚上,五顏六色的霓虹燈則把我們的城市點(diǎn)綴得格外迷人,為人們的生活增添了不少色彩。這些景觀燈制作方法有很多種,有傳統(tǒng)的分立元件,由數(shù)字邏輯電路構(gòu)成的控制系統(tǒng)和單片機(jī)智能控制系統(tǒng)等。本文基于Arduino Uno R3嵌入式開(kāi)發(fā)平臺(tái)設(shè)計(jì)制作了“光魔方”,展現(xiàn)出不同的形狀和性能的燈光效果,同時(shí)通過(guò)設(shè)計(jì)和實(shí)驗(yàn),以及分析和解釋數(shù)據(jù),對(duì)這一系統(tǒng)進(jìn)行優(yōu)化。
Arduino Uno是一個(gè)基于ATmega328的微控制器板。它有14個(gè)數(shù)字輸入/輸出引腳(其中6個(gè)可以用作PWM輸出),6個(gè)模擬輸入,一個(gè)16MHz的陶瓷諧振器,一個(gè)USB接口,一個(gè)電源插口,一個(gè)ICSP頭和一個(gè)復(fù)位按鈕。只需用USB連接線將其連接到計(jì)算機(jī)上,或用交流—直流電源適配器為其供電即可啟動(dòng)。
技術(shù)規(guī)范:
微控制器:ATmega328P-AU
工作電壓:5V
輸入電壓(推薦):7~12V
輸入電壓(限制):6~20V
數(shù)字I/O引腳:14(其中6個(gè)提供PWM輸出)
模擬輸入引腳數(shù):6
每I/O引腳直流電流:40mA
引腳直流電流(3.3V):50mA
閃存:32KB,其中0.5KB用于引導(dǎo)加載程序
靜態(tài)隨機(jī)存儲(chǔ)器:2KB
電可擦只讀存儲(chǔ)器:1KB
時(shí)鐘頻率:16MHz
基于Arduino Uno R3嵌入式開(kāi)發(fā)平臺(tái)“光魔方”設(shè)計(jì)系統(tǒng)原理圖如圖1所示,包括Arduino Uno R3開(kāi)發(fā)平臺(tái)、走線面包板和立方LED燈。
圖1 基于Arduino Uno R3嵌入式開(kāi)發(fā)平臺(tái) “光魔方”設(shè)計(jì)系統(tǒng)原理圖
圖2
圖3
圖4
本立體LED “光魔方”基于面包板設(shè)計(jì)(如圖2),面包板是專為電子電路的無(wú)焊接實(shí)驗(yàn)設(shè)計(jì)制造的。由于各種電子元器件可根據(jù)需要隨意插入或拔出,免去了焊接,節(jié)省了電路的組裝時(shí)間,而且元件可以重復(fù)使用,所以非常適合電子電路的組裝、調(diào)試和訓(xùn)練。
立體LED“光魔方”硬件設(shè)計(jì)過(guò)程如下:
(1)檢查所有LED燈是否正常工作。(驗(yàn)證LED燈亮:插入一個(gè)100Ω電阻和一個(gè)5V電源到板上檢查是否能正常照明)。
(2)如果所有LED燈工作正常,可以將其按具體尺寸放入紙板中(圖3中每條線相隔2.5cm),并固定。將它們的“腿”分離到陽(yáng)極/陰極。每個(gè)“腿”應(yīng)彎曲到90°角。然后,使用烙鐵(與焊料)結(jié)合所有LED燈的“腿”,制作成立方體的形狀。
(3)將“腿”的位置依次用烙鐵連接,并把導(dǎo)線放在中間位置焊接。
(4)重復(fù)上述步驟四次。然后將四層LED燈堆疊起來(lái),用烙鐵將觸點(diǎn)連接起來(lái)。
(5)確認(rèn)所有的燈都可以重新亮起來(lái)。
(6)使用面包板進(jìn)行組合。將100Ω電阻通過(guò)四個(gè)I/O引腳(A0-A3)連接到杜邦線,然后分別連接四層LED(如圖4)。
(7)將16個(gè)I/O引腳(A4,A5,0-13)與底部16個(gè)LED燈腳相連。
(8)最后,將UNO寬帶連接到計(jì)算機(jī)并進(jìn)行測(cè)試。
(1)使用Arduino IDE,將Uno板連接到計(jì)算機(jī)后,選擇Uno板的端口。在我的筆記本電腦中,端口是COM3,如圖5。
(2)定義一個(gè)LEDPin 陣列包括16 個(gè)I/O 引腳(A4,A5, 0-13)和一個(gè)PlanePin 陣列包括 4 個(gè)I/O Pin(A0 -A3),如圖6。
(3)在空位設(shè)置中,使用循環(huán)和PinMode將pin配置為輸入或輸出模式。同時(shí)設(shè)置LEDPin I/O的初始狀態(tài)為HIGH, PlanePin I/O為L(zhǎng)OW(如圖7)。
(4)在空循環(huán)中,編寫(xiě)不同的代碼來(lái)顯示不同燈光效果,如圖8。
圖5
圖6
圖7
這是按順序點(diǎn)亮LED燈的程序,可以用來(lái)測(cè)試燈是否工作良好。
圖8
(5)為L(zhǎng)ED立方體設(shè)計(jì)的空循環(huán)代碼。
程序代碼
int LEDPin[] = {A4, A5, 0, 1, 2, 3, 4, 5, 6, 7,8, 9, 10, 11, 12, 13};
int PlanePin[] = {A0 , A1, A2, A3};
void setup()
{
for (int i = 0; i < 16; i++)
{
pinMode(LEDPin[i], OUTPUT);
digitalWrite(LEDPin[i], HIGH);
}
for (int i = 0; i < 4; i++)
{
pinMode(PlanePin[i], OUTPUT);
digitalWrite(PlanePin[i], HIGH);
}
}
void loop()
{
for (int i = 0; i < 16; i++)
{
digitalWrite(LEDPin[i], LOW);
delay(100);
}
for (int i = 0; i < 16; i++)
{
digitalWrite(LEDPin[16-i], HIGH);
delay(50);
}
digitalWrite(LEDPin[0], LOW);
delay(100);
digitalWrite(LEDPin[1], LOW);
delay(100);
digitalWrite(LEDPin[2], LOW);
delay(100);
digitalWrite(LEDPin[3], LOW);
delay(100);
digitalWrite(LEDPin[7], LOW);
delay(100);
digitalWrite(LEDPin[11], LOW);
delay(100);
digitalWrite(LEDPin[15], LOW);
delay(100);
digitalWrite(LEDPin[14], LOW);
delay(100);
digitalWrite(LEDPin[13], LOW);
delay(100);
digitalWrite(LEDPin[12], LOW);
delay(100);
digitalWrite(LEDPin[8], LOW);
delay(100);
digitalWrite(LEDPin[4], LOW);
delay(100);
digitalWrite(LEDPin[5], LOW);
delay(100);
digitalWrite(LEDPin[6], LOW);
delay(100);
digitalWrite(LEDPin[10], LOW);
delay(100);
digitalWrite(LEDPin[9], LOW);
delay(100);
}
該產(chǎn)品是由Arduino操作的LED立方體,圖3展示了總體結(jié)果。
圖3
在焊接過(guò)程中,焊料容易接觸到燈泡的正極和負(fù)極。這可能會(huì)導(dǎo)致光亮不穩(wěn)定,或者閃爍位置與代碼的命令不匹配。因此,焊接時(shí)要仔細(xì)觀察,盡量避免焊料對(duì)正負(fù)極的干擾。
經(jīng)過(guò)構(gòu)思設(shè)計(jì),制作組裝了“光魔方”的外觀,然后使用不同的代碼創(chuàng)造各種燈光效果。在將來(lái)有機(jī)會(huì)能將它應(yīng)用在家庭和娛樂(lè)場(chǎng)所(露營(yíng)、夜總會(huì)等)的裝飾中,也可以應(yīng)用于廣告牌。除了這些傳統(tǒng)的應(yīng)用,還可以進(jìn)行一些創(chuàng)新設(shè)計(jì),比如制作貪吃蛇游戲、立體時(shí)鐘和3D動(dòng)畫(huà)文本,增加了實(shí)用性和可玩性。