Key components:

  •  MCU: STM32F103C6
  • Position sensors: AS5600
  • 60 beautiful orange 0402 LEDs (LCSC part no C130720)
  • 3x 74HC595, 1x 74HC4051
  • Futaba 8-MD-06INKM VFD display module (optional, but very cool looking)

Welcome to check out the schematic and the rest of related stuff in the github repo linked on the left. KiCad didn't take migration from v5 to v8 lightly and screwed up some refdeses. There's a PDF made in v5 that has original refdes.

Check out the video:


It's an old project, and I would probably do some things differently today. For example, there exist WS2812B 1x1 mm LEDs now. For example, XL-1010RGBC-WS2812B LCSC Part No. C5349953. I'm not sure that RGB leds are a good alternative to monochromatic lights in this case, but it could be.

I wouldn't recommend hand-soldering 60x 0402 LEDs unless you're trying to prove a point. I think it's a very good use case for a factory PCBA. A machine does a great job at placing these specs of dust.

Known problems

As is with any experimental build it's more about finding problems rather than just getting to a result. In this case the result is very usable, which is rare for my builds. But it's not without its problems.

1) build stability. I thought to go the easy path and use libopencm3 in PlatformIO. I've had good experiences with both in the past. All good, but eventually I've encountered some lurking bug that I can't  easily catch. It looks like an alignment issue. It probably can be debugged, but I can't be bothered, yet.

2) AS5600 sensitivity / interference / drift. The sensors tend to present fairly stable data. However sometimes they drift, sometimes pretty heavily. I suspect it might be caused by buttons that have ferrous frame and are located a bit too close to the sensors. The sensors report good magnet strength.