
Have you ever waved a sparkler in the air and noticed how it leaves a trail? That is Persistence of Vision (POV). The human eye is basically a slow camera. We’re going to exploit that biological flaw to build a programmable LED wand! By rapidly blinking LEDs while waving it back and forth, you can “paint” words in mid-air. It’s an incredible visual effect and a great way to accidentally hit someone in the face.
Instead of having a full 2D screen to display a letter (like a 5x7 LED matrix), we only use a single vertical column of LEDs (say, 7 LEDs tall).
When you sweep the wand horizontally, the Arduino rapidly flashes the LEDs to draw the first column of the letter, then the second column, and so on. If you wave the wand at the right speed, your brain merges these fast, sequential flashes into a continuous image hovering in the air.
Here is the gear you’ll need to build your own POV display:
The wiring for this project is straightforward but requires some basic soldering to keep the wand sturdy:
GND.To make this work, we need an array of binary data that represents the columns of each letter we want to display. Here is a basic example of how you can flash a “HELLO” message:
// Define the pins connected to your LEDs (top to bottom)
int leds[] = {2, 3, 4, 5, 6, 7, 8};
// A simple example letter 'H' in 5 columns (1 = LED ON, 0 = LED OFF)
byte letterH[5] = {
B01111111,
B00001000,
B00001000,
B00001000,
B01111111
};
void setup() {
// Set all LED pins to OUTPUT
for (int i = 0; i < 7; i++) {
pinMode(leds[i], OUTPUT);
}
}
void loop() {
// Display the letter H
for (int col = 0; col < 5; col++) {
displayColumn(letterH[col]);
delay(2); // Time each column stays visible
}
// Blank space between letters
displayColumn(B00000000);
delay(10);
}
// Function to write binary data to the LEDs
void displayColumn(byte colData) {
for (int i = 0; i < 7; i++) {
// Read each bit and set the corresponding LED
if (bitRead(colData, i)) {
digitalWrite(leds[i], HIGH);
} else {
digitalWrite(leds[i], LOW);
}
}
}
Note: The exact delay() times will depend on how fast you wave the wand. You might need to tweak the 2ms column delay and 10ms space delay until the letters look sharp!
Ready to see some incredible implementations of this concept? Here are two fantastic real-world guides you can use as inspiration:
You can attach the perfboard to a small DC motor or desk fan to create a continuous, rotating POV cylinder that displays the time, temperature, or custom messages!
Disclaimer: Some of the links on this page are affiliate links. If you purchase through them, we may earn a small commission at no extra cost to you.