A Persistence of Vision (POV) display creates floating text and images in mid-air by spinning a strip of LEDs at high speed. As the strip rotates, each LED turns on and off at precisely timed intervals, painting an image in the viewer’s eye. This impressive project combines mechanics, electronics, and programming into one spectacular build.
How POV Displays Work
POV exploits the human eye’s inability to track fast-moving light sources. When an LED strip spins at 10-20 revolutions per second and each LED is precisely controlled:
- The eye integrates the flashing lights over about 100 ms (persistence)
- This creates the illusion of a continuous, stable image floating in space
- Text, logos, clock faces, and even low-resolution images can be displayed
- The effect is particularly striking in dimly lit environments
Hardware Design: Motor and LED Strip
Core components:
- Motor: 12V DC motor or brushless motor spinning at 600-1200 RPM
- LED strip: 8-16 LEDs in a line (addressable WS2812B or discrete LEDs with shift register)
- Microcontroller: Arduino Nano mounted on the spinning arm
- Hall effect sensor: Detects rotation position using a fixed magnet for synchronisation
- Slip ring or wireless power: Transfers power to the spinning assembly
- Battery option: Small LiPo battery on the arm eliminates the need for slip rings
Building the Spinning Arm
- Cut a rigid PCB strip about 15-20 cm long
- Mount LEDs in a single column along its length
- Attach Arduino Nano and battery to the strip’s centre (near the motor shaft)
- Balance the arm carefully — even small imbalances cause dangerous vibration at high speed
- Secure all components with hot glue and cable ties (centrifugal force is strong)
Arduino Code for Character Mapping
Each character is a 5×7 or 8×8 pixel bitmap. As the arm rotates, each angular position corresponds to a column of the image:
const byte font_A[] = {0x7E, 0x11, 0x11, 0x11, 0x7E};
// Each byte is one column, bits represent LED rows
void displayChar(char ch) {
const byte *charData = getFont(ch);
for (int col = 0; col < 5; col++) {
setLEDs(charData[col]);
delayMicroseconds(columnDelay);
}
setLEDs(0); // Gap between characters
delayMicroseconds(columnDelay);
}
Timing and Synchronisation
The Hall effect sensor is critical — it triggers once per revolution when the magnet passes, resetting the angular position counter. This ensures the displayed text stays in the same position rather than drifting:
- Measure the time between Hall triggers to calculate RPM
- Divide one revolution period by the number of display columns
- This gives the precise delay between each column update
- Auto-adjusts if motor speed varies
Display Text and Images
Beyond text, you can display:
- Clock face: Show an analogue clock with hour and minute hands
- Simple graphics: Hearts, arrows, logos
- Animations: Cycle through frames for moving images
- Bluetooth messages: Receive text via HC-05 and display in real-time
Safety Considerations
- The spinning arm is a serious mechanical hazard — always enclose in a transparent guard
- Ensure the motor shaft connection is secure — a loose arm at 1000 RPM becomes a projectile
- Balance the arm precisely to prevent wobble and bearing damage
- Keep fingers, hair, and loose clothing away from the spinning assembly
- Use a sturdy base — the gyroscopic forces can topple a lightweight stand
Recommended LED Components
Frequently Asked Questions
What speed does a POV display need?
10-20 revolutions per second (600-1200 RPM). Below 10 RPS you see flicker; above 20 RPS the effect is stable.
Can I use WS2812B for POV?
Yes, but the data rate must be fast enough. WS2812B at 800 kHz can update 16 LEDs in about 0.5 ms, which is sufficient for most POV applications.
How do I power the spinning electronics?
Either a small LiPo battery on the arm (simplest), a slip ring (commercial solution), or wireless power transfer (advanced).
Shop Display Modules at Zbotic.in
India’s trusted source for OLED, LCD, TFT, LED matrices, and more. Fast shipping across India.
Add comment