c++ - 阿杜诺 | RGB LED 灯条 Controller

标签 c++ arduino rgb microcontroller led

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

  • 红色:5
  • 绿色:6
  • 蓝色:3

我的设置: enter image description here

默认 Controller 照片: enter image description here

相关代码:

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);
}

最佳答案

我认为你误解了我在@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);
}

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

第二个参数是施加到引脚的电压。它的范围是 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 和 strip 的中间(VCC 到集电极, strip 到发射极)并将 arduino 连接到晶体管的基极。您将需要 3 个,每种颜色一个。

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

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

tip125/arduino transistor schematic

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

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

关于c++ - 阿杜诺 | RGB LED 灯条 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38548926/

相关文章:

javascript - 将结果转化为变量

c++ - 将十六进制值存储在字符串 C++ 中

c++ - 将 hDC 转换为 4bpp 位图

JavaScript/网络开发 : Why do you need a server to connect to hardware?

c++ - SD.remove() 没有删除 Arduino C++ 上的文件

jquery - 如何使用 jQuery 获取元素的框阴影颜色?

c++ - 返回指向固定大小数组 C++ 的数组的指针

c++ - 从基类调用虚函数

arduino - 射频三角测量(定位)

python - 如何在 Python OpenCV 中绘制图像对数色度图