AGS 2

Logo

DEL MICRÓFONO AL CEREBRO ARTIFICIAL: ¡JARVIS, ESTOY MOLESTO!

View the Project on GitHub RodolfoFerro/cerebroartificial

CLUB AGS 2 - “DEL MICRÓFONO AL CEREBRO ARTIFICIAL: ¡JARVIS, ESTOY MOLESTO!”

Descripción del Club

¿Puede una máquina saber si estás enojado solo por cómo suena tu voz? ¿Es posible que un dispositivo del tamaño de una tarjeta aprenda a reconocer emociones humanas? ¿Y cómo se entrena una IA para escuchar al mundo?

En este club exploraremos cómo la inteligencia artificial puede analizar señales de audio para identificar y clasificar emociones humanas, usando dispositivos pequeños de cómputo. A partir de grabaciones de voz, aprenderás cómo las máquinas transforman sonidos en datos, extraen patrones invisibles al oído humano y toman decisiones inteligentes.

Comenzaremos con las bases: ¿qué es el sonido y cómo se representa digitalmente?, y, ¿qué es una red neuronal artificial? Después entraremos al corazón del taller: entrenaremos modelos de aprendizaje de máquina para distinguir emociones (como el enojo) a partir del audio. Para ello utilizaremos Python, herramientas y métodos actuales de ciencia de datos, trabajando con modelos de IA usados hoy en día en investigación y desarrollo tecnológico.

Finalmente, llevaremos estos modelos al mundo físico al implementarlos en dispositivos pequeños, mostrando que la IA también puede vivir fuera de grandes servidores. Al finalizar, desarrollarás un proyecto funcional: una máquina capaz de escuchar y reconocer emociones.

Objetivos de aprendizaje

Instructores

Programa

Día 1 (20/07/2026)

📚 Contenidos

📒 Notebook: Base de señales

En este cuaderno aprenderás un sobre Python, creando un vector que representa una onda de audio y generando el sonido de la misma.

Base de señales

📒 Notebook: Introducción a Python

En este cuaderno aprenderás sobre Python, cómo funciona y resolveremos algunos ejercicios prácticos relacionados al procesamiento de imágenes y canales de color. Para poder abrir tu cuadernillo de trabajo, pulsa en el botón a continuación.

Introducción a Python


Día 2 (21/07/2026)

📚 Contenidos

📒 Notebook: Introducción a las redes neuronales artificiales

En este cuaderno aprenderás sobre qué son y cómo operan las neuronas artificiales, desde un contexto histórico, hasta la aplicación de este tipo de modelos para la resolución de problemas interesantes. Para poder abrir tu cuadernillo de trabajo, pulsa en el botón a continuación.

Introducción a Python

Día 3 (22/07/2026)

📚 Contenidos

📒 Notebook: Redes neuronales artificiales

En este cuaderno pondremos en práctica el conocimiento de las redes neuronales y aprenderás a utilizar TensorFlow para programar modelos más complejos. Para poder abrir tu cuadernillo de trabajo, pulsa en el botón a continuación.

Redes neuronales artificiales

📒 Notebook: Redes neuronales convolucionales

En este cuaderno pondremos en práctica el conocimiento de las redes neuronales convolucionales. Para poder abrir tu cuadernillo de trabajo, pulsa en el botón a continuación.

Redes neuronales convolucionales

Día 4 (23/07/2026)

📚 Contenidos

📒 Notebook: MicroLightCNN Tutorial

En este cuaderno procesaremos el audio y entrenaremos nuestro modelo estrella para utilizar en los circuitos, el modelo MicroLightCNN. Aquí pondremos en práctica todos los conocimientos adquiridos sobre el procesamiento de señales.

Redes neuronales convolucionales


🤖 Material: MicroESP32

Static Badge

Referencias

Presentaciones (Hugo):

Material para que revises:






ANEXO: Diagrama de conexiones — ESP32-S3 + Micrófono I2S + Matriz LED 8x8 (MAX7219)

Generado a partir de la lectura de src/main.cpp (definición de pines) y platformio.ini (board: esp32-s3-devkitc-1 / rymcu-esp32-s3-devkitc-1).

Actualización: se diagnosticó con src/mic_diag.cpp (entorno mic_diag en platformio.ini) que el pin L/R del micrófono está en bajo/flotando en vez de 3V3. En consecuencia, main.cpp se modificó para leer el canal izquierdo (I2S_CHANNEL_FMT_ONLY_LEFT) en vez del derecho — ver la sección del micrófono más abajo.

Componentes identificados en el código

