Documentación Técnica

Proto_Synth v1.0

Plataforma educativa basada en ESP32 desarrollada por GC Lab Chile. Laboratorio portatil para aprender microcontroladores, electrónica y programación.

Introducción

Proto_Synth v1.0 es una plataforma de desarrollo educativa diseñada por GC Lab Chile, basada en el microcontrolador ESP32. Este dispositivo funciona como un laboratorio de aprendizaje completo que permite explorar conceptos fundamentales de electrónica, programación de microcontroladores y procesamiento de audio digital.

Se fabricaron solo 30 unidades de esta versión, cada una funcionando como una plataforma versátil que puede ser programada para múltiples propósitos educativos, de prototipado y obviamente como un sintetizador.

Posibilidades de la Plataforma

Aprendizaje de Microcontroladores

Control de LEDs, lectura de botones y potenciómetros, temporización y comunicación serie.

Procesamiento de Audio

Generación de señales, síntesis de ondas, procesamiento en tiempo real y efectos digitales.

Proyectos de Control

Sistemas basados en sensores, interfaces de usuario e instrumentos electrónicos.

Experimentación Avanzada

IoT, conectividad WiFi/Bluetooth, algoritmos de procesamiento y interfaces MIDI.

Versatilidad Educativa

Esta plataforma sirve como punto de entrada para comprender cómo los microcontroladores interactúan con componentes físicos, procesamiento en tiempo real y creación de dispositivos interactivos complejos a partir de componentes simples.

Generación de Código con IA

Esta documentación puede ser utilizada directamente con IA como ChatGPT o Claude para generar código específico para tus proyectos. Simplemente comparte estas especificaciones y describe lo que quieres lograr.

Necesito ayuda programando el Proto_Synth v1.0, una plataforma educativa basada en ESP32 desarrollada por GC Lab Chile. ESPECIFICACIONES TÉCNICAS: - Microcontrolador: ESP32 con DAC integrado de 8 bits - Voltaje: 3.3V lógico, alimentación 5V USB - DAC Audio: Pin 25 (GPIO 25), resolución 8 bits (0-255) HARDWARE DISPONIBLE: Potenciómetros (lectura analógica 0-4095): - Pot 1: GPIO 13 - Pot 2: GPIO 14 - Pot 3: GPIO 27 - Pot 4: GPIO 12 Botones (INPUT_PULLUP, activos en LOW): - Botón 1: GPIO 32 - Botón 2: GPIO 33 - Botón 3: GPIO 26 - Botón 4: GPIO 35 LEDs (OUTPUT, corriente máx 40mA): - LED 1: GPIO 2 - LED 2: GPIO 5 - LED 3: GPIO 22 - LED 4: GPIO 23 FUNCIONES BÁSICAS: - Lectura potenciómetros: analogRead(pin) // retorna 0-4095 - Lectura botones: !digitalRead(pin) // invertido por pull-up - Control LEDs: digitalWrite(pin, HIGH/LOW) - Audio: dacWrite(DAC1, valor) // valor 0-255 CAPACIDADES ESP32: - CPU: Dual-core hasta 240MHz - Memoria: 520KB SRAM, típicamente 4MB Flash - Conectividad: WiFi 802.11 b/g/n, Bluetooth v4.2 - Frecuencia de muestreo audio: hasta ~40kHz - Impedancia DAC: ~1kΩ, voltaje máx 3.3V Mi proyecto específico es: [DESCRIBE AQUÍ TU PROYECTO]

Especificaciones Técnicas del Hardware

Microcontrolador Principal

Especificación Valor
Modelo ESP32 (con DAC integrado de 8 bits)
Voltaje de operación 3.3V
Alimentación 5V vía USB o fuente externa
Características WiFi, Bluetooth, múltiples GPIO, ADC, DAC

Entradas Analógicas

