Jump to content
Corsair Community

HowTo: HD120 RGB Custom Lighting Controller


Recommended Posts

I have ordered a 1 x 144 LED strip and am wondering if there is an upper limit on how many LEDs can be controlled. Both the CLCP + CLNP firmware seems to only allow up to 72 LED per port, but given there are strips with 144 LEDs I guess more is possible and suspect the limit is down to the Corsair firmware.

 

My other concern is power as 144 LEDs will need 8.64 amps, so I will use an external PSU. The strip has now arrived and I have updated http://forum.corsair.com/forums/showthread.php?p=907769 to show what is possible. The CLCP/CLNP seem to have an upper limit of 72 LEDs.

Edited by red-ray
The CLCP/CLNP seem to have an upper limit of 72 LEDs
Link to comment
Share on other sites

  • Replies 271
  • Created
  • Last Reply

Top Posters In This Topic

Top Posters In This Topic

Posted Images

Would it be possible to connect up some daisy chained SP120's to my motherboards RGB headers in order to control the lighting using the AURA software?

 

I understand that the header runs at 12V and the LED's in the SP120's only run at 5V so would it be possible to put a resistor is series to soak up around 7V then daisy chain the fans in parallel? I just want to be able to control all the LED's in the fans and the LED strips in the case from the same software.

Link to comment
Share on other sites

I understand that the header runs at 12V and the LED's in the SP120's only run at 5V so would it be possible to put a resistor is series to soak up around 7V then daisy chain the fans in parallel?

 

No, you would need to use active components to convert the RGB levels into the UCS1903 controller protocol.

 

Bonus:

SP120 RGB fans are fan-addressable UCS1903 controller chips, so with some minor code changes, the same or similar code can be used on them.

Link to comment
Share on other sites

  • 4 weeks later...

The forums stopped letting me know I had stuff waiting. O.o

 

Now I have an odd urge to find a HWPWM port on the controller I made and make a fan PWM set. It would be a single fan port, mind you, so all the fans connected to it would run the same speed. Well, meh.

 

It can wait until the 3D printer upgrades are done.

Link to comment
Share on other sites

I would be interested in a step by step set up of the hardware or a video showing all the connections you use. I can vaguely understand what you mean throughout these posts, though a visual representation of the information would help. Also have you managed to configure anything for the SP120 RGB fans yet? (Those are all I have) Edited by Captainveyron
Typo
Link to comment
Share on other sites

  • 2 weeks later...

I had to register an account here to compliment you guys on your hard work... I love this project. I have been meaning to learn how to work with an Arduino and this gives me the perfect outlet to do so.

 

I am building my wife a new computer and had her pick out a case, and she picked the Corsair 570X. After I did some research on it I stumbled on the video of the music demo and was amazed what you could do with your own controller. Of course, later I learned the case only comes with the SP120 fans and not the HD120 fans, but hey, at least I can get started on it and then upgrade to the HD120 fans when money permits.

 

I bought an Arduino Uno at Microcenter tonight and am waiting on the case to come in from Newegg so I can start playing around with it. I have experience writing Perl scripts in Windows that can talk to serial ports (wrote a module to talk to the Epson cash register receipt printers) so I should be able to whip something up that can control this on the client side pretty easily.

 

I also have the tools and experience to create custom cables with proper header plugs so if I can see what plugs the hubs use more closely I might be able to make interface cables for the Arduino to hub that doesn't require hacking anything up. I'll just have to find the part on DigiKey/Arrow/Mouser.

 

I'll be sure to share when I make progress.

Edited by knightcrusader
Link to comment
Share on other sites

I had to register an account here to compliment you guys on your hard work... I love this project. I have been meaning to learn how to work with an Arduino and this gives me the perfect outlet to do so.

 

I love it when people are inspired to do something creative! ^.^ Welcome to the forums!

 

While I prototyped this on a Mega, it looks like the "Most Convenient" board would be a DFRobot Beetle, which has an excellent small size and makes soldering optional, and is very reasonable in price yet still capable of substantial serial capability including a hardware buffer and native USB capability.

 

In the end, I'll probably be apologizing to your wife for getting you started though. Once you make, you'll never go back.

 

Let us know what you do and if you have any questions!

Link to comment
Share on other sites

So I got my wife's new Crystal 570X case. Wow, this is a nice case. Bummed it only has SP120 fans right now, but hey, it's a place to start hacking. :sunglasse

 

