martes, 16 de agosto de 2016

Proceso de Zero (2): La electrónica del casco



¡continuamos con el tutorial de Zero! en el primer tutorial  (te recomiendo echarle un ojo si no lo has visto) se explicó el proceso de la base + visor del casco, con lo que ya tendríamos el casco completamente terminado para el cosplay... ¿Pero que sería del cosplay, si en cada cosplay que hacemos no vamos mas allá? Así que cuando se decidió hacer el grupal de Borderlands 2, intenté probar a meterle un sistema de leds con dibujos integrado al casco, que fuera fácil de manipular y, si se podía, modular.


La idea era hacer lo más parecido a esto:


Así que para comenzar, tocó empezar a documentarse sobre el tema. Advierto que aunque soy ingeniero informático, no tengo conocimientos de electrónica ni arduino, y lo poco que aprendí... ni me acuerdo. Así que todo esto fue un proceso desde zero (badabummm tshhhh).

Así que documentando y buscando por internet fuí por estos pasos:

- Placa Arduino: busqué por mi ciudad y solo hay una tienda que los distribuya, peeeero si tienes tiempo de sobra para recibir los pedidos, las opciones de AliExpress son MUY rentables. Yo me pillé un kit completo de componentes, pero puedes optar por comprar placas sueltas. Finalmente usé un arduino Leonardo, aunque si quieres algo mas pequeño con un Arduino UNO también irás bien. Si no tienes conocimientos de Arduino, no te preocupes, todos valdrán, solamente variará la potencia, pero para nuestro caso el mas pequeño valdrá.



- Cableado: Igualmente, si no tienes problemas en esperar a recibirlos, por AliExpress hay opciones de compra, el cableado de este tipo es de 10cm normalmente, y vas a necesitar MUCHO, así que mas de una vez tuve que volver a la tienda a por mas, mi recomendación es comprar cables hembra-hembra y macho-macho, para poder utilizar bien las entradas/salidas de los componentes.

- Leds: Aquí fue donde mas perdido estaba... inicialmente intenté ir a por lo mas fácil, en la web Adafruit habías una matrices de leds ya preparadas, y aunque son en colores RGB, su precio desbordaba el proyecto. Así que tuve que tirar una vez mas de AliExpress y compré estos leds rojos, para el casco solo hicieron falta 6, aunque compré de más por si acaso ( a 1€ y algo comparado con los de Adafruit a 44€..). Pero realmente con 4 hubiera ido bien para hacer las figuras del casco. Esta última opción requiere ponerse con más código, pero por la diferencia de precio, vale la pena.


- Botones: Aquí compré varios componentes, para probar opciones. La primera fue un módulo de infrarrojos, pero tuve bastantes problemas siguiendo los tutoriales (por falta de tiempo), aunque no tiene pinta de ser excesivamente complicado y da la posibilidad de tener un mando suelto para poder usar el casco, ahorrando cables, el plazo del cosplay no me dejó experimentar con este componente. Así que terminé usando una botonera (hay de 4 y 16 botones), que aunque inicialmente iba a ser de 4, el nº de imágenes que iba a representar se me quedaba corto, así que fuí por la opción de 16.

-Batería: Otro tema que me preocupaba era el consumo de la placa+leds. Los leds se alimentan a través de Arduino, y éste por una salida USB (o dependiendo del modelo a veces una salida de alimentación opcional). Por suerte, con un powerBank comprado por 5€ en el Leroy Merlín me dió para un día entero (encendiendo y apagando los leds, no sabría decir el consumo de los leds siempre encendidos, pero recomiendo hacer una prueba antes).


Comienza la aventura: montando el frontal de Leds


La idea era montar 6 matrices de leds,  de manera que quedara de la siguiente manera:

A B
C D
E F
Así si cada matriz de Leds, es de 8 x 8 leds, tendría una mega matriz de 24 filas x 16 columnas.
Como se puede apreciar en la imagen siguiente, cada matriz, viene con un chip (llamado Max7219)



Este chip, aunque necesario, estorba a la hora de unir los leds entre ellos, ya que dejaría hueco entre ellos, y no daría la impresión de hacer una matriz grande. Lo bueno, es que todo viene simplemente encajado a presión, con lo que nos basta tirar del panel leds, para desengancharlo del chip, que quedaría tal que así:



¿Cómo unimos los leds de nuevo al chip entonces? Pues utilizando cableado, de manera que tendremos de nuevo cada matriz a su chip mediante 16 cables (ya dije que ibamos a necesitar MUCHO cable).

Una vez que cada matriz Led, esté separado y cableado a sus respectivos chips, tendríamos algo así:

¡Perfecto! ya tenemos una matriz enorme, ahora habrá que hacerla fija. Aquí se planteó un problema: quería realizar una tabla de madera con agujeros para que cada "pata" de led pasara. Los agujeros debían ser lo suficientemente justos como para que el cable/pata quedara fijo por la presión. Pero no pude lograrlo, así que simplemente uní el cableado, los leds con un poco de silicona.

(Imagen de como quedaba con un poco de poliestireno extruido)

Bien, ya tenemos los leds unidos, pero ¿Como demonios los conecto entre ellos y al arduino?
Bien, lo primero que vamos a hacer es conectar el  Max7219 que llamamos A a Arduino (recuerda la tabla de como los llegamos a conectar mas arriba). Es muy sencillo, cada Max7219 es de la siguiente manera:

