Hardware design


SpokePOV works kinda like a cross between a LED 'propellor clock' and a bike odometer. Like the odometer, there is a hall effect sensor and a magnet. Every time the magnet passes by the sensor, the sensor sends a pulse to a microcontroller. The microcontroller counts the time between pulses and uses that information to turn on the LEDs so that as the wheel rotates, the LEDs are always lit in the same location. Because the LEDs are really bright we see a streak when they move. Since they're moving really fast, the pattern of LEDs ends up looking like a persistent/enduring image. That's why it's called "persistence of vision", or POV for short.



The microcontroller used, the ATtiny2313, is one of my personal favorites. It's very low cost, has an 8MHz internal clock, runs as low as 1.8V, and has a bunch of pins. The microcontroller handles the button presses, sensor pulses, and reading data from the EEPROM into the latches.

When the microcontroller detects that there haven't been any sensor pulses in a few seconds, it powers down the LEDs. When there haven't been any pulses in a few minutes, the board goes into power-down mode: the sensor is turned off and the microcontroller is barely running. To turn it back on, a button press sends a signal to the microcontroller to let it know it's time to wake up and turn on the sensor.


The sensor is a particularly sensitive unipolar hall-effect sensor. You can read about how these things work over at sensorland. When the southside of a magnet comes close the the front of the sensor, it sends a pulse to the microcontroller.


The button is completely waterproof! Press the button for less than a second to reset the SpokePOV or turn it on if it's off. Hold down the button for 2+ seconds and release to turn the SpokePOV off.


The EEPROM (electrically erasable programable read only memory) stores the image to be displayed. Since there are 32 LEDs (4 bytes) and 256 radial pixels, 1K of storage is needed. A larger eeprom could be used to display higher-resolution images or animations, etc.

To write the image data to the eeprom, a parallel-port dongle is connected to the board and the SpokePOV software is used.


The default configuration is 2 x AA batteries. Alkaline batteries are best and will last a lot longer. However, I've found rechargable NiMH batteries work pretty well. To figure out approximately how long your batteries will last use this equation: (# mAh in batteries) / ((% LEDs on) * 60 LEDs * 10mA per LED). So for example, if you have 2000mAh AA rechargables, and about 1/4 of the LEDs are on in a picture, then it should last about 13.5 hours of constant (lit-up) use.

If you want to use some other sort of battery pack, or not use the clips, you can solder your wires to J1, which connects directly to power. You could also connect multiple SpokePOVs together this way and share one set of batteries. Note that your battery life will be a lot shorter and also there may be so much current draw that the batteries can't really handle it (like if all the LEDs are on). YMMV.


The LEDs used are high-brightness (2000mcd) red 5mm LEDs. If you want to use green, blue, purple, white, etc. LEDs you'll have to install a third set battery clips and also cut a trace on the PCB. You may also have to use different value resistors. For example, if you want to use green LEDs and the datasheet says they have a forward voltage of 3.2V (it's usually 3-3.5V) and you're using 3 alkaline batteries with a nominal voltage of 1.5V each, the resistors should be: ((3 * 1.5V) - 3.2V - 0.5V) / .01 = 80 ohms. The .5V drop is from the internal latch offset and .01 is 10mA which is usually about how much you want going through the LEDs. Smaller resistance values = brighter LEDs but more power draw. If you're using 3 rechargables, you can try using the smallest resistor values you can get (10 ohms?)

If you want to use yellow, amber, orange LEDs, you won't need to put a third battery in since almost all of these have a forward voltage of 2.3 or less.

Programming header

The 10 pin header is used to upload images to the SpokePOV board and set variables (see the Software page for details) and can also be used to upload new firmware code to the microcontroller. The header pinout style is called "AVR ISP 10-pin", and is one of the prevailing standards for Atmel microcontrollers.

Programming dongle

When it's time to upload images, connect one end of the programming dongle to your SpokePOV and the other to the parallel port on your computer. The dongle can also be used as a general purpose AVR programmer (type "DT006") using the very popular AVRDUDE software (available for windows & linux/bsd/etc).

This guide was first published on Apr 17, 2014. It was last updated on Apr 18, 2013.

This page (Design) was last updated on Apr 19, 2013.

Text editor powered by tinymce.