如果我們可以使用單個 RGB LED 生成不同的顏色并使我們房間的角落更具吸引力會怎樣?因此,這是一個基于Arduino的簡單混色燈,當(dāng)房間光線發(fā)生變化時,它可以改變顏色。所以這盞燈會根據(jù)房間的光照條件自動改變顏色。
每種顏色都是紅色,綠色和藍(lán)色的組合。所以我們可以通過 使用紅色、綠色和藍(lán)色生成任何顏色 .因此,在這里我們將改變PWM,即LDR上的光強(qiáng)度。這將進(jìn)一步改變RGB LED中紅色,綠色和藍(lán)色的強(qiáng)度,并且會產(chǎn)生不同的顏色。
下表顯示了占空比變化的顏色組合。
所需材料:
1 x Arduino UNO
1 x 面包板
3 x 220 歐姆電阻器
3 x 1 千歐姆電阻器
跳線
3 x LDR
3 x 彩色條帶(紅色、綠色、藍(lán)色)
1 個 RGB 指示燈
LDR:
我們將在本電路中使用光敏電阻(或光敏電阻器、LDR或光導(dǎo)電池)。LDR由半導(dǎo)體材料制成,使其具有光敏特性。這些LDR或光敏電阻器的工作原理是“光導(dǎo)率”。現(xiàn)在這個原理說的是,每當(dāng)光落在LDR表面(在這種情況下)時,元件的電導(dǎo)就會增加,或者換句話說,當(dāng)光落在LDR表面時,LDR的電阻就會下降。LDR電阻降低的這一特性之所以得以實(shí)現(xiàn),是因?yàn)樗潜砻媸褂玫陌雽?dǎo)體材料的特性。
在這里,三個LDR傳感器用于控制RGB LED內(nèi)部單個紅色,綠色和藍(lán)色LED的亮度。
RGB 指示燈:
RGB LED有兩種類型,一種是共陰極型(共負(fù)極),另一種是共陽極型(共正極)型。在CC(共陰極或共負(fù)極)中,將有三個正極端子,每個端子代表一種顏色,一個負(fù)極端子代表所有三種顏色。
在我們的電路中,我們將使用CA(共陽極或共正極)類型。在共陽極類型中,如果我們希望紅色LED導(dǎo)通,我們需要將紅色LED引腳接地并為公共正極供電。所有 LED 也是如此。在此處了解如何將 RGB LED 與 Arduino 連接。
電路圖:
上面給出了該項(xiàng)目的完整電路圖。電路圖中顯示的+5V和接地連接可以從Arduino的5V和接地引腳獲得。Arduino本身可以從筆記本電腦或通過DC插孔使用12V適配器或9V電池供電。
編程說明:
首先,我們聲明所有輸入和輸出引腳,如下所示。
const byte red_sensor_pin = A0;
const byte green_sensor_pin = A1;
const byte blue_sensor_pin = A2;
const byte green_led_pin = 9;
const byte blue_led_pin = 10;
const byte red_led_pin = 11;
將傳感器和 LED 的初始值聲明為 0。
unsigned int red_led_value = 0;
unsigned int blue_led_value = 0;
unsigned int green_led_value = 0;
unsigned int red_sensor_value = 0;
unsigned int blue_sensor_value = 0;
unsigned int green_sensor_value = 0;
void setup() {
pinMode(red_led_pin,OUTPUT);
pinMode(blue_led_pin,OUTPUT);
pinMode(green_led_pin,OUTPUT);
Serial.begin(9600);
}
在循環(huán)部分,我們將使用analogRead();函數(shù)輸出三個傳感器,并存儲在三個不同的變量中。
void loop() {
red_sensor_value = analogRead(red_sensor_pin);
delay(50);
blue_sensor_value = analogRead(blue_sensor_pin);
delay(50);
green_sensor_value = analogRead(green_sensor_pin);
將這些值打印到串行監(jiān)視器上以進(jìn)行調(diào)試
Serial.println("Raw Sensor Values:");
Serial.print("t Red: ");
Serial.print(red_sensor_value);
Serial.print("t Blue: ");
Serial.print(blue_sensor_value);
Serial.print("t Green: ");
Serial.println(green_sensor_value);
我們將從傳感器獲得 0-1023 個值,但我們的 Arduino PWM 引腳有 0-255 個值作為輸出。因此,我們必須將原始值轉(zhuǎn)換為 0-255。為此,我們必須將原始值除以 4,或者簡單地使用 Arduino 的映射函數(shù)來轉(zhuǎn)換這些值。
red_led_value = red_sensor_value / 4; // define Red LED
blue_led_value = blue_sensor_value / 4; // define Blue LED
green_led_value = green_sensor_value / 4; // define Green Led
將映射值打印到串行監(jiān)視器
Serial.println("Mapped Sensor Values:");
Serial.print("t Red: ");
Serial.print(red_led_value);
Serial.print("t Blue: ");
Serial.print(blue_led_value);
Serial.print("t Green: ");
Serial.println(green_led_value);
使用 analogWrite() 設(shè)置 RGB LED 的輸出
analogWrite(red_led_pin,red_led_value); // indicate red LED
analogWrite(blue_led_pin,blue_led_value); // indicate blue LED
analogWrite(green_led_pin,green_led_value); // indicate green
Arduino混色燈的工作原理:
由于我們使用三個LDR,因此當(dāng)光入射到這些傳感器上時,它的電阻會發(fā)生變化,因此Arduino的模擬引腳上的電壓也會發(fā)生變化,Arduino的模擬引腳充當(dāng)傳感器的輸入引腳。
當(dāng)這些傳感器上的光強(qiáng)度發(fā)生變化時,RGB 中的 LED 會隨著電阻量的變化而發(fā)光,并且我們使用 PWM 的 RGB LED 中有不同的顏色混合。
const byte red_sensor_pin = A0;
const byte green_sensor_pin = A1;
const byte blue_sensor_pin = A2;
const byte green_led_pin = 9;
const byte blue_led_pin = 10;
const byte red_led_pin = 11;
unsigned int red_led_value = 0;
unsigned int blue_led_value = 0;
unsigned int green_led_value = 0;
unsigned int red_sensor_value = 0;
unsigned int blue_sensor_value = 0;
unsigned int green_sensor_value = 0;
void setup() {
pinMode(red_led_pin,OUTPUT);
pinMode(blue_led_pin,OUTPUT);
pinMode(green_led_pin,OUTPUT);
Serial.begin(9600);
}
void loop() {
red_sensor_value = analogRead(red_sensor_pin);
delay(50);
blue_sensor_value = analogRead(blue_sensor_pin);
delay(50);
green_sensor_value = analogRead(green_sensor_pin);
// print those values onto the serial monitor
Serial.println("Raw Sensor Values:");
Serial.print("t Red: ");
Serial.print(red_sensor_value);
Serial.print("t Blue: ");
Serial.print(blue_sensor_value);
Serial.print("t Green: ");
Serial.println(green_sensor_value);
// convert from 0-1023 to 0-255
red_led_value = red_sensor_value / 4; // define Red LED
blue_led_value = blue_sensor_value / 4; // define Blue LED
green_led_value = green_sensor_value / 4; // define Green LEd
// print mapped values to serial monitor
Serial.println("Mapped Sensor Values:");
Serial.print("t Red: ");
Serial.print(red_led_value);
Serial.print("t Blue: ");
Serial.print(blue_led_value);
Serial.print("t Green: ");
Serial.println(green_led_value);
// use analogWrite() to set output for RGB LED
analogWrite(red_led_pin,red_led_value); // indicate red LED
analogWrite(blue_led_pin,blue_led_value); // indicate blue LED
analogWrite(green_led_pin,green_led_value); // indicate green
}
-
led
+關(guān)注
關(guān)注
242文章
23141瀏覽量
658528 -
Arduino
+關(guān)注
關(guān)注
187文章
6464瀏覽量
186660
發(fā)布評論請先 登錄
相關(guān)推薦
評論