Autor: Peter Jensen
Este es mi primer intento de un proyecto IoT 'útil'. He tenido un Arduino Uno por un tiempo, pero realmente no lo usé para nada, excepto pasar por un tutorial LED parpadeante. Era hora de hacerlo usar. Me parece gratificante pensar en una idea del proyecto y luego buscar la información que necesita cuando la necesite. Por supuesto, muchas veces descubres que otros han hecho algo similar, pero está bien, aún aprenderás del proceso.
Quería un dispositivo para medir el consumo de energía en mi casa y hacer que lo informara a un servicio de 'nube' cuando las cosas cambiaron; Las luces se encienden/apagan, etc. Además, quería una pantalla en la caja, para poder leer cuál era el consumo de energía actual.
Comencé conectando los sensores de corriente a un pasador de entrada analógica; como esto:
Fuente: OpenEnergyMonitor.org
Para la calibración, estaba usando un multímetro que era capaz de medir hasta 10A y lo conectaba a un cable que estaba alimentando una lámpara de tres bombillas. Cada una de las bombillas podría activarse y apagarse individualmente. Con bulbos de 60W en los enchufes, pude obtener muestras para 60W, 120W y 180W.
Tenga en cuenta que el sensor de corriente solo debe rodear un cable, para que la corriente de CA pase por ese cable para inducir una corriente en el sensor.
La corriente medida es la corriente que atraviesa la línea de alimentación que el sensor actual envuelve.
Si todo lo que hace en la función loop() en su boceto Arduino es llamar analogRead() y almacenar el resultado en un búfer de memoria, podrá obtener alrededor de 100 muestras durante un ciclo (60Hz - 16.7ms). El Arduino funciona a 16MHz. Eso debería ser suficiente para calcular el valor de la raíz-cuadrado (RMS) de la entrada con bastante precisión.
¿Por qué necesitas el valor RMS? La entrada en el pin de entrada analógica es la caída de voltaje sobre la resistencia de carga/carga. Esa caída de voltaje es directamente proporcional con la corriente que pasa por la línea de alimentación que se mide en el momento de la medición.
Cuando la corriente y el voltaje varían con el tiempo, la potencia se calcula como la potencia promedio durante el período de la onda sinusal de 60Hz, utilizando los valores RMS de I y V:
El componente V RMS se mantiene constante por la compañía eléctrica a 120 V, por lo que el interesante es el valor I RMS . Los convertidores análogos de arduino a digital son de 10 bits, y los circuitos están diseñados para que el punto medio de la entrada del seno sea 2.5V, lo que debería dar como resultado una lectura de ~ 511. Si las lecturas están igualmente espaciadas en el tiempo, el valor I RMS se puede calcular como:
Donde N es el número de muestras que se necesitan para cubrir el período completo de la onda del seno de 60Hz, K es una constante de calibración que se determinará después de medir los valores I RMS reales con un multímetro, y V I son los valores devueltos por las llamadas a analogRead()
Se pueden encontrar más información sobre las matemáticas aquí: Wikipedia
<TODO: Inserte la imagen de la configuración de la medición de la prueba>
Compré todo lo que necesitaba en Amazon Prime. Si no eres un suscriptor principal, podrías terminar pagando un poco más. Para algunos artículos, tenía sentido comprar más de una unidad, ya que solo eran unos pocos dólares más y siempre es bueno tener un repuesto en caso de que fríe una. Además, si desea hacer una segunda (o tercera) unidad, ya tiene lo que necesita.
| Artículo | Costo total | Costo unitario |
|---|---|---|
| Arduino Pro Mini (3 paquete) | $ 11 | $ 4 |
| Módulo de fuente de alimentación de 3.3V/5V (paquete de 5) | $ 9 | $ 2 |
| ESP8266 ESP-01 (paquete de 4) | $ 14 | $ 4 |
| 2x SCT-013-000 Sensor de corriente de CA no invasivo | $ 26 | $ 13 |
| Módulo de visualización LCD de 16x2 | $ 6 | $ 6 |
| 110VAC-> 9V adaptador | $ 6 | $ 6 |
| PCB de 10 piezas de 4x6 cm PCB lateral doble | $ 7 | $ 1 |
| Jacks montado de PCB femenino de 10 piezas de 3.5 mm de 3.5 mm | $ 8 | $ 2 |
| Misc: condensador, resistencias, botón, cables | ~ $ 2 | $ 2 |
| Total | $ 89 | $ 40 |
Así es como conecté todo juntos:
Utilicé el software Digikey Scheme-It para crear el diagrama de cableado de hardware anterior. ¡Se ejecuta en un navegador!
Hay algunas cosas que señalar:
La información que se muestra en la LCD de 2 líneas se muestra a través de esta información, cuando se presiona el botón:
Si se detecta una prensa larga cuando se muestra 'opciones avanzadas', estas pantallas adicionales se incluyen en la rotación:
Para cambiar el estado de encendido/apagado o restablecer los datos, se debe realizar una presión larga en el botón.
Potencia total | Potencia de línea |
Corriente de línea | Uso total de energía desde el último reinicio |
Dirección IP local | Prensa larga para opciones avanzadas |
Transmisión WiFi encendido/apagado | Transmitir cada valor de muestra |
Transmisión en progreso |
La pantalla/interfaz del navegador actualmente se ve así:

