Simple LED POV Display

Arduino led pov display
arduino 8 led pov display

Arduino POV Display

How to Make a DIY Arduino POV LED Display using 8 LED’s and an arduino.

Arduino led pov display
arduino 8 led pov display

Introduction

What is POV or Persistence of Vision ?

Persistence of vision is a kind of optical illusion whereby multiple discrete images blend into a single image in the human mind giving the impression of an animation like any .GIF animated image you see

we will use this trick to make a DIY Arduino LED POV

running horse pov

How does it work ?

We will be drawing the alphanumeric letters in two dimensions using 8 LEDs. the Y axis has the LEDs row and the X axis is moving around the Y axis. so by blinking the led with the right frequency and position according to the letters pattern, we can draw the letters using persistence of vision.

For example to draw the letter B we will be flashing the led’s in 5 simultaneous raws making a matrix of 8×5 like the image on the right and the code in the arduino will be 

B[] = {[1,1,1,1,1,1,1,1],[1,0,0,1,0,0,0,1],[1,0,0,1,0,0,0,1],
[1,0,0,1,0,0,0,1],[0,1,1,0,1,1,1,0]};
letter B pixel matrix
Letter B pixels in a 8 by 5 matrix

Making The DIY Arduino POV

Parts Needed :

  • one small piece of plastic to hold the LED’s
  • an arduino board
  • 8 LED’s and 240Ω resistors
  • a 9V Battery and Some wires
  • a Rotary thing to make it spin Like a Fan but i used my drill

Follow the instructions it video you will also need to upload the code to arduino and use the schematic below :

Video tutorial

One thing more use the last loop in the code to print the letters or numbers you want and tweak Letter Space and Dot-time in the code for the best settings cause it is different for the rotation speed your chosen as fast you go as much you can write

The Arduino Code To Upload :

