Metrocontador de energía
Medidor de consumo eléctrico sobre un STM32: mide tensión y corriente eficaces reales, calcula potencia y factor de potencia, y guarda los kWh acumulados en memoria no volátil para que un apagón no se lleve la cuenta.



Un medidor de energía se juega todo en dos cosas: medir el valor eficaz de verdad y no perder la cuenta. Lo primero porque la carga de una casa no consume una senoidal limpia — fuentes conmutadas, motores, cargadores — y un promedio simple de la corriente miente sobre lo que se está pagando. Lo segundo porque un contador que se pone a cero cada vez que parpadea la luz no cuenta nada.
El hardware es un sensor de corriente de efecto Hall ACS712, un divisor resistivo para la tensión de red, una placa STM32F103 con convertidor de 12 bits y una pantalla OLED por I²C. Se desarrolló sobre protoboard, y el montaje que quedó midiendo pasó a una placa perforada.
El firmware toma 128 muestras por ventana, una cada 150 µs — unos 19 ms, del orden de un ciclo de la red — y promedia 50 ventanas antes de refrescar la pantalla y sumar energía. De ahí salen tensión eficaz, corriente eficaz, potencia real y factor de potencia, y la pantalla dibuja además la ventana de muestras: se ve la onda real de la red, achatada en los picos. El cálculo RMS se apoya en la librería TrueRMS (M. Stokroos, licencia MIT), con la adaptación a STM32 de Matthias Diro.
La energía acumulada se guarda como entero de 32 bits — kWh multiplicados por 10 000 — partido en dos palabras de 16 bits en la EEPROM emulada sobre la flash del microcontrolador. Escribe una vez por hora y, además, cuando la tensión eficaz cae por debajo de 80 V: eso es la luz yéndose, y hay que escribir antes de quedarse sin alimentación. Ese guardado no se arma hasta cinco segundos después del arranque, para no grabar basura mientras las lecturas se asientan. Un watchdog independiente reinicia la placa si el lazo se cuelga.
La calibración es la parte que decide si la cifra sirve de algo: diez puntos de tensión entre 92 y 131 V y nueve de corriente, medidos contra un instrumento de referencia, y una recta ajustada por mínimos cuadrados en Python con NumPy y Matplotlib. Las dos pendientes entran al firmware como constantes. Sin ese paso, un medidor es un generador de números bonitos; con él, el medidor y el multímetro de referencia marcan los mismos 115,1 V, que es la primera foto de arriba.
Lo que no hace
- No comunica: la lectura se ve en la pantalla y no sale del aparato.
- Una sola fase: un canal de tensión y uno de corriente.
- No es un instrumento certificado. La exactitud es la de su calibración contra un medidor de referencia.
Proyecto de casa, no producto: mide y está comprobado contra un multímetro, pero se quedó en placa perforada, sin caja ni bornes fijos.
- STM32F103
- ACS712
- OLED SSD1306 · I²C
- C++ / Arduino
- TrueRMS (MIT)
- EEPROM emulada en flash
- Python · NumPy
- Fritzing