Introduction: Persistence of Vision Wand
Parts list:
(1x) Arduino Uno REV 3 Radioshack #276-128
(20x) Amber Super-bright LED Indicator Radioshack #55050630
(1x) Arduino Proto Shield Radioshack #276-140
(1x) 9V Alkaline Battery Radioshack #23-866
(1x) Heavy-Duty 9V Snap Connectors Radioshack #270-324
(20x) 1/4 watt resistors (sample calculation below)
from the specs of the LEDs I used:
"Continuous forward current: 25mA"
"Forward voltage: 3V"
using the following relationship:
V(volts) = I(amps) * R(ohms)
rearranged to:
R = V / I
we can calculate the resistance as follows:
voltage across resistor = 5V - 3V = 2V
2V / 0.025A = 80ohms
I used 100 ohm resistors so that the LEDs wouldn't be operating at their maximum ratings. Check the datasheet of the LEDs you use to calculate these values.
I've attaching a fritzing document with a breadboard and schematic view of the circuit (and included them above) for reference.
Attachments
Step 1: Build a Support for Your Wand
The first thing you'll want to do is make a mount for your project. I laser cut a piece of acrylic into a wand shape, but you could use a piece of plywood, cardboard, or plastic. I've attached the adobe illustrator and eps files of the wand and correct hole 0.1" hole spacing for the LEDs and resistors; even if you don't have a laser cutter, these files still might be useful to print out as a template. Drill out the holes with a drill and a small drill bit. The rectangular holes at the bottom of the wand will be used for mounting a 9 volt battery.
Step 2: Add Resistors
Thread the leads of all 20 resistors through their holes on the wand mount.
Step 3: Solder Resistors
Each resistor is connected to an LED on one side and ground on the other. Bend one of the leads of each resistor so that they are touching each other and solder them all together in a row. Clip the excess metal from the leads. Leave the last lead unclipped so that it can be attached to a wire later.
Step 4: Add Header Pins to Protoboard
Solder header pins to the pins connections on the arduino protoboard. Make sure you are soldering them on the correct side! For best results I recommend soldering the first and last pins first (as in figure 3), then check to see if the pins are straight and flat on the board (figure 4). If they need to be adjusted it will be much easier with only two pins soldered down. Once everything is lined up, solder the middle pins (figure 5).
Step 5: Attach Toggle Switch
Solder the toggle switch onto the middle of the arduino proto-shield as shown in the images above. Solder a jumper wire between the side lead of the switch and the Vin pin on the proto-shield.
Step 6: Attach Battery Connections
Solder the red lead of the battery connector to the middle pin of the switch. Solder the black lead of the battery connector to the ground pin of the protoshield.
Step 7: Wire Up LEDs
Attach wires to each of the LEDs on the wand. As you solder each connection, clip the excess lead off the end of the LED (figure 3).
Step 8: Connect LEDs to Arduino Shield
Strip the ends of each of the LED wires and connect to the pins of the arduino proto-shield. Be sure to follow the pin connections below correctly, I've also attached the breadboard diagram from fritzing (figure 3), the left-most LED is the top of the wand and the right is the bottom. In the schematic (figure 4) the left most LED is the bottom and and right most is the top. You can find the fritzing file below.
Pin connections:
Top of wand
1 Digital Pin 13
2 Digital Pin 12
3 Digital Pin 11
4 Digital Pin 10
5 Digital Pin 9
6 Digital Pin 8
7 Digital Pin 7
8 Digital Pin 6
9 Digital Pin 5
10 Digital Pin 4
11 Digital Pin 3
12 Digital Pin 2
13 Digital Pin 1
14 Digital Pin 0
15 Analog Pin 5
16 Analog Pin 4
17 Analog Pin 3
18 Analog Pin 2
19 Analog Pin 1
20 Analog Pin 0
Bottom of wand
Step 9: Connect to Ground
Strip both ends of a (preferably black) wire and connect the unclipped resistor lead to a ground (gnd) pin on the arduino shield.
Step 10: Upload Firmware
Download the POV wand firmware below and upload it onto your arduino board. If you have trouble uploading be sure that nothing is connected to digital pins 0 and 1 and that you have selected the correct board and serial port under the Arduino/Tools menu.
This code stores a set of binary arrays onto the arduino that generate each letter in the alphabet. When the arduino reads the message you would like to display it compares each letter to one of its stored letters and then outputs the stored array column by column. You will insert your own message into the arduino firmware in a later step.
Attachments
Step 11: Attach Battery and Arduino Board
Use zip ties to secure battery and arduino to wand mount. Flip switch to power on and off. You should read the words HELLO WORLD on startup.
Step 12: Create Your Own Messages
Figure one shows the line of text you will need to edit to create your own messages. Replace the worlds HELLO WORLD with any message in all caps with no punctuation. You can create your own characters and images by generating matrices of 1s and 0s, follow the example given in figure 2, the letter J.

