Inicio/Monitores de Energía/Medidor de Consumo Eléctrico con ESP32 y Pantalla LCD: Proyecto DIY para Monitorización Local sin Nube
Monitores de Energía

Medidor de Consumo Eléctrico con ESP32 y Pantalla LCD: Proyecto DIY para Monitorización Local sin Nube

Alex R.Escrito por: Alex R.
Fecha: 23 Jul 2026
Lectura de 10 min
Medidor de Consumo Eléctrico con ESP32 y Pantalla LCD: Proyecto DIY para Monitorización Local sin Nube

La monitorización del consumo eléctrico se ha convertido en una necesidad para hogares inteligentes y eficientes. Sin embargo, muchas soluciones comerciales dependen de servicios en la nube, suscripciones y plataformas cerradas que comprometen la privacidad y la autonomía del usuario. Este proyecto DIY te permitirá construir tu propio medidor de consumo eléctrico utilizando un ESP32 y una pantalla LCD, ofreciendo monitorización local en tiempo real, sin enviar datos a internet. A lo largo de esta guía exhaustiva, exploraremos desde los fundamentos teóricos hasta la implementación práctica, incluyendo esquemas de conexión, calibración, programación y resolución de problemas comunes.

Fundamentos Técnicos del Medidor de Consumo Eléctrico

Para diseñar un medidor de consumo eléctrico preciso y fiable, es esencial comprender los principios físicos que rigen la medición de potencia en corriente alterna (CA). La potencia activa (P) se calcula como el producto del voltaje (V), la corriente (I) y el factor de potencia (cos φ). En un sistema monofásico doméstico, el voltaje suele ser de 230 V (en Europa) o 120 V (en América), mientras que la corriente varía según la carga conectada. El factor de potencia indica el desfase entre la onda de voltaje y la de corriente, y es crucial para cargas inductivas como motores o transformadores.

El ESP32 es un microcontrolador de bajo coste con conectividad Wi-Fi y Bluetooth integrada, ideal para proyectos IoT. Su conversor analógico-digital (ADC) de 12 bits permite leer señales analógicas con una resolución de 4096 niveles. Sin embargo, para medir corriente alterna de forma segura, se requiere un sensor de corriente no invasivo, como el SCT-013, que utiliza un transformador de corriente (CT) para generar una señal de voltaje proporcional a la corriente circulante. Esta señal debe ser acondicionada para que el ADC del ESP32 pueda leerla correctamente, añadiendo un offset de voltaje (generalmente 2.5 V) para evitar valores negativos.

La pantalla LCD, típicamente una LCD 16x2 o 20x4 con interfaz I2C, muestra en tiempo real las variables medidas: voltaje, corriente, potencia activa, energía acumulada y coste estimado. La comunicación I2C reduce el número de pines necesarios a solo dos (SDA y SCL), simplificando el cableado. El ESP32 se encarga de leer el sensor, calcular las magnitudes eléctricas y actualizar la pantalla en un bucle continuo. Todo el procesamiento es local, sin necesidad de conexión a internet, garantizando la privacidad de los datos.

Componentes Necesarios y Esquema de Conexión

La lista de materiales para este proyecto es reducida y económica. Necesitarás un ESP32 (modelo DevKit V1 o similar), un sensor de corriente SCT-013 (versión de 30A o 100A según tu carga máxima), una pantalla LCD 20x4 con módulo I2C, una fuente de alimentación de 5V para el ESP32 (puede ser un cargador USB), una resistencia de carga para el CT (por ejemplo, 33 ohmios para SCT-013-030), condensadores de desacoplo (100 nF y 10 µF), una placa de prototipos y cables jumper. Opcionalmente, puedes incluir un transformador de voltaje (como el ZMPT101B) para medir el voltaje real de la red, pero en esta guía asumiremos un voltaje fijo de 230 V para simplificar.

