POV Wheel
February 2017 - March 2017
A Persistence of Vision (POV) Wheel is a strand of lights spinning on a wheel. The lights change colors at different points in the spin to effectively paint a picture. Because of persistence of vision, we see all the lights at each position, showing us a full image. This is a video of another one running (I did not have a long exposure video camera to video mine).
I made an agreement with my dad that he would build the wheel spinning structure and I would make the electronics. The first thing I knew it would need to know is a way to find the wheel's current position. I decided the best way to wirelessly and continuously determine position is a magnet mounted on the wheel's mount. When a sensor on the wheel passes the magnet, a pulse is emitted. Based on the time between pulses, you can determine the speed of the wheel and from that, get how far the wheel has traveled since the last pulse.
At my dad's job, they have a bunch of spare circuit boards. I used one of those to control the lights on the wheel. It listened to the magnet sensor and talked to the led strip with an SPI bus. One of the big challenges I faced is getting the micro to run fast enough. Every few degrees, the micro had to read from memory, queue it up, and send it out to the lights. To help, I used a PIC 18f4550. It was slightly faster than the other micros I had available. It helped, but I still needed further optimization to get the display to look better. The main problem was the array used to store the image. It was stored as a 2D array, and I was indexing it every loop. This means for every array access there had to be multiplication to figure out where to access. The final solution was saving a pointer to a row, so the multiplication does not happen multiple times. Indexing happens relative to the pointer.
To load new pictures on the wheel, I made a program in Visual Basic that takes an image file and creates arrays in with the color at certain polar coordinates. It then creates a C header file with the arrays in it ready to drop into my project. Just compile with the header file, reprogram the wheel, and the images have been changed.
Here is a picture of the wheel spinning. In the end, It had 6 screens and cycled through them. I also used it to ask my high school girlfriend to prom.