LED Display Fan (Persistence of Vision)

by AyushShah in Circuits > Arduino

2073 Views, 29 Favorites, 0 Comments

LED Display Fan (Persistence of Vision)

fan.jpg
Screenshot 2024-03-21 111516.png
fanStraight.jpg

Have you ever seen videos online of words being lit on a spinning fan? Ever wondered how that works? Well I did.

My name is Ayush Shah and I am a senior at Irvington High School.

In this Instructable, I will be showing how I made my own display fan to show small words and phrases in a quick and easy process.

This is an LED fan that uses the concept of Persistence of Vision (POV) to display text when spinning. POV is an illusion where the eye's perception of a lit object remains for a very small amount of time after it has disappeared, causing it to appear as if the object is still there.

Don't believe that this exists? The "Ayush" in the second image was created using a single line of LEDs, yet it manages to appear as 2-dimensional letters through POV.

The fan comprises of a 3D-printed fan blade containing a 9V battery-powered Arduino circuit that creates the illusion of text by flashing LED lights at different angles when spinning using a small DC motor.

I decided to begin this project after discovering a similar project completed by Electronoobs on YouTube, as well as a similar project completed by Scott Mitchell on Instructables, both of whom I referenced during my process.

You can find a link to my demo here! The YouTube version of the video seems to run at a lower frame rate than my phone, so unfortunately the letters are a bit difficult to discern.

(Watch in 1080p or the highest quality available to best view the letters on the display fan)

Special thanks to Ms. Berbawy's POE class and Berbawy Makers for giving me the opportunity to pursue this project.

Supplies

Supplies and Materials Needed:

Applications Needed:

Machinery Needed:

(Note: some links go to value packs, only the given quantity is needed)

Designing the Battery-Powered Arduino Circuit

lit.jpg
unlit.jpg

I referenced a circuit designed by Electronoobs for my own circuit design, which can be viewed in the first image. However, I made a few significant differences to make the circuit optimized for my planned design. Instead of using a large and heavy LiPo battery, I decided to use a normal 9V battery with a clip converter to wires. Additionally, I used fewer LEDs to optimize space and power, and I removed the resistors for the LEDs and instead manually lowered the voltage that went to each LED through the Arduino code (more on this in a later step).

Most of the components of the circuits required soldering together in the final build, but for now, a breadboard sufficed.

I recommend beginning with one LED and then incorporating the others after ensuring that everything works as desired.

To sum up the circuit, a 9V battery powers an Arduino Nano that uses a hall effect sensor (which detects magnetism) and a magnet to determine when to activate the LEDs to create the appearance of text on a fan when spinning.

This circuit is a critical step since mistakes here could cause a lot of confusion later on. Therefore, I decided to test the circuit after constructing it to ensure that it all works properly, including all components such as the hall effect sensor and the LEDs.

3D Designing and Printing the Fan Blade Component

Screenshot 2024-03-18 at 9.33.00 AM.png
Screenshot 2024-03-18 at 9.30.23 AM.png
bladepic2.jpg

I designed the fan blade by referencing Electronoobs' original design but by creating it using my own measurements and tailoring it to my planned structure.

Key Characteristics: A pencil-size hole through both parts to fit the planned axle through. A small opening sized to fit the slide switch, to easily control power from the 9V battery to the Arduino. A long opening through one of the faces, sized to fit 7 LEDs. A small opening on the blade opposite to the one with the LEDs to fit the hall effect sensor.

Note: It was important for me to ensure that any openings on the side of the fan blade design do not get covered up when fitting the two parts together. I needed to make many test prints to ensure that it all fits properly before making a full print. There should also be a slight offset between the sizes of the top and bottom pieces of the fan blade, roughly 0.02 inches, to account for tolerance when printing (nothing is perfect :))

Designing the Motor Circuit

motor.jpg

The motor circuit is a relatively simple circuit comprising the small DC motor, some wires, a power jack to slide switch, and a USB to male jack cable.

The jack cable plugs into an outlet and then connects to the power jack. From the power jack, the two vertical-facing pins are used for power (positive/red in the front, negative/black in the back), solder, or otherwise connect Dupont wires to those pins and connect them to the corresponding pins on the DC motor.

For the motor, the right pin is positive and the left pin is negative, and it is a best practice to color-code the wires red and black accordingly.

I tested motor functions after completing the circuit by flipping the switch on the power jack.

Completing the Fan Blade

IMG_8500.jpg
perf.jpg

Now, the Arduino circuit on the breadboard had to be translated to the fan blade's interior, which required a lot of space management due to the limited space available. In my original design, I designed my blade so that the components would fit perfectly inside, however, others may have components of different sizes, so they would have to measure and edit the design accordingly.

