Introduction: POV De Perritos

Picture of 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.

Step 1: 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.

Step 2: Diseño E Implementación

Picture of Diseño E Implementación

  1. 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.
  2. Ahora implementaremos un código y un ensamble analógico que haga que el motor haga todo girar como lo deseamos.
  3. Como paso siguiente ensamblamos todas las partes y hacemos los ajustes necesarios para que la proyección funcione con el entorno y sea clara.
  4. 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

Step 3: Implementación

Picture of 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); }

Step 4: Resultado

Al final se ven 3 perritos simplificados, en pixel art.

Comments

tomatoskins (author)2016-05-06

I love POV displays! Thanks for sharing!

About This Instructable

165views

1favorite

License:

More by hobomotion:POV de perritos
Add instructable to: