Before starting explanation about this project I would like to apologized for low quality image and video , but honestly it is really hard to took a sharp and clear image from running POV with normal camera like my mobile camera. It need very fast diaphragm optical lens to capture true motion, But I will upload the better video when I pass my budget limitation and buy CANON camera

What is the POV

POV stand for Persistence Of Vision Globe which is related to phenomenon of human vision. Light stimulus lingers as an aftereffect on the retina for about 1/10 of a second. When light stimuli are sequenced in rapid succession, they merge into one continuous image. In fact it’s the basis for film and television devices, . POV make such illusion (deceive us) and create the image by rotation the array of LED lights around a single point or axis

How POV works

POV displays, a linear (1-dimensional) array of LED lights rotates around a single point, like a bike wheel. By measuring their rotation rate and controlling their flashes with millisecond precision, we can create the illusion of a 2or 3-dimensional image lingering in thin air. Let’s Consider the single frame of any effect (image , text,…), each frame consist of many pixel and hence many lines in plane or spherical area, POV display this imagewith single line of image which is position changed along with its rotation to fill that image , so the problem is how to precisely control LED pixel color in manner of time and space so it could create whole image

POV are categorized base on axis of rotation, type of effect can display and how much color can create.

  • By different axis of rotation, can produce planar, cylindrical and spherical POV display

planar POV

cylindrical POV

spherical POV

  • POV can create simple static text effect to 25 fps motion picture


  • POV can use simple single-color LED or high speed smart pixels like WS2812 or APA104

in this project 1 meter of 144 APA102 LED strip used to create motion effect and full color image. each image converted to 200 lines of strip by following java code

PImage img,black_b,image_load;
PrintWriter output;
 
int SQL;
float led_t;
byte[] pov_data; 
int line_num=200;
String _OUTPUT="";



void setup()
{
output = createWriter(_OUTPUT); 
black_b= createImage(SQL, SQL, RGB);
black_b.loadPixels();
for (int i = 0; i < black_b.pixels.length; i++) {  black_b.pixels[i] = color(0, 0, 0); }
black_b.updatePixels(); 
background(black_b);
 img = loadImage("myImage.jpg");
}
int l=0;
void draw() 
{
  if(l>=line_num) {noLoop();output.flush();output.close();}
  background(black_b);
  pushMatrix();
             imageMode(CENTER);  
             translate(SQL/2, SQL/2);
              rotate(radians(l*360/line_num));
              image(img, 0, 0);
  popMatrix();
  pushMatrix();
       for(int i=0;i<144;i++)
       {
         color c = get(int(i*led_t+led_t/2), int(SQL/2));
         output.print((char)red(c)+""+(char)green(c)+""+(char)blue(c));     
        // print((char)red(c)+""+(char)green(c)+""+(char)blue(c)+";");
          fill(c);
          rect(i*led_t, (SQL/2)-(led_t/2),led_t,led_t);
      }
    //  println();
   popMatrix();
  // delay(500);
  l++; 
}

void keyPressed() 
{
  output.flush();  // Writes the remaining data to the file
  output.close();  // Finishes the file
  exit();  // Stops the program
}



void mousePressed(){  loop();}

after files pixelized then is ready to upload to the Wifi Controller. in the controller code each file read as per pre defined scenario and will display in the LED strip line by line . to keep POV display fix, hal sensor has been used to check whether new rotation completed. we can display each frame in the every beginning the rotation. more detail available in the following code

static byte L=0;
File FILe;
static uint8_t * _4kbuffer,LED_BUFFER;
bool StartUpShow=true,SHOW=false,Start_new_round=false;
String IMAGES[30]={};
byte  IMAGES_Prior[]={0,1,2,3,4},IMAGE_NUM=0;
int DURATION[]={5,5,5,5,5};
const int IMAGES_LINES=200;
static int image_index=0, Current_imageLine=0;
 
volatile uint32_t t_start_round=0,t_stop_round=0,OpenlastTime=0,lastLineShow=...
Read more »