Participated in the
Make It Real Challenge
198 Comments
1 year ago
I designed a wand base to work with this project if you have a 3D printer since she didn't post the files for hers.
https://www.thingiverse.com/thing:5240294
1 year ago
where's the files for the base
3 years ago on Step 12
I imagine that adding an accelerometer would allow it to read properly when shaking back & forth -- just reverse the output when it's going the other way. Nice Instructable!
5 years ago
I'm using Arduino IDE 1.8.4. with an Arduino UNO Board.
Code like :"boolean letterA[] PROGMEM = {" cannot be used and instead
the following must be used : "const unsigned char letterA[] PROGMEM = { "
However, this must surely also change the way the rest of the code works and perhaps that's why I can't get the sketch uploaded ?
Anybody got any ideas ?
ewewnwhite
6 years ago
@amandaghassaei I have been working on my PoV project of 12 LEDs but not getting any alphabet as an output. If you would help me in coding portion then I can share it to You.
6 years ago
How can I make more than just 3 alphabets? I want to create a sentence. Please help me.
8 years ago on Introduction
This Code isn't compiling with Arduino 1.0.5.
I am using Arduino with AtMega8.
It is Showing this error.
Can you help?
Reply 6 years ago
write-- const boolean letterA [] ----- make it in this way
make it for all alpha and i'm sure it will work
i was in the same problem .... good luck for you
Reply 6 years ago
Hey this is only for Atmega328 and above, that's why
Reply 8 years ago on Introduction
hi ashish once check the digital and analog pins of atmega8. and give properly in code. then it can works..,
8 years ago
Anyone know where I find the library < avr / pgmspace.h ????
Reply 6 years ago
https://github.com/mikalhart/galileo-Pgmspace.h
Reply 6 years ago
C:\Program Files (x86)\Arduino\hardware\tools\avr\avr\include\avr\pgmspace.h :) I hope it was too late to reply! :D
6 years ago
Hi all I have here is the problem of what to do
exit status 1
variable 'letterA' must be const in order to be put into read-only section by means of '__attribute__((progmem))'
Reply 6 years ago
write-- const boolean letterA [] ----- make it in this way
make it for all alpha and i'm sure it will work
i was in the same problem .... good luck for you
6 years ago
at what speed of rotation of the wand can i visualize the output
6 years ago
question: Is it possible to use only one resistor between common gnd and gnd of arduino? I actually tryed to run bubble display once with only one resistor and it worked, so im just curious....
Reply 6 years ago
you mean one resistor for all the LEDs? No - that will give you variable current through your leds depending on how many leds are on at once. Best case scenario, you will not be able to control the brightness of your LEDs, worst case scenario, you could blow an LED.
6 years ago
sorry but I uploaded that code to my Arduino R3 already ( I had also replaced " boolean..." to "const boolean... "
But there is no led even light up ???
8 years ago on Introduction
here's the code that occured after i changed the values,.
Arduino: 1.6.1 (Windows XP), Board: "Arduino Uno"
Build options changed, rebuilding all
FYP1LVPH0OJ0IKJ.ino:678:49: error: 'sendToWand' declared as function returning a function
FYP1LVPH0OJ0IKJ.ino:706:49: error: 'sendToWand' declared as function returning a function
FYP1LVPH0OJ0IKJ.ino:734:49: error: 'sendToWand' declared as function returning a function
FYP1LVPH0OJ0IKJ.ino:762:49: error: 'sendToWand' declared as function returning a function
FYP1LVPH0OJ0IKJ.ino:790:49: error: 'sendToWand' declared as function returning a function
FYP1LVPH0OJ0IKJ.ino:818:49: error: 'sendToWand' declared as function returning a function
FYP1LVPH0OJ0IKJ.ino:846:49: error: 'sendToWand' declared as function returning a function
FYP1LVPH0OJ0IKJ.ino:874:49: error: 'sendToWand' declared as function returning a function
FYP1LVPH0OJ0IKJ.ino:902:49: error: 'sendToWand' declared as function returning a function
FYP1LVPH0OJ0IKJ.ino:930:49: error: 'sendToWand' declared as function returning a function
FYP1LVPH0OJ0IKJ.ino:959:49: error: 'sendToWand' declared as function returning a function
FYP1LVPH0OJ0IKJ.ino:987:49: error: 'sendToWand' declared as function returning a function
FYP1LVPH0OJ0IKJ.ino:1017:49: error: 'sendToWand' declared as function returning a function
FYP1LVPH0OJ0IKJ.ino:1046:49: error: 'sendToWand' declared as function returning a function
In file included from FYP1LVPH0OJ0IKJ.ino:26:0:
FYP1LVPH0OJ0IKJ.ino: In function 'void sendToWand(const boolean*)':
FYP1LVPH0OJ0IKJ.ino:1081:33: error: 'letterArray' was not declared in this scope
FYP1LVPH0OJ0IKJ.ino:1085:33: error: 'letterArray' was not declared in this scope
FYP1LVPH0OJ0IKJ.ino:1089:33: error: 'letterArray' was not declared in this scope
FYP1LVPH0OJ0IKJ.ino: At global scope:
FYP1LVPH0OJ0IKJ.ino:1103:51: error: 'sendToWand' declared as function returning a function
FYP1LVPH0OJ0IKJ.ino:1131:49: error: 'sendToWand' declared as function returning a function
FYP1LVPH0OJ0IKJ.ino:1159:49: error: 'sendToWand' declared as function returning a function
FYP1LVPH0OJ0IKJ.ino:1187:49: error: 'sendToWand' declared as function returning a function
FYP1LVPH0OJ0IKJ.ino:1215:49: error: 'sendToWand' declared as function returning a function
FYP1LVPH0OJ0IKJ.ino:1244:49: error: 'sendToWand' declared as function returning a function
FYP1LVPH0OJ0IKJ.ino:1272:49: error: 'sendToWand' declared as function returning a function
FYP1LVPH0OJ0IKJ.ino:1301:49: error: 'sendToWand' declared as function returning a function
FYP1LVPH0OJ0IKJ.ino:1330:49: error: 'sendToWand' declared as function returning a function
FYP1LVPH0OJ0IKJ.ino:1358:51: error: 'sendToWand' declared as function returning a function
FYP1LVPH0OJ0IKJ.ino:1386:49: error: 'sendToWand' declared as function returning a function
Error compiling.
This report would have more information with
"Show verbose output during compilation"
enabled in File > Preferences.
"can you pls!! upload here the program that you used,. the program that is no need to be edited and ready to upload in an arduino"