Una versión propia creada en MediaLab_ del clásico tamagotchi. Está pensada para poder enseñar a los niños electrónica básica, sensores, respuestas y reacciones de una forma gráfica e interactiva.
La mascota es un pequeño pingüino animado que vive dentro de una pantalla OLED y que reacciona a distintas interacciones del usuario.
Este proyecto se utiliza principalmente en talleres educativos de MediaLab_, donde los participantes montan el hardware y cargan el firmware en un ESP32.
Proyecto creado por:
José Escobedo Vázquez
Integrante de MediaLab_
GotchiLab es una mascota electrónica interactiva basada en un ESP32, una pantalla OLED y varios sensores.
El sistema muestra animaciones del pingüino y responde a diferentes acciones del usuario.
El ciclo de vida comienza con un huevo, que se abrirá cuando detecte actividad cerca.
| Interacción | Acción |
|---|---|
| Detectar presencia cerca del sensor | El huevo se abre y nace el pingüino |
| Pulsar el botón | El pingüino come |
| Pasar la mano cerca | El pingüino recibe una caricia |
| Oscuridad | El pingüino se duerme |
| Vuelve la luz | El pingüino se despierta |
| Pulsar muchas veces el botón | El pingüino explota y el juego reinicia |
| Sonidos | Expresa emociones |
El objetivo del proyecto es explicar de forma sencilla:
- sensores
- entradas digitales
- entradas analógicas
- microcontroladores
- animaciones en pantalla
- interacción hardware/software
El comportamiento del pingüino se basa en diferentes estados:
| Estado | Descripción |
|---|---|
| IDLE_EGG | Estado inicial, el pingüino está dentro del huevo |
| BIRTH | Animación de nacimiento |
| IDLE | Estado normal del pingüino |
| FEED | Animación de comer |
| PET | Animación de caricia |
| SLEEP | Animación de dormir |
| POP | El pingüino explota por sobrealimentación |
- El sistema inicia siempre en IDLE_EGG.
- Cuando el sensor detecta presencia cercana, comienza BIRTH.
- Al terminar la animación de nacimiento, el pingüino entra en IDLE.
- Pulsar el botón activa la animación FEED.
- La animación de comida tiene prioridad hasta terminar.
- Si la mano se detecta a menos de 5 cm, se activa PET.
- La animación PET siempre se completa una vez iniciada.
- Si el sensor detecta oscuridad, el pingüino entra en SLEEP.
- La animación se detiene en el frame 10 mientras continúe la oscuridad.
- Cuando vuelve la luz, el pingüino vuelve a IDLE.
Si el botón de comida se pulsa muchas veces seguidas en poco tiempo:
- el pingüino explota
- se reproduce una animación POP
- se reproduce un sonido de explosión
- el sistema se reinicia
Después de la explosión:
POP → IDLE_EGG
El ciclo vuelve a comenzar desde el huevo.
| Componente | Cantidad |
|---|---|
| ESP32 DevKit | 1 |
| Pantalla OLED SSD1306 128x64 | 1 |
| Sensor ultrasónico HC-SR04 | 1 |
| LDR (fotoresistencia) | 1 |
| Resistencia 10kΩ | 1 |
| Resistencias divisor (1kΩ + 2kΩ) | 2 |
| Buzzer pasivo | 1 |
| Botón | 1 |
| Protoboard | 1 |
| Cables Dupont | varios |
| Componente | Pin ESP32 |
|---|---|
| OLED SDA | GPIO 22 |
| OLED SCL | GPIO 21 |
| Botón | GPIO 33 |
| HC-SR04 TRIG | GPIO 14 |
| HC-SR04 ECHO | GPIO 27 |
| Sensor de luz | GPIO 34 |
| Buzzer | GPIO 26 |
| OLED | ESP32 |
|---|---|
| VCC | 3.3V |
| GND | GND |
| SDA | GPIO 22 |
| SCL | GPIO 21 |
Configurado usando INPUT_PULLUP.
| Botón | ESP32 |
|---|---|
| Pin 1 | GPIO 33 |
| Pin 2 | GND |
Cuando se pulsa el botón se activa la animación FEED.
| HC-SR04 | ESP32 |
|---|---|
| VCC | 5V |
| GND | GND |
| TRIG | GPIO 14 |
| ECHO | GPIO 27 |
⚠ Importante:
El pin ECHO del HC-SR04 trabaja a 5V, lo cual no es seguro para el ESP32.
Debe usarse un divisor de tensión.
Ejemplo:
HC-SR04 ECHO
|
1kΩ
|
+---- GPIO 27
|
2kΩ
|
GND
Se conecta como divisor de tensión.
3.3V
|
[LDR]
|
+------ GPIO 34
|
[10kΩ]
|
GND
El ESP32 mide el nivel de luz con analogRead().
| Buzzer | ESP32 |
|---|---|
| + | GPIO 26 |
| - | GND |
El buzzer se controla mediante PWM del ESP32 (LEDC).
Produce sonidos para:
- nacimiento del pingüino
- comer
- caricias
- dormir
- explosión (POP)
El firmware está escrito en C++ usando el framework Arduino.
Puede compilarse con:
- PlatformIO
- Arduino IDE
Adafruit_GFX
Adafruit_SSD1306
Wire
Las animaciones se almacenan como arrays de frames.
Cada animación contiene:
- 15 frames
- resolución 128x64
- 1024 bytes por frame
Velocidad de reproducción:
FRAME_TIME_MS = 200 ms
Duración aproximada:
3 segundos por animación
| Animación | Descripción |
|---|---|
| penguin_idle_egg | Huevo esperando a nacer |
| penguin_birth | Nacimiento del pingüino |
| penguin_idle | Pingüino en estado normal |
| penguin_feed | Pingüino comiendo |
| penguin_pet | Pingüino recibiendo caricia |
| penguin_sleep | Pingüino dormido |
| penguin_pop | Explosión del pingüino |
El repositorio incluye un script en Python que permite convertir vídeos en animaciones compatibles con el firmware.
El script:
- redimensiona el vídeo a 128x64
- convierte cada frame a bitmap monocromo
- genera automáticamente dos archivos:
NombreDelVideo.c
NombreDelVideo.h
Estos archivos contienen los arrays de frames que se usan directamente en el firmware.
-
Colocar el vídeo dentro de la misma carpeta que el script.
-
Abrir una terminal en esa carpeta.
-
Ejecutar:
python mp4_a_c_array_v2.py NombreDelVideo.mp4 --base-name NombreDelVideo
Esto generará:
NombreDelVideo.c
NombreDelVideo.h
que podrán integrarse directamente en el proyecto.
El proyecto se utiliza en talleres de MediaLab_ para introducir conceptos como:
- sensores
- microcontroladores
- animaciones en pantallas pequeñas
- programación embebida
- interacción hardware/software
Está diseñado para que los participantes puedan:
- montar el circuito
- cargar el firmware
- modificar animaciones
- experimentar con nuevos comportamientos.