如果我们可以使用单个RGB led产生不同的颜色并使房间的角落更具吸引力该怎么办?因此,这是一个简单的基于Arduino的混色灯,当室内光线变化时,它可以改变颜色。因此,此灯将根据房间的光线条件自动更改其颜色。
每种颜色都是红色,绿色和蓝色的组合。因此,我们可以使用红色,绿色和蓝色生成任何颜色。因此,在这里,我们将改变PWM,即LDR上的光强度。这将进一步改变RGB LED中红色,绿色和蓝色的强度,并会产生不同的颜色。
下表显示了具有相应占空比变化的颜色组合。
所需材料:
- 1个Arduino UNO
- 1 x面包板
- 3个220欧姆电阻
- 3个1千欧电阻器
- 跳线
- 3个LDR
- 3 x彩色条(红色,绿色,蓝色)
- 1个RGB LED
LDR:
在此电路中,我们将使用 光敏电阻 (或 光敏电阻, LDR或 光导电池)。 LDR由半导体材料制成,以使其具有光敏特性。这些LDR或照片电阻器的工作原理是“光电导”。现在,这个原理说的是,每当光落在LDR的表面上(在这种情况下)时,元件的电导就会增加,换句话说,当光落在LDR的表面上时,LDR的电阻会降低。由于它是表面上使用的半导体材料的特性,因此实现了LDR电阻降低的特性。
在这里,三个LDR传感器用于控制RGB LED内部的各个红色,绿色和蓝色LED的亮度。在此处了解有关使用Arduino控制LDR的更多信息。
RGB LED:
RGB LED有 两种类型 ,一种是共阴极型(共阴),另一种是共阳极型(共正)。在CC(公共阴极或公共负极)中,将有三个正端子,每个端子代表一种颜色,一个负端子代表所有三种颜色。
在我们的电路中,我们将使用CA (公共阳极或公共正极)类型。在公共阳极类型中,如果要使红色LED亮起,则需要将红色LED引脚接地并为公共正极供电。所有LED都一样。在此处了解如何将RGB LED与Arduino接口。
电路原理图:
上面给出了该项目的完整电路图。电路图中所示的+ 5V和接地连接可从Arduino的5V和接地引脚获得。Arduino本身可以通过笔记本电脑或使用12V适配器或9V电池的DC插孔供电。
我们将使用PWM更改RGB led的亮度。您可以在此处了解有关PWM的更多信息。这是Arduino的一些PWM示例:
- Arduino Uno的可变电源
- 使用Arduino的直流电机控制
- 基于Arduino的音调发生器
编程说明:
首先,我们声明所有输入和输出引脚,如下所示。
const字节red_sensor_pin = A0; const字节green_sensor_pin = A1; const字节blue_sensor_pin = A2; const字节green_led_pin = 9; const字节blue_led_pin = 10; const字节red_led_pin = 11;
将传感器和led的初始值声明为0。
unsigned int red_led_value = 0; 无符号整数blue_led_value = 0; unsigned int green_led_value = 0; unsigned int red_sensor_value = 0; 无符号整数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); 延迟(50); blue_sensor_value = AnalogRead(blue_sensor_pin); 延迟(50); green_sensor_value = AnalogRead(green_sensor_pin);
将这些值打印到串行监视器上以进行调试
Serial.println(“原始传感器值:”); Serial.print(“ \ t Red:”); Serial.print(red_sensor_value); Serial.print(“ \ t蓝色:”); Serial.print(blue_sensor_value); Serial.print(“ \ t绿色:”); Serial.println(green_sensor_value);
我们将从传感器获取0-1023的值,但我们的Arduino PWM引脚具有0-255的值作为输出。因此,我们必须将原始值转换为0-255。为此,我们必须将原始值除以4或简单地使用Arduino的映射函数来转换这些值。
red_led_value = red_sensor_value / 4; //定义红色LED blue_led_value = blue_sensor_value / 4; //定义蓝色LED green_led_value = green_sensor_value / 4; //定义绿色LED
将映射值打印到串行监视器
Serial.println(“映射的传感器值:”); Serial.print(“ \ t Red:”); Serial.print(red_led_value); Serial.print(“ \ t蓝色:”); Serial.print(blue_led_value); Serial.print(“ \ t绿色:”); Serial.println(green_led_value);
使用 analogWrite() 设置RGB LED的输出
AnalogWrite(red_led_pin,red_led_value); //表示红色的LED AnalogWrite(blue_led_pin,blue_led_value); //表示蓝色的LED AnalogWrite(green_led_pin,green_led_value); //表示绿色
Arduino混色灯的工作:
因为我们使用的是三个LDR,所以当光入射到这些传感器上时,其电阻会发生变化,结果电压在Arduino的模拟引脚(也用作传感器的输入引脚)上也会发生变化。
当这些传感器上的光强度发生变化时,相应的RGB LED会随着电阻值的变化而发光,并且使用PWM的RGB LED会有不同的颜色混合。