Calabaza de Halloween 2.0


Introducción

En este artículo, les mostraré cómo usar un ESP32 o ESP8266, un TCA9548A I2C Multiplexor, dos pantallas OLED de 1,3 pulgadas, tres sensores VL53L0X ToF y un pequeño trabajo de artesanía para darle un poco de vida a una calabaza para Halloween. Empecemos!

Lo que necesitamos

Número Componente Nota
1 ESP32 NodeMCU o ESP-32 Dev Kit C V4 o ESP8266 D1 Mini
Pantalla OLED I2C 128x64 de 1.3"
1 VL53L0X Sensor láser de distancia de tiempo de vuelo (ToF)
1 Multiplexor TCA9548A I²C
Connection cable
1 Fuente de voltaje externo 5V (recomendado)
1 Condensador de 100 µF (recomendado)
PC con Arduino IDE y conexión a Internet
Soldador (para los cabezales de los alfileres)
Calabaza (no tan grande, de unos 15 a 20 cm de diámetro)
Herramienta de tallado (de la cocina)



Para el funcionamiento de la batería: 

Número Componente Nota
1 Batería LiPo 3.7 V
1 MT3608 Step up Módulo
1 TP4056 Módulo controlador de carga
Switch  
Voltímetro


Diagrama de Circuito

Configure el circuito según el siguiente diagrama:


Añadí un condensador de 100µF en paralelo a la fuente de voltaje, porque los ESP son muy sensibles a las fluctuaciones de voltaje. Esto fue un consejo de un foro.

El D1 Mini y también algunos ESP32 no tienen un pin VIN designado. En este caso usan un voltaje constante de 5V en el pin de 5V del Microcontrolador. Preste atención a la hoja de datos.

Si usa una batería LiPo de 3,7V como yo, le recomiendo el módulo MT3608 Step up y el módulo controlador de carga TP4056, porque tiene que ajustar el voltaje. Utilice un voltímetro y ajuste el voltaje correcto en el potenciómetro (si el voltaje no cambia, tendrá que girar en sentido contrario a las agujas del reloj durante mucho tiempo). Puede recargar la batería fácilmente con el regulador de carga. También he añadido un interruptor en la salida de voltaje del convertidor para evitar tener que desconectar la batería cada vez.

NOTAS IMPORTANTES:

¡ASEGÚRESE DE NO CONECTAR LA FUENTE DE ALIMENTACIÓN EXTERNA Y EL PUERTO USB AL MISMO TIEMPO! - NO HAY DIODO DE BLOQUEO ENTRE LOS DOS CONECTORES

NO CONECTE UNA TENSIÓN EXTERNA AL PIN DE 3,3V! - hay un convertidor de tensión en el tablero, que suministra la tensión adecuada de los 5V en el pin de 3,3V.

EL VOLTAJE EXTERNO NO DEBE EXCEDER LOS 5V - A diferencia del conocido Arduino, los tableros ESP no tienen un convertidor de voltaje incorporado para generar 5V constantes en el pin VIN. Así que no se pueden conectar baterías de 9V directamente aquí

NO MOSTRAR FOTOGRAFÍAS PERIÓDICAMENTE - se recomienda cambiar los píxeles, ya que mostrar las mismas imágenes a lo largo del tiempo puede causar quemaduras.

La placa multiplexora, la placa de sensores ToF y también la placa de la pantalla tienen convertidores de voltaje incorporados, para que se puedan conectar 5V o 3,3V.

Por favor, consulte las hojas de datos de sus componentes. No me hago responsable de los daños causados por un manejo inadecuado.

Configuración del tablero

Estos son mis ajustes para los respectivos tableros. Es importante el ajuste de la frecuencia de la CPU, porque con esto podría aumentar la velocidad del reloj para el bus I2C. También se recomienda ajustar el Erase Flash a All Contents en el ESP8266.

ESP8266 D1 Mini:


ESP32 NodeMCU Devkit:


Los componentes

El Multiplexor I2C

Como ya ha visto arriba, la placa multiplexora tiene varios conectores:


En VIN y GND el tablero se alimenta con 3,3V o 5V de voltaje. SDA y SCL son las entradas para el I²C-Bus del microcontrolador. A diferencia de los pines TX/RX, no están conectados de forma cruzada. SDA a SDA y SCL a SCL (o también SCK). Con el pin RST en GND la placa se reinicia. Con los pines A0 a A2 la dirección estándar I²C (0x70) puede ser cambiada por diferentes combinaciones a 0x71 a 0x77. A0 es el bit más bajo. Si el pin se ajusta a HIGH, la dirección se incrementa en 1. Si se ajusta el pin A1 a HIGH, la dirección se incrementa en 2, el pin A2 a HIGH en 4.

Los componentes I²C se conectan a los pines SD0/SC0 a SD7/SC7. Es irrelevante cuáles son sus direcciones. El microcontrolador siempre se dirige sólo al multiplexor. El multiplexor obtiene un número del 0 al 7 escrito en un registro a través de la entrada del bus I²C, que cambia el flujo de datos a la salida correspondiente. Similar a la conmutación de un ferrocarril. El sensor soporta una frecuencia de reloj máxima de 400 KHz. Es posible poner en cascada varios multiplexores. Así es posible controlar hasta 64 dispositivos con 8 multiplexores.

VL53L0X Sensor de tiempo de vuelo (ToF)

