POV display or how you can simulate a hologram

Onze verontschuldigingen, dit bericht is alleen beschikbaar in Amerikaans Engels. Voor het gemak van de kijker, is de inhoud hieronder weergegeven in de alternatieve taal. Je kunt klikken op de link om naar de actieve taal over te schakelen.

  Let’s begin this article with a short note of what is a hologram and what does holography mean. If you think that you have never seen a hologram then probably you are wrong, because they are present for example on your credit card and driver’s license. This type of hologram isn’t really impressive, it simply changes the color or shape, or both when tilted. On the other hand, there are two-dimensional images displayed on transparent screens which create the illusion of three-dimensional images floating in space, believe me, those are fabulous.

  To avoid misinterpretation of some technical terms, here is an abbreviation list:

  • POV – persistence of vision;
  • RGB – red, green, blue;
  • LED – light emitting diode;
  • PWM – pulse width modulation;
  • LC – inductor, capacitor;
  • BLDC – brushless direct current motor;
  • PCB – printed circuit board;
  • SPI – serial peripheral interface;
  • SMD – surface mounted device.

  To achieve the result described above, we are going to use the power of POV, Persistence-Of-Vision, an optical phenomenon which ensures that your world doesn’t turn black every time you blink. To go more in detail, POV is the result of the human visual system inertia, which perceives the light in intervals of 70 to 100 milliseconds, depending on the light intensity and color.

  Now let’s build a machine that would fool our visual system and make us believe in magic. The image is going to be created from a spinning ray of RGB LEDs, controlled by some PWM drivers and of course, a microcontroller which will rule everything.

  All these components should be attached to the rotor of a motor which will rotate at about 1200rpm. Here comes one of the biggest challenges of this project, how to provide power supply to the rotating part. Even though the principles of wireless power transmission are straightforward, building two LC resonant circuits which would oscillate on the same frequency independent of the load power consumption is quite tricky and time-consuming, that’s why an off-the-shelf solution has been chosen for this project.

  Here is the list of components:

  • 1 x BLDC PC fan – SPIRE FD12025C1E;
  • 1 x 5V / 2A wireless power module (bought from AliExpress);
  • 1 x STM32L073CZT6 – 32bit ARM microcontroller;
  • 4 x TLC5947 – 12-bit grayscale, constant current PWM driver with 24 channels;
  • 32 x 100F1206-RGB-CA – common anode SMD RGB LEDs;
  • 1 x TCRT1000 – reflective optical sensor;
  • 1 x MIC2005 – current limiting switch used as microSD power supply switch;
  • 1 x LD1117ADT33T – low-drop voltage regulator.

  The components listed above combined with SMD resistors and capacitors were used to develop the electrical diagram of the device.

Fig. 1 Electrical diagram. TLC5947 driving circuit

Fig. 2 Electrical diagram. Control circuit

  I chose PROTEUS as a development tool for electrical and PCB prototyping, even though it isn’t on top of the list of preferences among biggest electronics design companies, however, it’s very popular among students and hobbyists because of the user-friendly interface, customizable library and the possibility to simulate electrical circuits. A very cool feature that I like is the generation of the 3D model of the PCB.

  Now that you’ve seen the PCB, let me explain how these 32 RGB LEDs can reproduce a 64×64 pixel color image. Our transparent display is a circle composed of n sectors, all of which have a width equal to 360°/n degrees. The images are usually stored as a bi-dimensional array, every pixel position from the image matrix is defined using cartesian coordinates, for example, pixel_1(x, y). On the other hand, the position of the pixels on the screen is defined using polar coordinates, pixel_1(θ, r), which is why we need to convert cartesian coordinates to polar coordinates. The resulting array is stored in the FLASH memory of the MCU.


Fig. 3 Cartesian vs. Polar Coordinates

  To determine the reference point and the revolution period, an optical reflective sensor is used. This way T period of each rotation is determined and thus the period of each sector is calculated by the following formula: T/n. This ensures that even at unstable RPM, the image will be stationary and synched.

Fig. 4 Circular display divided into sectors

  To prove all the things stated above, here is a short video demonstration (since the camera is recording at 30fps, some flickering is noticeable).


  Next step will be to display animations, but as the FLASH memory of the MCU is limited to 192KB, an external memory card is required. The MicroSD slot and all required hardware are already mounted on the PCB, the only thing that remains to configure is the second SPI channel and implement a display buffer that would act as a bridge between the data from the microSD and the display array. Also, there is a Bluetooth module mounted on the PCB which will allow uploading images or text on the microSD card wirelessly.

  Stay tuned for the second part!

Share this article:

Alex H.
PLC Engineer