How to make a POV display with the Arduino | With PCB

How to make a POV display with the Arduino | With PCB

Hello and welcome back. In this project, we will learn how to make a POV display with Arduino. For that, I have used the Arduino Nano board. Because it’s most suitable for this project. Also, I have designed the PCB for this project. For that, I used the PACBway Company. But, you can use any other PCB manufacturing company.

POV display

The POV is simply called Persistence of Vision. It’s a fascinating technology that utilizes the persistence of the visual phenomenon. It works by rapidly illuminating LEDs (Light-Emitting Diodes) as they move in a specific pattern. In this project, you can display the text and numbers. This creates an illusion of a solid image in the air, even though the LEDs are actually moving. This is an old technique, but I prefer this technique so I decided to do this project.

I have used the 10 LEDs for this project. If you don’t like to make a PCB, please use a dot board for this project. For that, use the project below.

OK, let’s do this project. The required components are given below.

Disclosure: These Amazon links are Affiliate links. As an Amazon Associate, I earn from qualifying purchases.

Step 1

Firstly, identify these components.

Step 2

Secondly, order your PCB. You can download the Gerber file using this link. If you don’t need a PCB, please assemble this circuit on a dot board. For that, use the circuit diagram below.

How to make a POV display with the Arduino | With PCB

Step 3

Thirdly, place the female header on the PCB and solder it. Please use tape to hold female headers.

Step 4

Next, place the LEDs on the PCB. Then solder these LEDs step by step.

Step 5

And then, place the resistors and two-pin terminal on the PCB. Next, solder these components.

Step 6

After, connect this PCB to the top of the DC motor. For that, I used a normal DC motor. You can arrange it as you like.

Step 7

Then, connect the 9v battery clip to the 9v battery and install it on the center of the PCB.

Step 8

Now, connect the Arduino Nano board to the PCB and install this display on a flat surface. Finally, connect it to the computer.

Step 9

Ok, now copy and paste the following program to the Arduino IDE.

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() {
  for ( int i = 4; i < 12 ; i++ ) {
    pinMode(i, OUTPUT);
  }
  pinMode(2, OUTPUT);
  pinMode(3, OUTPUT);
  // defining the space between the letters (ms)
  letterSpace = 2;
  // defining the time dots appear (ms)
  dotTime = 1;
  digitalWrite(2, HIGH);
  digitalWrite(3, HIGH);
}
void printLetter(int letter[]) {
  int y;
  // printing the first y row of the letter
  for (y = 0; y < 8; y++) {
    digitalWrite(y + 4, letter[y]);
  }
  delay(dotTime);
  // printing the second y row of the letter
  for (y = 0; y < 8; y++) {
    digitalWrite(y + 4, letter[y + 8]);
  }
  delay(dotTime);
  // printing the third y row of the letter
  for (y = 0; y < 8; y++) {
    digitalWrite(y + 4, letter[y + 16]);
  }
  delay(dotTime);
  for (y = 0; y < 8; y++) {
    digitalWrite(y + 4, letter[y + 24]);
  }
  delay(dotTime);
  for (y = 0; y < 8; y++) {
    digitalWrite(y + 4, letter[y + 32]);
  }
  delay(dotTime);
  // printing the space between the letters
  for (y = 0; y < 8; y++) {
    digitalWrite(y + 4, 0);
  }
  delay(letterSpace);
}
void loop() {
  for (int a = 0 ; a < 100; a++) {
    pattern1();
  }

  for (int a = 0 ; a < 100; a++) {
    pattern2();
  }

  for (int a = 0 ; a < 100; a++) {
    pattern3();
  }

  for (int a = 0 ; a < 100; a++) {
    pattern4();
  }

  for (int a = 0 ; a < 100; a++) {
    pattern5();
  }
  
  for (int a = 0 ; a < 100; a++) {
    pattern6();
  }

}

void pattern1() {
  printLetter (H);
  printLetter (E);
  printLetter (L);
  printLetter (L);
  printLetter (O);
  printLetter (_);
  printLetter (_);
  printLetter (_);
  printLetter (_);
}

void pattern2() {
  printLetter (P);
  printLetter (O);
  printLetter (V);
  printLetter (_);
  printLetter (_);
  printLetter (_);
  printLetter (_);
  printLetter (_);
  printLetter (_);
}

void pattern3() {
  printLetter (D);
  printLetter (I);
  printLetter (S);
  printLetter (P);
  printLetter (L);
  printLetter (A);
  printLetter (Y);
  printLetter (_);
  printLetter (_);
}

void pattern4() {
  printLetter (P);
  printLetter (R);
  printLetter (O);
  printLetter (J);
  printLetter (E);
  printLetter (C);
  printLetter (T);
  printLetter (_);
  printLetter (_);
}

void pattern5() {
  printLetter (W);
  printLetter (I);
  printLetter (T);
  printLetter (H);
  printLetter (_);
  printLetter (_);
  printLetter (_);
  printLetter (_);
  printLetter (_);
}
void pattern6() {
  printLetter (A);
  printLetter (R);
  printLetter (D);
  printLetter (U);
  printLetter (I);
  printLetter (N);
  printLetter (O);
  printLetter (_);
  printLetter (_);
}
  • Next, select the board and port. After, click the upload button.

Step 10

Finally, remove the USB cable and connect the 9v battery power to the display. And then, provide a suitable power supply to your DC motor.

Ok, now you can see the text on the display. You can change this text as you like. For that, check the program. The full video guide is below. We hope to see you in the next project or tutorial.

How to make a POV display with the Arduino | With PCB

Similar Posts

Leave a Reply

Your email address will not be published. Required fields are marked *