Sunday, 22 September 2013

PROPELLER VISION: An application of the phenomenon, "PERSISTENCE OF VISION"


it was the most fascinating project for me, now i would like to share the fascinating experience with you.
the   PROPELLER VISION is based on the phenomenon called  PERSISTENCE OF VISION.
and if you are not clearly aware of what is exactly persistence of vision, please go through this link , because this is the fundamental idea that you must be having for to go ahead with this project.
as the name suggest, propeller is consist of array  of LEDs, when it starts rotating and LEDs starts blinking in such a fashion that its end up giving you the sense of vision.
here the major question is, how the array of 8 or 12 LEDs can be able to represent a letter or word???
yes it was the 1st question that came into my mind when i  thought  about this project.
while doing this project keep one thing in mind that, this project is all about what you see and its not about what actually happens. and thats why it is restricted to normal humans and not for those super natural creatures who are having a very low timing(in micro seconds) for retaining an image in their retina.
if you are not understanding what i m talking about here,  you will soon be able to understand, just be patient!!
here you can see, if you have a board of LEDs consist of 35 LED. you can easily  show any number or alphabet. here no. of columns for each alphabet is 5 and no. LEDs in 1 column is 7.

In my case it was somewhat different, i choosed 12 LEDs and 9 columns.
here in the above figure you can see 3 major parts of our projects

(i) Microcontroller board: this one is the heart of this project, what it really does is, it  provides very fast switching of LEDs that can never be done manually.
it consist of a microcontroller(ATMEGA16) ,voltage regulator(7805),
 diode, switch, resistors,capacitors of suitable values.
you can either make your own board or purchase one and it will be a good idea for those who are not familier with microcontrollers to purchase one.these are easily online available, one of the online service i used is this.


(ii) IR sensor board: it helps to indicate the complition of one revolution. it's output is very important bacause program repeat itself after each revolution.
it consist of emitter , receiver, potentiometer,comparator etc
or you may simply use emitter , receiver nothing else.
for details please visit this page.



 (iii) Array of LEDs: using suitable resistors it can be made on any PCBs.value of resistor used depends on colour of diode and ofcourse on applied voltage,
and if you are not good at the calculation of resistors for LEDs, then visit this page.



(iv) MOTOR: it is the 4th imp part, i used induction motor bacause it's easy enough to use.



As far as power as the power supply in the running mode is concern, its entirely upto your ease of operation.
i had tried one more method for power supply that is use of BEARINGS. but it failed because of very high speed, bearings could not supply the power, here is the arrangement,


now its time to understand the whole process of working, it starts with the power supply, use an adaptor of 12v DC(or any, its upto you) which gives power to your microcontroller board, your board having an voltage ragulator(7805) which steps down the voltage to 5v DC. now u have VCC supply of 5V for your microconcontoller.
now select the appropriate pin for input of IR SENSOR and appropriate ports for output of LEDs in the microcontroller.
now its time to calculate TIME DELAY, which is the most important calculation that you need to do prior to programming.
in our arrangement we have an array of LEDs which makes only one column, but for showing a letter or a number we need here 9 columns(in my case) , each letter having some width hence each column having some width, that width is nothing but the duration of time for which the LEDs are ON.
so TIME DELAY is the duration of time for one column.

suppose you have an induction motor of 1000 rpm,
 so for one revolution time T=(60/1000) sec = .06 sec, and
suppose the radius of the propeller is 20cm,
circumference=(2*3.14*20)=125.6 cm
width  of one column= .5cm
no. of column=(125.6/.5)=251.2, approx.= 251
no. of letters if one letter is made of 9 column= (251/9)=27.88 approx= 29
time for one column=(time for one revolution/no. of column)=(.06/251)= 239 micro sec
suppose you are using an external crystal of 16 MHZ  as a clock, then no. of cycles in 1 sec=16000000.
so, no. of cycles in 239 micro sec= (239*16000000)/1000000= 3824 .

now we have calculated time for each column , so space between the letters can also be given by giving delay of 2 or 4 columns its upto you, and here the space means all the LEDs are OFF.

just for for checking all the electrical arrangements are corrects i connected all the LEDs to VCC in the microcontroller board and the motor and see how it looked... AMAZINGGG....

here the RED circle in center is  due to the LED in the microcontroller board, which is always ON.
now its time for some programming..