I didn't expect the fans to already be installed, but its all nicely put in there from the factory and wires routed (as pictured in the attachments). One thing I didn't expect was this case has the same three lighting control buttons on it as the remote does. Now, I knew there was the ability do it when I seen the controller kit, but I didn't know this case had it.

 

Now... I assume there is a way to add ability for the Arduino and the program on it to respond to these key presses. I look forward to looking into adding this functionality (unless its already there and I missed it).

 

Oh, I also did some searching and found this. Look familiar? I think I am going to order a few... dozen. I have the tools and wiring to make actual cables. :biggrin:

IMG_20170728_215926571.thumb.jpg.3d6f2ae8c23502c6b5d2acc3990747ed.jpg

IMG_20170728_215945887.thumb.jpg.a769882f28e75d039dd7482e5597d1a0.jpg

Edited by knightcrusader
Add Link
Link to comment
Share on other sites

Hello everyone, tell me https://github.com/Charixfox/HD120-Controller

As in this code to activate at least some kind of program, which commands to enter into the terminal in addition to static red effects.

How to enable mode 1,2,3 ......?

 

Hi!

 

The README file is the best place to start for information. It's displayed on the page you linked and explains the controls.

 

In general:

Open the Arduino serial port at 115k baud

Send the commands you want to send

 

For example, sending:

>1.0=1>1.2=0>1.3=1>1.4=20>1.5=0>1.6=120>1.7=60

 

will set fan 1 to Single Spinner mode using rainbow colors, with the spinner revolving clockwise once a second and the rainbow cycling through every three spins and fade out quickly behind the spot.

 

The way to get the serial connection and send serial data varies by computer, and can be done through the Arduino IDE if needed.

 

I'm giving strong consideration to writing a control program for Windows. I get sick of typing text commands too. ^.^;

Link to comment
Share on other sites

Thanks for the examples. Here is the result: https://cloud.mail.ru/public/J7if/zTpsTBGQ6

Is it a good idea to release a program for Windows when it is ready?

 

Well, what commands to use to get such effects ???

[ame]

[/ame]

1.Time Code 0:03 - 0:13

2.Time Code 0:14 - 0:26

3.Time Code 0:27 - 1:06

4.Time Code 1:28 - 1:43

[ame]

[/ame]

1.Time Code 0:09 - 0:16

2.Time Code 0:19 - 0:27

3.Time Code 1:15 - 1:30

Link to comment
Share on other sites

Thanks for the examples. Here is the result: https://cloud.mail.ru/public/J7if/zTpsTBGQ6

Is it a good idea to release a program for Windows when it is ready?

 

Well, what commands to use to get such effects ???

1.Time Code 0:03 - 0:13

2.Time Code 0:14 - 0:26

3.Time Code 0:27 - 1:06

4.Time Code 1:28 - 1:43

1.Time Code 0:09 - 0:16

2.Time Code 0:19 - 0:27

3.Time Code 1:15 - 1:30

 

 

Technically it's a program for an Arduino, not for Windows, and it's Open Source and Under Development. ^.^

 

The first video is not mine, and they are quite literally just using the FastLED 100-line demo code to create those effects.

 

The music-aligned video uses a bash shell script to send a pre-defined set of configuration values based on "sync mode" ticks. Some of the effects are communication-static, that is, they are sent, set, and will continue without further communication. The sweep all the way up the face of the computer is time-synced. That means that the script starts a spinner or a double-scan, then when it reaches the next sync tick, it turns that fan's effect off and starts the next fan.

 

The first segment is split sides with a per side pulse offset of 128.

 

19-27 was using variations on 4-point spinners.

 

The third segment is the active-comm example that requires sending new commands on a sync tick to catch each part in the right spot.

 

I get a feeling it's gonna be up to me to write a windows program for this too.

Link to comment
Share on other sites

Okay, new question since I am a noob to this. I have the Arduino, I have the wiring parts and hub and fans and everything else to get going. Now on to the wiring.

 

I plan on keeping the arduino plugged in to the motherboard via USB so I can write a program that can send it serial commands from Windows. I'm a programmer by trade and I have no problem getting that figured out, I've programmed serial devices from command line before. However, electronic engineering is not my strong point. Since the Arduino will always be plugged into the USB and getting power that way, do I have to wire up the 5V from the hub back to the input of the Arduino? Also do I need the ground connection as well? I can't figure out if I can get away with just one wire for data or if I need a wire for data and the data wire needs a ground back to the board. This stuff gives me a headache.

 

I also suspect I have a bad board because this thing has given me problems ever since I first bought it new, even after switching out USB cables and computers. Last night it just stopped wanting to flash period. I am going to swing by Microcenter tonight to get a few extras to confirm if the board crapped out or not.

