Jump to content

[STALLED] Iris 16 - Building an RGB power button

iFreilicht
5 minutes ago, iFreilicht said:

Hey @Hasle, hi @mrchow19910319, hope you enjoyed the read so far ;)

hey, the things you do seemed really complicated lol. 

If it is not broken, let's fix till it is. 

Link to comment
Share on other sites

Link to post
Share on other sites

Hey if you need to go back to the drawing board you can get some pretty small touch screens from adafruit. Put a picture or video on your power button

 

im wondering why you purchased those leds instead of just ripping some off an  rgb led strip that is already compatible with rgb controllers? I have a broken phanteks led strip. The led are not soldered in place which is how fragile it is. They just sit on a ribbon of copper

             ☼

ψ ︿_____︿_ψ_   

Link to comment
Share on other sites

Link to post
Share on other sites

On 6/26/2017 at 4:46 PM, mrchow19910319 said:

hey, the things you do seemed really complicated lol. 

Haha yeah they are, but I think it will be worth it in the end :)

 

23 hours ago, SCHISCHKA said:

Hey if you need to go back to the drawing board you can get some pretty small touch screens from adafruit. Put a picture or video on your power button

The smallest they have seems to be 1.3" diagonal, so 34mm roundabout, which works for a button with at least 40mm diameter, which is extremely large. I don't want to rule out that I could possibly do something like this in the future, could be very cool if it's implemented like a dial like the ASRock M8 had one. But for now, that is way out of scope.

 

6lXKp8L.jpg.2a8e3988924423f012e1cdbc6301118c.jpg

 

23 hours ago, SCHISCHKA said:

im wondering why you purchased those leds instead of just ripping some off an  rgb led strip that is already compatible with rgb controllers? I have a broken phanteks led strip. The led are not soldered in place which is how fragile it is. They just sit on a ribbon of copper

TL:DR; They are way too big for what I'm trying to achieve.

 

There are two major metric goals for this button. The first is the 16mm hole diameter this button should install to. I chose this size because it is fairly common with indie cases, specifically the NFC S4 Mini, the Kimera Industries Cerberus, the Dr. Zaber Sentry and the Lazer3D LZ7. Additionally, 16mm is the smallest possible size that doesn't interfere with the second metric, which is the number of LEDs inside the ring. I chose 12 for this number because it divides evenly into 2,3,4 and 6, and thus allows more freedom when setting up pattern animations. Additionally, this is the smallest number that allows implementing a clock-face on the ring, which I thought was kinda neat.

 

