Persistence of Vision Wand by amandaghassaei
Featured
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

IMG_0302 copy.jpg
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.
1-40 of 82Next »
jukarr says: May 13, 2013. 2:35 PM
hello amanda.

I am a beginner arduino. Starting today you are my goddess. Your project is fantastic. Congratulations and thank you very much for sharing.
Proton17 says: May 13, 2013. 10:17 AM
Yes, as it seen in the video
amandaghassaei (author) says: May 13, 2013. 11:18 AM
it's very strange, your leds are wired correctly since the startup thing work, try downloading the code again and reuploading
Proton17 says: May 13, 2013. 9:44 AM
Yep, they all are on. It's nothing like part of leds lights, and part of them reflect light from others, may be it's not obvious in the video, but it is for me :) I've sent you the code in the private message, check your inbox! I guess something's not right with the code that i'm using
amandaghassaei (author) says: May 13, 2013. 10:08 AM
are you using an arduino uno?
Proton17 says: May 13, 2013. 7:26 AM
Got a problem with my, all leds lights together. Well, guess the video will explain it better than me: http://www.youtube.com/watch?v=k24sGD9GjpI&feature=youtu.be. Scheme and code are the same. Tried various delay time for pixels to refresh, several different words next to "string povtext=" and the most i achived was getting them all blinking together (when delay time is about 2s). Has anyone faced this problem before? Not sure, but it feels that the problem could be with code...
amandaghassaei (author) says: May 13, 2013. 9:16 AM
are you sure they are all on? try waving it quickly back and forth and look at your reflection in a window or mirror. can you post the code you've uploaded?
Aoshido says: Apr 20, 2013. 9:15 PM
I deleted a bunch of letters to see if it worked (Who needs the "Q" anyways? hahaah) And i had to delete QUITE a few of them.... so i started thinking, how about i just leave the letters that i need and it Kinda Worked!. I can leave like 13 Letters and it works. I said "Kinda" Because i cant wave it around much, cause my cables are quite short, and the severino plugged its eh.. bothersome to wave.... But! I could saw a liiiiittle "POV" so im guessing it works, wich leads me to my next question. Is there a way to make it stand alone? Like i make the PCB with JUST the ATMEGA8 and 9v, or do i need a Crystal, or to modify the ATMEGA8 Bootloader code? Thanks a lot!


(IM sorry i couldnt reply to my post, captcha wont show!:( )
amandaghassaei (author) says: Apr 21, 2013. 12:25 AM
I think you should be fine with just the atmega8 and 9v regulator. This code runs nowhere near 16mhz so I don't think the external clock is necessary. Let me know how it works out! And yes, I think the easiest solution to the memory problem is to remove unnecessary stored characters from the sketch.
Aoshido says: Apr 20, 2013. 8:40 PM
Aww its a great proyect!
I was about to ask if this could fit on the "Atmega8" But then i saw another response from you:
"not sure, the 168 has less memory so it might not fit all the characters I've stored in there. You should try uploading it and see what happens."
Im guessing if it might not fit in the atmega168 it will definably not fit in my lil Atmega8.
Still i tried it anyways (what can i lose) and i got this


"
c:/arduino-1.0.4/hardware/tools/avr/bin/../lib/gcc/avr/4.3.2/../../../../avr/bin/ld.exe: FYP1LVPH0OJ0IKJ.cpp.elf section .text will not fit in region text
c:/arduino-1.0.4/hardware/tools/avr/bin/../lib/gcc/avr/4.3.2/../../../../avr/bin/ld.exe: region text overflowed by 1452 bytes "

Im using the Arduino Severino V3 (http://arduino.cc/en/Main/ArduinoBoardSerialSingleSided3) with an ATMEGA8
Any help in shrinking the code or making it fit somehow? ( I have no problems taking off a couple of leds!)
Thanks a lot
oldsmarracin says: Apr 12, 2013. 10:42 PM
and what parts would i change if i just use 8 LEDs
amandaghassaei (author) says: Apr 17, 2013. 11:56 AM
http://www.instructables.com/id/Magic-POV-Wand-yet-another-POV-toy/
this uses 7. if you want to use my code you will have to rewrite all the matrices that hold the letter shapes so that they are only eight pixels tall instead of 20 pixels tall.
torstenp16 says: Mar 27, 2013. 4:47 PM
Awesome! I'm kinda into photography, so I need to try this out.
nashblackcat says: Mar 12, 2013. 11:14 AM
I am going to add a simple tilt switch that will run it only when moved in one direction. :) Might also make a singe PCB with SMT components.
negi says: Feb 8, 2013. 8:11 AM
actually i didn't change anything... i used your code and schematics because the nano is just a smaller version of the uno...

the led´s are connected like this:

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

then i plugged my usb into my nano and uploaded your firmeware without a change, and it works like a charm

a friend of mine build his pov wand today so i will upload photos of his too :)

