Las navidades pasadas, os enseñamos a controlar las luces de Navidad de vuestro árbol de navidad, este año, os traemos un nuevo proyecto navideño. Se trata de un simpático robot para adornar el árbol de Navidad basado en Arduino, el cuál dará luz y alegría a nuestra casa.
El cerebro del robot de Navidad será una placa Arduino Pro Mini, y contará con una pantalla con la que mostrar una serie de animaciones con motivo navideño además de ojos iluminados y un altavoz para reproducir música típica de estas fechas.
Componentes
La lista de componentes que necesitaremos es la siguiente:
- Arduino Pro Mini. Este será el cerebro del robot, el cuál controlará las imágenes mostradas en pantalla, los leds y música. Escogemos este modelo de Arduino, debido a su compacto tamaño.
- Pantalla OLED de 0.96 pulgadas. Si os interesa aprender más cómo usar este tipo de pantallas, os dejamos esta entrada en la que ya hablamos de ellas.
- Batería y cargador de batería. En nuestro caso, usaremos una batería de 300mah con un tamaño compacto. Además usaremos el módulo HW 373 para cargar la batería mediante puerto USB-C.
- Zumbador y pulsador. Usaremos el zumbador para reproducir las melodías navideñas, y el pulsador para activar la melodía cuando queramos.
- Interruptor. Opcionalmente podemos poner un interruptor entre borne positivo de la batería y la entrada de energía (Vin) del Arduino. De este modo podremos apagar y encender el robot cuando queramos.
- LEDs. Nosotros usaremos 2 leds de color azul para iluminar los ojos del robot, vosotros podéis usar el color que más os guste.
- Resistencias. 2 de 220 Ohm o similar para no quemar los LEDs y una de 5K Ohm o similar para el pulsador.
- Cable para hacer las conexiones.
- Piezas del robot. En nuestro caso hemos impreso el robot con una impresora en 3D. Aquí os dejamos las piezas modeladas en 3D que hemos diseñado, por si queréis imprimirlas vosotros mismos. Aunque también podríais crear el robot usando material como cartón o cualquier otro material que pueda soportar el peso de los componentes.
- Pintura. Opcionalmente podéis pintar el robot con los colores que más os gusten para darle un toque más alegre.
Circuito
Os dejamos a continuación un enlace a tinkercad con el circuito. https://www.tinkercad.com/things/gaiCn0MMJwq
Tened en cuenta que Tinkercad no dispone de la opción de usar una pantalla OLED como la que hemos usado en nuestro proyecto, por eso hemos puesto una de 7 segmentos pero que dispone de las mismas conexiones que la pantalla OLED, es decir:
- Vcc para alimentar la pantalla. En este caso usaremos 3,3 Voltios.
- GND o masa, como punto de referencia a 0 Voltios.
- SDA (Serial Data), es decir la información que Arduino mandará a la pantalla para representar lo que programemos. Este irá conectado al puerto A4 de Arduino.
- SCL (Serial Clock), es decir, la señal de reloj. En este caso irá conectado al puerto A5 de Arduino.
Montaje
Para el montaje y ver el proyecto en movimiento, os dejamos el vídeo que hemos subido a nuestro canal de Youtube a continuación:
Código
El código de este proyecto lo podéis encontrar en nuestro repositorio en Github:
https://github.com/KBugeados/Bug-e-Navidad/blob/main/bug-e.ino
Cómo usar vuestras propias animaciones en la pantalla
El código que hemos compartido, incluye una animación que muestra varios iconos navideños (podéis ver en el vídeo cuáles), pero vosotros mismos podéis poner la animación que prefiráis. Para ello podéis buscar una imagen animada (gif) y usar una web como esta, la cual os permite convertir gifs en varias imágenes estáticas.
Simplemente deberéis añadir tantas variables de este tipo «const unsigned char myBitmapX [] PROGMEM» como frames tenga vuestra animación. Siendo X el número del frame. En nuestro caso usamos solo 7 frames, ya que la memoria de Arduino es muy limitada, por lo que tened en cuenta que no podréis usar muchos frames (recomendable no usar más de 15).
1 | const unsigned char myBitmap7[] PROGMEM = {}; |
Además, deberéis añadir todas esas variables que hayáis creado dentro del array llamado «allbitmaps«, como en el siguiente ejemplo:
1 2 3 | const uint8_t *allbitmaps[] = { myBitmap1, myBitmap2, myBitmap3,myBitmap4,myBitmap5,myBitmap6,myBitmap7 }; |
Por último, en el siguiente bucle for, debería modificar el número de iteraciones por el número total de frames que tenga vuestra animación. Por ejemplo, en nuestro caso al ser 7 frames, usamos 7.
1 2 3 4 5 6 7 8 9 | for(frame=1; frame<7; frame++){ if(digitalRead(musicButton) == 1){ break; } display.clearDisplay(); display.drawBitmap(0, 0, allbitmaps[frame], SCREEN_WIDTH, SCREEN_HEIGHT, 1); display.display(); delay(1000); } |
Como extra, hemos añadido un efecto glitch a la animación introduciendo ruido en la pantalla. Para ello hacemos un segundo bucle for, el cuál recorre posiciones en memoria que no han sido asignadas (en nuestro caso las posiciones 18 a 25), de este modo mostrará ruido y dará lugar a ese efecto de glitch. Podéis eliminar este bucle for si no os gusta el efecto, o modificar los valores 18 a 25 por otros más altos si usáis más frames que nosotros.
1 2 3 4 5 6 7 8 9 10 | //Efecto glitch (ruido) for(frame=18; frame<25; frame++){ if(digitalRead(musicButton) == 1){ break; } display.clearDisplay(); display.drawBitmap(0, 0, allbitmaps[frame], SCREEN_WIDTH, SCREEN_HEIGHT, 1); display.display(); delay(50); } |
Cómo reproducir otras melodías
Nosotros hemos decidido poner la melodía llamada «Merry Christmas» para reproducir por el zumbador, pero podéis poner la melodía que más os guste a vosotros. Para ello, simplemente deberéis modificar la variable «melody» y añadir las notas de vuestra melodía:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | int melody[] = { // We Wish You a Merry Christmas // Score available at https://musescore.com/user/6208766/scores/1497501 NOTE_C5,4, //1 NOTE_F5,4, NOTE_F5,8, NOTE_G5,8, NOTE_F5,8, NOTE_E5,8, NOTE_D5,4, NOTE_D5,4, NOTE_D5,4, NOTE_G5,4, NOTE_G5,8, NOTE_A5,8, NOTE_G5,8, NOTE_F5,8, NOTE_E5,4, NOTE_C5,4, NOTE_C5,4, NOTE_A5,4, NOTE_A5,8, NOTE_AS5,8, NOTE_A5,8, NOTE_G5,8, NOTE_F5,4, NOTE_D5,4, NOTE_C5,8, NOTE_C5,8, NOTE_D5,4, NOTE_G5,4, NOTE_E5,4, NOTE_F5,2, NOTE_C5,4, //8 NOTE_F5,4, NOTE_F5,8, NOTE_G5,8, NOTE_F5,8, NOTE_E5,8, NOTE_D5,4, NOTE_D5,4, NOTE_D5,4, NOTE_G5,4, NOTE_G5,8, NOTE_A5,8, NOTE_G5,8, NOTE_F5,8, NOTE_E5,4, NOTE_C5,4, NOTE_C5,4, NOTE_A5,4, NOTE_A5,8, NOTE_AS5,8, NOTE_A5,8, NOTE_G5,8, NOTE_F5,4, NOTE_D5,4, NOTE_C5,8, NOTE_C5,8, NOTE_D5,4, NOTE_G5,4, NOTE_E5,4, NOTE_F5,2 }; |
En el siguiente enlace, podéis encontrar muchas melodías ya convertidas a este formato soportado por Arduino, por si queréis probar cualquiera de ellas: https://github.com/robsoncouto/arduino-songs
Tened en cuenta, que la memoria de Arduino es muy limitada, por lo que es posible que tengáis que recortar la melodía para que tanto la animación en pantalla como la melodía funcionen correctamente. En nuestro caso la hemos recortado como podéis ver más arriba en el código.
¡Y eso es todo! Esperemos que os haya gustado el robot de navidad basado en Arduino y os animéis a hacerlo vosotros mismos. Como siempre, gracias por leernos y si tenéis cualquier duda, estaremos encantados de intentar ayudaros.