這篇文章來(lái)源于DevicePlus.com英語(yǔ)網(wǎng)站的翻譯稿。
在 制作Arduino LED節(jié)日彩燈中,我們用Arduino和一條全彩LED燈串做了一種裝飾性照明彩燈。這次,我們采用ROHM接近傳感器讓彩燈更具互動(dòng)性:一旦有物體接近,LED燈就會(huì)發(fā)出奇特的色彩!
今天的電子設(shè)計(jì)技巧
估計(jì)完成時(shí)間:60分鐘
所需部件
Arduino UNO R3
WS2811 5M LED燈條 240 SMD 5050
ROHM傳感器評(píng)估套件
目錄
連接接近傳感器
定制程序
讓我們來(lái)點(diǎn)亮LED燈吧!
1.連接接近傳感器
我們會(huì)使用Arduino傳感器 – ROHM傳感器評(píng)估套件概覽介紹的ALS/接近傳感器(RPR-0521RS)。讓我們將傳感器開(kāi)發(fā)板和傳感器連至Arduino。
當(dāng)有物體(比如您的手)靠近接近傳感器時(shí),呈放射狀排列的LED被觸發(fā),并形成絢爛的獨(dú)特光效。
圖1 傳感器開(kāi)發(fā)板和Arduino上的RPR-0521RS接近傳感器
讓我們來(lái)看一下傳感器所需的位置和電壓。由于接近傳感器是I2C接口,因此應(yīng)位于藍(lán)色區(qū)域,而且其所需電壓為3V,因此我們需要將跳線引腳設(shè)置為中間的3V。
圖2 傳感器開(kāi)發(fā)板上的傳感器位置
LED燈串的供電需要另外的5 V電源,不能從Arduino取電。如果我們?cè)噲D用Arduino的VCC或5 V為L(zhǎng)ED供電,那么Arduino可能會(huì)由于LED燈串的大電流而燒壞。
圖3 單獨(dú)的外部電源適配器供電,與Arduino分開(kāi)
上次我們只使用了一個(gè)LED燈串,而這次我們并聯(lián)3個(gè)LED燈串。由于是并聯(lián)連接,因此電源和GND共用公共點(diǎn)。我們可以連接更多的LED,但有具體數(shù)量取決于LED燈串上發(fā)光的LED數(shù)量以及電源適配器的電流容量。
LED燈串上每個(gè)LED的工作電流約為20 mA。由于供電電流為1.3A,所以可同時(shí)點(diǎn)亮65個(gè)LED燈。
圖4 并聯(lián)連接的LED燈帶
圖5 從Arduino延伸出來(lái)的LED燈串
現(xiàn)在,硬件部分已經(jīng)完成,讓我們繼續(xù)為L(zhǎng)ED燈串編程吧
2.定制程序
為了控制全彩LED燈串或燈條,我們?cè)谏弦黄?文章中引入了“NeoPixel”庫(kù)。這次我們繼續(xù)使用NeoPixel。
以下是以接近傳感器為輸入的LED燈串控制程序:
#include #include #include #define PIN 6 //pin number of the signal terminal #define LED_NUM 50 //number of LEDs RPR0521RS rpr0521rs; Adafruit_NeoPixel ledtape = Adafruit_NeoPixel(LED_NUM, PIN, NEO_GRB + NEO_KHZ800); //如果所用LED燈帶的控制IC是WS2812,那么第三個(gè)參數(shù)是NEO_KHZ800,如果控制IC是WS2811則是NEO_KHZ400 int wait = 200; void setup() { ledtape.begin(); ledtape.show(); //reflects once in all OFF state byte rc; Serial.begin(9600); while (!Serial); Wire.begin(); rc = rpr0521rs.init(); } void loop() { byte rc; unsigned short ps_val; float als_val; byte near_far; Serial.println("============================="); rc = rpr0521rs.get_psalsval(&ps_val, &als_val); //當(dāng)獲取傳感器值時(shí) if (rc == 0) { Serial.print("PS:"); Serial.print(ps_val); Serial.println(); //接近時(shí)LED燈亮起 if(ps_val > 5){ ps_val = 500 - ps_val; if(ps_val < 0){ ps_val = 0; } simpleLED(ps_val/10); } if (als_val != RPR0521RS_ERROR) { Serial.print("ALS:"); Serial.print(als_val); Serial.println(); } } delay(5); } int LEDtale[10]; //arrangement for the trajectory of LED // //逐個(gè)點(diǎn)亮 // void simpleLED(int delaytime){ uint16_t i, j; j=0; for(i=0; i < ledtape.numPixels(); i++) { ledtape.setPixelColor(i, rotateColor(((i) * 256 / ledtape.numPixels()) & 255)); LEDtale[0] = rotateColor(((i) * 256 * 9/10 / ledtape.numPixels()) & 255); for(j=1; j < 10; j++){ LEDtale[j] = rotateColor(((i) * 256 * (10-j)/10 / ledtape.numPixels()) & 255); uint16_t m = i-j; if(m < 0){ m += 50; } ledtape.setPixelColor(m, LEDtale[j]); } ledtape.show(); for(j=1; j < 10; j++){ uint16_t m = i-j; if(m < 0){ m += 50; } delay(0); ledtape.setPixelColor(m, ledtape.Color(0,0,0)); ledtape.show(); } ledtape.setPixelColor(i, ledtape.Color(0,0,0)); ledtape.show(); } ledtape.show(); delay(delaytime); } //RGB 顏色轉(zhuǎn)變函數(shù) uint32_t rotateColor(byte WheelPos) { if(WheelPos < 85) { return ledtape.Color(WheelPos * 3, 255 - WheelPos * 3, 0); } else if(WheelPos < 170) { WheelPos -= 85; return ledtape.Color(255 - WheelPos * 3, 0, WheelPos * 3); } else { WheelPos -= 170; return ledtape.Color(0, WheelPos * 3, 255 - WheelPos * 3); } }
我們修改了最后一個(gè)程序中的一些東西。首先,我們添加了接近傳感器的輸入處理。其次,我們改變了LED的點(diǎn)亮方式。
接近傳感器的輸入應(yīng)檢查傳感器評(píng)估套件(Sensor Evaluation Kit)的示例程序。其目的是處理來(lái)自傳感器的數(shù)值。如果您只用if語(yǔ)句來(lái)響應(yīng)傳感器,那么只能實(shí)現(xiàn)LED的開(kāi)啟/關(guān)閉。如果將傳感器的值傳遞給點(diǎn)亮LED并改變LED點(diǎn)亮方式的函數(shù),就可以創(chuàng)建更多的交互式照明效果。
//接近時(shí)LED燈亮起 if(ps_val > 5){ ps_val = 500 - ps_val; simpleLED(ps_val/10); //Use the sensor value to light the LEDs }
simpleLED是點(diǎn)亮LED燈串的函數(shù),但是我們現(xiàn)在對(duì)它進(jìn)行處理,以便從LED串的開(kāi)始到結(jié)束逐一點(diǎn)亮LED燈。這可能是不夠的,所以這次我們使用一個(gè)陣列讓LED燈帶在一定程度上線性發(fā)光。
在陣列中,我們運(yùn)行點(diǎn)亮方法10次,然后從當(dāng)前發(fā)光LED的位置開(kāi)始計(jì)數(shù)。
int LEDtale[10]; //安排LED的軌跡
修改程序的這個(gè)部分非常有趣。您可以根據(jù)自己的喜好定制程序。
3.讓我們來(lái)點(diǎn)亮LED燈吧!
讓我們看看運(yùn)轉(zhuǎn)起來(lái)的炫彩光芒吧!
隨著接近距離的改變,LED燈串的光速也發(fā)生變化。
您可以在黑暗的房間嘗試一下,互動(dòng)照明效果會(huì)更棒!
今天,通過(guò)與傳感器評(píng)估套件的接近傳感器相結(jié)合,我們制作了交互式LED燈串。您可以制作更大規(guī)模的LED燈串或燈帶,添加更多的LED。這些燈光會(huì)把您的家變成一個(gè)假日仙境!
審核編輯:湯梓紅
-
led
+關(guān)注
關(guān)注
240文章
22905瀏覽量
650103 -
接近傳感器
+關(guān)注
關(guān)注
5文章
182瀏覽量
24372 -
Arduino
+關(guān)注
關(guān)注
187文章
6453瀏覽量
185922
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論