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.
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! |