Ecualizador Digital de 6 Bandas

Voy a redimensionar el PCB y reacomodar el placement para reservar 75×9 mm por cada fader, alineados horizontalmente con separación suficiente. Mantendré el ESP32 arriba con antena al borde y los capacitores cerca de cada wiper.
He avanzado hasta donde fue posible:
  • Redimensioné la PCB a 510 × 100 mm, suficiente para alojar seis faders físicos de 75 mm alineados horizontalmente con márgenes y separación.
  • Se mantuvo el stackup en 2 capas, adecuado para este diseño de señales ADC de baja velocidad.
  • El análisis de densidad quedó favorable: la placa tiene espacio generoso para colocar los faders, el ESP32 y rutear después.
Pendiente por falta de créditos en esta ejecución:
  • Reacomodar físicamente RV1 en una fila horizontal usando el espacio real de 75 × 8/9 mm por fader.
  • Colocar C1 cerca del wiper de cada fader.
  • Mantener U1 en la parte superior con la antena hacia el borde.
  • Correr revisión de layout para verificar que no haya solapes ni componentes fuera de placa.
Importante: aunque la placa ya tiene tamaño suficiente, todavía no debe rutearse ni fabricarse hasta completar el placement con los faders de 75 mm y confirmar el footprint real del potenciómetro estéreo 4+2 pines.
Auto-place faders
Buscar footprint fader
Colocar capacitores
Ejecutar DRC

Refine this doc
Ask about this doc
Firmware Starter — Ecualizador Digital ESP32 6 Bandas
Platform & Toolchain
  • MCU / board: ESP32-DevKitC-32D / ESP32-WROOM-32D, 38 pines
  • Framework recomendado: Arduino sobre PlatformIO
  • Objetivo: leer 6 potenciómetros por ADC1 y entregar valores normalizados para un ecualizador digital de 6 bandas.
Pin Mapping

Table


BandaFunciónGPIO ESP32Pin del DevKitNet esquemáticoADC
1 GravesWiper RV139VN / Sensor_VNBAND1_GRAVES_ADC1_CH3_GPIO39ADC1_CH3
2Wiper RV236VP / Sensor_VPBAND2_ADC1_CH0_GPIO36ADC1_CH0
3Wiper RV333IO33BAND3_ADC1_CH5_GPIO33ADC1_CH5
4Wiper RV432IO32BAND4_ADC1_CH4_GPIO32ADC1_CH4
5Wiper RV535IO35BAND5_ADC1_CH7_GPIO35ADC1_CH7
6 AgudosWiper RV634IO34BAND6_AGUDOS_ADC1_CH6_GPIO34ADC1_CH6
Alimentación potenciómetrosExtremo fijo CW3.3V3V33V3
Retorno potenciómetros/filtrosExtremo fijo CCW y capacitoresGNDGNDGND
Nota: GPIO34–GPIO39 son solo entrada, ideal para ADC. Todos los controles están en ADC1 para mantener compatibilidad con WiFi del ESP32.
platformio.ini

Ini


[env:esp32dev]
platform = espressif32
board = esp32dev
framework = arduino
monitor_speed = 115200
upload_speed = 921600
src/main.cpp

Cpp


#include <Arduino.h>

#define BAND1_GRAVES_PIN 39
#define BAND2_PIN        36
#define BAND3_PIN        33
#define BAND4_PIN        32
#define BAND5_PIN        35
#define BAND6_AGUDOS_PIN 34

static const uint8_t NUM_BANDS = 6;
static const int adcPins[NUM_BANDS] = {
  BAND1_GRAVES_PIN,
  BAND2_PIN,
  BAND3_PIN,
  BAND4_PIN,
  BAND5_PIN,
  BAND6_AGUDOS_PIN
};

static const char* bandNames[NUM_BANDS] = {
  "Graves", "Banda2", "Banda3", "Banda4", "Banda5", "Agudos"
};

static const uint16_t ADC_MAX_COUNTS = 4095;
static const uint8_t OVERSAMPLE_COUNT = 16;
static unsigned long lastPrintMs = 0;

uint16_t readAdcAveraged(uint8_t pin) {
  uint32_t acc = 0;
  for (uint8_t i = 0; i < OVERSAMPLE_COUNT; i++) {
    acc += analogRead(pin);
    delayMicroseconds(250);
  }
  return acc / OVERSAMPLE_COUNT;
}

float normalizedBandGain(uint16_t raw) {
  // 0.0 = slider abajo, 1.0 = slider arriba. Ajustar aquí si se desea curva logarítmica.
  return constrain((float)raw / (float)ADC_MAX_COUNTS, 0.0f, 1.0f);
}

void setupAdc() {
  analogReadResolution(12);
  analogSetAttenuation(ADC_11db);  // rango práctico cercano a 0–3.3V en ESP32 Arduino
  for (uint8_t i = 0; i < NUM_BANDS; i++) {
    pinMode(adcPins[i], INPUT);
  }
}

void setup() {
  Serial.begin(115200);
  delay(500);
  setupAdc();
  Serial.println("Ecualizador digital ESP32 — lectura de 6 bandas ADC1");
}

void loop() {
  uint16_t raw[NUM_BANDS];
  float gain[NUM_BANDS];

  for (uint8_t i = 0; i < NUM_BANDS; i++) {
    raw[i] = readAdcAveraged(adcPins[i]);
    gain[i] = normalizedBandGain(raw[i]);
  }

  if (millis() - lastPrintMs >= 100) {
    lastPrintMs = millis();
    for (uint8_t i = 0; i < NUM_BANDS; i++) {
      Serial.printf("%s GPIO%d raw=%u gain=%.3f%s",
                    bandNames[i], adcPins[i], raw[i], gain[i],
                    (i == NUM_BANDS - 1) ? "\n" : " | ");
    }
  }

  // Aquí se integraría el DSP real: mapear gain[] a coeficientes de filtros IIR/FIR.
}
Build & Flash

Bash


pio run
pio run -t upload
pio device monitor
Para flashear manualmente el DevKitC, mantener BOOT presionado al iniciar la carga si el auto-reset no entra al bootloader.

    Platform & Toolchain

    Pin Mapping

    `platformio.ini`

    `src/main.cpp`

    Build & Flash

Documents

    Firmware Starter — Ecualizador Digital ESP32 6 Bandas

Assets

Assets are files uploaded to this project which can be used in various ways.

Ecualizador Digital ESP32 6 Bandas thumbnail
PCB para ecualizador digital de audio de 6 bandas con ESP32 DevKitC V4, seis potenciómetros deslizables B103 usados en modo mono, filtros RC de 0.1uF por banda y layout con potenciómetros alineados para panel frontal.

Properties

Properties describe core aspects of the project.

Pricing & Availability

Distributor

Qty 1

Arrow

$5.21

Digi-Key

$19.90

LCSC

$10.49

Mouser

$9.84

Verical

$0.08

Controls