Componente Pin GPIO Rango
Potenciómetro 1 GPIO 13 0-4095
Potenciómetro 2 GPIO 14 0-4095
Potenciómetro 3 GPIO 27 0-4095
Potenciómetro 4 GPIO 12 0-4095

Entradas Digitales

Componente Pin GPIO Estado
Botón 1 GPIO 32 Pull-up interno
Botón 2 GPIO 33 Pull-up interno
Botón 3 GPIO 26 Pull-up interno
Botón 4 GPIO 35 Pull-up interno

Salidas Digitales

Componente Pin GPIO Corriente Máx
LED 1 GPIO 2 40mA
LED 2 GPIO 5 40mA
LED 3 GPIO 22 40mA
LED 4 GPIO 23 40mA

Salida de Audio

Componente Pin GPIO Resolución
DAC Audio DAC1 (GPIO 25) 8 bits (0-255)

Consideraciones Eléctricas Importantes

  • Impedancia de salida del DAC: Aproximadamente 1kΩ
  • Voltaje máximo de salida del DAC: 3.3V
  • Corriente máxima por pin GPIO: 40mA
  • Voltaje lógico: 3.3V (tolerante a 5V en algunos pines)

Programación del Hardware

Configuración Básica de Pines

// Configuración de entrada para potenciómetros (ya configurados por defecto como ADC) // No requiere configuración adicional para lectura analógica // Configuración de botones con pull-up interno pinMode(32, INPUT_PULLUP); // Botón 1 pinMode(33, INPUT_PULLUP); // Botón 2 pinMode(26, INPUT_PULLUP); // Botón 3 pinMode(35, INPUT_PULLUP); // Botón 4 // Configuración de LEDs como salidas pinMode(2, OUTPUT); // LED 1 pinMode(5, OUTPUT); // LED 2 pinMode(22, OUTPUT); // LED 3 pinMode(23, OUTPUT); // LED 4 // DAC se configura automáticamente al usar dacWrite()

Funciones Básicas de Lectura y Escritura

Lectura de Potenciómetros

int valor_pot1 = analogRead(13); // Rango: 0-4095 int valor_pot2 = analogRead(14); int valor_pot3 = analogRead(27); int valor_pot4 = analogRead(12);

Lectura de Botones

bool boton1_presionado = !digitalRead(32); // Invertido por pull-up bool boton2_presionado = !digitalRead(33); bool boton3_presionado = !digitalRead(26); bool boton4_presionado = !digitalRead(35);

Control de LEDs

digitalWrite(2, HIGH); // Encender LED 1 digitalWrite(5, LOW); // Apagar LED 2 digitalWrite(22, HIGH); // Encender LED 3 digitalWrite(23, LOW); // Apagar LED 4

Salida de Audio

dacWrite(DAC1, valor); // valor: 0-255 (8 bits)

Ejemplos de Código Básico

Ejemplo 1: Control Simple de LED con Botón

