RGB POV Display




This instructable was inspired by the ATtiny85 POV Display by vishalapr. Soon, I recreated his work, but I wanted more.That's how I decided to make a RGB POV display.

If you don't know what POV is, or want to know more about it, refer vishalapr's instrictable mentioned above. He has explained it nicely there.

(I am sorry that the video is crappy, I only have this video with me now and I am away from my home now. I will try to add a new video soon)

Teacher Notes

Teachers! Did you use this instructable in your classroom?
Add a Teacher Note to share how you incorporated it into your lesson.

Step 1: Materials Required

  1. An Arduino (I used Uno)
  2. 5 RGB leds (common anode)
  3. 2 74HC595 Shift Register
  4. Protoboard
  5. Motor
  6. 9V battery

For motor, I used one from an old sewing machine ( you will require a powerful motor as it has to bear the weight of Arduino and battery).

You will also need a piece of wood or cardboard for making the LED mount, and also some screws for securing it.

Step 2: About 74HC595 Shift Register

Since we are using 5 RGB leds, we have to control 15 pins. But Arduino Uno doesn't have that many output pins. So we have to increase it by using shift registers.

74HC595 shift register is a 8-bit serial-in, serial or parallel-out shift register with output latches; 3-state. We can use it to control 8 outputs at a time, by using only 3 output pins of arduino. You can also increase the number of outputs by linking shift registers in series, but still using only 3 pins from arduino.

You can learn more about shift registers and its applications in this page.

Step 3: Assembling the Components

  • Firstly, cut out a piece of protoboard (12x22 will be enough)
  • Place the two shift registers on it (make sure that the notch faces the same side)

Now take a RGB led and bend the common anode away from the rest of the legs. Now place it on the board as shown in the picture. The red leg should not be aligned with any other pins, as it will be connected to Q0, and bule & green legs should be aligned with Q1 & Q2 respectively.

Repeat it for other 4 RGB leds. Look at the image for reference. For the third led, there is a gap between blue and green leg for the ground pin of shift register.

In short,

  • Red leg of RGB led1 - Q0 of first shift register
  • Blue leg of RGB led1 - Q1 of first shift register
  • Green Leg of RGB led1 - Q2 of first shift register
  • Red leg of RGB led2 - Q3 of first shift register

  • Blue leg of RGB led2 - Q4 of first shift register

  • Green Leg of RGB led2 - Q5 of first shift register

  • Red leg of RGB led3 - Q6 of first shift register

  • Blue leg of RGB led3 - Q7 of first shift register

  • Green Leg of RGB led3 - Q0 of second shift register

  • Red leg of RGB led4 - Q1 of second shift register

  • Blue leg of RGB led4 - Q2 of second shift register

  • Green Leg of RGB led4 - Q3 of second shift register

  • Red leg of RGB led5 - Q4 of second shift register

  • Blue leg of RGB led5 - Q5 of second shift register

  • Green Leg of RGB led5 - Q6 of second shift register

Solder the pins toshift register. Use an IC socket if necessary.

Also join all the anode legs.

Step 4:

  • Connect the common anode of first led to the Vcc of first shift register using a 470ohm resistor.
  • Then connect the Q0s of first and second shift register to red leg of first led and green leg of third led, respectively.
  • Connect the Vcc of both the shift registers.
  • Connect Vccs to pin 10(ie MR).
  • Now connect all the grounds together, by joining pin 8s of both shift registers together and pin 8 with pin 13.
  • Now, for connecting the two shift registers together, join
    • Pin 12 of both together
    • Pin 13 together
    • Pin 9 of first shift register with pin 14 of second shift register.
  • Solder wires to pins 11, 12, 13, 14, & 16 of any one shift register.
  • Out of the 5 wires, connect 4 (except the one soldered to pin 16) wires to 4 male header pins. The wire from pin 13 of shift register will be connected to GND pin of arduino. Other three will be connected to pin 13,12, & 11 of arduino.
  • The remaining one wire will be connected to 5V pin of arduino.
  • Also, connect a 9V battery snap to arduino, red wire to Vin and black to GND.

Step 5:

I am not going to explain this step in detail, as it depends on various factors, like the motor you use, size of your project etc.

