Picture a dark street at 10 PM, a bike rolling past, and a smiley face hanging in the air inside its front wheel. No screen, no projector. Just six LED strips whirling around a hub and your eyes filling in the gaps.
What Erin St Blaine built
Erin St Blaine’s persistence-of-vision bike wheel puts six DotStar LED strips across three spokes, so both sides of the wheel show an image. An Adafruit Feather RP2040 runs CircuitPython and pushes 36 pixels of artwork per strip as the wheel turns. Drop a .bmp or .gif onto the board’s CIRCUITPY drive and it joins the rotation, no reflashing needed.
A magnetic sensor watches a magnet on the frame and reports each wheel revolution. That timing is what keeps the image steady when you slow down at an intersection or sprint down a hill.
How it works under the hood
Persistence of vision needs one thing: the same column of pixels must light up at the same wheel angle on every pass. The code reads the time between magnet pulses, divides one revolution into slices, and draws one slice of the image per step. At a walking-speed spin of about 2 revolutions per second, the board has roughly 500 ms per turn to draw its slices.
- LEDs: DotStar strips use a clock and data line (SPI style), which handles fast refresh far better than single-wire NeoPixels.
- Sensor: a hall or reed switch on one GPIO pin with a pull-up, triggered once per turn.
- Power: 5V from a USB battery pack, with six strips of 36 pixels drawing real current at full white, so keep the brightness low in code.
The tricky part is the soldering. Wiring three spokes neatly means short, strain-relieved joints, because vibration will find every weak solder blob. Adafruit’s guide flags this as not a beginner build.
Takeaway for your own wheel
Students in a robotics club can use this as a timing exercise: measure one revolution, then schedule output against it. Same logic shows up in encoders, tachometers, and motor control. Start on a breadboard with the Feather, a DotStar strip, and a button standing in for the magnet, then move it onto a wheel once the image holds still. The Feather RP2040 sits at Adafruit product 4884 and the DotStar strip at 2242. Full wiring and sample code are in the original guide: https://blog.adafruit.com/2026/09/29/circuitpython-pov-bike-wheel-sensors-adafruitlearningsystem-adafruit/
Frequently Asked Questions
How does the POV bike wheel know where the wheel is?
A magnetic sensor pulses once per revolution. The CircuitPython code times the gap between pulses and splits each turn into slices, drawing one column of the image per slice.
What skills and parts does this build need?
You need a Feather RP2040, DotStar LED strips, a magnetic sensor, a USB battery pack, and confident soldering. Adafruit rates it as not beginner-friendly because of the wiring on three spokes.
What will I learn if I build this?
You practice timing with interrupts or polling, driving SPI-style LEDs, reading a hall or reed sensor with a pull-up, loading BMP and GIF assets in CircuitPython, and soldering that survives vibration.