and the accelerometer: i orderd one some weeks ago from china, and maybe i/we will try it out...
amandaghassaei (author) says: Feb 16, 2013. 9:22 AM
sweet, definitely let me know if you get it to work!
One1Asterisk says: Feb 11, 2013. 9:48 AM
Ah, I've been having a busy couple of weeks so progress on this has paused, but now I'm back! I had been able to place the whole project on the nano like negi did with no change to the code. Other than that I haven't made any new advances. I was talking to a friend who also uses AVRs and he was telling me about the use of an interrupt to achieve the reversal when the reading from the accelerometer's Y-value exceeds a preset value. Would this be a good approach? In the mean time I'm going to see if I can use the pushbutton input to switch the direction on command if I can write the code in correctly. I really appreciate all of your help and guidance through this. I'll owe you a big one if it ends up working with these extra features! ^.^
amandaghassaei (author) says: Feb 16, 2013. 9:20 AM
using interrupts is overly complicated for this, have you tried adjusting the code the way I said? have you hooked up the accelerometer?
negi says: Feb 4, 2013. 8:14 PM
With an Arduino Nano V3 :)
IMG_0183.JPGIMG_0184.JPG
amandaghassaei (author) says: Feb 4, 2013. 11:03 PM
very cool! does it work?
negi says: Feb 5, 2013. 1:49 AM
oh yeah it does pretty well! but it took me 5 min´s and some photos to find the right speed and that i had to wave the pov wand from right to left :P
IMG_0167.JPGIMG_0169.JPGIMG_0176.JPG
amandaghassaei (author) says: Feb 6, 2013. 6:34 AM
also, do you think you can post your nano code and schematic? other people are asking for it. thanks!
amandaghassaei (author) says: Feb 6, 2013. 6:32 AM
looks great! thanks for the pics! someone else in this thread had the idea of using an accelerometer to change the direction of scrolling, that way you could wave the wand back and forth without the words getting flipped, might be something worth checking out...
manishrocker says: Jan 30, 2013. 5:41 PM
can u send me the abstract of persistence of vision band pls......
amandaghassaei (author) says: Feb 4, 2013. 11:03 PM
there is a download PDF button at the top of the page.
awbriones says: Jan 29, 2013. 2:52 PM
When you say .1" do you mean 1/10 of an inch, so all 20 LEDs would be in a 2 inch long line? Im a little bit confused about the spacing
amandaghassaei (author) says: Feb 4, 2013. 11:02 PM
the 0.1" spacing is the distance between the two leads of one LED, you can space the leds however you like, but I'd recommend getting them to fit as close to each other as possible. probably ~0.25" apart.
One1Asterisk says: Jan 16, 2013. 9:48 AM
For some reason, Safari doesn't like replying to comments and it won't show me the captcha. I'm going to start seeing if I can get the original code working on the nano by using the library commands like you suggested, but I wouldn't even know how to start adjusting the code to accept a pushbutton and multiple message strings, let alone how to make it reverse the code using signals from an accelerometer. Just scrolling through the code I think, if i had to guess, that this is maybe what would change depending on the signal from the accelerometer:

for (l=0; l<6; l++){ //for first six rows of data
data1 = data1 << 1;//bitwise shift left
data1 |= pgm_read_byte_near(letterArray + (l*12+t));//add next value from dataset
}