Más información se puede encontrar en el blog VL53L0X Sensor láser de distancia de tiempo de vuelo (ToF).

Aquí utilizo tres sensores, cuyas direcciones I²C no he cambiado.

Pantalla OLED I2C 128x64 de 1,3"

Estas son pantallas con el chip SH1106. Las direcciones I²C no se pueden cambiar, por lo que se recomienda el uso del multiplexor. El control no es trivial, por lo que se deben utilizar bibliotecas como U8G2 o OneBitDisplay, que se pueden instalar a través de la gestión de bibliotecas (library management).


En el E-Book gratuito encontrará una guía de configuración. En el Blog 1.3 pulgadas OLED en funcionamiento, Albert Vu ya mostró cómo programar la pantalla.

La secuencia del programa abstracto

Cuando se inicia el programa, se debe mostrar una breve animación de los ojos para una primera prueba funcional. Éstos desaparecen de nuevo y el programa pasa a un modo de espera. De esta manera se guardan las pantallas y la pantalla brillante no siempre molesta en la oscuridad. El efecto sorpresa cuando alguien se acerca a la calabaza también es importante.

Si una persona se acerca y cae por debajo del límite especificado, la calabaza se despierta lentamente y los ojos se muestran ligeramente abiertos. Dependiendo del sensor que haya golpeado, los ojos miran en la dirección apropiada (centro, izquierda, derecha). Si la persona se acerca más, la calabaza se despierta y los ojos están abiertos. Si la persona está demasiado cerca de la calabaza, ésta se asustará y los ojos se abrirán más.

Si la persona se aleja de la proximidad de la calabaza, mirará a su alrededor durante otro minuto. Para ello, se muestran diferentes imágenes de los ojos al azar. Si después de este tiempo nadie debe acercarse, la animación de apagado se muestra de nuevo y el programa se pone en espera otra vez.
Para hacerlo un poco más animado, implementé una animación parpadeante. Para ello, el generador aleatorio seleccionará tiempos entre 4 y 6 segundos después de los cuales los ojos cerrados se mostrarán durante un tiempo muy corto.

Fotos para la pantalla

He creado algunas imágenes para representar los ojos. Debería haber tres direcciones y tres niveles de distancia. Así es como se ven mis fotos:


Las imágenes deben ser creadas en el formato de imagen apropiado (aquí 64x128 píxeles) y luego convertidas al formato XBM. Puede hacer esto en este sitio web. El programa de gráficos GIMP es otra posibilidad. Allí se exportan las imágenes en formato XBM.

Luego se abren los archivos con un editor de texto, preferiblemente uno como Notepad++. Luego puede copiar los datos y pegarlos en el imagedata.cpp en el lugar apropiado. Ya he hecho todo esto. Mi programa contiene todos los datos.

Trabajo de artesanía

El cartón es ideal para un prototipo que puede ser producido rápidamente. Puede ver rápidamente cómo se verá. De esta manera la electrónica puede ser probada.


Encontrar un buen lugar para los sensores no fue tan fácil. Me decidí por una especie de pedestal:


Recuerde que la calabaza aún está húmeda. He protegido las placas de circuito y las pantallas con película adhesiva (cling film) para evitar cortocircuitos. Puede fijar las pantallas cuidadosamente desde el interior con pequeños tornillos.

El microcontrolador podría no ser capaz de proporcionar la energía para que los LEDs iluminen el interior. Se podría conectar un LED de resistencia a la salida del step-up convertidor detrás del interruptor. Esto se iluminará cuando se encienda la tecnología.


Cuando todo esté en su lugar, puede colocar la calabaza en un lugar donde la gente pase a menudo. Los ojos deben ser capaces de seguir el movimiento de forma aproximada. 

Al final

Aquí puede descargar el programa completo. Por favor, copie los tres archivos en la misma carpeta.    

Es posible que el microcontrolador se atasque en un bucle de arranque. Esto se puede reconocer por el hecho de que no se muestra la animación de inicio de los ojos. Posibles causas o soluciones:

- La fuente de energía no es suficiente

- Configuración incorrecta del tablero durante la carga (ESP8266: CheckFlashConfig.ino, ejecute ESP32 ResetReason)

- Desconectar y volver a conectar la energía después de la carga
- En los bucles se dan tareas de fondo computando el tiempo con el rendimiento()


Como puede ver, la composición de la imagen de las dos pantallas está ligeramente retrasada en relación a la otra. Esto se debe a la frecuencia de reloj del bus I²C de las ESP y del multiplexor, que lamentablemente no puede ser acelerado más. Se debe añadir una iluminación interior. Si la potencia es aún suficiente, se podría utilizar el DFPlayer para generar ruido.


¡Diviértase con el Proyecto! 

Andreas Wolter

para el blog de AZ-Delivery

1 Kommentar

Alberto Ochoa

Alberto Ochoa

Articulo muy interesante y completo. Felicidades.

Einen Kommentar hinterlassen

Alle Kommentare werden vor der Veröffentlichung moderiert

Empfohlene Blogbeiträge

  1. ESP32 jetzt über den Boardverwalter installieren
  2. Lüftersteuerung Raspberry Pi
  3. Arduino IDE - Programmieren für Einsteiger - Teil 1
  4. ESP32 - das Multitalent
  5. OTA - Over the Air - ESP Programmieren über WLAN