argb-analysis

Background

When I recently built a gaming PC, I got a Fractal Design Meshify 2 RGB case. This case includes a built in ARGB controller with an effect called Northern Lights. It’s a pretty subtle animation in blues, greens and purples that I found quite nice. You can see it in the pictures on the Fractal product page linked above.

However, the colors did not look quite as nice on the CPU fans (of a different brand) as on the case fans, which made me curious about the implementation.

The WS2812b Protocol

First off, I figured out that ARGB LEDs in modern PC cases typically use the WS2812b protocol. This pretty simple protocol is documented in a datasheet. There are also some quite nice web resources available, including a very useful article describing some simplified timings.

Controller Output Dump

As a next step, I used a cheap USB logic analyzer to dump the output from the data pin of the ARGB controller for a minute or so. The raw data is available in the repo in CSV format, although I had to trim it somewhat to avoid going over the Github file size limit. Some screen captures of the signal:

Signal appearance, high level

Signal appearance, mid level

Signal appearance, low level

Color Analysis

Finally, I wrote a quick Python script (also in the repo) to analyze the data. Here are some observations:

I’ve made a simple JS animation of the colors.

Extending To Other Fans

By interpolating the starting offsets at other angles, I think it should be possible to achieve visually similar effects for fans with more than 6 LEDs.

Here are some visualizations generated in this way, for 6, 8 and 15 LEDs:

Static visualization of color progression, 6 LEDs Static visualization of color progression, 8 LEDs Static visualization of color progression, 15 LEDs

Each line corresponds to one step in the animation and is divided horizontally into the number of configured LEDs.