Iris 16 – Smart RGB Vandal Button

Follow this project on your favourite forum! (SFN/SFFn): HERE
Linus Tech Tips (LTT): HERE


The idea is to have a 16mm vandal button like this:
But with 12 RGB LEDs inside that can be controlled via USB. The button would be connected to a USB2.0 header on the mainboard. Secondary features are that it doesn’t need soldering and that the cables exit towards the side. It will also have an input for the HDD LED and you could use it as a reset switch as well.
Possible uses for these LEDs would be customisable ring colour, a ring loading animation whenever there’s HDD activity, multiple segments lighting up the more controllers are connected (like the Xbox 360 did), a simple clock, a breathing LED animation when the PC is sleeping, rainbow colour gradient animations, you name it.
What would extend the possible uses is if one could also read the button via USB, so if you installed multiple switches they could open a program, disable WiFi or whatever. Another idea is to allow the HDD-LED input to be used as an output for other LEDs, so if you installed the switch alongside an existing front-panel, you could control one of its LEDs as well.

Current status:

2017-03-16: Please vote for the project name!

I’ve narrowed it down to three final candidates. One Latin word followed by the number 16 to denominate the hole diameter. The meaning of the word is written in parenthesis. The initial list was almost 70 words long.

Vote here!

If you have any additional thoughts, please let me know!

2016-12-13: First pictures of the model!

Alright, here is what I’ve got so far (more in spoiler):











Now, you can see multiple things here, some are a bit more hidden. You can see the general shape, which is is very reminiscent of a normal vandal switch, apart from a few changes. I’ll walk you through those features and my reasoning behind them. If you missed any prior discussion in the thread, you can catch up here.

Why not something other than a vandal switch?
While some are getting tired of seeing vandal switches used so commonly or dislike that they can’t be flush with the front of a case, they have a very nice and minimal front and many still like that aesthetic. Additionally, that makes installation a breeze. Modding a case to take this switch is as simple as drilling a 16mm hole.

Why the two flat spots?
These have both an aesthetic and a functional reason. The functional reason is that they make it easier to hold the button in the same orientation while installing it. The aesthetic reason is that it ties the micro HDMI connector in much nicer than if the whole body was round. They also work much better with the set screws in my opinion.

What do the two slots do?
They each serve a different purpose. The one at the front grants access to a DIP switch that allows the user to free up one GPIO pin as explained in the previous post. This allows extending the functionality of the switch without opening the switch. The one at the back is an unfortunate necessity. When disassembling the switch, one has to insert a small slot screwdriver or other stiff flat object there before pulling out the internal assembly.

What are the set screws for?
Holding the whole thing together. To disassemble the button, only those two screws have to be removed. Then the whole internal assembly can be pulled out the bottom of the button. This allows access to the two resistors which are in series with two of the GPIO pins. These resistors can then be swapped out to accommodate different external LEDs or to use the EUSART bus on P4 and P5. (To use the I2C bus on P1 and P2 one only has to flick the DIP switch, no modding required) You can see that one screw is showing on the bottom. I’ll see whether I can fix that, but right now the screw is too close to the bottom for that to work.

Why use a micro HDMI connector?
This connector (also called HDMI Type-D) is the only one for external use that has enough pins and is small enough to fit the button. It is also small enough to potentially fit a smaller 12mm version of this button. It carries a USB2.0 signal and five GPIO signals, which requires at least nine pins. There are a few pins left over, which could be used in a future version with a better Microcontroller for even more GPIOs.
Using a connector like this over directly connected wiring has multiple advantages for modding. It makes it easier, cheaper and safer. If the stock cable isn’t the right length, right colour or you need different terminating connectors on the other end, you can just get a micro HDMI cable for 5 bucks and modify that to your hearts content. There’s no risk of damaging the button by soldering and you don’t even have to open it.

What are the 12 slots on the top for?
Those direct the light from the twelve independent RGB LEDs to the top. They are very visible in these pictures, but the actual cover ring will be frosted and I will do some testing beforehand to make sure that the slots don’t show when the button is turned off and the separate LEDs lights don’t bleed into each other inside the ring when turned on.

What is the purpose of those weird shapes at the bottom?
They serve alignment purposes. Some animations on the switch might be dependent on orientation, so the switch needs to know where “up” is. Usually it will consider the triangle to be “up”, but if that is not desired (for example if that orientation would block the connector), one can set in the software which of the lines is the top one. Unfortunately, there’s no space for an accelerometer inside the switch with the current manufacturing techniques I’m using, so this is has to be done manually.

Final thoughts
Of course, all of this is in flux and subject to change, but apart from a few small internal things that need to be changed I’m quite happy with the current status of the button. The next step would of course be a prototype, but I doubt that I’ll make it to that stage this year. I’m also dreaming of replacing part of the internal structure with a flex-rigid assembly, which would free up a lot of space that is used by board-to-board interconnects at the moment, but prototyping that can be extremely expensive compared to a regular multi-PCB assembly.

Thanks for reading, let me know what you think!

2016-12-11: GPIO pin layout!

So, I was thinking a little. There was one GPIO left on my MCU, and it bugged me that I didn’t utilise it. Today I found a way to do exactly that. Behold, the new GPIO layout:


It’s not final, but I confirmed that this fits onto the PCBs and into the casing. So, we gained one more pin and I found a DIP switch that allows to decouple P1 from the button.

So, what does this mean?

Well, when flipping the DIP switch (for which the casing needs to be opened), the button is connected to GND on one side, so it can still be used normally when connected to the PWR_SW_P pin of the mainboard. Now P1 and P2 are a completely independent pair of IO pins, which are connected to the internal I2C signal processor. (Incidentally, you can also use P3 and P4 for EUSART, but that would still require replacing the 330R resistor with a 0R jumper.)

But that’s not all.

This┬ávideo from this great build shows a fading effect for the HDD LED. With now 5 pins, you can either flip the DIP switch, use P1 and P2 for reading the HDD signal out and P3 and P4 for driving an external LED, or you could leave everything as it is, and just set P2 and P4 to read the HDD signal and P3 to drive an external LED on some external ground. While the circuit used for the effect in the video isn’t very complicated, it’s nice to have this integrated into the button.

And additionally you can also drive an external switch input now. For example, if you wanted a double press on the button to reset the PC, that’s now possible as well, without sacrificing any other functionality.

Pretty good increase in features for a single additional component if you ask me.