void setup() { pinMode(2, OUTPUT); // LED 1 pinMode(32, INPUT_PULLUP); // Botón 1 } void loop() { if (!digitalRead(32)) { // Si botón presionado digitalWrite(2, HIGH); // Encender LED } else { digitalWrite(2, LOW); // Apagar LED } }

Ejemplo 2: Control de Brillo con Potenciómetro

void setup() { pinMode(2, OUTPUT); } void loop() { int valorPot = analogRead(13); // Leer potenciómetro (0-4095) int brillo = map(valorPot, 0, 4095, 0, 255); // Mapear a PWM (0-255) analogWrite(2, brillo); // Controlar brillo del LED delay(10); }

Ejemplo 3: Secuencia de LEDs

int leds[] = {2, 5, 22, 23}; int numLeds = 4; void setup() { for(int i = 0; i < numLeds; i++) { pinMode(leds[i], OUTPUT); } } void loop() { for(int i = 0; i < numLeds; i++) { digitalWrite(leds[i], HIGH); delay(200); digitalWrite(leds[i], LOW); } }

Ejemplo 4: Generación de Tono Simple

void setup() { // DAC se configura automáticamente } void loop() { int frecuencia = analogRead(13); // Leer potenciómetro frecuencia = map(frecuencia, 0, 4095, 100, 1000); // Mapear a frecuencia float periodo = 1000000.0 / frecuencia; // Período en microsegundos // Generar onda cuadrada simple dacWrite(DAC1, 255); // Alto delayMicroseconds(periodo / 2); dacWrite(DAC1, 0); // Bajo delayMicroseconds(periodo / 2); }

Aplicaciones Educativas Sugeridas

Nivel Principiante

  • Control básico: Encender/apagar LEDs con botones
  • Lectura analógica: Mostrar valores de potenciómetros en LEDs
  • Secuencias: Crear patrones de LEDs
  • PWM: Control de brillo variable

Nivel Intermedio

  • Generación de audio: Tonos simples y formas de onda básicas
  • Interfaces de usuario: Menús con botones y feedback visual
  • Temporizadores: Eventos programados y multitarea básica
  • Comunicación serie: Debug y monitoreo de valores

Nivel Avanzado

  • Síntesis de audio: Osciladores complejos y modulación
  • Conectividad: Proyectos IoT con WiFi/Bluetooth
  • Procesamiento de señales: Filtros digitales y efectos
  • Sistemas de control: Automatización y respuesta en tiempo real

Recursos para Desarrollo

  • Arduino IDE: Más simple para principiantes
  • PlatformIO: Más avanzado para proyectos complejos
  • ESP-IDF: Framework oficial de Espressif
  • Documentación ESP32: Datasheet y guías técnicas

Características del ESP32

Capacidades del Microcontrolador
  • CPU: Dual-core Tensilica Xtensa LX6, hasta 240MHz
  • Memoria: 520KB SRAM
  • Flash: Típicamente 4MB
  • WiFi: 802.11 b/g/n
  • Bluetooth: v4.2 BR/EDR y BLE
Limitaciones a Considerar
  • Resolución del DAC: 8 bits (256 niveles)
  • Frecuencia de muestreo: Hasta ~40kHz para audio
  • Corriente máxima: 40mA por pin
  • Ruido del DAC: Puede requerir filtrado

Código de Ejemplo: Secuenciador de Trance

Descarga este ejemplo completo de un secuenciador de música electrónica que demuestra todas las capacidades del Proto_Synth v1.0. Incluye síntesis de audio, filtros digitales, control de tempo, múltiples escalas musicales y patrones de secuencia.

Secuenciador Electrónico Completo

Un ejemplo avanzado que transforma tu Proto_Synth en un sintetizador completo con:

Características del Código
  • 🎵 16 patrones musicales diferentes
  • 🎼 6 escalas musicales (Mayor, Menor, Árabe, etc.)
  • ⚡ Tempo variable 40-300 BPM
  • 🔊 Filtro paso-bajo con resonancia
Controles
  • 🎚️ Pot 1: Frecuencia de corte del filtro
  • 🎚️ Pot 2: Resonancia del filtro
  • 🎚️ Pot 3: Tempo de la secuencia
  • 🎚️ Pot 4: Control de envelope
Descargar trance_sequencer.ino

Archivo listo para cargar directamente en Arduino IDE. Tamaño: ~15KB

Cómo usar el código

  1. Descarga el archivo trance_sequencer.ino
  2. Abre Arduino IDE y carga el archivo
  3. Selecciona la placa "ESP32 Dev Module"
  4. Conecta tu Proto_Synth y sube el código
  5. Experimenta con los controles y crea música!

Conexión de Audio

Conecta un altavoz o auriculares al pin 25 (DAC) del Proto_Synth. Para mejor calidad de audio, se recomienda usar un amplificador pequeño o auriculares de alta impedancia.