//Programmer: DEEP PATEL
//Target microcontroller: ATMEGA16

void bin(int a,int b,int c,int d,int e,int f,int g,int h,int i,int j,int k,int l)
    PORTC = (((1)<<7) | ((1)<<6) | ((1)<<5) | ((1)<<4) | ((a)<<3) | ((b)<<2) | ((c)<<1) | ((d)<<0));
    PORTA = (((e)<<7) | ((f)<<6) | ((g)<<5) | ((h)<<4) | ((i)<<3) | ((j)<<2) | ((k)<<1) | ((l)<<0));
int main()

       if(PINB & (1<<PB0))
         // case 'E'  
   {bin(0,0,0,0,0,0,0,0,0,0,0,0);} __delay_cycles(4500);
{bin(1,1,1,1,1,1,1,1,1,1,1,1);} __delay_cycles(4500);
{bin(1,1,1,1,1,1,1,1,1,1,1,1);} __delay_cycles(4500);
{bin(1,1,0,0,0,0,1,1,0,0,0,1);} __delay_cycles(4500);
{bin(1,1,0,0,0,0,1,1,0,0,0,1);} __delay_cycles(4500);
{bin(1,1,0,0,0,0,1,1,0,0,0,1);} __delay_cycles(4500);
{bin(1,1,0,0,0,0,0,0,0,0,0,1);} __delay_cycles(4500);
{bin(1,1,0,0,0,0,0,0,0,0,0,1);} __delay_cycles(4500);
{bin(1,1,0,0,0,0,0,0,0,0,1,1);} __delay_cycles(4500);
{bin(1,1,1,1,0,0,0,0,0,0,0,0);} __delay_cycles(4500);
   {bin(0,0,0,0,0,0,0,0,0,0,0,0);} __delay_cycles(12000);
// case 'M'
{bin(1,1,1,1,1,1,1,1,1,1,1,1);} __delay_cycles(4500);
{bin(0,0,0,0,0,0,0,0,0,1,1,0);} __delay_cycles(4500);
{bin(0,0,0,0,0,0,0,0,1,1,0,0);} __delay_cycles(4500);
{bin(0,0,0,0,0,0,1,1,1,0,0,0);} __delay_cycles(4500);
{bin(0,0,0,0,0,0,1,1,1,1,0,0);} __delay_cycles(4500);
{bin(0,0,0,0,0,0,0,0,1,1,1,0);} __delay_cycles(4500);
{bin(0,0,0,0,0,0,0,0,0,1,1,1);} __delay_cycles(4500);
{bin(1,1,1,1,1,1,1,1,1,1,1,1);} __delay_cycles(4500);
{bin(1,1,1,1,1,1,1,1,1,1,1,1);} __delay_cycles(4500);
   {bin(0,0,0,0,0,0,0,0,0,0,0,0);} __delay_cycles(12000);
       // case 'I'
{bin(1,1,1,0,0,0,0,0,0,0,0,0);} __delay_cycles(4500);
{bin(1,1,0,0,0,0,0,0,0,0,1,1);} __delay_cycles(4500);
{bin(1,1,0,0,0,0,0,0,0,0,1,1);} __delay_cycles(4500);
{bin(1,1,1,1,1,1,1,1,1,1,1,1);} __delay_cycles(4500);
{bin(1,1,0,0,0,0,0,0,0,0,1,1);} __delay_cycles(4500);
{bin(1,1,0,0,0,0,0,0,0,0,1,1);} __delay_cycles(4500);
{bin(1,1,1,0,0,0,0,0,0,0,0,0);} __delay_cycles(4500);
   {bin(0,0,0,0,0,0,0,0,0,0,0,0);} __delay_cycles(4500);
{bin(1,1,1,1,1,1,1,1,1,1,1,1);} __delay_cycles(4500);
     return 0;

after burning this program , it will show three letters... E M I.
i choosed these letters you can choose any.
here you can see i used delay cycle of 4500 instead of  3824 , because it was suitable for me, calculations are just the approximations, in reality you need to adjust some values.

now its time for the final video which shows GAURAV AND DEEP...
here i m GAURAV and DEEP is my project partner...

it was the joint effort of me and my partener.. hope it was helpful to you.
 if you have any query related to programming, you can directly contact DEEP PATEL via facebook
or you can leave your comment here.
and i m here for electronics related queries and you can connect with me also, via facebook