阿杜诺 | RGB LED 灯条控制器

Arduino | RGB LED Strip Controller

我有一个 Arduino UNO,我正在尝试打开和关闭条带的颜色(红色、绿色或蓝色)灯。这是我的代码,但所有灯都亮着。问题是,例如我可能只想显示红色,但我似乎无法关闭任何颜色。我的引脚如下:

我的设置:

默认控制器照片:

相关代码:

int ledPinR = 5;
int ledPinG = 6;
int ledPinB = 3;

void setup() {
  pinMode(ledPinR, OUTPUT);
  pinMode(ledPinG, OUTPUT);
  pinMode(ledPinB, OUTPUT);
}
void loop()  {
  analogWrite(ledPinR, 0);
  analogWrite(ledPinG, 0);
  analogWrite(ledPinB, 0);
}

您必须将 pinMode() 添加到设置中。

void setup() {
    pinMode(ledPinR, OUTPUT);
    pinMode(ledPinG, OUTPUT);
    pinMode(ledPinB, OUTPUT);
}

您必须延迟操作,然后再打开或关闭下一盏灯,如下所示:

编辑:适合您情况的完整推子,您可能想在循环中跳过 4,但我会让您处理。

int ledPinR = 5;
int ledPinG = 6;
int ledPinB = 3;

int brightness = 0;
int fade = 5;

void setup() {
  pinMode(ledPinR, OUTPUT);
  pinMode(ledPinG, OUTPUT);
  pinMode(ledPinB, OUTPUT);
}

void loop() {
  for(int LED_PIN = 3; LED_PIN<=6; LED_PIN++) {
    analogWrite(LED_PIN, brightness); //setting the brightness at LED pin
    brightness += fade; //brightness increasE
    if(brightness == 0 || brightness == 255){
      fade = -fade;
    }
    delay(30); //time of delay is in miliseconds
  }
}

EDIT2:好的,看到了你的设置,我对你想用颜色做的事情还差得很远,不知道我是否应该删除答案,现在是误导。希望延迟有所帮助。

我认为你误解了我在@Secko 的回答下的最后评论,所以这就是我的意思:

int r = 5;
int g = 6;
int b = 3;

void setup() {
    pinMode(r, OUTPUT);
    pinMode(g, OUTPUT);
    pinMode(b, OUTPUT);
}

void loop() {
    analogWrite(r, 128);
    delay(50);
    analogWrite(r, 0);
    analogWrite(g, 128);
    delay(50);
    analogWrite(g, 0);
    analogWrite(b, 128);
    delay(50);
    analogWrite(b, 0);
    delay(50);
}

您需要关闭上次打开的颜色才能获得红色、绿色和蓝色的闪烁灯。否则如果你在红色之后打开绿色,条带会短时间变黄。如果您随后打开蓝色,它将变成白色并保持白色,因为不会关闭任何颜色。

第二个参数是施加到你的管脚上的电压。它的范围是 0 - 255,其中 0 是 0V,255 是 5V。 128就在中间,2.5V。

如果你的条带很大(=>3 个 LED 和节能 LED。否则 >1),我希望你使用晶体管来将电流消耗从 arduino 卸载到晶体管。否则你很快就会把 arduino 搞砸了。

编辑: 你可能已经通过从它的引脚拉出太多电流(太多 LED)而烧毁了 arduino。

您需要在每种颜色和能够处理大电流的 arduino 之间放置一个 PNP 晶体管(因为您驱动了很多 LED),这意味着达林顿晶体管阵列集成电路。

