Getting to cheap – Tearing-down a $3 Fidget Spinner with LED POV display
Fidget spinners are everywhere, but surprisingly few have POV LED displays. I found one that costs only $3.29 including shipping from China – let’s see how it works!
What you get for $3.29
An otherwise crappy fidget spinner inside a crappy box… but one of the weights has been replaced with an LED module!
When you squeeze the module, the LEDs start a blinking.
When you spin it as fidgetters do…
…the magic photon fairies paint lovely images across your retinas.
Do not get too excited. Even though the photos look pretty cool, in real life there is no syncing going on here so the image only “locks in” for a single brief second during the spin. The rest of the time it is rotating and smearing because we are spinning too fast or too slow.
Enter the module
The plastic is plastic. Not a bad press fit for the two halves, and for the module into the spinner body.
I was surprised to see a CR1632 rather than the slightly larger, but longer lasting and more popular CR2032. Maybe it balanced better?
On to the PCB is where the action is!
Where the blinks come from
A tidy layout. Extra points for balanced composition.
The LEDs are 0603 according to Adafruit, but they look smaller – maybe because of the clear package?…
Mystery chip unmasked
Even though they sanded off the markings, based on the pin connections and the provenance this is almost certainly an EM78P153 8-Bit Microcontroller with OTP ROM.
These are super-duper cheap in Asia (<$0.10) and can do all the normal stuff you’d expect from our beloved ARVs and PICs – albeit with some quirks and sparser data sheets.
It is probably not worth the effort of sanding the marks off, people.
Making connections
A couple of minutes of poking with the multimeter reveals the very simple schematic…
Signals
Here are the voltages across 3 of the LEDs while a pattern is being displayed…
Can’t get any simpler – each LED blink lasts for 600us, making for update rate of 1,666 columns per second.
The 10K pull-up on ~RESET may seem to be superfluous here, but this processor only enables the internal pull-up on that pin when it is used for RESET, not when it is used to wake from sleep like done here.
What’s missing?
The MMF (massively missing feature) in this POV spinner (and all the others I’ve seen) is a way to sync the display to the rotation angle or speed. Without this, all joy is ruined for me.
But how could you implement such a sync?
- Use a MEMS gyro to detect angular velocity.
- PRO: Straightforward and simple to use.
- CON: Expensive ($1-$10)
- CON: Might not be fast enough for really fast spins (>2000 deg/s)
- CON: Do not get absolute position info, so image will tend to drift.
- CON: Power hungry (mA’s)
- Use an accelerometer to detect down.
- PRO: Straightforward and simple to use
- PRO: Absolute position info when spinning in a vertical orientation.
- CON: Expensive (as low as $2)
- CON: No position info when spinning horizontally (but can compute velocity).
- Use a hall effect sensor to detect a non-rotating magnetic field
- PRO: Absolute position info in any orientation
- PRO: Cheaper than above, but still costs money for sensor and magnet.
- CONS: Requires a non-rotating magnet.
- Maybe put one inside the hole of the center bearing?
- Maybe permanently magnetize the inner race of the center bearing and use non-magnetic balls?
- Use an inductor to sense the change in direction of the field from a non-rotating magnet.
- PRO: Absolute position info
- PRO: Could be cheap (<$0.10
- CON: Requires non-rotating magnet like above. Possibly even stronger.
- CON: Potentially requires analog signal processing (depending on MPU capabilities).
- Use the existing LEDs in sensing mode to detect the light/dark fluctuations caused by rotation.
- PRO: Absolute position info
- PRO: Potentially free (use existing parts)
- CON: Complicated signal processing in software.
- CON: Must have some LEDs off long enough to detect ambient light levels.
- CON: Fails in complete darkness or uniform lighting conditions. Maybe try to detect a lite LED bouncing off the inside of the thumb?
Would you buy a really, really sweet POV spinner?
Should we build the POV spinner that we would want to buy?
It would have spectacular color LEDs that would look glued in space at any speed. Of course there would be fully programmable (and awesome!) patterns & text. Maybe even Arduino compatible.
What if it was $25?
I’d buy an awesome POV spinner!
If enough people say yes, maybe we’ll build it!
UPDATE 6/20/17
You have to move fast in the fruit-fly world of fidget spinner innovation!
This one clearly has position feedback and it makes a huge difference…
How did they do the position sensing? My first guess is there is a physical switch based on the clicking in the video, but I just ordered a couple different ones on Amazon and will report back when they arrive!
you need to hack the programmable spinner…
i have one, i want to send custom images.
Because the chip is only one-time programmable, it is probably easier to make a new spinner than to hack this one. I’ve since gotten this $10 spinner which is much more amenable to hacking and has a magnet to sync the rotation angle.
New POV spinner over at Elector…
https://www.elektormagazine.com/labs/pov-fidget-spinner
Uses ATMEGA328PB and a hall effect sensor. Overbuilt for cheap mass production (please get rid of those current limiting and ~RESET pull-up resistors!), but nice design to make yourself.
New POV spinner with optional hall effect sync…
http://www.instructables.com/id/Geek-Spinner/
I like that it uses all though hole parts, wish it would lose all the unnecessary resistors.
Nice spinner with hall effect rotation sensor here…
https://hackaday.io/project/165210-persistence-of-vision-fidget-spinner/details
Uses the PIC hardware Angle Rotation Timer, which I had never even heard of before and is perfect for this. I’ve been thinking about this problem a lot for another project so I can’t wait to see how well they implemented it. To do it right, you really need a bunch of calculus to measure at least the speed, acceleration, and jerk. Non-trivial!