Main Content

I really like POV (persistence of vision) displays! They are not only interesting to look at but also a big challenge to develop them. It’s a really interdisciplinary task. You need a lot of skills: mechanical, electronic, programming and so on!
I’ve always wanted to build my own and make it as big and as capable as possible. One year ago I did it! It was a lot of work and very complex to do. I like these kind of challenges. So it was fun ;-)
Now I also want you to build one yourself. You can take this as a guide to develop your own or just follow the instructions to get a copy of my POV display. I will try to point out all the challenges I had to overcome to make mine.
I iterated on my design to make it as easy as possible to rebuild. There are no SMT components and everything should be solderable by beginners. Don’t get me wrong, it’s still a very big challenge to put everything together. But it should be doable!
WARNING: This project contains LEDs which are updated with high speeds and potentially trigger seizures for people with photosensitive epilepsy!
How does it work?Here you can read how a POV display works in general.
First we need a source which streams a video signal. In the original design I did it over WIFI. I wrote a program to capture the screen of a computer and send this data to an ESP8266 via WIFI. The problem of this approach is that the ESP8266 was too slow and the WIFI bandwidth was just enough for 16 FPS. So now we use an ESP32. I was thinking that all problems are fixed, but it turned out that the ESP32 also doesn’t offer more bandwidth over WIFI than the ESP8266. The ESP32 has enough computational power to decode a video stream though. So I ended up sending JPEG images over WIFI to the ESP32. Therefore the ESP32 hosts a website. On this site you can select images or videos and the website will then stream JPEGs to the ESP32. JPEG decoding needs a lot of memory so we have a problem there too. But it works for the moment. Maybe I will come up with a better solution later.
Next we need to control the LEDs themself. For this to work we need to know the exact position of the LEDs at every moment. Therefore I added a Hall effect sensor. Every rotation it passes a magnet and thus enables the detection. Then we measure the time of the rotation. We assume that the next rotation will take the same time. Therefore we can calculate our position. This process is repeated over and over. To control the LEDs we use an FPGA. We could also use a microprocessor but it will probably be too slow. The most outer LEDs need to be refreshed around 10.000 times per second. An FPGA is easily up to the task and will do that with less jitter.
If the LEDs need to be updated that often, we also need fast LEDs. In my original design I was using APA102 LEDs. They have a refresh rate of around 20KHz. I tried to get LED strips with these LEDs but the online seller sent me SK9822s and would tell me they are the same (happened twice …) So we will use the SK9822. They only have a refresh rate of 4.7kHz, but this will hopefully be enough. They also have a slightly different protocol. Just be aware. So the ESP32 is pushing the image frames to the FPGA. The FPGA is then controlling the LEDs.
Now the LEDs just need to rotate. Therefore we use a DC motor. This motor is controlled over a PWM signal from an ESP8266. The ESP8266 is also connected over WIFI to the ESP32. Therefore we need only one sensor to measure the rotation speed. In the original design I used two.
More Information about the system can be found in my video about the original design.

ToolsI used the following Tools:
3D printer Solder ironHot glue Super glue Micro USB Cable Scissors Drill + wood drill 3 4 8 and 12mm Screwdriver Flat pliers Side cutter Wire stripper Paint suppliesSand paperOrderI opened a TINDIE store. So you can buy a kit if you want and help me do more projects like this ;-)
OSHAs always everything you see here is published as open source.
UpdatesThere a some things I want to improve in the future:
Higher color resolution from 12 bit to 24 bit => therefore we need an FPGA with more RAM => Cmod A7, they are pin compatible :-)
ESP32 with PSRAM to avoid memory problems
Fix the brush problem …Supplies:Custom made partsYou need to order them or order a kit from me!
1 * Main PCB (gerber files are under the folder gerber main.zip)
1 * Motor Driver PCB (gerber files are under the folder gerber motor.zip)
4 * Corners 3D 1 Print (stl file is under the folder 3D corner.stl)
1 * Main PCB Holder 3D 3 Print (stl files are under the folder 3D holder1.stl,holder2.stl,holder3.stl)
1 * Brush Holder 3D 2 Print (stl files are under the folder 3D brush1.stl and brush2.stl)
Standard PartsBe careful, some of the links include 10 or even 100 piece packages.
1m * SK9822 LED Strip with 144 LED/m
1 * Cmod S6 FPGA
1 * Geekcreit 30 Pin ESP32 Development
1 * Geekcreit D1 mini V2.2.0 ESP8266
4 * 74HCT04
5 * DC-DC 5V 4A
1 * DC Motor 775
44 * 100nf 50V
9 * 220uf 16V
10 * Neodymium Magnet 10mmx2mm
1 * Hall effect sensor
2 * Carbon Bruches Dremel 4000
2 * Motor Carbon Brushes
1 * Bearings 6803ZZ
2 * Motor Mount 775
2 * DC Jack 5.5 x 2.1mm
1 * Power Supply
1 * Button 8mm
2 * XT30PB Plug Male and Female PCB
2 * XT30 Plug Male and Female Cable
2 * 130Ohm 1/4W Resistor
2 * MOSFET IRF3708PBF
2 * 1N5400
1 * Single Row Pin Header
1 * Female Header
1 * Cable 30AWG
1 * Cable 22AWG
Hardware store1 * MDF 500mm x 500mm x 10mm
1 * MDF 100mm x 500mm x 10mm
4 * MDF 200mm x 510mm x 10mm
1 * acrylic glass 500mm x 500mm x 2mm
12 * Metal Corner 40mm x 40mm x 40mm
40 * Wood screw 3mm x 10mm
6 * M3 spacer 12 mm
M3 and M4 screws
3m * Cable 2.5mm2 single wire/ stiff
Black paint for the MDF Wood
Build Time: ~ 10 hours
Build cost: ~ 300”

Link to article