Now, we have to consider there are two types of LED strips, those with intelligent LEDs and those with dumb ones. The first usually utilise WS2812B or SK6812 LEDs which come in a 5050 package. If you put 12 of those in a ring, you get one of [URL=https://www.adafruit.com/product/1643]Adafruits NeoPixel rings[/URL]. Neat piece of kit, but it has an outer diameter of 37mm already, so we're at a ~40mm button again. The second kind of LED strips most often use common anode LEDs, these are the ones compatible with todays mainboards LED strip headers. But, the LEDs in such strips are about 4 times the size that I need to get my 12 RGB LEDs into a circle of about 10mm, and even if they were small enough, I could not use them, because the staggered charlieplexing technique I am using requires that every LED in one RGB LED package has its own anode and cathode pin. This technique is necessary to achieve the maximum possible brightness while staying inside the thermal boundaries of the LEDs.

 

The ribbon of copper you're talking about is an FPC, flat printed circuit. I can't imagine the LEDs were connected to them without soldering. It might not be immediately visible as they are probably reflow-soldered and a lot of LEDs have their pads on the underside, though. If they did use a different connection technique, I'd love to see some pictures of that!

 

Damn that got a little bit long, but this explanation should be more than adequate :D

Link to comment
Share on other sites

Link to post
Share on other sites

Just wanted to post from a Dr. Zaber fan that I'd throw money at you for this. Especially for HDD functionality. I will have to do much research on how to connect to motherboard and stuff but wanted to contribute some excitement! I'm just going to put off buying a new button until I can get something like this. Keep up the good work!

Link to comment
Share on other sites

Link to post
Share on other sites

6 hours ago, Snivets said:

Just wanted to post from a Dr. Zaber fan that I'd throw money at you for this. Especially for HDD functionality. I will have to do much research on how to connect to motherboard and stuff but wanted to contribute some excitement! I'm just going to put off buying a new button until I can get something like this. Keep up the good work!

Great to hear!

 

No need to research anything, the button will come with the necessary cable, all you need to do is plug it into an internal USB2.0 header, into the PWR_SW and the HD_LED headers. For the latter two, it will even detect which way around you plugged it in, so you don't have as much to worry about.

 

To make installation and shortening easier, the cable can also be unplugged from the button itself, so you can manoeuvre it in there without pulling the cable through the hole first.

Link to comment
Share on other sites

Link to post
Share on other sites

Hey iFreilicht, I'm currently in the process of designing/ building a custom in desk PC and was looking for a RGB power button when I stumbled on this thread. Just wanted to say you're doing great work here, going to buy a shittier white button until you are ready to sell yours. Saving this thread until then, and as an Electrical Engineer I can definitely say well done!

Link to comment
Share on other sites

Link to post
Share on other sites

Do you think you could make like a simplified version with just a regular rgb led inside and a 4 pin connector on the back to hook into say a nzxt hue

Link to comment
Share on other sites

Link to post
Share on other sites

17 hours ago, EyeHaveProblems said:

Hey iFreilicht, I'm currently in the process of designing/ building a custom in desk PC and was looking for a RGB power button when I stumbled on this thread. Just wanted to say you're doing great work here, going to buy a shittier white button until you are ready to sell yours. Saving this thread until then, and as an Electrical Engineer I can definitely say well done!

Thanks man, that means a lot to me!

 

15 hours ago, Filip96 said:

Do you think you could make like a simplified version with just a regular rgb led inside and a 4 pin connector on the back to hook into say a nzxt hue

Yup, absolutely. I'll definitely consider it, but it's not quite as easy as one would initially think, partly because the Hue uses 5V supply voltage while other RGB controllers use 12V. I'll take a look, though :)

Link to comment
Share on other sites

Link to post
Share on other sites

13 minutes ago, iFreilicht said:

Hue uses 5V supply voltage while other RGB controllers use 12V.

Yup. The hue+ also uses adressable LEDs, but I don't know what chip tho. It would be really cool if the button would work with it. You might even try to work on it directly with NZXT.

Link to comment
Share on other sites

Link to post
Share on other sites

23 hours ago, Filip96 said:

Do you think you could make like a simplified version with just a regular rgb led inside and a 4 pin connector on the back to hook into say a nzxt hue

So it seems like what I initially said about the Adafruit RGB button not working with RGB Strip mainboard headers was incorrect. They both use common anode, so there's no reason for me to try and replicate what they are already selling for a good price. You'd have to add a resistor so it works with 12V, but that's a simple mod to do.

 

7 hours ago, KrZaj said:

Yup. The hue+ also uses adressable LEDs, but I don't know what chip tho. It would be really cool if the button would work with it. You might even try to work on it directly with NZXT.

That makes it more interesting. I'd love to work on compatibility with NZXT, but for now that's not a priority. It's a cool thought, though. Animations would then be colour-less and the colour would just be whatever the Hue+ sets it to be. As the firmware will be open source, NZXT could also easily implement that part themselves if they wanted to.

Link to comment
Share on other sites

Link to post
Share on other sites

On 6/29/2017 at 4:53 PM, iFreilicht said:

So it seems like what I initially said about the Adafruit RGB button not working with RGB Strip mainboard headers was incorrect. They both use common anode, so there's no reason for me to try and replicate what they are already selling for a good price. You'd have to add a resistor so it works with 12V, but that's a simple mod to do.

Thanks for the pointer I just wish it were in anodized black. I was wondering if you know how to disassemble one of these buttons because I currently have a button and lots of rgb buttons im just not technically minded enough to figure out how to take these buttons apart?

Link to comment
Share on other sites

Link to post
Share on other sites

On 7/1/2017 at 4:07 AM, Filip96 said:

Thanks for the pointer I just wish it were in anodized black. I was wondering if you know how to disassemble one of these buttons because I currently have a button and lots of rgb buttons im just not technically minded enough to figure out how to take these buttons apart?

 

Never tried to do it, but I'm pretty sure every manufacturer makes theirs differently. And I would also assume that they are glued shut or assembled using barbed hooks as most of them are IP rated. So I wouldn't get my hopes up to open one of these without destroying it, sorry.

 

Also, you can absolutely write Adafruit a mail and ask whether there's any chance of getting one in black. They can't know you want it if you don't tell them :)

Link to comment
Share on other sites

Link to post
Share on other sites

  • 2 weeks later...

Technical Update:

 

giphy.gif

 

I finished a prototype implementation of BAM/BCM (Binary Code Modulation) and Charlieplexing on the Arduino Micro, and results are very promising!

 

To reiterate, with Charlieplexing I am able to control all 36 LEDs individually using just 7 I/O pins. Because Charlieplexing requires tri-state logic to work properly, I can not use the built-in PWM facilities of the microcontroller, so I'm using BCM to minimize the processor overhead caused by a implementing the modulation in software.

 

There are two main concerns when doing this, flickering and brightness. Because of the high number of LEDs, for 24-bit colour it is required to switch the state of the output pins 56 times for just a single frame of animation. Even worse, because some of them need to take much longer than others, more than 114000 steps are required for one animation frame. Additionally, each LED can maximally be on for 1/7th of the time. If the microcontroller isn't able to switch between states fast enough, the LEDs would seem to flicker and potentially be much darker than desired.

 

But after finishing my implementation on 6 LEDs using 3 pins, it is fairly safe to say that at least flickering won't be an issue. The Arduino Micro has a 16MHz crystal, and I am able to render at a little over 320 FPS. Switching over to 7 pins would only decrease that to about 138 FPS, which is still pretty great. Additionally, Iris 16 will run at 48MHz, so thrice as fast. There's also no noticeable flickering of any sort, so that's pretty great.

 

The only unknown now is the brightness. We'll see how that works out, but I'm pretty positive that it will be bright enough.

 

There's actually some pretty neat stuff like manual loop unrolling and adaptive delay correction built in to my implementation that allows for these fast speeds and also makes the whole thing more accurate. Reading this back those two sound like awesome marketing buzzwords. :D

 

I'll make the source code available in due time, but please understand that it'll stay confidential for now.

 

Hope to give you some hardware updates soon, thanks for reading!

Link to comment
Share on other sites

Link to post
Share on other sites

Small Update

 

Support for Cues is now implemented. Here's a short demo:

 

 

It's a little hard to properly film this, I'll have to experiment a bit. In this case I tried to have the LEDs out of focus to make the colours mix better. Defusing the light with paper leads to a very strong glow around each LED and for some reason causes very noticeable flicker. Neither is visible with the naked eye, but on video it just looks awful.

 

Filming directly alleviates this, but you can see that the bright cyan and yellow in the third animation are very washed out. A proper camera probably wouldn't hurt, either.

 

Mildy interesting side note: This implementation doesn't use floating point arithmetic for efficiency reasons. This is important as we have to calculate a full frame as often as possible each second. The Ramp Parameter that you can set in the Iris Visualizer is not stored on the Iris 16 as a value between 0 and 1, but between 0 and the Cues duration. For every arithmetic operation I need to make sure that the intermediate result is a positive integer. So division is always the last step in any calculation as it comes with a probable loss in accuracy which would be amplified if I then executed further operations after it.

 

Next steps in the firmware are support for Schedules and thus Periods - which means I'll need to do some work involving dynamically-sized arrays - and implementing a Mass Storage driver.

 

When my 3D-printer arrives I also want to experiment with transparent filament for light guides/diffusers. The LEDs currently are almost not diffused at all, which makes the colour mixing unsatisfactory, and I think there's some experimentation required to get a good result on this.

Link to comment
Share on other sites

Link to post
Share on other sites

This post was blah blah blah blah blah...but I am SUPER excited regardless. It all sounds like amazing technical jargon and boy i cant wait to buy one.

Link to comment
Share on other sites

Link to post
Share on other sites

1 hour ago, lieder1987 said:

This post was blah blah blah blah blah...but I am SUPER excited regardless. It all sounds like amazing technical jargon and boy i cant wait to buy one.

 

Haha sorry, I'm cross-posting these updates on different forums and the audience is a little different on all of them. Some appreciate me going into a little more detail :)

Link to comment
Share on other sites

Link to post
Share on other sites

22 minutes ago, iFreilicht said:

Haha sorry, I'm cross-posting these updates on different forums and the audience is a little different on all of them. Some appreciate me going into a little more detail :)

No issue at all with you going into detail. I am learning through them so that's something.

Link to comment
Share on other sites

Link to post
Share on other sites

  • 3 months later...

@iFreilicht - Do you have any progress on this now, would love an update to see how it's coming on now.

Please quote my post, or put @paddy-stone if you want me to respond to you.

Spoiler
  • PCs:- 
  • Main PC build  https://uk.pcpartpicker.com/list/2K6Q7X
  • ASUS x53e  - i7 2670QM / Sony BD writer x8 / Win 10, Elemetary OS, Ubuntu/ Samsung 830 SSD
  • Lenovo G50 - 8Gb RAM - Samsung 860 Evo 250GB SSD - DVD writer
  •  
  • Displays:-
  • Philips 55 OLED 754 model
  • Panasonic 55" 4k TV
  • LG 29" Ultrawide
  • Philips 24" 1080p monitor as backup
  •  
  • Storage/NAS/Servers:-
  • ESXI/test build  https://uk.pcpartpicker.com/list/4wyR9G
  • Main Server https://uk.pcpartpicker.com/list/3Qftyk
  • Backup server - HP Proliant Gen 8 4 bay NAS running FreeNAS ZFS striped 3x3TiB WD reds
  • HP ProLiant G6 Server SE316M1 Twin Hex Core Intel Xeon E5645 2.40GHz 48GB RAM
  •  
  • Gaming/Tablets etc:-
  • Xbox One S 500GB + 2TB HDD
  • PS4
  • Nvidia Shield TV
  • Xiaomi/Pocafone F2 pro 8GB/256GB
  • Xiaomi Redmi Note 4

 

  • Unused Hardware currently :-
  • 4670K MSI mobo 16GB ram
  • i7 6700K  b250 mobo
  • Zotac GTX 1060 6GB Amp! edition
  • Zotac GTX 1050 mini

 

 

Link to comment
Share on other sites

Link to post
Share on other sites

13 hours ago, paddy-stone said:

@iFreilicht - Do you have any progress on this now, would love an update to see how it's coming on now.

Me too, me too.

Main Rig "Melanie" (click!) -- AMD Ryzen7 1800X • Gigabyte Aorus X370-Gaming 5 • 3x G.SKILL TridentZ 3200 8GB • Gigabyte GTX 970 G1 Gaming • Corsair RM750x • Phanteks Enthoo Pro --

HTPC "Keira" -- AMD Sempron 2650 • MSI AM1I • 2x Kingston HyperX Fury DDR3 1866 8GB • ASUS ENGTX 560Ti • Corsair SF450 • Phanteks Enthoo EVOLV Shift --

Laptop "Abbey" -- AMD E-350 • HP 646982-001 • 1x Samsung DDR3 1333 4GB • AMD Radeon HD 6310 • HP MU06 Notebook Battery • HP 635 case --

Link to comment
Share on other sites

Link to post
Share on other sites

  • 3 weeks later...

Sorry guys, nothing to show. I have very little time to work on this right now, so progress has been frustratingly slow :( I don't even have time to visit the forums anymore, my last visit here was months ago. I'll try and free up time when my current project at work is finished.

Link to comment
Share on other sites

Link to post
Share on other sites

  • 4 weeks later...

So just a short note where I'm standing right now: I've started to get back into the software side of things, and it's looking better every day. There's now a python (command line) application that allows to download configurations from the Iris 16 and I'm now working on making uploading work as well.

 

The main goal is to have most of the work done by the visualizer and the Iris itself, so that it's easy to write client applications that interface with them. This means that the firmware is starting to get close the micro's limits, I'm already at 80% Flash usage for the program code and 50% minimum SRAM usage during runtime.

 

On the other hand, the Python app is literally 160 lines of code right now including comments, so that's pretty cool.

 

Because downloading and installing something is not necessarily a good solution, I also looked into browser extensions. And lo and behold, Chrome actually offers API for direct communication with the serial port! So that sounds like a very good option as well. You would just install the plugin in your browser and can then directly upload and download from the web-app (which could be made downloadable as well for offline use).

 

To make sure that all software dealing with the Iris is compatible, I've also rewritten the basic data structure in Protobuf, so that there is one standard definition of how the whole business with Cues, Schedules and Periods is to be stored and transmitted. It's already been a huge help to have this.

 

Today I'm also doing my tax report, which goes a huge way demonstrating how much money I put into this during the last year without getting a single buck out yet. Fun for the whole family!

Link to comment
Share on other sites

Link to post
Share on other sites

Awesome project! Good luck!

Zen Rig

- Ryzen 1700 @3.9ghz 1.325v

- Asrock AB350 Fatal1ty gaming K4

- 16GB Gskill Ripjaw DDR4 @2133mhz

- Asus GTX 970 Strix 4GB

- Evga Supernova 750w

- Adata 128gb SSD & Toshiba 1TB HDD

 

Link to comment
Share on other sites

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now


×