int NUMBER9[]={1,1,1,1,0,0,0,1, 1,0,0,1,0,0,0,1, 1,0,0,1,0,0,0,1, 1,0,0,1,0,0,0,1, 1,1,1,1,1,1,1,1};
 int NUMBER8[]={0,1,1,0,1,1,1,0, 1,0,0,1,0,0,0,1, 1,0,0,1,0,0,0,1, 1,0,0,1,0,0,0,1, 0,1,1,0,1,1,1,0};
 int NUMBER7[]={1,0,0,0,0,0,0,0, 1,0,0,0,1,0,0,0, 1,0,0,0,1,0,0,0, 1,0,0,1,1,1,1,1, 1,1,1,0,1,0,0,0};
 int NUMBER6[]={1,1,1,1,1,1,1,1, 1,0,0,0,1,0,0,1, 1,0,0,0,1,0,0,1, 1,0,0,0,1,0,0,1, 1,0,0,0,1,1,1,1};
 int NUMBER5[]={1,1,1,1,1,0,0,1, 1,0,0,0,1,0,0,1, 1,0,0,0,1,0,0,1, 1,0,0,0,1,0,0,1, 1,0,0,0,1,1,1,1};
 int NUMBER2[]= {1,0,0,0,0,0,1,1, 1,0,0,0,0,1,0,1, 1,0,0,0,1,0,0,1, 1,0,0,1,0,0,0,1, 0,1,1,0,0,0,0,1};
 int NUMBER1[]= {0,0,1,0,0,0,0,0, 0,1,0,0,0,0,0,0, 1,1,1,1,1,1,1,1, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0};
 int NUMBER0[]= {1,1,1,1,1,1,1,1, 1,0,0,0,0,0,0,1, 1,0,0,0,0,0,0,1, 1,0,0,0,0,0,0,1, 1,1,1,1,1,1,1,1};

 int _[] = {0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0};
 int A[] = {1,1,1,1,1,1,1,1, 1,0,0,1,0,0,0,0, 1,0,0,1,0,0,0,0, 1,0,0,1,0,0,0,0, 1,1,1,1,1,1,1,1};
 int B[] = {1,1,1,1,1,1,1,1, 1,0,0,1,0,0,0,1, 1,0,0,1,0,0,0,1, 1,0,0,1,0,0,0,1, 0,1,1,0,1,1,1,0};
 int C[] = {0,0,1,1,1,1,0,0, 0,1,0,0,0,0,1,0, 1,0,0,0,0,0,0,1, 1,0,0,0,0,0,0,1, 1,0,0,0,0,0,0,1};
 int D[] = {1,1,1,1,1,1,1,1, 1,0,0,0,0,0,0,1, 1,0,0,0,0,0,0,1, 0,1,0,0,0,0,1,0, 0,0,1,1,1,1,0,0};
 int E[] = {1,1,1,1,1,1,1,1, 1,0,0,1,0,0,0,1, 1,0,0,1,0,0,0,1, 1,0,0,1,0,0,0,1, 1,0,0,1,0,0,0,1};
 int F[] = {1,1,1,1,1,1,1,1, 1,0,0,1,0,0,0,0, 1,0,0,1,0,0,0,0, 1,0,0,1,0,0,0,0, 1,0,0,1,0,0,0,0};
 int G[] = {0,1,1,1,1,1,1,1, 1,0,0,0,0,0,0,1, 1,0,0,0,1,0,0,1, 1,0,0,0,1,0,0,1, 1,0,0,0,1,1,1,0};
 int H[] = {1,1,1,1,1,1,1,1, 0,0,0,0,1,0,0,0, 0,0,0,0,1,0,0,0, 0,0,0,0,1,0,0,0, 1,1,1,1,1,1,1,1};
 int I[] = {1,0,0,0,0,0,0,1, 1,0,0,0,0,0,0,1, 1,1,1,1,1,1,1,1, 1,0,0,0,0,0,0,1, 1,0,0,0,0,0,0,1};
 int J[] = {0,0,0,0,0,1,1,0, 0,0,0,0,1,0,0,1, 0,0,0,0,0,0,0,1, 0,0,0,0,0,0,0,1, 1,1,1,1,1,1,1,0};
 int K[] = {1,1,1,1,1,1,1,1, 0,0,0,1,1,0,0,0, 0,0,1,0,0,1,0,0, 0,1,0,0,0,0,1,0, 1,0,0,0,0,0,0,1};
 int L[] = {1,1,1,1,1,1,1,1, 0,0,0,0,0,0,0,1, 0,0,0,0,0,0,0,1, 0,0,0,0,0,0,0,1, 0,0,0,0,0,0,0,1};
 int M[] = {1,1,1,1,1,1,1,1, 0,1,0,0,0,0,0,0, 0,0,1,0,0,0,0,0, 0,1,0,0,0,0,0,0, 1,1,1,1,1,1,1,1};
 int N[] = {1,1,1,1,1,1,1,1, 0,0,1,0,0,0,0,0, 0,0,0,1,1,0,0,0, 0,0,0,0,0,1,0,0, 1,1,1,1,1,1,1,1};
 int O[] = {0,1,1,1,1,1,1,0, 1,0,0,0,0,0,0,1, 1,0,0,0,0,0,0,1, 1,0,0,0,0,0,0,1, 0,1,1,1,1,1,1,0};
 int P[] = {1,1,1,1,1,1,1,1, 1,0,0,1,0,0,0,0, 1,0,0,1,0,0,0,0, 1,0,0,1,0,0,0,0, 0,1,1,0,0,0,0,0};
 int Q[] = {0,1,1,1,1,1,1,0, 1,0,0,0,0,0,0,1, 1,0,0,0,0,1,0,1, 0,1,1,1,1,1,1,0, 0,0,0,0,0,0,0,1};
 int R[] = {1,1,1,1,1,1,1,1, 1,0,0,1,1,0,0,0, 1,0,0,1,0,1,0,0, 1,0,0,1,0,0,1,0, 0,1,1,0,0,0,0,1};
 int S[] = {0,1,1,1,0,0,0,1, 1,0,0,0,1,0,0,1, 1,0,0,0,1,0,0,1, 1,0,0,0,1,0,0,1, 1,0,0,0,1,1,1,0};
 int T[] = {1,0,0,0,0,0,0,0, 1,0,0,0,0,0,0,0, 1,1,1,1,1,1,1,1, 1,0,0,0,0,0,0,0, 1,0,0,0,0,0,0,0};
 int U[] = {1,1,1,1,1,1,1,0, 0,0,0,0,0,0,0,1, 0,0,0,0,0,0,0,1, 0,0,0,0,0,0,0,1, 1,1,1,1,1,1,1,0};
 int V[] = {1,1,1,1,1,1,0,0, 0,0,0,0,0,0,1,0, 0,0,0,0,0,0,0,1, 0,0,0,0,0,0,1,0, 1,1,1,1,1,1,0,0};
 int W[] = {1,1,1,1,1,1,1,1, 0,0,0,0,0,0,1,0, 0,0,0,0,0,1,0,0, 0,0,0,0,0,0,1,0, 1,1,1,1,1,1,1,1};
 int X[] = {1,1,0,0,0,0,1,1, 0,0,1,0,0,1,0,0, 0,0,0,1,1,0,0,0, 0,0,1,0,0,1,0,0, 1,1,0,0,0,0,1,1};
 int Y[] = {1,1,0,0,0,0,0,0, 0,0,1,0,0,0,0,0, 0,0,0,1,1,1,1,1, 0,0,1,0,0,0,0,0, 1,1,0,0,0,0,0,0};
 int Z[] = {1,0,0,0,0,1,1,1, 1,0,0,0,1,0,0,1, 1,0,0,1,0,0,0,1, 1,0,1,0,0,0,0,1, 1,1,0,0,0,0,0,1};
 int* alpha[]= {A,B,C,D,E,F,G,H,I,J,K,L,M,N};//,T,U,V,W,X,Y,Z};
 int letterSpace;
 int dotTime;
 void setup()
 { Serial.begin(9600);
// setting the ports of the leds to OUTPUT
 for( int i = 2; i<10 ;i++ )
 { pinMode(i, OUTPUT);
 }

// defining the space between the letters (ms)
 letterSpace = 2;
 // defining the time dots appear (ms)
 dotTime =1;
}
 void printLetter(int letter[])
 {
 int y;
// printing the first y row of the letter
 for (y=0; y<8; y++)
 {
 digitalWrite(y+2, letter[y]);
 }
 delay(dotTime);
// printing the second y row of the letter
 for (y=0; y<8; y++)
 {
 digitalWrite(y+2, letter[y+8]);
 }
 delay(dotTime);
// printing the third y row of the letter
 for (y=0; y<8; y++)
 {
 digitalWrite(y+2, letter[y+16]);
 }
 delay(dotTime);
 for(y = 0; y<8; y++) {
 digitalWrite(y+2, letter[y+24]);
 }
 delay(dotTime);
for(y = 0; y<8; y++) {
 digitalWrite(y+2, letter[y+32]);
 }
 delay(dotTime);
 // printing the space between the letters
 for (y=0; y<8; y++)
 {
 digitalWrite(y+2, 0);
 }
 delay(letterSpace);
 }
 void loop()//write here =) enjoy subscribe to my channel if you like the project
 {
 printLetter (T);
 printLetter (U);
 printLetter (N);
 printLetter (M);
 printLetter (A);
 printLetter (K);
 printLetter (E);
 printLetter (R);
 printLetter (_);
}

The Schematic :

arduino led pov circuit diagram
arduino led pov circuit diagram

18 comments

  1. pls wat programmer can one use to upload arduino code and what is the name of its editor?

  2. Can anything be done to upload them in a string instead of one single letter at a time?
    Please help me with it.

    1. you could added a function that isolates each letter and added printLetter but keep in mind that it has a limit or the letters would appear on top of each other as it spins

  3. That is very interesting, You are an overly skilled blogger.
    I have joined your rss feed and stay up for seeking more of your wonderful post.
    Also, I have shared your website in my social networks

  4. Simply desire to say your article is as surprising. The clarity in your post is simply nice and i could
    assume you are an expert on this subject. Well with your permission let me to grab your feed to
    keep up to date with forthcoming post. Thanks a million and please continue the gratifying work.

  5. Did you leave out number 3 and 4 in the code for a reason? 🙂

  6. Did you leave out number 3 and 4 in the code for a Reason? 🙂

    1. I didn’t measure how many turns per minute RPM it needs to display correctly but am sure a stepper motor won’t be able to reach such hi RPM

    1. if you use an Arduino nano and light battery so that everything is light i don’t see why not, if try it keep me posted

Comments are closed.