Las líneas negras y rojas representan el poder extraído de cada una de las dos fases que llegan a la casa. Los botones de flecha izquierda y derecha en la parte superior irán al día anterior o al día siguiente. Si está en el día de hoy, se obtendrán nuevos datos. ¡No es necesario golpear 'actualizar'!
Aquí están algunas de las cosas que se pueden derivar de esto:
El consumo de reserva 'negro' es de aproximadamente 125W, y el 'rojo' es de 25W. Este es el dibujo parásito de todos los dispositivos que están en modo de espera (TV, microondas, computadoras, cámaras web, etc.)
El patrón cuadrado arriba/abajo en la línea 'negra' es el compresor en el refrigerador encendido y apagado.
Me desperté alrededor de las 6 de la mañana y comencé a girar las luces y el televisor encendido. El televisor se basa en la línea 'negra'.
El pico en el 'rojo' es mi ventilador de CO2 en mi calentador de agua. El calentador de agua funciona durante unos 10 minutos
El pico más pequeño después del pico del calentador de agua es la apertura de la puerta del garaje.
Usé OpenScad para diseñar una caja. El archivo .scad y los archivos .stl renderizados están en este repositorio. El cuadro con los recortes para la pantalla, el botón y varios conectores se ve así:

Fuente de alimentación escamosa
Confiar en la fuente de alimentación del USB causó cierta escamosidad en las lecturas analógicas de PIN. Además, para suministrar energía al ESP-01, necesitaba un suministro de 3.3V. El Arduino Pro Mini no tiene un regulador de voltaje de 3.3V, como lo hace la UNO. El módulo de fuente de alimentación muy económico se ajusta a la factura, y parece ofrecer una potencia lo suficientemente estable para garantizar lecturas estables.
Tasa de baudios de ESP8266 ESP-01
Tuve que usar un par de pines de E/S digitales en el Arduino para la comunicación en serie entre el módulo Arduino y el Módulo ESP-01. Los pines TX/RX regulares son necesarios para flashear el software en el Arduino. Cuando se usa el módulo SoftWareserial con pines de E/S digitales, no fue posible obtener un enlace de comunicación confiable al ESP-01 a la tasa predeterminada de BAUD 115200. Dado que la cantidad de intercambio de datos entre el Arduino y el ESP-01 está bastante limitado, establece la tasa de baudios en una caja fuerte de 9600.
Quedarse sin memoria en el Arduino
El Arduino tiene solo 2k de memoria RAM. La RAM se utiliza para todos los datos globales, datos de pila e incluso datos de cadena constante. El compilador Atmel 328 GCC hace un buen trabajo que elimina todos los códigos y datos muertos, y estoy bastante sorprendido de que pueda ejecutar un programa C ++ de más de 1000 líneas en esa pequeña cantidad de RAM. Sin embargo, se necesita algo de violín para que se ajuste.
new operador para asignar objetos:String : Vista superior | Conectores de fuente de alimentación |
Conectores CT | Antena parte del ESP8266 |
Vista inferior | Vista inferior sin Arduino |
Vista inferior sin Arduino y ESP8266 | ![]() |
Botón y LCD conectado a la parte superior | ![]() |
PCB Bajo | Caja con tapa |
here's some code
Aquí hay una mesa:
| 1 | 2 | | | | | ADADF | ADFADF |