我用的板子是Arduino Uno,軟體開發環境為1.0.3 Windows版。
RGB LED有四支腳,我買的是共陰極,其中最長的腳要接地,其他三支腳分別控制R、G、B色彩。
電路圖如下,
RGB LED的共陰極(最長腳)接地。
RGB LED的R接到220 ohm電阻後,再接到Arduino腳位11。
RGB LED的G接到220 ohm電阻後,再接到Arduino腳位10。
RGB LED的B接到220 ohm電阻後,再接到Arduino腳位9。
為什麼我使用220 ohm的電阻呢,請參考我寫的Arduino小知識:LED串聯電阻為什麼是220 ohm?。實際情形必須看LED的規格而定,網路上找到的文章,有些人使用270 ohm,也有330 ohm的。
程式碼如下:
// 根據接線圖定義控制R、G、B的腳位
#define LEDR 11
#define LEDG 10
#define LEDB 9
// 關閉LED
void turnoff(){
digitalWrite(LEDR, LOW);
digitalWrite(LEDG, LOW);
digitalWrite(LEDB, LOW);
}
void setup() {
pinMode(LEDR, OUTPUT);
pinMode(LEDG, OUTPUT);
pinMode(LEDB, OUTPUT);
turnoff();
}
// 每隔一秒改變LED的顏色,紅、綠、藍、黃、青、洋紅
void loop() {
turnoff();
digitalWrite(LEDR, HIGH);
delay(1000);
turnoff();
digitalWrite(LEDG, HIGH);
delay(1000);
turnoff();
digitalWrite(LEDB, HIGH);
delay(1000);
turnoff();
digitalWrite(LEDR, HIGH);
digitalWrite(LEDG, HIGH);
delay(1000);
turnoff();
digitalWrite(LEDG, HIGH);
digitalWrite(LEDB, HIGH);
delay(1000);
turnoff();
digitalWrite(LEDB, HIGH);
digitalWrite(LEDR, HIGH);
delay(1000);
}
因為Uno板的腳位11、10、9能輸出PWM,所以可調整三原色的個別強度,形成更多的色彩,譬如底下的程式碼:
#define LEDR 11
#define LEDG 10
#define LEDB 9
void setup() {
pinMode(LEDR, OUTPUT);
pinMode(LEDG, OUTPUT);
pinMode(LEDB, OUTPUT);
}
int r = 0;
int g = 0;
int b = 0;
void loop() {
r = random(0, 255);
g = random(0, 255);
b = random(0, 255);
analogWrite(LEDR, r);
analogWrite(LEDG, g);
analogWrite(LEDB, b);
delay(1000);
}
使用random()取得0到255之間的亂數值,然後以analogWrite輸出。因為我沒有使用randomSeed(),所以每次重開機後,都會得到同樣的亂數數列。
參考資料:
- instructables的RGB LED Tutorial (using an Arduino) (RGBL)。
- Make: Projects的RGB LED Lamp。
- Arduino Playground的RBG LED Color Chooser。
This comment has been removed by the author.
ReplyDeleteThis comment has been removed by the author.
ReplyDelete最長腳接電源正極,其餘三支腳接Arduino的腳位(中間應串連限流電阻)。
Delete這三個腳位分別控制紅綠藍,譬如紅腳位若為高電位,那麼電流就無法流過,不發出紅光,若為低地位,電流可流過,便可發出紅光。其餘腳位類推。
若使用analogWrite,便可控制亮度。
可參考http://www.geek-workshop.com/thread-1586-1-1.html
謝謝您~
Delete不小心把問題給刪掉了,抱歉。
Deleteno problem.
Delete一個電阻接共陰腳位即可,不需三個。
ReplyDelete也要功率足夠。
Delete一個電阻接在共陰腳位是不行的,舉例來說,LED導通電壓為1V,電阻接100歐姆來算,當只有紅色LED輸出5V時,i=(5-1)/100=40mA,如果藍色LED也輸出5V,此時電阻的壓降還是(5-1)v,流經電阻的電流依然是i=(5-1)/100=40mA,然而此時40mA要分給紅色及藍色LED,只能各分20mA,則亮度減半。以上數字只是估算,要說的是,當愈多顆LED要亮,整個亮度會變的比較暗
DeleteThis comment has been removed by the author.
DeleteArduino DC Current per I/O Pin) 每個數位腳位可以提供約40mA的直流電, 這足以點亮大部分的LED
Delete最多可提供總共約 200mA的電流
LED 是接在不同 I/O Pin 亮度不會變的比較暗
Delete接地限流電阻是防止流經 LED 電流過大而燒毀
請問如果想要用溫度來改變RGB變色需要怎麼改 我使用的感溫元件是LM35
ReplyDeletehttp://alex9ufoexploer.blogspot.tw/2013/04/arduino-lm35.html
DeleteLM35輸出電壓與溫度成線性關係,直接以類比腳位量測即可。
ReplyDelete可參考http://a-chien.blogspot.tw/2012/10/arduino.html
若想提高精確度,需修改參考電壓,
請見http://playground.arduino.cc/Main/LM35HigherResolution
量測溫度後,制定哪個範圍的溫度、應讓RGB LED呈現什麼顏色,再來撰寫這部份的程式碼。
感謝分享!
ReplyDelete我想請問如果我想讓他六段變色 可是又想讓他以PWM呼吸呢?
ReplyDelete使用三個PWM腳位來控制。
Delete我想請問如果我想讓他六段變色 可是又想讓他以PWM呼吸呢?
ReplyDelete使用三個PWM腳位,分別控制R、G、B,便能控制三色的強弱。
Delete感謝分享!
ReplyDelete您好,請問可以用藍芽控制RGB的燈光顏色嗎?
ReplyDeleteYes, You Can!
Delete葉難大大您好,最近剛好使用到這顆模組
ReplyDelete想請問您關於 混出白色光 這件事
試了三顆同樣的模組,發現紅色光的部分都是比較弱的,綠光則強度非常高
除了手動慢慢減少pwm值外,有甚麼方式能去處理嗎?
嗯,
ReplyDelete想不到耶。
請問我如果用Arduino micro 配合LTC106-F8
ReplyDelete接腳跟程式碼控制方式會和你的一樣嗎?
完全不同。
Delete不好意思,葉老師,想請問您有沒有用過兩隻腳的 七彩LED呢?
ReplyDelete不知道這種LED要怎麼用程式控制它的顏色。
謝謝葉老師
這種LED裡頭通常有顆控制晶片,
Delete必須根據該晶片的規格,傳送訊號給它。
如果要連接紅外線 要怎麼更改程式碼
ReplyDelete問題太空泛了。
DeleteRGB LED的共陽極 如何改
ReplyDelete葉大大
ReplyDelete請問一下,如果想要產生出255,random該處max的數值是否應改為256才對呢 (random(0, 256))?
謝謝您