Picture of Persistence of Vision Wand
IMG_2612 copy.jpg
IMG_2593 copy.jpg
Screen shot 2012-03-14 at 6.31.57 PM.png
Screen shot 2012-03-14 at 7.03.06 PM.png
Persistence of Vision (POV) Wands are a fun way to create interesting long exposure photographs and light displays.  The wand consists of a single row of LEDs controlled by an Arduino Uno.  When the wand is turned on it appears to be flickering in a random pattern, but if you move it quickly back and forth, you will see text or an image appear.  This wand project is incredibly customizable, I've included all CAD files, firmware, build documentation, and schematics.  Feel free to choose your own color LEDs, write personalized messages, and maybe even add something new to the project!

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.
Remove these adsRemove these ads by Signing Up

Step 1: Build a support for your wand

Picture of build a support for your wand
IMG_0305 copy.jpg
IMG_0308 copy.jpg
IMG_0330 copy.jpg
IMG_0343 copy.jpg
IMG_0347 copy.jpg
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

Picture of add resistors
IMG_0355 copy.jpg
IMG_0356 copy.jpg
Thread the leads of all 20 resistors through their holes on the wand mount.

Step 3: Solder resistors

Picture of solder resistors
IMG_0364 copy.jpg
IMG_0370 copy.jpg
IMG_0373 copy.jpg
IMG_0377 copy.jpg
IMG_0379 copy.jpg
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

Picture of add header pins to protoboard
IMG_0388 copy.jpg
IMG_0390 copy.jpg
IMG_0394 copy.jpg
IMG_0400 copy.jpg
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

Picture of attach toggle switch
IMG_0404 copy.jpg
IMG_0414 copy.jpg
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

Picture of attach battery connections
IMG_0421 copy.jpg
IMG_0415 copy.jpg
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

Picture of wire up LEDs
IMG_0661 copy.jpg
IMG_0665 copy.jpg
IMG_0679 copy.jpg
IMG_0687 copy.jpg
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

Picture of connect LEDs to arduino shield
Screen shot 2012-03-14 at 7.03.06 PM.png
Screen shot 2012-03-14 at 6.31.57 PM.png
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

Picture of 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

Picture of 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.

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

Picture of create your own messages
Screen shot 2012-04-05 at 5.58.15 PM.png
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.
1-40 of 184Next »
ruonear28 days ago

i also had the same issue even with the Arduino IDE 1.6.5. change all the boolean variables to const boolean variables. it will work ! :)

plz give me the .hex file for atmega8 i have a atmel board.. with isp programmer plz

we must use 1.0.5 version it is good.., the next versions cannot be used. thoose will show some errors.

still giving error "text overflowed by xxxx bytes".

Please help

signup19 days ago

can u plz send me the .hex file of this project.. I'm using the avr board with atmega8. i'v tried a lot with atmel studio 6 to get the hex file but it doesnt works .. so plz send me the .hex file for atmega8 @ yashusharma093@gmail.com plz... Thnku

This Code isn't compiling with Arduino 1.0.5.

I am using Arduino with AtMega8.

It is Showing this error.

Can you help?


hi ashish once check the digital and analog pins of atmega8. and give properly in code. then it can works..,

BollisettiS25 days ago

hi.., the project is good.., there are some mistakes in program. after the last for loop some lines must be commented or else it will not shows more then one letter. plkease check it.

1101Snehil1 month ago

hey author i made a prototpe without using the resistors. everything else is same. When i run the sketch by usb power it works well but when i use a fully chaged 9 v battery, it runs for sometime and then reboots and after that whenever the code starts running it again reboots. To see it work correctly again, i have to wait for atleast ten minutes. Then when the code runs, the same problem persists. Is it due to not adding resistors? If so then is there a way to add them onto this prototype without desoldering and resoldering it? (Like on the ground wire or something else)

Hi guys, i wanted to somehow change the Pin connections order, but i think i need the library to do that, does someone have the library so that i can change that?

