POV De Perritos
Tomando en cuenta que este fenómeno visual permite que una imagen permanezca en la retina una décima de segundo más después de verla, es posible que veamos una secuencia de imágenes independientes como ininterrumpidas, creando la ilusión de movimiento o una forma compleja a partir de un punto en movimiento.
Se pretende desarrollar un artefacto que mediante una hélice con LED’s. En nuestro proyecto tratamos de lograr la visualización de un perrito hecho en pixel art, el cual es preferible para este tipo de proyecto por el uso de leds.
La Idea
Para la creación de esto, hicimos una breve exploración de pruebas y diseños interactivos ya existentes que asimilan lo que queremos lograr.
Awesome POV (Persistence of Vision) COLOR Display!
En este video se proyecta una animación similar al juego de Super Mario Bros, en una interface estilo POV en forma de hélice, creando una animación limpia, llena de color, y fluida.
Diseño E Implementación
- Como primer paso haremos que el código de arduino proyecte la animación del perro salchicha como la queremos, esto será probado con una cámara con foco lento y moviendo las tiras de LED’s.
- Ahora implementaremos un código y un ensamble analógico que haga que el motor haga todo girar como lo deseamos.
- Como paso siguiente ensamblamos todas las partes y hacemos los ajustes necesarios para que la proyección funcione con el entorno y sea clara.
- Ajustes finales.
Materiales
- Arduino uno Cables de cobre (número de LEDs a usar + el cable de tierra. En nuestro caso 8)
- Ventilador
- LED’s (7)
- Protoboard (mini, en nuestro caso)
- Placa o barra para juntar todo
- 1 Pila de 9V
- Adaptador de batería para Arduino uno
- Resistencias
- Lápices
- Cinta
- Tijeras
- Computadora
Implementación
El codigo:
/////////////////////
#define msgLength 1 String msgBody = "3";
/////////////////////
#define delayInChar 6 #define delayBetweenChar 10
#define LED1 2 #define LED2 3 #define LED3 4 #define LED4 5 #define LED5 6 #define LED6 7 #define LED7 8 byte msgCode[(5 * msgLength) + 10]; boolean pintState; int columnNum = -1; String charToWrite;
void setup() { Serial.begin(9600); msgBody.toUpperCase(); pinMode(LED1, OUTPUT); pinMode(LED2, OUTPUT); pinMode(LED3, OUTPUT); pinMode(LED4, OUTPUT); pinMode(LED5, OUTPUT); pinMode(LED6, OUTPUT); pinMode(LED7, OUTPUT); }
void loop() { ///Convert all text to binary array ////// if ( columnNum == -1) // This block needs to be done once// { for (int c = 0; c < (msgBody.length()); c++) { //Separate the following character charToWrite = msgBody.substring(c, c + 1); //Send to separated characted to addChar function addChar(charToWrite); } //Add a little space after each character addChar(""); addChar(""); }
//////////////////////////////////////////////////////
//Display the binary arrays after all characters are coded // for (int c = 0; c < (sizeof(msgCode)); c++) { pintState = (msgCode[c] / B1000000) % B10; digitalWrite(LED1, pintState);
pintState = (msgCode[c] / B100000) % B10; digitalWrite(LED2, pintState);
pintState = (msgCode[c] / B10000) % B10; digitalWrite(LED3, pintState);
pintState = (msgCode[c] / B1000) % B10; digitalWrite(LED4, pintState);
pintState = (msgCode[c] / B100) % B10; digitalWrite(LED5, pintState);
pintState = (msgCode[c] / B10) % B10; digitalWrite(LED6, pintState);
pintState = msgCode[c] % B10; digitalWrite(LED7, pintState);
delay(delayInChar); //if the character is finished, take a longer off period if ((c + 1) % 5 == 0) { digitalWrite(LED1, LOW); digitalWrite(LED2, LOW); digitalWrite(LED3, LOW); digitalWrite(LED4, LOW); digitalWrite(LED5, LOW); digitalWrite(LED6, LOW); digitalWrite(LED7, LOW); delay(delayBetweenChar); } } ///////////////////////////////////////// }
void addChar(String y) { if (y == "1") { addColumn(B0000100); addColumn(B0011111); addColumn(B1111111); addColumn(B0011111); addColumn(B0011111); addColumn(B0011111); addColumn(B0011111); addColumn(B1111111); addColumn(B0011111); addColumn(B0011110); addColumn(B0001110); addColumn(B0001100); } else if (y == "2") { addColumn(B0011100); addColumn(B0001000); addColumn(B0001000); addColumn(B0001000); addColumn(B0111110); addColumn(B1011101); addColumn(B0011100); addColumn(B0011100); addColumn(B0011100); addColumn(B0011100); addColumn(B0011100); addColumn(B0011100); addColumn(B0011100); addColumn(B0001000); } else if (y == "3") { addColumn(B1111111); addColumn(B0011111); addColumn(B0011111); addColumn(B1111111); addColumn(B0011111); addColumn(B0001100);
addColumn(B1111111); addColumn(B0011111); addColumn(B0011111); addColumn(B1111111); addColumn(B0011111); addColumn(B0001100);
addColumn(B1111111); addColumn(B0011111); addColumn(B0011111); addColumn(B1111111); addColumn(B0011111); addColumn(B0001100);
} } void addColumn(byte x) { columnNum += 1; msgCode[columnNum] = (x); }
Downloads
Resultado
Al final se ven 3 perritos simplificados, en pixel art.