El esquema de conexión es el siguiente: el sensor SCT-013 tiene un conector jack de 3.5 mm. Debes soldar un cable a la punta (señal) y otro al anillo (GND). La señal del CT se conecta a un pin ADC del ESP32 (por ejemplo, GPIO34) a través de un divisor de tensión que establece el offset de 2.5 V. Para ello, usa dos resistencias de 10 kΩ en serie entre 3.3 V y GND, y conecta el punto medio al pin ADC junto con la señal del CT. Además, coloca un condensador de 100 nF entre el pin ADC y GND para filtrar ruido. La pantalla LCD I2C se conecta a los pines SDA (GPIO21) y SCL (GPIO22) del ESP32, y a 5V y GND. Asegúrate de que la alimentación del ESP32 sea estable, ya que las lecturas del ADC son sensibles a variaciones de voltaje.

ComponenteConexión a ESP32Notas
SCT-013 (señal)GPIO34 (ADC) con offset 2.5VUsar divisor resistivo
LCD I2C (SDA)GPIO21Dirección 0x27
LCD I2C (SCL)GPIO22Pull-ups internos
Alimentación LCD5V y GNDNo usar 3.3V

Programación del ESP32: Código Completo y Explicación

El firmware del ESP32 se desarrolla en el entorno Arduino IDE, aprovechando librerías como 'EmonLib' para el cálculo de potencia y 'LiquidCrystal_I2C' para la pantalla. A continuación, se presenta el código completo con comentarios detallados. El programa lee la señal del sensor de corriente, calcula la potencia y la energía, y muestra los datos en la LCD cada segundo. Además, incluye calibración del factor de escala y filtrado de ruido mediante media móvil.

#include <EmonLib.h>
#include <LiquidCrystal_I2C.h>

EnergyMonitor emon1;
LiquidCrystal_I2C lcd(0x27, 20, 4);

const int ADC_PIN = 34;
const float VOLTAJE_RED = 230.0;
const float CALIBRACION_CT = 30.0; // Para SCT-013-030

unsigned long ultimaLectura = 0;
const long INTERVALO = 1000;

float energiaAcumulada = 0.0;
unsigned long ultimoTiempoEnergia = 0;

void setup() {
  Serial.begin(115200);
  lcd.init();
  lcd.backlight();
  lcd.setCursor(0,0);
  lcd.print("Medidor Electrico");
  lcd.setCursor(0,1);
  lcd.print("Iniciando...");
  delay(2000);
  lcd.clear();
  
  emon1.current(ADC_PIN, CALIBRACION_CT);
  ultimoTiempoEnergia = millis();
}

void loop() {
  unsigned long ahora = millis();
  if (ahora - ultimaLectura >= INTERVALO) {
    ultimaLectura = ahora;
    
    double Irms = emon1.calcIrms(1480); // 1480 muestras
    double potencia = Irms * VOLTAJE_RED;
    
    // Energía en Wh (asumiendo carga constante en el intervalo)
    float deltaT = (ahora - ultimoTiempoEnergia) / 3600000.0; // horas
    energiaAcumulada += potencia * deltaT;
    ultimoTiempoEnergia = ahora;
    
    // Mostrar en LCD
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("Potencia: ");
    lcd.print(potencia, 1);
    lcd.print(" W");
    lcd.setCursor(0,1);
    lcd.print("Corriente: ");
    lcd.print(Irms, 2);
    lcd.print(" A");
    lcd.setCursor(0,2);
    lcd.print("Energia: ");
    lcd.print(energiaAcumulada, 1);
    lcd.print(" Wh");
    lcd.setCursor(0,3);
    lcd.print("Coste: ");
    float coste = energiaAcumulada * 0.15 / 1000; // 0.15 €/kWh
    lcd.print(coste, 4);
    lcd.print(" EUR");
    
    // Depuración por serial
    Serial.print("Potencia: "); Serial.print(potencia); Serial.println(" W");
    Serial.print("Energia: "); Serial.print(energiaAcumulada); Serial.println(" Wh");
  }
}

