I finally declared my recent project, a replica of Tony Starks Arc reactor, finished. This was one of the projects I had planned with which I justified buying a 3D printer so I felt an obligation to finish it.
All 24 LEDs in this rector are individually addressable via shift registers. My goal was to have some faint waft in the lights, but I curently only have them on at one brightness level. Since the shift registers are undersized for the amount of current that the LEDs use, I did have to time-slice the LEDs so that they are on half the time (and the big 5mm LEDs in the center only a quarter of the time).
Most of the parts are 3D printed in a modular fashion.
Printing the base plate felt awesome as I had been pondering the project for a while and finally saw it come to life.
Putting the LEDs into the holes turned out to be harder than expected because I hadn’t bothered looking up the diameter of the LEDs. When I measured them I was off by a 1/10th of a millimeter and didn’t think that those would likely be round numbers (3mm and 5mm in this case). :facepalm:
So I had to force them in, and one LED even snapped in half.
The copper windings actually hold the transparent ring in place. Unfortunately this made winding the coils much more finicky. In a next iteration I would just glue them into place.
All three shift registers are put in series. Initially I only started addressing 8 LEDs at once and then shift the next 8 LEDs in.
This looked already awesome but I wanted all of them to be individually addressable.
When I started pushing 24 LEDs in before making them take effect(latch), it started to flicker quite badly.
As it turned out the
digital_write function of Arduino is just too slow for such tight loops.
As soon as I replaced
digital_write with direct register access e.g.
PORTB ^= (-singlebit ^ PORTB) & (1LL << PB0); the flickering became completely imperceptable.