Key Recommendations: Solder the LED lights onto the perfboard (for this, I recommend connecting all of the negative/ground pins for the LEDs through a wire to minimize the number of Dupont jumper cables that you need to use). Solder the hall effect sensor from the outside of the opening so that it can stick out and detect the magnet. Have all the wiring soldered and ready before trying to fit the larger items like the battery and the Arduino. I required superglue to keep the slide switch in place, and I had to fit it from the outside so that it can stick out and be used with ease. It was very helpful for me to loop/twist the Dupont wires from the Arduino to the LEDs so that they do not become too much of a hindrance by taking up space.

It is critical to test the circuit again after finishing to ensure that it all still works. There's a high chance of making mistakes in the wiring when translating a circuit from breadboard to the final piece.

Assembling the Build

IMG_8517.jpg
IMG_8518.jpg
IMG_8519.jpg

Superglue was my best friend here.

First, I used a box-cutter to cut openings into parallel sides of the box, just the right size to fit the DC motor on one side and the radial bearing on the other (I traced it out beforehand).

I took my pencil/similar-sized object, cut it to make an ideal length (it should be able to go through the box and still have enough length to slide the fan blade through), and then carved the interior to create enough space for the axle of the DC motor and then used super glue to fit it tightly inside. I gave this some time to dry.

I superglued the exterior of the radial bearing into the corresponding opening in the box. Then, I fit the pencil through the bearing and superglued the motor into the corresponding opening on the other end of the box. Then I gave this some time to dry.

I superglued the slide switch + power jack onto a convenient spot on the box to control the flow to the motor, and then superglued the entire box onto the weighted base for extra weight and stability to prevent wobbling and shaking. I had to make sure to add an ample amount of superglue here and gave it some time to dry.

It is crucial to test the stability after ensuring that everything is dry.

(Clarification: the 9V battery shown in the second picture is not necessary if you plan on using an outlet for power. I had initially tried using it, but it did not end up working out so I switched it to outlet power).

Programming the POV Effect

Screenshot 2024-03-17 at 8.20.39 PM.png
Screenshot 2024-03-17 at 8.25.24 PM.png

I referenced a notable portion of the code that I used from Scott Mitchell, so huge thanks to him.

Programming the Arduino Nano required me to download the special Arduino IDE and connect my laptop to the Arduino Nano using a USB to micro-USB cable (the Nano is one of the only Arduinos that use this cable).

The main objective with the code is to sense the magnet at the base of the build using the hall effect sensor, and then the programmed Arduino Nano will use that sensing to activate a round of displaying the preset text through the 7 LEDs, using a specified combination (courtesy of Scott Mitchell) for each letter to turn on specific LEDs (switching the output for the corresponding pins to "HIGH") at specific time/angles. Done right, doing this successfully gives the illusion of text through a singular revolution, despite there only being a single line of LEDs on at one time.

As the fan blade reaches the magnet again, the cycle will restart, displaying the text at the same times/angles, with minimal delay in between each revolution. If an LED is not currently being used to display a letter, then it will be switched to "LOW" meaning that it is turned off.

Notes: You will likely require a delay between the magnet sensing and the beginning of the text, so you will have to use the function `delayMicroseconds()` to pause the code so that you can display the text at a readable angle. Another option is to experiment with the location of the magnet, however this requires more testing and physical changes. In my code, I commented out the initialization of the LED pins as outputs as this results in less voltage going to those pins, thus removing the need for resistors there.

Tip: On the second image, you see a few important buttons and options. The checkmark to the very left is used to verify your code, the arrow next to it is used to upload the code to your Arduino after verification. The button with a play symbol after these two is for debugging, however based on the type of Arduino that you are using, it may not be available. Finally, the dropdown is used to select the port on your device that is currently connecting to the Arduino that you wish to program.

I have attached a file containing my entire code for the fan to answer any further concerns/clarifications.

Test/Validate

F1GZIALLU18SPW5.png
IMG_8516.jpg

Obviously, it is important to test one's parts after every step, but this step is the final test to see if everything works together as intended.

I had to make sure to test the location of the words to make sure that they are at a readable angle, test that the fan blade spins at a reasonable speed, test how different words and letters look, test the stability of the build, etc.

If everything works as intended, then the base project is complete!

If not, then I would need to go back to some of the previous steps and try to double-check my actions.

Finishing Touches!

My POV Display Fan
IMG_8553.jpg
IMG_8606.jpg
IMG_8551.jpg
IMG_8538.jpg

As some finishing touches, I painted my structure black to make it look neater, and I also replaced my base with a heavier, more visually appealing base to maximize structural integrity.

There are countless other stylistic or structural changes that someone can make to customize their own POV Display Fan, these are just the options that I chose to do for mine. Do what suits you best!

And with that, I fully completed my own POV Display Fan, all you need to do to activate it is to flip on the slide switch on the fan blade, flip on the switch on the power jack, and give the fan a little push in the right direction to get it started (this is because the motor may not have enough power to activate the spinning, but it has enough to maintain it).

Note: make sure to turn off all switches after you are done using it in order to conserve your battery)

(For the video, watch in 1080p or the best quality to best view the letters on the display fan)

:)