El código utiliza la librería EmonLib, que implementa el algoritmo de muestreo de corriente alterna para calcular el valor RMS. La función 'calcIrms' toma 1480 muestras (aproximadamente un ciclo de 50 Hz con 20 muestras por ciclo) y devuelve la corriente eficaz. La potencia se calcula multiplicando por el voltaje de red asumido (230 V). Para una medición más precisa, se puede añadir un sensor de voltaje ZMPT101B y modificar el código para leer ambos canales. La energía acumulada se calcula integrando la potencia en el tiempo, y el coste se estima con una tarifa eléctrica típica.

Atención: Seguridad Eléctrica

Trabajar con corriente alterna de red implica riesgos graves de electrocución. El sensor SCT-013 es no invasivo, pero el cableado del divisor de tensión y las conexiones al ESP32 deben realizarse con el sistema desconectado de la red. No manipules los cables del CT mientras el circuito esté energizado. Utiliza una caja aislante para el proyecto y asegúrate de que no haya contactos expuestos. Si no tienes experiencia en electrónica de potencia, consulta a un profesional.

Calibración y Precisión del Medidor

La precisión del medidor depende de varios factores: la tolerancia del sensor CT, la estabilidad del voltaje de referencia del ADC (3.3 V del ESP32), el ruido eléctrico y el algoritmo de cálculo. Para calibrar, necesitas una carga conocida, como una bombilla incandescente de 100 W. Conecta la carga al medidor y compara la lectura de potencia con el valor nominal. Ajusta el factor de calibración (CALIBRACION_CT) hasta que la lectura coincida. Por ejemplo, si el sensor SCT-013-030 tiene una sensibilidad de 1 V/30 A, el factor teórico es 30. Sin embargo, debido a tolerancias, puede variar entre 28 y 32.

Además, el offset de 2.5 V debe ser preciso. Mide el voltaje en el pin ADC sin carga; debe ser aproximadamente 1.65 V (la mitad de 3.3 V). Si no es así, ajusta las resistencias del divisor. El ruido de alta frecuencia se reduce con un condensador de 100 nF en el pin ADC. Para mejorar la precisión, puedes implementar un filtro de media móvil en el código, promediando varias lecturas. La librería EmonLib ya incluye un filtro interno, pero puedes aumentar el número de muestras (hasta 2000) para reducir el ruido a costa de tiempo de respuesta.

1Calibración con Carga Conocida

Conecta una bombilla de 100 W y ajusta el factor hasta leer 100 W. Repite con una carga de 500 W (como un calefactor) para verificar la linealidad.

2Compensación de Offset

Mide el voltaje en el pin ADC sin corriente. Debe ser 1.65 V. Si no, ajusta el divisor o corrige en software restando el offset.

Errores Comunes y Soluciones

Durante la construcción y puesta en marcha, es frecuente encontrarse con problemas que impiden lecturas correctas. El error más común es una lectura de corriente siempre cero. Esto suele deberse a una mala conexión del sensor CT: el cable de señal no está haciendo contacto, o el jack no está bien insertado. Verifica con un multímetro que el CT genera un voltaje AC cuando pasa corriente por el núcleo. Otro problema es la saturación del ADC: si la corriente es demasiado alta para el rango del CT, la señal supera los 3.3 V y el ADC satura. En ese caso, usa un CT de mayor rango o reduce la resistencia de carga.

La pantalla LCD no muestra nada o muestra caracteres extraños. Esto puede deberse a una dirección I2C incorrecta. La dirección más común es 0x27, pero puede ser 0x3F. Usa un escáner I2C para detectarla. También verifica que los pines SDA y SCL estén correctamente conectados y que la alimentación sea de 5V. Si la pantalla se queda en blanco, ajusta el contraste con el potenciómetro del módulo I2C. Por último, si las lecturas de potencia fluctúan mucho, aumenta el número de muestras en calcIrms o añade un condensador de mayor valor (10 µF) en el pin ADC.

  • Lectura de corriente siempre cero: Verifica conexión del CT, prueba con un multímetro en AC.
  • Pantalla LCD sin funcionar: Escanea dirección I2C, comprueba alimentación y contraste.
  • Fluctuaciones en la potencia: Aumenta muestras, añade condensador de 10 µF en ADC.