(imagen extraída de http://frightanic.com )

Si miramos el chip de frente veremos 5 patas:
- VCC: Voltaje de alimentación, deberá ir conectado al arduino, a la salida de 5V
- GND: Toma de tierra, deberá ir conectado a la salida de GND de Arduino.
- DIN: entrada de datos. Esta pata recibirá la información de Arduino
- CS:  "Chip Select", entrada para "identificar" cada chip.
- CLK: entrada de reloj. Da la señal de reloj a los leds, para mantener sincronizados

Las entradas VCC y GND van por defecto a 5v y GND del arduino, las otras 3 van conectadas a los pines que nosotros queramos, en mi caso fueron conectados a los pines 12 (DIN), 11 (CLK) y 10 (LOAD o CS).

Una vez está el Max7219 A conectado, conectar el resto es pan comido: podemos observar que en la parte superior del chip hay unos pines de salida, éstos están en el mismo orden que los de entrada, así que bastaría conectar, el primero de la izquierda con un cable, al primero de la izquierda del siguiente Max7219, y así con el resto. Debería quedar algo como la siguiente imagen:



(imagen extraía de HobbyComponents.com )


Mientras tengamos claro que estamos conectando los leds igual que en la tabla que pusimos arriba: A->B->C->D->F y pongamos pegatinas identificando los grupos de cables, para no hacernos un lío, todo irá como la seda. De todas maneras podemos hacer una prueba del sistema completo antes de tenerlo todo colocado:

(No llegué a guardar el código para mostrar texto, pero al conectarlo todo deberían encenderse TODAS las matrices)




(ve asegurando que todo cabe en el casco con tu cabeza... yo por poco no lo logro)

Llegados a este punto, sólo nos falta agregar botones y código a nuestro casco. El sistema de botones es bastante simple. basta conectar los pines de los botones en orden a los pines de Arduino desde el 2 al 9 (de esta manera, entre los botones y los leds, en mi caso se quedaron todos los pines de mi arduino ocupados)

La botonera iba escondida dentro del guante, de tal manera que el cableado desde la botonera al Arduíno, recorría toda la manga de la chaqueta, y luego el cuerpo hasta la cintura (donde tenía el arduino y los chips de los leds a modo de cinturon), y a su vez, los cables desde los chips a la matriz led, subía por todo el interior de la chaqueta hasta el casco.

Quedaría tal que así:

A programar (o no..)


Pues con todo el sistema conectado, basta con meter el código. Para ahorrar el trabajo he subido el código que tengo yo para mi casco en ESTE GIST

Para poder meter el código en nuestra placa arduino, basta con descargar el IDE de Arduino e instalarlo. Crear un fichero nuevo y copiar el código que he dejado arriba.
Para que el código se suba correctamente, hay que tener configurado el modelo de placa que tenemos ( en mi caso un Arduino Leonardo), y el puerto (normalmente será COM1, no da mucho donde elegir).

Y no habrá mas que darle al icono de Subir (la flecha superior izquierda), con la placa conectada al PC mediante USB.


Ya deberíamos tener funcionando nuestro casco (sí, lo sé, siento el video vertical...):



y listo, ya tenemos nuestro casco con caras, corazones, y lo que es mas importante, ¡el cero!




NOTAS IMPORTANTES SOBRE EL CÓDIGO:

Como ya indiqué, el plazo del cosplay y el ser la primera vez que usé Arduino y sus componentes hicieron que fuea un poco a tiro hecho, así que el código no es un grán código, y de hecho si eres programador, verás que hay muchas maneras de hacerlo mejor.
Ahora unas notaciones para que el código funcione en tu caso:
El código se divide en varios bloques
- definición de los pines de los LEDS
- dibujos del casco
- definición de los pines de los botones
- código para dibujar

Vayamos por partes

Definición de los pines de los LEDS viene dada por la siguiente linea:

LedControl lc = LedControl(12, 11, 10, maxLeds); //

Si has cambiado los pines que indiqué de los LEDS-ARDUINO, deberás sustituir los nº 12, 11 y 10 por los que has usado, recuerda que debe ser los pines de DIN, CLK y CS

Los dibujos están formado por cada matriz independiente, si te fijas cada fila de matriz viene dada por una B y 8 dígitos ( ceros o unos), donde cada 0 indica led apagado y 1 led encendido, de tal manera que hacer una carita feliz con una sola matriz sería:


B00000000
B00000000
B01100110
B01100110
B00000000
B01000010
B01111110
B00000000



En mi caso tuve un pequeño inconveniente con la posición de los leds, y mi matriz quedó de la siguiente manera:
EF
CD
AB
en vez de:
AB
CD
EF

así que en código verás los dibujos un poco descolocados, cada icono está formado por las matrices ordenadas, bastaría con recolocarlas.

Definición de los botones:
char keys[ROWS][COLS] = {
  {'A', 'B', 'C', 'D'},
  {'E', 'F', 'G', 'H'},
  {'I', 'J', 'K', 'L'},
  {'M', 'N', 'O', 'P'},
};

// Connect keypad ROW0, ROW1, ROW2 and ROW3 to these Arduino pins.
byte rowPins[ROWS] = { 2, 3, 4, 5 };
// Connect keypad COL0, COL1 and COL2 to these Arduino pins.
byte colPins[COLS] = { 6, 7, 8, 9 };

El código de arriba define las filas/columnas de los pines, que están conectados del 2 al 9 al arduino, así que si igual que con los pines de los LEDS, los conectaste en otro orden, aquí deberías cambiarlos.

Código de dibujo:
cada botón tiene un dibujo asignado de la siguente manera:
- se define la variable con sus matrices de 0 y 1,
- se hace un case del botón (que va de A a P) y su dibujo a ese botón

Así que si queremos crear un dibujo nuevo, solamente tendremos que crear una variable nueva:

int caritaNueva[6][8] = {
B00000000,
B00000000,
....

y en el código de dibujo añadir:

     case 'F': 
        drawMatrix(caritaNueva);
        break; 

donde F será el botón, y caritaNueva el dibujo que hicimos previamente

No hay comentarios:

Publicar un comentario