Blinketto

Table of Contents

Background

Some years ago, during lunchbreak at work we walked passed a GameStop store. Out of pure boredom we sometimes went in and over time, I bought a bunch of Nintendo PixelPals (yes, the nostalgia is strong in me). PixelPals are battery-powered toys that do nothing but light up.

So of course the very first idea was to make them not use batteries anymore, cause who wants to constantly change batteries in your living room decoration? Plus the PixelPals have their mostly fixed location, so there is no need to keep them mobile and battery-powered.

And so I embarked on the journey to build my own what i now know is called “LED controller”.

Goals

Whatever I built should

Note that at the time of building this, there was no USB adapter for PixelPals yet. And even today, in 2023, the adapter was only ever sold in the USA and is currently out of stock everywhere, apparently reaching horrendous prices on eBay. Since I wanted to learn about electronics, waiting for these adapters to be available in Europe was not an option for me.

Journey

When starting this project I had very, very little experience in working with Arduinos. Never had designed a PCB myself, let alone used micro controllers besides a standard Arduino Uno.

Blinketto 1.x

At first my idea was super simple:

All I need is some transistors, right? Wire them all up in parallel, use the GPIO pins of an Arduino on the gate to control the brightness and Bob’s your uncle.

But I (with zero electronics know-how) did not anticipate a whole lot of downsides (like not having Pulse Width Modulation (PWM) to dim the PixelPals) and also simply not knowing what kind of transistors I would need.

At this stage I was mostly working on breadboards to see if my idea would work out at all. No photos exist of this stage anymore, so here’s a symbolic photo from a bit later when I tried some other things:

Photo of a breadboard with 2 chips, 1 LED and a whole lot of random cables

I learned quickly that to do it right and not end up with a rat’s nest of wires, I had to design my own PCB…

Blinketto Next Generation

Pictures of the Blinketto PCBs v2, v3 and v4 to show their progression

Blinketto 2.0

Version 2.0 was the first “real” version. It’s also the first time ever that I designed a PCB in KiCAD and had it produced by a Chinese PCB manufacturer.

On the PCB we can see my train of thought:

This board worked fine as a first experiment, but had a number of downsides:

Blinketto 2.1

This revision

This revision is also the first board where I ever used the Groucho Marx picture as my “logo”.

This board taught me

Blinketto 2.2

(is lost to history)

Blinketto 2.3

This revision improves the problems from 2.1:

I purchased TSSOP variants of the LED driver and so was also able to change its footprint, making soldering so much easier for me.

Blinketto 3.0

In this revision I realized that powering the device with a 12V barrel jack just sucks. Instead I pivoted to using USB (i.e. 5V) and use a switching regulator instead of a linear one. This keeps the voltage drop small enough and reduces the waste heat considerably.

Note that I used MiniUSB on purpose: most of the cheap micro USB connectors fit way too tight for my liking and USB-C connectors are an unnecessary hassle for hand soldering PCBs.

Blinketto 4.0

Between 3.0 and 4.0, I worked on another project and for that I purchased a whole bunch of laser-cut acrylic plates. I used these as the “case” for my project and once that was finished, I had so many laying around that I wanted to convert Blinketto into the same form factor.

Additionally I got more comfortable with ESP8266 micro controllers and so the whole Blinketto board was redesigned from the ground up.

Schematics for Blinketto 4.0

This version

At this point I also switched from using the Arduino IDE to VSCode, which removed some convenience layers but made things easier to understand for me as a developer. Plus it was nice to work on the command line and not have this .ino file concept and magic file merging that the Arduino IDE does.

Do not misunderstand: I adore what Arduino is doing, but I simply outgrew their IDE.

Blinketto’s code was rewritten from scratch and now comes with a super basic web interface that allows you to configure the blinking patterns in real-time and switch between different modes. The webserver is single-threaded and very slow, but functional for that one time in a year when you want to demonstrate it to a visitor. Because other than that, I realized that I will not tweak the blinking pattern on a daily basis.

Screenshot of the Web UI, showing buttons to switch to different lighting patterns and sliders to configure various parameters like delays

The End?

And this version, 4.0r2, is what has been happily “in production” in my living room for years now.

Screenshot of the Web UI, showing buttons to switch to different lighting patterns and sliders to configure various parameters like delays

Lessons learned

The full code, schematics and PCB design files are available on GitHub.