[TODO: insert a neat video or pictures from actual riding]

[Note the Arduino sketch works but is work in progress, see last step for link]

Persistence of Vision (POV) effects let you display arbitrary images with just a few controllable pixels on a fast moving object by changing the pixels' colours fast enough. There's plenty of existing POV projects using a LED strip on a spinning object, like a bike wheel or a spinning CD.

This is yet another implementation of POV on a bike wheel. Adafruit has a similar project, they sell the kits and have it well documented, there's probably a few more implementations. All the ones I've seen used custom LED controller circuits though. This instructable uses just the most obvious, off-the-shelf elements and requires some basic soldering and a lot of zip-ties.

It also allows you to switch the LED effect programmes without getting off your bike, by using short sequences of braking ("gestures") which are detected by the same sensors we use for keeping track of the wheel position. Wifi, bluetooth, etc. control would also be easy but I've not done that.

Here are the materials I used, but you may have similar components at home that are likely compatible and will work just as well.

1.5m of the well-known WS2811 / WS2812B / compatible LED strip. I got a 5m reel of the "waterproof" variant at aliexpress.com for about $50 (here's one seller). You may not need 1.5m. I have the LEDs in 25cm 15-LED strips mounted on 6 spokes on a standard 28" wheel. If your wheels are 26" you might want 14 LEDs for example and you can start with just one spoke.

A small Arduino-compatible board. I used the popular cheap $2.12 Pro Mini clones from aliexpress.com (10 MOQ - here's the seller). My firmware code should work with any Atmega328-based board.

A 6+ DoF sensor board like the popular $10, 10DoF Acc+Gyro+Mag+Baro IMUs from e-bay. My code is only tested with the Invensense MPU6050 sensor chip (here's my seller - but you can grab a similar board with the BMP085 instead of the higher-precision MS5611 baro and it'll be below $10 - we won't use the barometer here anyway)

A lithium-polymer RC battery with enough capacity for your rides, the amount these LEDs consume depends a lot on how they're used, but they're quite power-hungry. I'm using a variety of batteries, for example this 3S1P 3700mAh one from HobbyKing, which should last for a good few hours in any configuration. You don't need that high a C rate, even 5C would do. Any voltage between 7V and 30V will do so a 2S or higher LiPo. Note the battery width matters because it needs to fit between the spokes of your wheel somewhere close to the hub end.

A 5V step-down regulator, optimally a switching one. In RC airplane hobbies those are called BECs. I use a 25W one similar to this. You may not need all 25W if using fewer LED strips than 6 but it's safe to get a bigger one, and my 25W BEC already gets hot.

Some 4-wire cable, male & female pin headers for the plugs and the sockets, thin zip-ties, optimally some hot-glue. Soldering stuff. Perhaps some more mounting and water-proofing material if you can make use of it. My setup isn't water-proof and my mounting doesn't look very pretty.

This should come out at about $100 in total or less than $50 per wheel. You also need a LiPo charger if you don't have one. You'll also need a bike (or at least the wheel).

If you're new to Arduino, you should know that you'll probably need a USB-to-Serial adapter to program the board, unless the Arduino has a USB port already or unless you have a real serial port & cable in your computer. If you don't code, you probably want to reproduce my setup exactly.

If you're not new to Arduino, my code currently has just some basic LED programs, you'll probably want to modify/add your own. The code achieves about 400-700 Frames Per Second, so at, say, 20km/h, you'll have only about 200 virtual pixels per LED along the perimeter depending on the wheel diameter and how intensive the effect's code is on the Arduino. I'm not storing bitmaps on the Arduino, each effect (programme) is a function that calculates what the current colour of each LED needs to be. More info on the firmware in the final step of this instructable where we program the Arduino.

Let's connect the pieces together.