For making mine, I used an old sewing machine motor. I attached a rigid plastic plate to the motor, and drilled holes into it for attaching arduino and led bar to it. I used a rubber band for securing the battery.

Step 6: The Arduino Code

Firstly, add the Shifter library to arduino.

Then upload the attached code to arduino.

I have explained the code using comments for easy understanding.

Step 7: How to Use the Code to Display RGB Texts?

void loop()
{ displayString("rrggbb"); }

This the part where you add the text. All the letters at odd number position denotes the color and the letters at even number position are the letters to be displayed.

If you want to show ABC, with red A, green B and blue C, you have to type "ragbbc"

Step 8: To Make Things Simpler

Well, its little difficult to type rAgBbC every time. So, I made a program in VB to make things easier.

But for using it, you will have to modify the arduino code.


String str;
char text[99];

to the top of the code.

Modify void setup()

void setup()
{ Serial.begin(9600); }

Change void loop to this

void loop()
{ if(Serial.available() > 0) { str = Serial.readStringUntil('/n'); str.toCharArray(text,100); } displayString(text); }

Step 9: How to Use RGB_POV.exe?

After opening the program, you will be asked to enter the port to which arduino is connected. If it is connected to port 3, type com3, not just 3.

Then enter 9600 for baudrate.

Then enter the text you want to display. For example RGB.

I want to display blue R, red G and green B. For that I will click the colours in that order, first blue, then red and then green.

After that press Send, disconnect the USB cable from arduino, connect the 9V battery and start the motor.

That's it. You have just made your first RGB POV display.

For sending another text, click Clear and follow the steps given above.

Step 10: How to Add New Colors and Characters?

I will write a tutorial showing how can you add new colors and characters soon.

Tech Contest

Participated in the
Tech Contest

Remix Contest

Participated in the
Remix Contest

Microcontroller Contest

Participated in the
Microcontroller Contest

1 Person Made This Project!


  • Made with Math Contest

    Made with Math Contest
  • Multi-Discipline Contest

    Multi-Discipline Contest
  • Robotics Contest

    Robotics Contest

16 Discussions


2 years ago


Why & operator is in this command?

like in this example: (pgm_read_word(&(ra[i])))

plz tell me?


2 years ago

wont compile used it straight out of download in

Prog_uint16_t' does not name a type


3 years ago

Hi friend,

I have tried so much but I can not compiled RGB_POV.ino, because there are so much error after compiling? what is your suggetion? We don't need the file of ShiftOut Array for uploading ?

And at first of program RGB_POV.ino, there are not any intialisations for port 13, 12 and 11 fo Arduino, are there?


3 years ago


I have another question:

After uplaoding the code and attache zip file (shifter) and also changing it, I have alot of error after compiling.

For ex.:

At global scope


'Prog_uint16_t' does not name a type

in function 'void setup()';

Serial was not decleared in this scope

in function 'void displaychar(char*);

'ra' was not decleared in scope

1 reply

Reply 3 years ago

I just compiled the RGB_POV.ino without any errors. Please check whether you have made any changes.

Are you trying to use the RGB_POV.exe?


3 years ago


Please could you help me?

I have a probleme about the programme, there are two programmes for uploading to Arduino (RGB_POV.rar & Shifter.zip)? whihone I have to add library?

And also for the schema; I have tryed to draw it, can I send you it for controlling?

1 reply

3 years ago

Hi there,

I want to use your exprience, but for me is very difficult fallow your discription, is it possible send me your electric schema please?


1 reply

Reply 3 years ago


Sorry, but I dont have the circuit diagram. But please read the Shiftout tutorial (http://www.arduino.cc/en/tutorial/ShiftOut) and compare it with my step 4.

If you have difficulty in understanding in any specific step, I will try to explain it.


3 years ago

nice project! Hey how do you scale up the number of leds? say to 10? which part do i have to modify? also u r not using any feedback to sync the rotation?

1 reply

Reply 3 years ago


You will have to change most part of the code for increasing the number of leds. And you will also need more number of shift registers. But personally, I dont recommend increasing the number of leds, as I dont think UNO has enough memory for it (not sure though).

You can sync the rotation using a Hall sensor. I was planning to use it, but got busy with studies.


4 years ago on Introduction

Do you have a code program visual c#.

I want to see to sample, Please send to my e-mail t.ot.t@hotmail.com

Thank you very much.