Comparativa: Medidor DIY vs. Soluciones Comerciales

Existen en el mercado múltiples monitores de energía como Shelly EM, Sense, o los basados en IoT de TP-Link. A continuación, se presenta una comparativa detallada entre nuestro proyecto DIY y dos opciones comerciales populares: Shelly EM (monitorización local con app) y Sense (monitorización en la nube con IA). La tabla evalúa aspectos clave como coste, privacidad, precisión, facilidad de instalación y funcionalidades.

CaracterísticaDIY ESP32 + LCDShelly EMSense
Coste total15-25 €50-70 €300-350 €
Privacidad (datos locales)TotalAlta (local + opcional nube)Nube obligatoria
Precisión típica±5-10%±1-2%±5-15%
InstalaciónMedia (requiere conocimientos)Fácil (profesional recomendado)Fácil (instalación en cuadro)
FuncionalidadesBásicas (lectura local)Avanzadas (app, automatizaciones)IA, detección de dispositivos

El proyecto DIY destaca por su bajo coste y privacidad total, pero requiere conocimientos de electrónica y programación. Shelly EM ofrece un equilibrio entre precio y funcionalidades, con opción de funcionamiento local. Sense es caro y depende de la nube, pero proporciona análisis avanzados. Para un aficionado al DIY, nuestro medidor es la opción más educativa y personalizable.

Preguntas Frecuentes (FAQ)

¿Es seguro este proyecto para un principiante?
El proyecto implica trabajar con corriente alterna de red, aunque el sensor CT es no invasivo. Si no tienes experiencia en electrónica, es recomendable que un electricista supervise la instalación. El riesgo principal está en el cableado del divisor de tensión y las conexiones al ESP32, que deben realizarse con el circuito desconectado. Siempre usa una caja aislante y fusibles de protección.
¿Puedo medir también el voltaje para mayor precisión?
Sí, añadiendo un sensor de voltaje como el ZMPT101B puedes medir el voltaje real de la red, que puede variar entre 210 y 250 V. Conecta su salida a otro pin ADC (por ejemplo, GPIO35) con un divisor similar al del CT. Modifica el código para leer ambos canales y calcular la potencia como Vrms * Irms * cos φ (si mides el desfase). Esto mejora la precisión, especialmente si la red es inestable.
¿Cómo puedo almacenar los datos históricos sin nube?
Puedes añadir una tarjeta microSD al ESP32 usando el módulo SPI. Conecta los pines CS, MOSI, MISO y SCK, y utiliza la librería SD para escribir archivos CSV con marcas de tiempo. Otra opción es enviar los datos por Wi-Fi a un servidor local como Node-RED o InfluxDB en una Raspberry Pi, manteniendo todo en tu red doméstica.
¿Qué rango de corriente puedo medir con el SCT-013?
El SCT-013 está disponible en versiones de 30A, 50A y 100A. La versión de 30A es adecuada para hogares con cargas de hasta 6900 W (30A * 230V). Para cargas mayores, usa la de 100A. El sensor es lineal en todo su rango, pero la precisión disminuye por debajo del 10% de la escala. Para cargas muy pequeñas (menos de 100 W), considera un sensor de menor rango o un amplificador.

Conclusiones y Recomendaciones Finales

Construir tu propio medidor de consumo eléctrico con ESP32 y pant

TRANSPARENCIA INFORMATIVA

Este análisis técnico es independiente. No recibimos pagos de fabricantes para alterar valoraciones. Si realizas una compra a través de enlaces en este sitio, podríamos percibir una comisión de afiliación que ayuda a mantener el servidor activo, sin coste extra para ti.