首页 > 技术知识 > 正文

如果我们可以使用单个 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电阻降低的这一特性之所以得以实现,是因为它是表面使用的半导体材料的特性。

基于Arduino的简单混色灯设计方案-arduino彩色led灯

在这里,三个LDR传感器用于控制RGB LED内部单个红色,绿色和蓝色LED的亮度。

RGB 指示灯:

RGB LED有两种类型,一种是共阴极型(共负极),另一种是共阳极型(共正极)型。在CC(共阴极或共负极)中,将有三个正极端子,每个端子代表一种颜色,一个负极端子代表所有三种颜色。

基于Arduino的简单混色灯设计方案-arduino彩色led灯1

基于Arduino的简单混色灯设计方案-arduino彩色led灯2

在我们的电路中,我们将使用CA(共阳极或共正极)类型。在共阳极类型中,如果我们希望红色LED导通,我们需要将红色LED引脚接地并为公共正极供电。所有 LED 也是如此。在此处了解如何将 RGB LED 与 Arduino 连接。

电路图:

基于Arduino的简单混色灯设计方案-arduino彩色led灯3

上面给出了该项目的完整电路图。电路图中显示的+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混色灯的工作原理:

基于Arduino的简单混色灯设计方案-arduino彩色led灯4

由于我们使用三个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

}

猜你喜欢