Link to comment
Share on other sites

The first option, everything works, the ground is shared by the power supply unit

https://yadi.sk/d/zzZZVP3U3M9xX4

 

The second option, take the voltage from the hub, be sure to check the polarity, the screenshot may be incorrect, gnd should be -, and 5v +, check with a multimeter, if confuse arduino can burn.

Also, you can connect 5V USB and 5V from the hub at the same time, in this case the power will be from the 5v hub.

https://yadi.sk/d/NbT4Tdn43M9yeU

 

It looks like this:

 

_QMPVvsS_fU.jpg

Edited by asgard
Link to comment
Share on other sites

Awesome... I was hoping that was the case.

 

So I have a single fan on the hub to test, no fan power though - just the lights. When your freshly upload the program for the first time and plug the hub into the data line... what is it supposed to do? Light up a solid color? Flicker?

 

I'm still not convinced my unit isn't defective so I am making sure to eliminate any errant behavior before I go forward.

 

Thanks!

Link to comment
Share on other sites

When connecting in this way:

The first option, everything works, the ground is shared by the power supply unit

https://yadi.sk/d/zzZZVP3U3M9xX4

 

The second option, take the voltage from the hub, be sure to check the polarity, the screenshot may be incorrect, gnd should be -, and 5v +, check with a multimeter, if confuse arduino can burn.

Also, you can connect 5V USB and 5V from the hub at the same time, in this case the power will be from the 5v hub.

https://yadi.sk/d/NbT4Tdn43M9yeU

 

1.If you use this code:https://yadi.sk/d/IJz5ky1D3MAM5L

The glow will be red and static so that the effects needed in the port monitor use the commands:

 

The command to switch effects:

 

For the first fan:

>1,0,2>1,2,21>1,7,60

For the second fan:

>2,0,2>2,2,21>2,7,60

For the third fan:

>3,0,2>3,2,21>3,7,60

By entering these commands sequentially, you can turn on the desired effect.

 

To fix the effect, use the command:

!

 

Brightness setting command:

>0,0,255

Where 255 is the maximum brightness.

 

To enter commands, I recommend using this program:

https://yadi.sk/d/wUPX31Dn3MAMz3

It works more correctly

 

2.If you use an alternative code: https://yadi.sk/d/EQBc_jXn3MANKL

When loading in arduino, immediately, the effect will appear, 1 of 25, to select the desired effect, in the monitor port, or in the terminal you need to enter the command: the effect number from 1 to 25.

 

3.There is also a version of the second code that I modified. Then every 100 seconds the effect automatically changes. From 5 to 13, from 15 to 25, an exception with 1-4 and 14:https://yadi.sk/d/mLig9YfL3MANvx

Edited by asgard
Link to comment
Share on other sites

Charixfox big thanks for all the work you have done.

 

These fans are beautiful, and I fell in love with them on a build for another person. So I had to get some for myself.

 

It took a bit to figure out the commands to send via serial monitor, but I ended up creating a bit of a cheat sheet to understand them better.

 

I would like to accept some input from another arduino (as FastLED disables interrupts), and send input to the arduino using HD120-Controller.ino

 

I have tested the second arduino to make sure it is sending something like "@0,2@1,0@2,21@7,60" ( for all rainbow with spin) to serial monitor and it is shown correctly. I wasn't sure if it was possible or if I am using the wrong command to write to serial write() vs print() vs println().

 

I do have tx to rx, rx to tx, and ground to ground on the arduinos.

 

PS. Thanks to all other that are contributing to the project!

Link to comment
Share on other sites

I get very frustrated when this forum doesn't alert me to new messages. It causes it to look like I'm ignoring things. T^T

 

Okay, addressing some of the things:

 

Wiring:

 

Newest directions for wiring are to -NOT- use the +5 from the hub to the Arduino if you have USB connected. The Ground -might- be optional depending on your hardware. The Data line is mandatory. The main thing is that the Arduino needs to have an electrical link to the LED control chip via +5 and via Ground, but it may be possible for the ground to pass through the USB to the motherboard and thence to the shared ground of the PSU.

 

The original reason to have the +5 to the Arduino was to allow the Arduino to work without USB.

 

Sketch Code:

I can really only vouch for my own, and it's on GitHub and accepts requests and submissions as well.

 

Serial Comms:

If you use an Arduino that is based off the proper chipset, the interrupt disabling is not an issue as the chipset has an internal serial interface that buffers more than one byte, and at default serial and update speeds in my sketch, it doesn't drop data.

 

