- Can be used with road, mountain or BMX wheels!
- 30 LEDs on each side (22 for BMX) x 256 radial pixels
- Runs on 2-3 AA batteries for 10 hours or more, assuming 3000mAh alkalines and 50% image coverage.
- Can run on rechargable NiMH AA's
- Comes with high-brightness red, yellow, green or blue LEDs
- Automatically shuts off after 3 minutes
- Software runs on any Mac, Windows or Linux computer with USB port
- Design is all through-hole parts, perfect for a first time kit builder.
- With one spoke, total persistence at 15mph. Two spokes, 10mph. Three spokes, 7mph. (Assuming a mountain bike wheel). Looks cool even if not completely persistant.
- Great for safe riding at night, provides excellent side visibility.
SpokePOV can fit either BMX (20") wheels or mountain/roadoad bike (700c/37") wheels. The short version is 6.5" (16.5cm) long, the longer version is 9" (23cm).
If you are using BMX wheels, simply cut the PCB before soldering in parts and then don't solder in the extra LEDs or latches.
On a mountainbike wheel, I have found that with 1 SpokePOV you should bike 15mph/24kph. With 2 SpokePOV, bike 10mph/16kph. With 3 SpokePOVs, 7mph/11kph. This will give a nice persistant image. The faster the better, of course.
Larger wheels you might have to bike a little faster. Smaller wheels, you can go slower.
SpokePOV has been tested to work at 30mph (but can probably go even faster).
Don't forget to learn how to use your multimeter too!
Any entry level 'all-in-one' soldering iron that you might find at your local hardware store should work. As with most things in life, you get what you pay for.
Upgrading to a higher end soldering iron setup, like the Hakko FX-888 that we stock in our store, will make soldering fun and easy.
Do not use a "ColdHeat" soldering iron! They are not suitable for delicate electronics work and can damage the kit (see here).
Click here to buy our entry level adjustable 30W 110V soldering iron.
Click here to upgrade to a Genuine Hakko FX-888 adjustable temperature soldering iron.
You will want rosin core, 60/40 solder. Good solder is a good thing. Bad solder leads to bridging and cold solder joints which can be tough to find.
Click here to buy a spool of leaded solder (recommended for beginners).
Click here to buy a spool of lead-free solder.
Flush Diagonal Cutters
You will need flush diagonal cutters to trim the wires and leads off of components once you have soldered them in place.
Click here to buy our favorite cutters.
Strangely enough, that's the technical term for this desoldering vacuum tool. Useful in cleaning up mistakes, every electrical engineer has one of these on their desk.
Click here to buy a one.
Helping Third Hand With Magnifier
Not absolutely necessary but will make things go much much faster, and it will make soldering much easier.
Pick one up here.
Pre-programmed when purchased as part of a kit.
|IC1*||20 Pin Socket||Generic||
|IC2||4 Kbyte EEPROM||25LC320, CAT25320 or AT25320 (4K SPI EEPROM)||
|IC2*||8 Pin Socket||Generic||
|IC3-IC10||Serial to Parallel latch||74HC595||
|X1||Hall effect sensor||DN6852
|AA battery clips||Keystone 92||
|4 (red, yellow) or 6 (green, blue)|
|C1||0.1uF ceramic capacitor||Generic||1|
|C2||47uF to 100uF axial capacitor||Generic||Digikey||1|
|R1||1/4W 5% 10K resistor (brown black orange)||Generic||1|
|RN1-RN8||10-pin bussed 9 resistor network||33-39 ohm for yellow LEDs
33-39 ohm for red LEDs
56 or 68 ohm for blue LEDs
56 or 68 ohm for green LEDs
|27 ohm - (Digikey,Mouser)
39 ohm - (Digikey,Mouser)
56 ohm - (Digikey,Mouser)
68 ohm - (Digikey,Mouser)
|LED1-LED60||LED||High Brightness 5mm LED||
Now that you're done assembling it, you can test the board to make sure it's functioning. Put two (or three) good AA batteries into the clips. Whenever the microcontroller gets notice of a 'hard reset' it goes through a little test routine where it lights up all the LEDs in order, then it lights up one LED on each side of the SpokePOV to indicate that it's still on. The actual LED itself will vary as it is used for debugging.
If none of the LEDs are lighting up, go back and check to see if you put in any latches, batteries or the microcontroller in backwards. If just a few LEDs arent lighting up, check if they're in backwards.
SpokePOVs now come pre-programmed with some sample images. You can trigger the images using a magnet, sweep it past the sensor a few times and then wave it in the air, you should see a pattern displayed.
Can't get it working? Don't worry, help is available in the forums!
Parallel Port Dongle
|X1||DB-25 male connector w/solder cup connectors||1|
|R2-R4||1/4W 5% 1K resistors||Generic||3|
|R1||1/4W 5% 47 ohm resistor||Generic||1|
|X1||DB-9 female connector w/solder cup connectors||1|
|R1-R3||1/4W 5% 4.7K resistors||Generic||3|
|D1-D3||5.1v Zener Diode||Generic||3|
|PCB (looks a little different than shown here)||Custom||1|
Follow those instructions to assemble it, but use the windows driver available on the SpokePOV download page (it's actually an identical driver, only difference is that the name will appear as SpokePOV dongle instead of USBtinyISP).
You don't need to assemble or use the 6-pin cable as the SpokePOVs use the 10-pin cable only.
Make sure you're running the SpokePOV software version 1.3 or higher, with USB support for Mac and Windows!
You can Test Port... on the USB dongle but the pictures show the older parallel/serial interfaces. Just pay attention to the box header and ignore that the PCB looks different.
Note: Some people report it doesn't work on Intel Macs, will try to get this fixed soon and update the software.
The older, wxPython version documentation is here.
Don't forget: Even if you only want to display 1 image, the SpokePOV will always go through all the banks. So if you have 4, you must upload the same image to all four banks!
Don't forget...take the jumper out of the USB dongle if you've got one! Otherwise your batteries will go pop!Download page) to let the software talk to the parallel port.
For MacOS X download the SpokePOV dmg and copy the application to somewhere convenient.
Now, start up the software! You will see a blank screen, there are menus and a connect button. Don't connect yet, you must first configure the port.
Next, for serial or parallel, select which port to use.
Important Note: under MacOS X, using a USB/serial adapter, sometimes there are multiple names for one port (/dev/cu.KeySerial1 and/dev/cu.USA19H1b1P1.1 for example). Try both! I've found they act differently and get better reliability with some over others!
Next, select the Communcation Delay. This is only really important if you're using a USB/Serial adaptor. These are very slow devices (despite being USB) so we need a higher delay.
For USB, the delay is ignored so it doesn't matter what it's set to.
For parallel port as well as 'direct' serial (where the computer has a serial port right on the motherboard) use a delay of 1000 uS. Increase it up to 2000 uS if it's being flakey.
The configuration will be saved so you only have to do this once.
Dont forget...take the jumper out of the USB dongle if you've got one! Otherwise your batteries will go pop!
Select the Test Port feature from the configuration window.
If it worked out, you should get this message!Turn on the SpokePOV, preferrably by 'hard reset' - removing and replacing a battery. Make sure you have recharged/good batteries. Plug the dongle into the SpokePOV and click on the Connect button to connect to the SpokePOV.
Once you connect, you can see the graphical interface for editing what image will be displayed. The wheel panel shows a simulated image of what is in the SpokePOV.
The main controls for the SpokePOV are in a panel below the wheel panel. The three buttons are used to 1) write the image currently in the wheel panel to the connected SpokePOV 2) read the image currently in the connected SpokePOV into the wheel panel and 3) verify that what's in the wheel panel is also what's in the SpokePOV.
There are also 3 controls up top, these are configurations for the entire SpokePOV. The rotation offset control allows you to change what the offset from 0 is. What this means is: when you upload an image, you'll do it right side up. That means that the SpokePOV starts displaying from the top, rotating clockwise. However, you're likely to put the magnet not at 12 o'clock but rather somewhere else, depending on whether you put the magnet on the fork, or chainstay, etc. Here is a diagram of where these frame parts are located and some rough numbers you can start with. The numbers range from 0 to 255 starting at the top and rotating so that 255 is right next to 0 again.
You can also set the animation timing, which is how many wheel rotations the spokePOV will spend at each animation frame before going to the next bank.
The images are stored in the 25Cxx EEPROM, each image takes 1Kbyte of storage. Therefore a 1K EEPROM (25C08) will store one image, a 2K EEPROM (25C16) will store two and a (25C32) will store four.
- The firmware in the microcontroller automatically goes through the EEPROM showing each image, without knowing how large the EEPROM is. Therefore, you can swap out a different EEPROM at any time you want.
- This also means that you have to fill all the banks with something. You can't just upload an image to the first bank and nothing to the other three, or the spokepov will display 'nothing' for 3 out of the 4 animation cycles.
- You can sync all the spokepovs by quickly resetting them before you start.
- Animation doesn't work great, but it does work. One way to improve it may be (assuming you have more than one spokepov) to leave out the hall effect sensor on all but one and wire the ground and sense wire (but not the VCC power wire) all together so that they are forced to sync together. You'll have to mess with the offset value though.
There is also a toggle for mirroring the images. Since SpokePOV is double sided, you can have the image on the opposite side either be mirrored (so that it looks backwards on the opposite side) or not (so it appears exactly the same on both sides). For example, if you have text you want to display, the image should not be mirrored. However, if you want an arrow that points in the direction you're biking, then you want it to be mirrored.
When you start up, and connect, the wheel panel is empty. You can click (and drag) in this window to 'draw' pixels.
This is a very slow process as the software isn't very fast, it's better to import a bitmap (.bmp file) from a different program and then edit it. The wheel panel has one square for every pixel of resolution. If you're using this with a BMX configuration, the wheel will have fewer LEDs so it will appear a little different. The empty spot in the middle corresponds to the hub size, the space where no image appears.
First thing you probably want to do is import a bitmap image. There are a couple example bitmaps distributed with the software.. Bitmaps must be monochrome or at least grayscale. The software assumes that 'white' pixels means no LED should be on and black pixel means a LED on. You'll get best performance if your bitmap is at least 600x600 pixels large.
The software tries to figure out what the image should look like, but as seen above, the bitmap isn't aligned perfectly. To touch up the image, click on pixels (or click and drag to draw & erase).
Now that you've done some edits, it might be good to save the image data file for later.
If all is well, the window will show the address incrementing and the LEDs on the SpokePOV will blink to show the progress. There are 1024 addresses, it should take 30-60s to write a full image. If you are using a USB/serial converter it may be much longer...You can manipulate the Comm delay to make it longer (less flakey) or shorter (faster).
You can also use the Read or Verify buttons to verify the contents, or read from the SpokePOV image bank into the panel.
Even if you only want to display 1 image, the SpokePOV will always go through all the banks. So if you have 4, you must upload the same image to all four banks!
Can't get it working? Don't worry, help is available in the forums!
The easiest place to install on a wheel is one of the large gaps between spokes. Your bike wheel may be a little different. The most important thing is that you don't install it so that the metal spokes scrape against any electronics so that they can short. As you can see in the picture below, I installed this SpokePOV so that it is inside the wheel: the spokes are all either to the side or in front where they only touch the LEDs (which is OK, they're plastic). When you clip the zipties, make sure to leave a little tail, if you cut them too short they are more likely to fail.
The SpokePOV has three modes: off, idle, and display.
- Off mode is pretty much just off: the SpokePOV is consuming absolute minimal power. To turn it on, press the button & it will enter idle mode.
- Idle mode is a low power but active mode: the SpokePOV is waiting for the wheel to spin but it's not actually displaying any images. For example, it was just turned on. Or the wheel hasn't spun in the last few seconds. The SpokePOV will display one lit LED on each side to tell you it's still on. The LED itself may vary, as it is also used to debug the SpokePOV. If the SpokePOV doesn't receive any magnet signals in a few minutes, it will turn itself off to conserve power.
- Display mode is when the SpokePOV is receiving magnet signals and is displaying the stored image. This mode is probably what you bought the kit for. If it doesn't get any magnet signals for a few seconds it will go into idle mode.
The only interface to the SpokePOV is a single button. It works rather simply. Press the button quickly to reset the SpokePOV or turn it on if it's off. Press and hold the button for two seconds and then release to turn it off. If the SpokePOV is on there will be at least one LED lit. If the SpokePOV is off there will be no LEDs lit and it will not respond to the magnet until turned on.
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.
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.
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.
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.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).
- Flickr has a bunch
- A foldingbike displaying a tree
- Some abstract designs from Aneel
- A hacked up version that displays RPM and Scrolling text on a rotating robot blade.
- Some neat designs from theledlightingcompany
- under's spinning stars (here is the bmp file)
- Witchgers blue spokepov fun
Send me your photos or post them to flickr with the tag spokepov so I can link it up!
In case you want them again, here are the 'examples' used in the factory SpokePOVs.
Here is a driver for the USBtinyISP that says "SpokePOV Dongle" when its plugged in (otherwise identical)
Yay! I have rewritted the code to be much faster and much better with fewer errors and timeouts and nicer image handling. Please try it!
- Version 1.4 with USB support for Windows!
- Version 1.4 for MacOSX is here.
- v1.3 messed up serial support. let me know if you have any problems: should be fixed now. Thanks!
- Version 1.2 for Serial/Parallel (Windows/MacOS X) (older version, not suggested)
- giveio.exe, the windows software that allows spokepovsoft and other programs to access the parallel port (necessary if you use the parallel port dongle!), available for download from the pyParallel project on sourceforge.
One thing to note with the Mac version and serial dongle is that it may detect more than one 'port' for a single USB device. Say /dev/cu.KeySerial1 as well as /dev/cu.USA19H1b1P1 try both as I've gotten better results with one over the other.
You can try this stuff, but it is old... it wont work nearly as well as the stuff above. I include it for your amusement only!
- Zip file of v1.2 for Windows users (now with serial support!)
- DMG of v1.2 for MacOS X users (for use with a usb/serial converter!) If you're using the PL2303-chipset usb adaptor on a MacOS X machine, download this driver and install it, NOT the one that comes with the device!!!
- giveio.exe, the software that allows python and other programs to access the parallel port (necessary!), available for download from the pyParallel project on sourceforge.
- Just the v1.0 python script, config file, and sample bitmap for Linux/FreeBSD/etc. users. You'll have to also have Python 2.4, wxPython and pyParallel installed!