如果我们可以使用单个 RGB LED 生成不同的颜色并使我们房间的角落更具吸引力会怎样?因此,这是一个基于Arduino的简单混色灯,当房间光线发生变化时,它可以改变颜色。所以这盏灯会根据房间的光照条件自动改变颜色。
每种颜色都是红色,绿色和蓝色的组合。所以我们可以通过 使用红色、绿色和蓝色生成任何颜色 .因此,在这里我们将改变PWM,即LDR上的光强度。这将进一步改变RGB LED中红色,绿色和蓝色的强度,并且会产生不同的颜色。
下表显示了占空比变化的颜色组合。
所需材料:
1 x Arduino UNO
1 x 面包板
3 x 220 欧姆电阻器
3 x 1 千欧姆电阻器
跳线
3 x LDR
3 x 彩色条带(红色、绿色、蓝色)
1 个 RGB 指示灯
LDR:
我们将在本电路中使用光敏电阻(或光敏电阻器、LDR或光导电池)。LDR由半导体材料制成,使其具有光敏特性。这些LDR或光敏电阻器的工作原理是“光导率”。现在这个原理说的是,每当光落在LDR表面(在这种情况下)时,元件的电导就会增加,或者换句话说,当光落在LDR表面时,LDR的电阻就会下降。LDR电阻降低的这一特性之所以得以实现,是因为它是表面使用的半导体材料的特性。
在这里,三个LDR传感器用于控制RGB LED内部单个红色,绿色和蓝色LED的亮度。
RGB 指示灯:
RGB LED有两种类型,一种是共阴极型(共负极),另一种是共阳极型(共正极)型。在CC(共阴极或共负极)中,将有三个正极端子,每个端子代表一种颜色,一个负极端子代表所有三种颜色。
在我们的电路中,我们将使用CA(共阳极或共正极)类型。在共阳极类型中,如果我们希望红色LED导通,我们需要将红色LED引脚接地并为公共正极供电。所有 LED 也是如此。在此处了解如何将 RGB LED 与 Arduino 连接。
电路图:
上面给出了该项目的完整电路图。电路图中显示的+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);
}
在循环部分,我们将使用analogRead();函数输出三个传感器,并存储在三个不同的变量中。
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);
将这些值打印到串行监视器上以进行调试
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 个值作为输出。因此,我们必须将原始值转换为 0-255。为此,我们必须将原始值除以 4,或者简单地使用 Arduino 的映射函数来转换这些值。
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
将映射值打印到串行监视器
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() 设置 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,因此当光入射到这些传感器上时,它的电阻会发生变化,因此Arduino的模拟引脚上的电压也会发生变化,Arduino的模拟引脚充当传感器的输入引脚。
当这些传感器上的光强度发生变化时,RGB 中的 LED 会随着电阻量的变化而发光,并且我们使用 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
+关注
关注
242文章
23277浏览量
660892 -
Arduino
+关注
关注
188文章
6469浏览量
187089
发布评论请先 登录
相关推荐
评论