我想到了类似 TIP125 的东西。 (https://www.fairchildsemi.com/datasheets/TI/TIP125.pdf)

它的最大集电极电流为5A。把它放在你的 VCC 和条带的中间(VCC 到集电极,条带到发射极)并将 arduino 连接到晶体管的基极。您将需要 3 个,每种颜色一个。

编辑2: 这是一个非常快速制作的示意图,向您展示基础知识。对于一个 12V LED 灯条来说,它应该是完全有效的,单个颜色的电流消耗高达 5A(因此总共 15A)。

尽管如此,您可能希望在晶体管基极上添加电阻以吸收电流。

编辑 3: 由于您可能不熟悉电子产品:如果基极较低,PNP 晶体管将启用集电极和发射极之间的连接。含义:analogWrite(r, 0) 将打开条带上的颜色,而 analogWrite(r, 255) 将关闭它。它与中间的晶体管倒置。

此外,我希望这是显而易见的,请勿通过面包板或细线为每种颜色布线 5A。他们会冒烟。

我遇到了同样的问题。我的问题是我在晶体管上反转了发射极和集电极接线。

对于 showp1984 建议的 TIP125 晶体管,您需要确保 LED 灯带连接到发射极引脚,集电极引脚必须连接到 Arduino GND .将晶体管的基极连接到 Arduino 输出引脚(见下文)。使用一个 1K 欧姆的电阻来连接 Base。

这是我的设置:

  • 3x 晶体管 TIP125 达林顿
  • 1 个 Arduino Nano
  • 1x 12V LED 灯条
  • 3x 1KiloOhm 电阻器

接线

每种 LED 颜色(R、G、B)使用一个晶体管:

红色

  • 晶体管底座 --> 电阻器 --> Arduino PIN D5
  • 晶体管集电极 --> Arduino GND
  • 晶体管发射极 --> LED 红色

绿色

  • 晶体管底座 --> 电阻器 --> Arduino PIN D6
  • 晶体管集电极 --> Arduino GND
  • 晶体管发射极 --> LED 绿色

蓝色

  • 晶体管底座 --> 电阻器 --> Arduino PIN D3
  • 晶体管集电极 --> Arduino GND
  • 晶体管发射极 --> LED 蓝色

代码

// color swirl! connect an RGB LED to the PWM pins as indicated
// in the #defines
// public domain, enjoy!
 
#define REDPIN 5
#define GREENPIN 6
#define BLUEPIN 3
 
#define FADESPEED 5     // make this higher to slow down
 
void setup() {
  pinMode(REDPIN, OUTPUT);
  pinMode(GREENPIN, OUTPUT);
  pinMode(BLUEPIN, OUTPUT);
  
}
 
 
void loop() {
  int r, g, b;

  // fade from blue to violet
  for (r = 0; r < 256; r++) { 
    analogWrite(REDPIN, r);
    delay(FADESPEED);
  } 
  // fade from violet to red
  for (b = 255; b > 0; b--) { 
    analogWrite(BLUEPIN, b);
    delay(FADESPEED);
  } 
  // fade from red to yellow
  for (g = 0; g < 256; g++) { 
    analogWrite(GREENPIN, g);
    delay(FADESPEED);
  } 
  // fade from yellow to green
  for (r = 255; r > 0; r--) { 
    analogWrite(REDPIN, r);
    delay(FADESPEED);
  } 
  // fade from green to teal
  for (b = 0; b < 256; b++) { 
    analogWrite(BLUEPIN, b);
    delay(FADESPEED);
  } 
  // fade from teal to blue
  for (g = 255; g > 0; g--) { 
    analogWrite(GREENPIN, g);
    delay(FADESPEED);
  } 

 
}

观察

这里还有一些我遇到的障碍,我花了一些时间才弄清楚。

反转值

  • 在使用 TIP125 时,您实际上需要将输出 PIN 设置为 255 以关闭该 PIN,并将其设置为 0 以启动它:
 analogWrite(REDPIN, 255); //RED is off
 analogWrite(REDPIN, 0); //RED is on

晶体管散热器短路

这听起来很明显,但我花了好几个小时。我在面包板上测试这个设置,三个晶体管散热器中的两个向后倾斜,刚好可以与电阻腿轻微接触。这实际上是连接到这些晶体管的 LED 意外点亮的主要原因之一...