When changed it would be shifting to the right? I'm not sure, I can build any project put in front of me but when it comes to coding, I'm feeling my way around in the dark. I was terribly excited to figure out how to introduce new characters hahaha! I will try my hand at moving to the nano, and will let you know of my success or miserable failure soon enough. I'll put up some pictures of the build so far. I don't want to finalize it until I'm sure I can or can't add this extra functionality.
image.jpegimage_1.jpeg
amandaghassaei (author) says: Feb 4, 2013. 11:00 PM
nice! yes let me know how the progress goes. You're really close with your idea of getting the direction to switch, the way you do it is by changing this line:

for (t=0; t<12; t++){ //for each time step
(this counts t up from 0 to 11)

to:

for (t=11; t>=0; t--){ //for each time step
(this counts t down from 11 to 0)
manishrocker says: Jan 30, 2013. 5:39 PM
its cool
Athebest says: Jan 14, 2013. 7:12 PM
I have a problem. Whenever I test the LED's with a simple blink sketch, the digital zero pin has a voltage. All the others work fine. I made sure it is unplugged from the computer and none of the leads are touching. I even take the shield off when uploading. Help?
amandaghassaei (author) says: Jan 16, 2013. 12:33 AM
can you post the code you're using?
Athebest says: Jan 16, 2013. 5:24 AM
Wait, I figured it out. When ever the code starts up the RX pin has about 2 volts, but when the sketch starts it works fine. I was using the standard blink code found in examples. I actually just finished it and it looks awesome. It is going to be a great science fair project.
One1Asterisk says: Jan 15, 2013. 4:09 PM
Okay, I found out what the issue was with adding additional characters, but now I wonder is this sketch compatible with the Arduino Nano? I know the nano has 2 extra analog pins so I think it has enough pins to run it all correctly, though I'm not sure how to adjust the code to do this. I was also toying around with the idea of moving it to a Mega and finding a way to store multiple messages and switching between them with a pushbutton. My 'holy grail' would be to find out how to attach an accelerometer to detect when the wand was being waved in the opposite direction so it could reverse the image and onlookers would only see the correct image as opposed to the mirror. Any insight as to how i might go about accomplishing this would be appreciated. Thanks!
amandaghassaei (author) says: Jan 16, 2013. 12:42 AM
should be pretty easy to switch to arduino nano, just ignore analog pins 6 and 7 when you wire it up. I think you may even be able to use the extra analog pins on the nano to add the extra functionality you want without having to use a mega. you can use one of the analog pins to control the switch, and the other to read accelerometer data (which btw is a fantastic idea!). I'd recommend starting with the arduino library code that I have commented out (you will have to comment out the existing code that contains the PORTB/PORTC/PORTD messages), get that code working on the uno, then switch over to the nano and make sure that works, then start adding in the switch/accelerometer. does that make sense? let me know how it goes!
One1Asterisk says: Jan 14, 2013. 10:08 AM
I was trying to input my own characters and couldn't quite get it working for me. The build itself works fine, and the included code is working too, but when I try to make my own image, no character in the blank spot of the code works for me.

boolean letter(blank)[] PROGMEM = {

I'm probably doing it wrong, but short of replacing an already existing letter I've tried numbers, lower case letters, and a combination of capitalized letters to no avail. How might I solve this one?
Athebest says: Jan 3, 2013. 6:37 PM
How do you download the fritzing document. When I try, it comes up with some weird XML document tree. I have the software but can't seem to download it. BTW, I am building this as my 8th grade science fair project and I really like how you did this.
amandaghassaei (author) says: Jan 3, 2013. 7:50 PM
weird, try rt click + "save link as"
Athebest says: Jan 11, 2013. 6:04 PM
Thanks!
x2borg says: Jan 8, 2013. 4:39 AM
Nice code amanda !!! Can Is it big problem to make this code on only 7 leds ?
1-40 of 82Next »
Pro

Get More Out of Instructables

Already have an Account?

close

PDF Downloads
As a Pro member, you will gain access to download any Instructable in the PDF format. You also have the ability to customize your PDF download.

Upgrade to Pro today!