PoV Display? Well I tried making one but...

There comes a time in every Maker’s journey where they feel a strong urge to create a PoV Display (Persistence of Vision Display). I am, of course, generalizing here. But odds are that if you are a Maker or an electronics enthusiast, you may have come across a PoV Display project. Perhaps on Youtube, on hobbyist forums, blogs or Facebook Makers’ groups.

Part of the reason why these projects are so popular is because of how simple and cheap they are to make. You need very few materials, programming is (somewhat) straightforward and you have flexibility in your choice of sensors. To sum it up, it is very easy to make a PoV Display, yet so easy to get it wrong. Unfortunately, my experience was in the latter. I’ll go into that later in the post.

So let’s briefly go through what PoV (Persistence of Vision) actually means:

Persistence of Vision refers to how your eyes (more like your brain) perceives objects that move faster than 1/12th of a second. If they move fast enough, the image “persists” longer in your brain than it actually exists.


This phenomenon has been put to use by animators. For a 1 second animation, there may be several frames of drawings that will appear. These appear so quickly that it creates the “illusion of movement”. [1]
So this concept can be extended to a column of LEDs rotating and flickering fast enough that you could see a pattern emerge from them. In this case, we’re using them to show letters or words. Many other Maker’s use this concept to create Clocks, display videos or images.

Image Source: Makezine [4]

The revolution time is the time it takes for your LED Column to make a full revolution. Calculating the revolution time also helps in spacing out the “text” that you’ll be displaying. For instance, you want to print out the word “MULTAN”. For each letter let’s say there is a matrix of 5x5 LEDS that is used to display the letter. However, because this is a PoV display, we have a single column matrix of 5 rows that moves around to display the character. Each column is spaced out depending on the revolution time. If the revolution time is calculated inaccurately, you may have a distorted “text” output.

You need to accurately assess the time it takes for a full revolution to take place. Once you have the revolution time, then you calculate for how long you should flicker the LEDs.  I used a Hall sensor to detect the speed, as shown above.

Other kinds of sensors can be used as well such as an IR Sensors or Motors with encoders. These motors may even be those that have Hall Effect encoders. Or you may choose not to use any sensor at all. Some projects would just accept the RPM value of the motor at face value. While this may work sometimes, it is worth noting that adding load to a motor will affect its speed. :/

To calculate the the revolution time, an interrupt service routine would get triggered each time the hall sensor detected a magnet. The arduino's timer library would keep track of how long it has taken for 1 revolution to take place, and the speed at which the LED's should flicker was then calculated. 

The LED’s were then switched on/off using port manipulation. I refrained from using digitalWrite() and the attachInterrupt() functions in this project, because according to this video [5], port manipulation gives you a smaller latency. The smaller the latency, the better the project performs.


 These are the materials that I used:

- Protoboard

- Soldering Iron and Wire

-Arduino Nano

- Hall Sensor

- Magnet

- Tiny Breadboard

- Red LEDs

- Blue LED (one is enough)

- Resistors (220 Ohms- 1K)

- 9 V battery

- a DC Motor (more on this later...)

- a Straight Ruler

- Hot Glue Gun

- 5V Power Supply

I used a ruler and 5V DC Hobby motor for the main body of the PoV display.  The protoboard with the LED Circuit was mounted on the ruler in the manner shown below (left). The final setup looks like the image on the bottom right. A 9V Battery was placed in the middle to balance out the ruler, and a breadboard with an arduino nano was placed on the right. The 9V Battery powered the Arduino Nano. The motor itself was powered separately.


The Hall Sensor module was placed on the underside of the ruler, this was powered by the Arduino's 5V output. The digital output from the hall sensor acted as an interrupt for the program. I connected it on pin 13 of the Arduino. Each time the hall sensor moved over a magnet, the LED Circuit would light up (as shown in the image below on the right).
Slowmotion showing clearly how the LEDs light up when moving over the magnet.
As you can see in the GIFs above, I tried displaying “T” and unfortunately, the results were not that good. I think the calculations of the revolution time were inaccurate, which led to the spacing of the “columns” being too close to each other. When I tried displaying a full word, e.g. “MULTAN”, the result was even worse as everything looked distorted.

The problem may lie in my code, and perhaps also because the motor I was using did not have sufficient RPM. In this project, I was using a standard 5 V Hobby DC Motor, which I incorrectly assumed would have been good enough to run the whole PoV Display.

I am not sharing my code right now because I feel that it is somewhat inaccurate with measuring the rotation time. If you want a good reference point to start from check out ElectroNoob’s post about PoV Displays. He is also using a Hall sensor for his project. [3]

Although this project was a failure, I am not too sad about it; one of my goals whenever I start a project is to end up learning something new. And in this case, I got to learn about port manipulation with Arduinos and familiarize myself with the attachInterrupt() and port manipulation’s interrupt service routine code. I may perhaps try out using a 12V Motor with sufficient RPM and make the whole PoV Display circuit again someday.

References and other helpful resources:

[1]Persistence of Vision Explained: What Is Persistence of Vision? - 2021 - MasterClass

[2] POV Display using Arduino - DiY Propeller (Rotating LED) Display (electronicshub.org)

[3] Arduino POV display clock text (electronoobs.com)

[4] Build a Persistence-of-Vision LED Globe - Make: (makezine.com)

[5] Tutorial - Arduino POV display TEXT, CLOCK - YouTube


This setup does look very aesthetically pleasing! 

Popular posts from this blog

Fixing the "A software problem has caused Meshmixer to close unexpectedly" Problem

Digital Sculpting with MeshMixer...

Making an 8DOF Quadruped