Arduino | RGB LED Strip Controller
 
我有一个Arduino UNO,我试图打开和关闭带状颜色(红色,绿色或蓝色)的灯。 这是我的代码,但是所有指示灯仍然亮着。 问题是,例如,我可能只想显示红色,但似乎无法关闭任何颜色。 我的针脚如下:
我的设置:
 
默认控制器照片:
 
相关代码:
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 
 | 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);
 }
 | 
		
		
- 
@MikeCAT哇!太快了!代码是否正确以关闭条带
- 
你有什么带?
- 
@djUniversal SMD RGB 5050 Waterproof LED Strip light
- 
引脚3,5和6连接到什么?有控制器芯片吗?我唯一能找到的名字是带有遥控器的led灯条。没有数据表?
- 
@djUniversal想说的是:模拟条吗? (4个连接器:R,G,B和GND)还是数字条? (3个连接器:VCC,DATA,GND)。另外:您是否同时接地? (带和arduino?)如果是数字的:什么控制器芯片? WS2811? (== WS2812 LED,其中集成了WS2811)
- 
@djUniversal它们是模拟R G B GND。没有控制器。只是Arduino。我将Arduino通过USB连接到计算机,并通过12v电源适配器连接到val。
- 
@ showp1984它们是模拟R G B GND。没有控制器。只是Arduino。我将Arduino通过USB连接到计算机,并通过12v电源适配器连接到val。
- 
当您从Arduino引脚上物理移除一根或多根电线时会发生什么?
- 
@djUniversal删除12v =条带电源关闭。移除红色=红色关闭。删除蓝色=蓝色关闭。移除绿色=绿色关闭。
- 
对于模拟地带,@ Secko为您提供了答案。
- 
@ showp1984 LED灯带继续发光。没变
- 
您是否尝试过使用digitalWrite驱动线路以查看它们是否仅打开/关闭各个线路?此外,在没有看到数据手册的情况下,是否应该以低逻辑电平来驱动它们?
- 
@djUniversal我真的无法回答。如果可以,我可以打开提供的电源/控制器。
- 
您是否有购买地点的链接?
- 
@djUniversal ebay.com/itm/
- 
你有遥控器吗?它会改变颜色吗?
- 
@djUniversal是和是
 
	 
我认为您在@Secko的回答下误解了我的最后评论,所以这是我的意思:
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 
 | 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。 2.5V正好位于128的中间。
如果您的灯带很大(=> 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。他们会烟熏起来。
		
		
- 
红色,绿色,蓝色快速连续。
- 
只是单色?例如,当红色亮起时,其他所有灯灭了吗?
- 
是。它基本上是红色,绿色和蓝色的闪烁灯,之间没有黑暗的停顿。
- 
它仍然不会这样做。无论我尝试什么,每种颜色(无论是否变暗)都将始终存在。
- 
你的地带多大?我现在正在我前面运行这段代码,对于单个LED来说,它工作得很好。因此,要么您已经通过拉太多的电流(太多的LED)就已经吹灭了arduino,要么该条具有与控制器交互的另一种方法。如何连接?直?您是否将GND从板条连接到arduino?
- 
如果您愿意,我可以提供图片。
- 
我将照片添加到了帖子中。
- 
通过该连接(直接),您可能会吹灭了用于连接红色,绿色和蓝色的arduino上的引脚。用万用表或单个LED进行测试,并用digitalWrite进行检查,看看是否炸毁了它们。
- 
没关系,我还有另一个。如何修复此连接?
- 
我更新了答案,以解释一个简单的晶体管电路。
- 
L7805CV怎么样
- 
那不是一个晶体管,它是一个电压调节器,仅能进行5V调节。
- 
有机会吗?如果带确实是高功率的,它将起作用。含义:R G B GND。如果是R G B VCC,则需要TIP120。两者都能够提供高达5A和60V的最大电压。请参阅我的最后编辑,其中添加了一张图片。其余的取决于您:)
- 
最后一件事!哈哈。它具有R G B 12V
- 
然后,使用我添加到我的答案中的原理图和tip125,就可以了。 ;)我建议您阅读一些有关PNP和NPN转运蛋白的信息,但总的来说,虽然^^
- 
12V线对应于TIP120或TIP125吗?抱歉! :D
- 
您甚至没有看过原理图:(它精确地显示了您的情况,甚至上面有零件号:(
- 
好的!抱歉。非常感谢你的帮助!一定要下订单购买那些TIP125。祝您有个美好的夜晚!
- 
@NicholasJohnson没问题,自今天凌晨4:15在这里度过了一个美好的早晨:)晚安,请接受答案。
- 
好吧,我刚刚做到了。另外,我只是看了一下,说:"等一下,他的帖子上没有。" .....我忘了重新加载答案(_)
- 
我刚得到那些晶体管。将所有东西都连接到不同的PWM引脚上,没有区别。
- 
然后您做了一些错误的事情(接线)或提供了错误的信息(例如:条带的控制方式不同)。如前所述:对于具有R G B高(12V)和第4通道低(GND)的12V LED灯条,TIP125必须使用上述原理图和反向逻辑工作。如果其R B低电平(GND)且第四通道为高电平(12V),则需要使用TIP120,其连接布线略有不同(它位于同一位置,但将切换GND而不是VCC),并且逻辑无反相。如果需要的话,我可以将其挂接到GND开关板,并制作一些图片和视频。
- 
好的如何查找其gnd或vcc? (该公司没有原理图!对不起!)
- 
使用电压表。 连接原始控制器并将其设置为最大亮度的白色。 然后在任何颜色和第四根导线之间进行测量。 如果得到负值,请切换电压表的导线。 如果获得正值,则红色电压表导线测量VCC,黑色GND测量。 或者:接受! 12V 2A PSU并将其连接到一种颜色和第四根电线。 由于LED是二极管,因此它们只会在一个方向上点亮,从而为您提供极性。
 
	 
 
您必须延迟操作,然后再打开或关闭下一个灯,如下所示:
编辑:适合您的情况的完整推子,您可能希望在循环中跳过4,但我会让您处理。
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 
 | 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:好,看到您的设置,我对您要使用的颜色做的还很遥远,不知道我是否应该删除答案,这现在在误导。希望延迟能有所帮助。
		
		
- 
LED灯带继续发光。没变。对不起,麻烦了!大声笑
- 
@NicholasJohnson这只会在第一次加电时一个接一个地为它们加电。之后,它们将保持点亮状态。如果只想让一种颜色在色带中循环,则必须在延迟后再次关闭颜色。
- 
好吧,您必须淡出它或更改亮度值(现在是0),但我想您已经知道了。
- 
@Secko似乎要着色。如果我将红色值设置为0,则将其余值设置为0。它会产生粉红色
- 
@ showp1984不管我将值设置为0还是255,它仍然点亮。
- 
@NicholasJohnson看到我的答案,其中包含您显然误解的我的最后评论的信息。
 
	 
您必须添加pinMode()进行设置。
| 12
 3
 4
 5
 
 | void setup() {pinMode(ledPinR, OUTPUT);
 pinMode(ledPinG, OUTPUT);
 pinMode(ledPinB, OUTPUT);
 }
 |