如果我們可以使用單個(gè) RGB LED 生成不同的顏色并使我們房間的角落更具吸引力會(huì)怎樣?因此,這是一個(gè)基于Arduino的簡單混色燈,當(dāng)房間光線發(fā)生變化時(shí),它可以改變顏色。所以這盞燈會(huì)根據(jù)房間的光照條件自動(dòng)改變顏色。
每種顏色都是紅色,綠色和藍(lán)色的組合。所以我們可以通過 使用紅色、綠色和藍(lán)色生成任何顏色 .因此,在這里我們將改變PWM,即LDR上的光強(qiáng)度。這將進(jìn)一步改變RGB LED中紅色,綠色和藍(lán)色的強(qiáng)度,并且會(huì)產(chǎn)生不同的顏色。
下表顯示了占空比變化的顏色組合。
所需材料:
1 x Arduino UNO
1 x 面包板
3 x 220 歐姆電阻器
3 x 1 千歐姆電阻器
跳線
3 x LDR
3 x 彩色條帶(紅色、綠色、藍(lán)色)
1 個(gè) RGB 指示燈
LDR:
我們將在本電路中使用光敏電阻(或光敏電阻器、LDR或光導(dǎo)電池)。LDR由半導(dǎo)體材料制成,使其具有光敏特性。這些LDR或光敏電阻器的工作原理是“光導(dǎo)率”。現(xiàn)在這個(gè)原理說的是,每當(dāng)光落在LDR表面(在這種情況下)時(shí),元件的電導(dǎo)就會(huì)增加,或者換句話說,當(dāng)光落在LDR表面時(shí),LDR的電阻就會(huì)下降。LDR電阻降低的這一特性之所以得以實(shí)現(xiàn),是因?yàn)樗潜砻媸褂玫陌雽?dǎo)體材料的特性。
在這里,三個(gè)LDR傳感器用于控制RGB LED內(nèi)部單個(gè)紅色,綠色和藍(lán)色LED的亮度。
RGB 指示燈:
RGB LED有兩種類型,一種是共陰極型(共負(fù)極),另一種是共陽極型(共正極)型。在CC(共陰極或共負(fù)極)中,將有三個(gè)正極端子,每個(gè)端子代表一種顏色,一個(gè)負(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ù)輸出三個(gè)傳感器,并存儲(chǔ)在三個(gè)不同的變量中。
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 個(gè)值,但我們的 Arduino PWM 引腳有 0-255 個(gè)值作為輸出。因此,我們必須將原始值轉(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混色燈的工作原理:
由于我們使用三個(gè)LDR,因此當(dāng)光入射到這些傳感器上時(shí),它的電阻會(huì)發(fā)生變化,因此Arduino的模擬引腳上的電壓也會(huì)發(fā)生變化,Arduino的模擬引腳充當(dāng)傳感器的輸入引腳。
當(dāng)這些傳感器上的光強(qiáng)度發(fā)生變化時(shí),RGB 中的 LED 會(huì)隨著電阻量的變化而發(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文章
23323瀏覽量
661958 -
Arduino
+關(guān)注
關(guān)注
188文章
6474瀏覽量
187444
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論