If you are trying to get another Arduino to talk to the first, then the main thing is to be certain you open the serial port at the correct speed and data conditions. The data conditions are default, the speed should be 115k. But primarily avoid the second arduino unless you have a good reason. A DFRobot Beetle or a Pro Micro will do things right for that.

 

Arduino Not Flashing:

Most common cause is that Windows decided to change the serial port it's on and you didn't catch this (because Why Would Windows Do That?) and so the IDE is trying to talk to the wrong port. ;)

 

Flickering red or all-red or flickering meh:

Caused by:

1: The fan/hub not getting power from the PSU and so the LEDs are powered entirely by the USB and Arduino, which causes the fuse to break until it cools down and this is bad.

2: The sketch is crashing on the Arduino and so it's only sending the initial configuration to the LEDs and not updating the color changes before resetting the chip on the Arduino.

 

Rambling... late night... I'll see about getting something more informative in the morning.

Link to comment
Share on other sites

Still late at night, but I just threw together a quick test.

 

DFRobot Beetle Board ($12?) -> USB

Data and Ground are -mandatory-. Tried it without ground and it said "Nope"

 

Data on pin 9.

 

Twisted some cut female jumper wires to the board (It's made to handle twist connections)

 

Plugged it into USB, set the Data to 9, uploaded to the board.

 

End result: All red fan lights. Because I am a ditz and that is the initialized settings. Can't recall if that was intentional or not. <.<

 

So if you get All Red, it worked. If you can send:

>1.2.255

And get the first fan to start cycling through a rainbow, it completely worked.

 

Total time required: four minutes, and most of that was stripping and twisting wires and uploading the firmware.

 

attachment.php?attachmentid=30939&stc=1&d=1504164499

 

Summary:

Beetle

Data and GND

Red -> Yay.

405114216_IMG_20170831_002018-Copy.thumb.jpg.9e375ff5a4ecd0818bc84ad97e2ed3a8.jpg

Link to comment
Share on other sites

Signed up just for this, I thought I would be the first with this project but months of procrastination and lookie here :roll:

 

Though my plan is only a little different (microcontroller to control ws2182 strips and chinese fans through a windows program) but I am intrigued with your plan to control your HD120s though a windows software.

 

More specifically the music syncing part. What is your plan for that? My main feature was going to be this, i would have a graphic editor(similar to some dmx software) with lanes for each led strip.

 

In your code I would assume breakfast() receives serial inputs when there is any and the acts accordingly. I'm sure there are libraries in visual studio to send values to the arduino through the com port.

 

Are the commands you sent to the arduino numerals?

 

This is getting me pumped up typing this, really excited to see how you're bringing this forth :D:

Edited by Thejessvirgio
Link to comment
Share on other sites

Signed up just for this, I thought I would be the first with this project but months of procrastination and lookie here :roll:

 

Though my plan is only a little different (microcontroller to control ws2182 strips and chinese fans through a windows program) but I am intrigued with your plan to control your HD120s though a windows software.

 

More specifically the music syncing part. What is your plan for that? My main feature was going to be this, i would have a graphic editor(similar to some dmx software) with lanes for each led strip.

 

In your code I would assume breakfast() receives serial inputs when there is any and the acts accordingly. I'm sure there are libraries in visual studio to send values to the arduino through the com port.

 

Are the commands you sent to the arduino numerals?

 

This is getting me pumped up typing this, really excited to see how you're bringing this forth :D:

 

And here I haven't made the instructional video yet either.

 

The fans do us a microcontroller of course. Just the microcontroller takes data from Serial over USB.

 

Currently for music sync, the Arduino sends beat polls to the computer that the computer can wait for before sending the next setting commands. This means it still has to work within the framework of modes that are built out, rather than per-LED addressing from the computer.

 

You're right. The breakfast() function receives tasty serial data (pun intended). C# and VB will work with System.IO.Ports for serial communications, though there have historically been complaints about that library.

 

The sketch itself expands on some of the commands internally in comments and the readme file in the GitHub explains all the things. Current comms is plain-text, so that humans can type the data in.

 

I'm thinking that I will need to make a self-reporting mechanism for more than just the current config, but rather include the version and such relevant information as well. Then a per-LED data stream handler.. Binary handler for computer stuff. All the fun things.

 

The existing control in the video was done with a bash shell script in cygwin. XD

Link to comment
Share on other sites

  • 3 weeks later...

×
×
  • Create New...