Componente Evidencia en el código
ESP32-S3 DevKitC-1 (16MB flash, PSRAM) platformio.ini
Micrófono digital I2S (breakout tipo INMP441, pines GND, VDD, SD, L/R, WS, SCK) confirmado por el usuario a partir del breakout físico; el comentario // Configuración de pines I2S (sph0645) en main.cpp:58 se refiere solo a la config genérica, no al modelo exacto
Matriz LED 8x8 con driver MAX7219 (1 módulo) MD_MAX72XX mxObj(MD_MAX72XX::GENERIC_HW, MOSI_PIN, SCK_PIN, CS_PIN, NUM_MAT) en main.cpp:41, NUM_MAT = 1
Buzzer (activo, control ON/OFF directo) pinMode(BUZZER_PIN, OUTPUT); digitalWrite(...) en main.cpp

Tabla de conexiones

1. Micrófono I2S (breakout tipo INMP441: pines GND, VDD, SD, L/R, WS, SCK)

Pin del micrófono Conecta a (ESP32-S3) Constante en el código
VDD 3V3
GND GND
SCK GPIO2 I2S_BCLK (bit clock)
SD GPIO1 I2S_DOUT (datos seriales)
WS GPIO7 I2S_LRCL (word select / L-R clock)
L/R 3V3 (o sin conectar) Diagnosticado con mic_diag.cpp. main.cpp se ajustó para leer ese canal (I2S_CHANNEL_FMT_ONLY_LEFT) en vez de asumir el derecho.

2. Matriz LED 8x8 (módulo MAX7219, GENERIC_HW)

Pin de la matriz Conecta a (ESP32-S3) Constante en el código
VCC 5V (ver nota abajo)
GND GND
DIN GPIO13 MOSI_PIN
CLK GPIO14 SCK_PIN
CS (LOAD) GPIO10 CS_PIN

Nota sobre VCC del MAX7219: el chip MAX7219 está especificado para 4.0–5.5 V, así que lo ideal es alimentar el módulo desde el pin 5V del devkit (no 3V3), mientras que las señales DIN/CLK/CS del ESP32-S3 (lógica 3.3V) normalmente son reconocidas igual como “alto” por el MAX7219. Si notas parpadeos o comportamiento errático en la matriz, ese es el primer sospechoso (podría requerir un level shifter, aunque en la práctica casi siempre funciona sin él).

3. Buzzer

Pin del buzzer Conecta a (ESP32-S3) Constante en el código
Señal (+) GPIO21 BUZZER_PIN
GND (–) GND

El código solo hace digitalWrite(HIGH/LOW), así que se asume un buzzer activo (con oscilador integrado) que puede excitarse directo desde un GPIO. Si es un buzzer pasivo (solo emite tono con PWM), este circuito no lo hará sonar con el código actual — pero eso ya es una observación sobre el firmware, no sobre el cableado.

Diagrama esquemático (protoboard)

Se usa un diagrama Mermaid en vez de ASCII art: GitHub y VS Code (con la extensión de Markdown Preview Mermaid) lo renderizan como gráfico, así que no depende de alinear caracteres a mano.

graph LR
    subgraph ESP32S3 ["ESP32-S3 DevKitC-1"]
        P3V3["3V3"]
        P5V["5V"]
        PGND["GND"]
        G1["GPIO1"]
        G2["GPIO2"]
        G7["GPIO7"]
        G10["GPIO10"]
        G13["GPIO13"]
        G14["GPIO14"]
        G21["GPIO21"]
    end

    subgraph MIC ["Micrófono I2S (INMP441)"]
        M_VDD["VDD"]
        M_GND["GND"]
        M_SCK["SCK"]
        M_SD["SD"]
        M_WS["WS"]
        M_LR["L/R"]
    end

    subgraph MATRIX ["Matriz LED 8x8 (MAX7219)"]
        X_VCC["VCC"]
        X_GND["GND"]
        X_DIN["DIN"]
        X_CLK["CLK"]
        X_CS["CS / LOAD"]
    end

    subgraph BUZZ ["Buzzer"]
        B_POS["( + )"]
        B_NEG["( – )"]
    end

    P3V3 --> M_VDD
    PGND --> M_GND
    G2 -- "BCLK" --> M_SCK
    G1 -- "DOUT" --> M_SD
    G7 -- "LRCL/WS" --> M_WS
    P3V3 --> M_LR

    P5V --> X_VCC
    PGND --> X_GND
    G13 -- "MOSI" --> X_DIN
    G14 -- "SCK" --> X_CLK
    G10 -- "CS" --> X_CS

    G21 --> B_POS
    PGND --> B_NEG

Todos los GND (mic, matriz, buzzer, ESP32) deben ir a un plano de tierra común en la protoboard (raíl “-“).

Resumen rápido de pines usados en el ESP32-S3

GPIO Función
GPIO1 I2S SD / datos seriales (mic)
GPIO2 I2S SCK / bit clock (mic)
GPIO7 I2S WS / word select (mic)
GPIO10 CS matriz MAX7219
GPIO13 DIN matriz MAX7219
GPIO14 CLK matriz MAX7219
GPIO21 Buzzer
3V3 Mic VDD
5V VCC matriz MAX7219
GND Tierra común (mic, matriz, buzzer)