In this project, I am going to make an Awesome POV display in tilt version propeller type with use of a reed switch (magnet sensor). There are lots of varieties available on internet for this project like some of clocks, wireless, vibration based, bicycle and many more POV display but I want to make a tilt version of this project. You can display texts, time and images.
In this blog,
we take a look on these steps are:-
>>What is POV Display
and how it’s work.
>>Components List
>>Circuit Diagram
>>Construction of
Propeller
>>The Code
>>The Final Output
What is POV Display and how it works
POV Display stands for
Persistence of Vision. The POV or, Persistence of Vision, it’s a kind of
optical illusion that’s work when a series of lights present so fast (the delay
between flashing the lights one to other is usually lots of millisecond) in a
sequence then the human eyes can’t capture and it’s give an illusion that the
images are created in rotating motion.
Components List
1x Arduino Pro Mini or (You
can use Arduino Nano, Uno, Pro Micro and many more with consist ATMEGA32xx
Microcontrollers).
10x LED’s
1x 3.7V Li-Po battery
1x Reed Switch
1x Magnet
10x 47 Ohms
1x Switch
Some Wires
Circuit
Diagram
Now follow this circuit diagram
of the POV display using Arduino.
The Digital 2 to Digital 11 is
for led and the Digital 12 for Reed Switch with a pull down resistor.
Connect the Li-Po Battery in
VCC and GND pin with a use of On/Off Switch.
Construction of Propeller
First we need a Sun board or
cardboard what you have. Cut in the size of 15CM Scale which is 15x2CM. In
order to fix the motor, drill a hole on the centre of the board (but I have
used an old CPU fan that I don’t need any hole I just glue it with fan or you
can use any type of motor) now just fix the motor. After the motor works, we
need to glue the Arduino Pro mini the front of the sun board and glue the 3.7V
Li-Po Battery on the centre of Sun board where we already fix motor sap. Now
add the reed switch at the end of board in vertical position and add a neodium
magnet where you set the main base.
The Code
I have two code, one for sensor based and second non-sensor.
Open the Arduino IDE on your pc Copy these code and paste on your IDE then compile first for check the complete code then select the Com Port and Board after all Upload the code on your Arduino Board.
const unsigned char font[95][5] = { {0x00,0x00,0x00,0x00,0x00}, // 0x20 32 {0x00,0x00,0x6f,0x00,0x00}, // ! 0x21 33 {0x00,0x07,0x00,0x07,0x00}, // " 0x22 34 {0x14,0x7f,0x14,0x7f,0x14}, // # 0x23 35 {0x00,0x07,0x04,0x1e,0x00}, // $ 0x24 36 {0x23,0x13,0x08,0x64,0x62}, // % 0x25 37 {0x36,0x49,0x56,0x20,0x50}, // & 0x26 38 {0x00,0x00,0x07,0x00,0x00}, // ' 0x27 39 {0x00,0x1c,0x22,0x41,0x00}, // ( 0x28 40 {0x00,0x41,0x22,0x1c,0x00}, // ) 0x29 41 {0x14,0x08,0x3e,0x08,0x14}, // * 0x2a 42 {0x08,0x08,0x3e,0x08,0x08}, // + 0x2b 43 {0x00,0x50,0x30,0x00,0x00}, // , 0x2c 44 {0x08,0x08,0x08,0x08,0x08}, // - 0x2d 45 {0x00,0x60,0x60,0x00,0x00}, // . 0x2e 46 {0x20,0x10,0x08,0x04,0x02}, // / 0x2f 47 {0x3e,0x51,0x49,0x45,0x3e}, // 0 0x30 48 {0x00,0x42,0x7f,0x40,0x00}, // 1 0x31 49 {0x42,0x61,0x51,0x49,0x46}, // 2 0x32 50 {0x21,0x41,0x45,0x4b,0x31}, // 3 0x33 51 {0x18,0x14,0x12,0x7f,0x10}, // 4 0x34 52 {0x27,0x45,0x45,0x45,0x39}, // 5 0x35 53 {0x3c,0x4a,0x49,0x49,0x30}, // 6 0x36 54 {0x01,0x71,0x09,0x05,0x03}, // 7 0x37 55 {0x36,0x49,0x49,0x49,0x36}, // 8 0x38 56 {0x06,0x49,0x49,0x29,0x1e}, // 9 0x39 57 {0x00,0x36,0x36,0x00,0x00}, // : 0x3a 58 {0x00,0x56,0x36,0x00,0x00}, // ; 0x3b 59 {0x08,0x14,0x22,0x41,0x00}, // < 0x3c 60 {0x14,0x14,0x14,0x14,0x14}, // = 0x3d 61 {0x00,0x41,0x22,0x14,0x08}, // > 0x3e 62 {0x02,0x01,0x51,0x09,0x06}, // ? 0x3f 63 {0x3e,0x41,0x5d,0x49,0x4e}, // @ 0x40 64 {0x7e,0x09,0x09,0x09,0x7e}, // A 0x41 65 {0x7f,0x49,0x49,0x49,0x36}, // B 0x42 66 {0x3e,0x41,0x41,0x41,0x22}, // C 0x43 67 {0x7f,0x41,0x41,0x41,0x3e}, // D 0x44 68 {0x7f,0x49,0x49,0x49,0x41}, // E 0x45 69 {0x7f,0x09,0x09,0x09,0x01}, // F 0x46 70 {0x3e,0x41,0x49,0x49,0x7a}, // G 0x47 71 {0x7f,0x08,0x08,0x08,0x7f}, // H 0x48 72 {0x00,0x41,0x7f,0x41,0x00}, // I 0x49 73 {0x20,0x40,0x41,0x3f,0x01}, // J 0x4a 74 {0x7f,0x08,0x14,0x22,0x41}, // K 0x4b 75 {0x7f,0x40,0x40,0x40,0x40}, // L 0x4c 76 {0x7f,0x02,0x0c,0x02,0x7f}, // M 0x4d 77 {0x7f,0x04,0x08,0x10,0x7f}, // N 0x4e 78 {0x3e,0x41,0x41,0x41,0x3e}, // O 0x4f 79 {0x7f,0x09,0x09,0x09,0x06}, // P 0x50 80 {0x3e,0x41,0x51,0x21,0x5e}, // Q 0x51 81 {0x7f,0x09,0x19,0x29,0x46}, // R 0x52 82 {0x46,0x49,0x49,0x49,0x31}, // S 0x53 83 {0x01,0x01,0x7f,0x01,0x01}, // T 0x54 84 {0x3f,0x40,0x40,0x40,0x3f}, // U 0x55 85 {0x0f,0x30,0x40,0x30,0x0f}, // V 0x56 86 {0x3f,0x40,0x30,0x40,0x3f}, // W 0x57 87 {0x63,0x14,0x08,0x14,0x63}, // X 0x58 88 {0x07,0x08,0x70,0x08,0x07}, // Y 0x59 89 {0x61,0x51,0x49,0x45,0x43}, // Z 0x5a 90 {0x3c,0x4a,0x49,0x29,0x1e}, // [ 0x5b 91 {0x02,0x04,0x08,0x10,0x20}, // \ 0x5c 92 {0x00,0x41,0x7f,0x00,0x00}, // ] 0x5d 93 {0x04,0x02,0x01,0x02,0x04}, // ^ 0x5e 94 {0x40,0x40,0x40,0x40,0x40}, // _ 0x5f 95 {0x00,0x00,0x03,0x04,0x00}, // ` 0x60 96 {0x20,0x54,0x54,0x54,0x78}, // a 0x61 97 {0x7f,0x48,0x44,0x44,0x38}, // b 0x62 98 {0x38,0x44,0x44,0x44,0x20}, // c 0x63 99 {0x38,0x44,0x44,0x48,0x7f}, // d 0x64 100 {0x38,0x54,0x54,0x54,0x18}, // e 0x65 101 {0x08,0x7e,0x09,0x01,0x02}, // f 0x66 102 {0x0c,0x52,0x52,0x52,0x3e}, // g 0x67 103 {0x7f,0x08,0x04,0x04,0x78}, // h 0x68 104 {0x00,0x44,0x7d,0x40,0x00}, // i 0x69 105 {0x20,0x40,0x44,0x3d,0x00}, // j 0x6a 106 {0x00,0x7f,0x10,0x28,0x44}, // k 0x6b 107 {0x00,0x41,0x7f,0x40,0x00}, // l 0x6c 108 {0x7c,0x04,0x18,0x04,0x78}, // m 0x6d 109 {0x7c,0x08,0x04,0x04,0x78}, // n 0x6e 110 {0x38,0x44,0x44,0x44,0x38}, // o 0x6f 111 {0x7c,0x14,0x14,0x14,0x08}, // p 0x70 112 {0x08,0x14,0x14,0x18,0x7c}, // q 0x71 113 {0x7c,0x08,0x04,0x04,0x08}, // r 0x72 114 {0x48,0x54,0x54,0x54,0x20}, // s 0x73 115 {0x04,0x3f,0x44,0x40,0x20}, // t 0x74 116 {0x3c,0x40,0x40,0x20,0x7c}, // u 0x75 117 {0x1c,0x20,0x40,0x20,0x1c}, // v 0x76 118 {0x3c,0x40,0x30,0x40,0x3c}, // w 0x77 119 {0x44,0x28,0x10,0x28,0x44}, // x 0x78 120 {0x0c,0x50,0x50,0x50,0x3c}, // y 0x79 121 {0x44,0x64,0x54,0x4c,0x44}, // z 0x7a 122 {0x00,0x08,0x36,0x41,0x41}, // { 0x7b 123 {0x00,0x00,0x7f,0x00,0x00}, // | 0x7c 124 {0x41,0x41,0x36,0x08,0x00}, // } 0x7d 125 {0x04,0x02,0x04,0x08,0x04}, // ~ 0x7e 126 }; // define the Arduino LED pins const int LEDpins[] = {2,3,4,5,6,7,8,9,10,11}; //only 8 pins, //pins 2 and 11 is for the inner and outter ring int rows = 8; // Total LEDs in a row const int charHeight = 8; const int charWidth = 5; const int _povDelay = 10; //persistence of vision need 1/10 of second const int _delay = 400; //delay for letters // sensor setup const int sensorPin = 12; // define the Arduino sensor pin // the sensor is a Reed Switch with pull down resistor // connected to the +5Vdc int sensVal; // variable to store the value coming from the sensor (not used) int i; int State = 0; int lastState = 0; //put your message here char textString[] = "Eleco Techoz"; void setup(){ //reed switch sensor pin connected at pin 12 and is an input pinMode(sensorPin,INPUT); // all other pins are outputs (2,3,4,5,6,7,8,9,10,11) // the stick has 10 LEDs (8 for letters and 2 for the inner and outter ring) for (i = 0; i <=11; i++){ pinMode(LEDpins[i],OUTPUT); } //digitalWrite(2,HIGH); //digitalWrite(11,HIGH); }//end of setup void loop(){ digitalWrite(2,HIGH); //digitalWrite(10,HIGH); digitalWrite(11,HIGH); State = digitalRead(sensorPin); //get the sensor state if(State != lastState){//if sensor state changed if(State == HIGH){//if sensor state is high delayMicroseconds(_povDelay); //POV delay 1/10 of second //writes the message for (int k=sizeof(textString)-1; k>-1; k--){ printNormalLetter(textString[k]); } } lastState = State; } //delayMicroseconds(_povDelay); //POV delay 1/10 of second }//end of main loop //normal and forwards printted letters void printNormalLetter(char ch){ // make sure the character is within the alphabet bounds (defined by the font.h file) // if it's not, make it a blank character if (ch < 32 || ch > 126){ ch = 32; } // subtract the space character (converts the ASCII number to the font index number) ch -= 32; // step through each byte of the character array for (int i=charWidth-1; i>-1; i--) {//width = 5 so i=4 to 0 byte b = font[ch][i]; for (int j=0; j<charHeight; j++) {//height = 8 so j=0 to 7 digitalWrite(LEDpins[j+1], bitRead(b,j)); } delayMicroseconds(_delay); } //clear the LEDs for (i = 0; i < rows; i++){ digitalWrite(LEDpins[i+1] , LOW); } // space between letters delayMicroseconds(_delay); } //inverted (flipped) and backwards printed letters void printInvertedLetter(char ch){ // make sure the character is within the alphabet bounds (defined by the font.h file) // if it's not, make it a blank character if (ch < 32 || ch > 126){ ch = 32; } // subtract the space character (converts the ASCII number to the font index number) ch -= 32; // step through each byte of the character array for (int i=0; i<charWidth; i++) { byte b = font[ch][i]; for (int j=0; j<charHeight; j++) { digitalWrite(LEDpins[j+1], bitRead(b, 7-j)); } delayMicroseconds(_delay); } //clear the LEDs for (i = 0; i < rows; i++){ digitalWrite(LEDpins[i+1] , LOW); } // space between letters delayMicroseconds(_delay); }
The Final Output
Here is the final Output of
the Propeller display. Check my complete video where I made a complete tutorial
Video with demonstration of this POV display. After this Project, I want to
make a wireless (Wireless means not wireless voltage or power supply) POV
display which is controlled over Bluetooth or Wi-Fi with a smartphone
application. We need to change some code for this idea and some tests after
that I shall upload a video or blog.
Comments
Post a Comment