ftj104 months ago

@amandaghassaei can you give me the working code cause i cant run my program there are to many error when I try to compile my codes

Paste here the error log. Before you do that try to replace "boolean" to "const boolean" in all the code, it worked for me in this way.

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"

evandrosite ftj103 months ago

try using an older version of the Arduino IDE

Hi again!! @mergim halimi. I already replace the "boolean" to "const bolean" but theres an error again

Arduino: 1.6.1 (Windows 7), Board: "Arduino Uno"

sketch_mar16a.ino:1:1: error: expected unqualified-id before '/' token

sketch_mar16a.ino:8:15: error: 'povtext' was not declared in this scope

sketch_mar16a.ino: In function 'void loop()':

sketch_mar16a.ino:858:9: error: 'povtext' was not declared in this scope

This is another error ive got can you help me to fix this??. Thank you

try using an older version of the Arduino IDE

Hi!! Did you change anything in thprogram or just the boolean to const boolean??? @mergim halimi
evandrosite3 months ago

Anyone know where I find the library < avr / pgmspace.h ????

you kids are so cool - I love this!~!

Hi guys, im doing this project but i want to change the order of my pin connections, how can i do it in the arduino code?

nrmr22224 months ago

Any One have POV project Report please send to my mail id nrmr2222@gmail.com

please it's urgent......

Hi Amanda, and others, I was wondering if we can upload a code in this project that shows the analog clock or digital clock. ( A beginner in arduino coding ) . Btw I made this, it works great, I just don't know how to make these pics, I tried to record a video but, hmm. not working, I changed the value of the refreshrate but almost the same, any suggestions ??

barrubond5 months ago

Hi Amanda, this project is great!, indeed i chose to replicate it for a school project, we do have a laser cuter, also a CNC Router to cut it out, but I can't see the adobe document to cut the wand :(, Can you tell me where it is? please, if you have the .DXF file it will be great!! Thank you very much, and great job!!

jamesbrosuk5 months ago

superb, i'll be trying this as my first project

Hi Amanda, As I said I worked on your project and it worked, but the problem is I ve to wave the Wand very fast in order to make the Alphabets visible. I even tried changing the delay, not working so fine. Wld you suggest me whether to increase the delay or to decrease to make it more attractive. Thanks in Advance

Amit_Jain6 months ago

Hi Amanda,

I used your code, but made some changes

- I drew some alien faces, ships, star etc...instead of just letters

- I used a Ardiuno Nano v3

- Used just 19 LEDs ( no space for 20th LED on my Circuit board)




amandaghassaei (author)  Amit_Jain6 months ago

so cool!

Finished product

iivanovskis made it!1 year ago

Thanks, cool :)

amandaghassaei (author)  iivanovskis6 months ago

just saw this, looks great!

Andrew Cleveland made it!11 months ago

Worked like a charm. Thanks. I saw a similar thing spinning but it was using rgb LEDs and could stream video. It was obviously bought but still pretty impressive.

amandaghassaei (author)  Andrew Cleveland6 months ago

nice! yeah this pov stuff can be taken pretty far. It'd be fun to adapt this project to rgb.

remi.longin made it!10 months ago

Thank you from France, Amanda.

I love your projects. Stay happy

amandaghassaei (author)  remi.longin6 months ago

thanks! looks awesome!

shiblee7 months ago
At last, I am successful. It is really a great Instructable. Thankyou very much indeed.
amandaghassaei (author)  shiblee6 months ago

what did you have to change to get it to work?

Hi Amanda, I tried my Hands on your project. Its really nice n its working perfectly. Thanks for uploading such a nice piece of work.

amandaghassaei (author)  miginstruments6 months ago

thanks for the comment, glad to hear it!

ВладимирК3 made it!6 months ago

Thank you from Russia! I've added to your program numbers and punctuation marks. It turned out like this:

nice! can you post the code?
1-40 of 184Next »