Introduction: RGBike POV - Open Project

Picture of RGBike POV - Open Project
RGBike POV also known as RGB POV for beginners to make at home

This i'ble is in constant update. If you're planning on doing something don't be afraid to drop a question.

I've always wanted a POV for my bicycle, specially a full colour POV capable of displaying text, images and small animations!

There are some cool POVs commercially available.
- SpokePOV from adafruit industries (and its i'ble)
- Monkeylectric's m132s
- Monkeylectric's recentely announced m464q

Unfortunately, the SpokePOV is only one colour, and the m132s, as I understand, doesn't have the ability to display images. Besides, I think these are a little too expensive for something that I will not use often.

So I though I would try to make my own with components I already had around. This way I don't have to spend any more money to try and play with a bicycle POV.

This project features:
  • 16 RGB (Red+Green+Blue) Light Emitting Diodes;
  • Arduino compatibility (Suposedely, I'll have to check that later);
  • Single layer printed circuit board, suitable for home fab;
  • All through hole componentes, suitable for beginners;
  • Hall effect sensor, for image synchronization;
  • Least number of componentes possible;
  • Unfortunately, only one side of the wheel is illuminated (check update).
  • Fits 26" wheels, I haven't had opportunity to try it in 20" and 24" wheels.

This project is also a open project. Anyone who wishes to participate is welcome. The contributions will be added to this instructable and published.

Update: I updated the board, so you can use only one board for lighting both sides of the wheel! But it won't work correctly in both sides for text...

Step 1: Before Starting

Picture of Before Starting
To follow this instructable you must already know how to:
  • Solder electronics
  • Make printed circuits boards
  • Understand basic principles of electronics
  • Know a little about microcontrollers

If you don't know any, or all, of the above, this instructable can a motivation for learning.

You'll need the basic tools to:
  • Make PCB
  • Work with and solder electronics
  • Hardware and software to program the microcontroller

Electronic Components
  • 1x ATMega328p / ATMega168 microcontroller - ~4.3$
  • 1x TLC5940 / TLC5941, 16 PWM Ouput LED driver - ~4.29$
  • 16x Superflux common cathode RGB LEDs - ~13$
  • 1x A3213 - 1.5$
  • 3x PN2222, NPN transistors - cents
  • Assorted resistors, capacitors, tact switches and connectors (check schematic and board layout) - another few cents

Rough estimate of the cost, since I'm building the circuit boards at home: ~35$

Download all the resources
Don't forget to download the schematic and board layout for Eagle CAD, and the source code for the firmware.

attention: TobyTetzi noticed that he download '.tmp' files instead of the .brd and .sch files. It also happened to me. I don't understand why.
I changed back to the original name and it seems to solve it.

Step 2: Working Principle

Picture of Working Principle

So... You may ask. How do I plan to control the 48 LEDs? The 16 red, 16 green and 16 blue, with only a LED driver IC with 16 outputs?
Well... I'm going to light one colour at a time.

Imagine one line of the image in the wheel. This line is composed by red, green and blue points. These points will light up, in the same instant, one colour at a time. This alternation between the three colours is so fast, that you seem to see only one line.

If you alternate between all these colours, you won't see three lines of different colours, you'll see white.

To control the width of this line in the wheel, we only need to control how many times this line is repeated.

Since the driver IC sinks the LEDs, this method requires common cathod RGB LEDs.
I used cheap 'Piranha'/'Superflux' RGB LEDs from China.

Step 3: Make the Printed Circuit Board

Picture of Make the Printed Circuit Board
First, you'll have to make the Printed Circuit Board.

If you don't know how to make a PCB, you can follow the ton of i'bles that are available.
There are a few methods of making PCBs, and many make it a little different within the same method.
I know at least:
  • Photoresist - The method that I use. I can achieve great level of detail;
  • Tonner transfer - You'll have to use a laser printer;
  • Blue thingy transfer (don't remember the name) - I really don't like the process and the detail I achieve.

What all the methods have in common, is that the copper must be etched! Cool etchant instructable

Resuming all the steps I took:
1 - Print the board layout in a transparency. In eagle go to: ULP -> CAMtoPrint;
2 - Prepare the copper and apply photoresist, like Positiv 20;
3 - Expose the copper with photoresist through the transparency;
4 - Develop the photoresist;
5 - Check for errors;
6 - Etch the board;
7 - Cut the board;
8 - Drill.

Step 4: Solder the Components

Picture of Solder the Components

After making the PCB, you'll solder the components.

Follow the schematic and board layout to populate the board.
I suggest you to start with the microcontroller related stuff, and test it first.
Don't forget to solder the jumper wires!

Then solder all the LEDs and TLC5940 and all the remaining components.

Properly secure the batteries, otherwise it'll fly away! (check the video)
Since I didn't have the battery holders that I placed in the board layout, I had to use another kind of holder.

Step 5: The TLC5940 Driver

Picture of The TLC5940 Driver
The TLC5940 is a cool IC that controls the supply of 16 LEDs. It has 4096 levels of grey.
Cool projects that use this integrated circuit:
I will explain how this IC works and how to interface with it. Later... someday I hope.

Maximum LED current
You can limit the current that flows through the LEDs by specifying the value of a single c
To calculate the resistor value, you need to decide the maximum value for the current on the LEDs (I_max).

R_iref = 39 / I_max

I used a 2.2k Ohm resistor, which limits the current to 17,7mA.

Step 6: Program the Microcontroller With the Firmware

Picture of Program the Microcontroller With the Firmware

You can now program the firmware into the microcontroller.
I use the USBtinyISP by ladyada.

I also designed this POV to be compatible with the Arduino. You just have to use the FTDI USB-TTL232 cable. But don't take my word for it, test it! (because I didn't).
There is also a TLC5940 library for the arduino by Alex Leone

Currently in this version of firmware you can only display one image, but you can easily tweak it. Also, the image data is read from program memory.
In the future I plan to try a SPI EEPROM connected to the serial port. This way I am able to store tons of images and animations!

In this version there is also a small section of feedback control loop, to synchronize the image to the velocity of the wheel.

How much space do I need for my image?
Depends on the level of detail you desire. With level of detail, I mean the number of divisions of your wheel.
If want to use 100 divisions, you'll divide the circle in lines with 3.6 deg. The greater the number of divisions, the narrower the lines.

For one image of 100 lines:
192 bits for each colour * 3 colours for line = 576 bits / 72 bytes for each line
72 bytes/line * 100 lines = 7200 bytes/image, ~7kBytes/image

Step 7: Install It on the Wheel

Picture of Install It on the Wheel

Now we will install the POV in the wheel.
I wish this POV could be installed in any kind of wheel. Specialy in 20", 24" and 26" wheels. Unfortunately, while I designing the board I didn't have access to any other wheel other than 26".
If you happen to try this POV in any other size, please tell me.

To install the POV you'll need:
  • Pieces of foam or rubber;
  • Zip-ties or any kind of string
  • Magnets;
  • Any other stuff you may find useful.

Make holes in the pieces of foam/rubber to pass the ties.
Secure it to the spokes, making sure the LEDs are perpendicular in the wheel.

Hall effect sensor

If you use a cable extension for the sensor as I did, you can place the sensor and the magnet in any place you seem fit.

Make sure that the magnet is in range of the sensor. It is important if you want to display an image.

Step 8: A Colourful Wheel!

Picture of A Colourful Wheel!

I can now draw images in my wheels, small animations and cool effects.

In the future I hope to make some piece of software that transforms an image into the data matrix that I use in the firmware. Also further develop some kind of interface to the computer and add some kind of memory to store the images and animations.

Update: I now duplicated the LEDs, thus making it visible in both sides of the wheel! This only works when you can mirror the image, i.e. not suitable for text.

Remember, if you feel like to tweak, contribute or develop for this project, you can do it! As long as you distribute it in the same conditions.

Soon... Some videos and some more photos.

Step 9: Space Invaders!

Picture of Space Invaders!

My latest animation! Some aliens walking in my wheel!


StanislasN (author)2017-10-15

if he/it pleases you that is with what software that I can open the files
I would like to achieve your work

Jdukate (author)2016-11-20

Sorry for the noob question but how do you program this? Arduino ide or hex uploader?

Nice! Definitely gonna make it!

Thành VinhL (author)2016-04-18

I'm having troubles finding the A3213 and the PN2222. For the Hall sensor, i only found the A3144 and A04E. For the transistor i found 2n2222 instead. Any other suggest? Can you visit 2 site and to choose the right one for me? Also, what will i need to change if i use the A3144 sensor?

I'm in Viet Nam. Thanks for helping me

kosme (author)2009-10-05

I'm having troubles finding the A3213 where I live and it's way too expensive to order it at digikey. Do you know any replacement I could use??

Hazard (author)kosme2009-10-06

Well, search your supplier for "hall effect sensors". Then compare the things you find with the A3213. If they work the same way, you can use it. If you are not certain, show me what you find and I'll check it with you.

kosme (author)Hazard2009-10-06

I have found the A1302 and DN6851A.

Hazard (author)kosme2009-10-07

I think the DN6851A would work. It has the same pinout and funcionalities.
You should read the three datasheets, and try figuring out the differences. Then tell me if you agree with me :)

Snarltoof (author)Hazard2015-05-23

The A3213 is in stock at if that helps.

jacquelineA2 (author)2015-04-15

why did you use the value 39, can u explain the formula please!

bobbylin (author)2015-03-27

How do you compile the images with the files? I have built the board but having trouble uploading a firmware... Would you be able to upload a precomplied image?

Beergnome (author)2014-11-08

The attached files are still labled as .tmp

baicker (author)2014-10-19

good job, could you show me the avr fuse setting?

jmaurin (author)2014-09-27

I really can't find download button/link....

incognito99 (author)jmaurin2014-10-03

The download link does not appear if the language is not set to 'en'. To get the links you have to open (notice the lang=en at the end) and then navigate to step one. Voila the links are there. Seems to be some bug in the instructables software...

mbrotcke (author)2014-09-04

All other TLC5940 projects require Common Anode, Whats teh diffrence here?

mr817tx (author)2014-06-18

if so feel free to contact me @ I would greatly appreciate it

mr817tx (author)2014-06-18

do you think you can design a device like this for a vehicle on 30 inch rims?? I will pay $$$$

cwunderbar (author)2014-05-10

The orange ceramic resonator (Step 4, first pic) what's the frequency? Thanks!!

miaoyu (author)2014-04-14

Hey,my name is miaoyu.I
am a student.I am sorry to trouble you.But I
want to ask a question.I am doing an experiment to
study the luminance of each final pixel.My goal is get luminance of
pixels.I set the output file
openexr.I have got the value of standard solar irradiance in 700nm is
1.42666,then I use the conversion coefficient.That is,I converted irradiance to illumiance as my
lightsource input.

My whole code in pov is as below:

#version 3.7;
global_settings{ assumed_gamma 1.0 }
#include ""
#declare SpectralWavelength =700;

angle 7.54371
location <camera_x,camera_y,camera_z >
look_at <0,0,0>
rotate <0,-31,0>
right x
up y

light_source {<sun_x,sun_y,sun_z>

#declare geom_file_name = "pov-xyz.txt";
#declare spec_file_name = "pov-ref.txt";


finish {
ambient 0
emission 0
specular ref

I have read the openexr source ,it says y channel stand for luminance,how can I set in pov ?

Above ia all my code in pov,whether need I set additional  output or statements to get my lumiance output.Beg your help.
Avadhut.Deshmukh (author)2014-02-18

Please tell me what program you use to compose and generate color image and animation file. Hex you register in microcontroller ATMega328p ? Plz help to me

noexit (author)2013-10-30

I keep reading that the TLC5940 will not support common cathode RGB LEDs, but your instructable says that it has to be common cathode? What are you doing differently to make this work?

Hazard (author)noexit2013-10-31

Oh! I think I got it.

Because here each color is sequentially driven, by controlling the power to each color sequentially in time, you are able to control the brightness independently.

If you power all colours at the same time, you will only be able to control the brightness of all colors (sum of the RGB, white).

noexit (author)Hazard2013-10-31

Okay, now that I read further, that's what I'm reading.


Hazard (author)noexit2013-10-31

I don't understand the question.
Where have you seen it as a problem? What do you mean it doesn't support?
I just searched "common cathode TLC5940", and I've seen other examples that it uses common cathode leds.

Maybe TLC5940 has limited sink current abilities. I don't recall. Is that what they mention? But in this application it has been accounted for. Besides, each color is powered sequentially, one at a time.

noexit (author)Hazard2013-10-31

Ok, I saw that on adafriut as their reason they only sell common anode RGB LEDs.

"We carry and use CA more than CC because multi-LED driver chips (such as the TLC5940/TLC5941) are often designed exclusively for CA and can't be used with Common-Cathode."

I've seen it mentioned in a few other places too. Maybe it's a case of everyone parroting one source?

apedroso (author)2013-01-04

Ola Boa Noite! (vou usar o portugues mesmo)
Estou tendo algums problemas com o codigo! o arquivo contem as libraries utilizadas no codigo,mas qual destes arquivo realmente tem o codigo utilizado na gravação? eu tente o arquivo .c mas ele apresenta erros!
''SENSOR_DDR' Was Not Declared in this scope''
Obrigado pela ajuda!

sbrutal (author)2012-09-09

did you try to build the board by using, lets just say 64 pin or more microcontroller, i know it would require hell of a lot transistors, but it might shrink a lot size in board

dconnolley (author)2011-12-10

nice idea. way out of my range of capabilites, I thought of maybe one improvement. have some sensor like with a magnet. (just like how a speedometor works on a push bike) the whole induction loop thingy.
in order of keeping the image upright perhaps at any given speed. or to adjust image with speed.

Althought I have no idea how that would be accomplished :P

qwertyboy (author)dconnolley2012-04-06

That's exactly how this device functions.

dconnolley (author)qwertyboy2012-04-09

yeah your right I must have overlooked that whilst being distracted by the shiny objects.

okay well an actual improvement might be....
having a contact on the wheel like a copper coated contact disk, so if its 3 wires 3 contact points near the axle (example would be just like slot cars) that way the led light could be the only thing attached to the spokes not big heavy battery packs... if that makes sense. I figure if you had the circuit board on the wheel an it lost contact for a half second it may reset the board or something so just the Led's should be alright.

siddhanth (author)2010-03-03

 dude according to what i understand the hall effect sensor makes the circuit function independently/adjusts the POV according to RPM of the cycle tires right...? you have used a simple multispoked bicycle wheel. what about a MOTORBIKE wheel? can the same be achieved on 15'' or 17'' wheels?

Hazard (author)siddhanth2010-03-04

Yes, it adjusts to the RPM of the wheel. But I wouldn't try it on a motorbike. Too dangerous at high velocities.

siddhanth (author)Hazard2010-03-04

 One can actually use it on motorbike IF it adjusts to RPM of wheel ;-) one must use a superglue to fix the stuff on the tyre along with electronic components else the stuff will come out in random direction due to torque acting on it...

mikethezipper (author)siddhanth2012-02-20

Actually, you most probably cannot. First of all, never use superglue for that application. Superglue is NOT permanent, you would need to use an epoxy, and get the wheel balanced afterwards at a motorcycle shop.

Also, you are missing a vital point here.., you cannot simply extrapolate based on what you already know. For instance, at those speeds, it is possible that the inherent latency in the system would not allow for the display to refresh fast enough to display the image when you are going 60mph+ for example.

Also, you have no idea whether or not the hall effect sensor will be able to give you accurate reliable readings at those speeds.

T_T_ (author)2011-11-18

I realize this would require another led driver, but how would someone go about making this for a 48 inch wheel?

ledartist (author)2011-07-10

I wish you can provide the schematic in PDF or other image format.
I don't have Eagle.

qwertyboy (author)ledartist2011-08-16

Here you go.

ledartist (author)qwertyboy2011-08-16

Great! Thanks!

qwertyboy (author)ledartist2011-08-16

No problem

techxpert (author)qwertyboy2011-09-25

do you have the board layout in pdf and is there a sub for A3213

skirmish666 (author)2011-07-26

Hey there, first of all I love the project - thanks for the hard work. I'm wondering if it is possible to modify this project to have multiple synchronised units on each wheel?
Thanks again!

suwarnoh (author)2011-07-25

Dear Mr.Hazard,

I truly like to make POV as you did.
I already have AVR ATM8535. But I still don't understand the concept of using sensor in POV circuit. On your project what is the function of hall sensor and to what uC pin do feed it. Please email to:

I am from Indonesia.

dsandu (author)2011-07-16

Mr. Hazard,
Please tell me what program you use to compose and generate color image file. Hex you register in microcontroller ATMega328p / ATMEGA168 microcontroller from RGBike POV project.
D. Sandu by

kiler01 (author)2011-06-21

just to ask, do i have to own the arduino board to do this project? and if yes what is the exact part that i have to have? (i mean there are a few variations of it as i presume)

oaky8 (author)2011-05-26

Im really interested in doing this, but not for a bicycle
I want to mount these to the rim of a car wheel
Would the much high RPM's of the car rim cause problems?

Im not sure if the processor and hall sensor would be able to function fast enough to properly control the LEDs when the car is doing 30 mph or faster.
Maybe some how dividing the input variable of the hall by half would give the microprocessor more breathing room?

i know little about the microprocessor, would it be capable of keeping up with a car travelling 50 - 70 mph?

any help would be highly appreciated

DAVID_A (author)2011-05-25

did you develop the software?

Hazard (author)DAVID_A2011-05-25

No, unfortunately I never had the time yet.

puenktchen (author)2011-05-24

Did yout start to programm a piece of software to convert normal bitmap images into the radial c-code format?

shifty (author)2011-03-05

Heya I think this project is great. Would you mind uploading the eagle library that contains the TLC5094? I've tried searching around the web and can't find one. Or is there some way to extract the eagle part from the .brd and .sch files? Thank you!!!


About This Instructable




More by Hazard:DIY film DX code labelsRGBike POV - Open projectYour hamster's new home
Add instructable to: