Medidor consumo eléctrico con Nodemcu y SCT-013-030

nodemcu_electricity.png

Descripción del prototipo

Se desea un aparato que mida el consumo en vatios realizado en una conexión eléctrica. Ademas que esta informacion se muestre en una grafica.

Para la resolución de este proyecto identificamos estas tres áreas diferenciadas:

[SENSOR]: Adquisición de información a través de un sensor.

[PROCESADOR]: Procesamiento de esta información.

[GRAFICA]: Muestra de información en una gráfica.

Donde la transmisión de información entre ellas es:

[SENSOR] -> [PROCESADOR] -> [GRAFICA]

Para cada parte hemos analizado los distintos componentes y técnicas que hay hoy en dia disponible y hemos elegido las siguientes:

[SENSOR]: Utilizaremos un sensor transformador de corriente SCT-013-030, que nos da una salida en voltios.

[PROCESADOR]: Utilizaremos un circuito nodemcu v1, que tiene una entrada analogica y se conecta directamente a Internet.

[GRAFICA]: En este caso utilizamos la plataforma Thinger.io para recoger y mostrar los datos del sistema gráficamente y en cualquier ordenador, tablet, smartphone.

Vamos a realizar prototipos partiendo de la area [SENSOR] para comprender y verificar su funcionamiento, para ir añadiendo los demás módulos, comprobando que la información recibida es la correcta.

Materiales

Nodemcu v1 = 3,27€

Sensor SCT-013-030 = 4,35€

Resistencia 10K ohm  x 2 =  0,01€

Condensador 25V 10uF = 0,02€

Cables = 0,20€

Conector 3.5mm = 0,12€

Total: 7,97€

Creación de prototipo

Comprensión de sensor SCT-013-030

Datasheet del sensor: http://rogerbit.com/wprb/wp-content/uploads/2017/09/SCT013-030V.pdf

El sensor funciona como un transformador de corriente (Splilt-core Current Transformer). Se compone de un anillo metálico en forma de pinza, que tiene a su vez devanado con 1800 vueltas.

De tal forma que la corriente que circula por el anillo metálico genera una corriente proporcional en el devanado, que es la que vamos a medir.

A su vez el modelo SCT-013-030 tiene una resistencia (62Ω) conectada al circuito de salida para entregarnos un valor +/- 1V.

El conector tiene un conector en forma de jack 3.5” con el siguiente esquema:

Como veremos más adelante por la conexión K, pintada en verde obtendremos el valor del sensor. La otra conexión está configurada a tierra.

En nuestro prototipo utilizaremos un conector para jack 3.5” para realizar el conexionado con el nodemcu.

Conexionado del sensor SCT-013-030

Como en el punto anterior hemos visto, el sensor nos devolverá un rango de valores en voltaje entre -1 y 1. El cual no es interesante para utilizar directamente con nuestro nodemcu.

Con un circuito offset cambiaremos este rango de -1 a 1, a 0 - 2.

Esto lo conseguimos con la siguiente configuración de dos resistencias de 10kΩ y un condensador de 10µF

Obtención de datos del sensor en Nodemcu

En este primer prototipo vamos a leer los valores que nos da el sensor directamente en la nodemcu y mostrarlo con el plotter de arduino IDE.

CODIGO

// the setup routine runs once when you press reset:

void setup() {

  // initialize serial communication at 9600 bits per second:

  Serial.begin(9600);

}

// the loop routine runs over and over again forever:

void loop() {

  // read the input on analog pin 0:

  int sensorValue = analogRead(A0);

  // print out the value you read:

  Serial.println(sensorValue);

}

Con el programa anterior simplemente leemos el valor que optenemos de la entrada analogica de nuestro nodemcu y lo mostramos en la salida serie.

Con este programa vamos a general las vistas para cargas electricas en el circuito de 0W, 1000W y 2000W. Y despues analizamos las graficas mostradas por el plotter del IDE Arduino.

Gráfica de A0 sin carga en el sistema

Grafica de A0 con carga de 15W en el sistema

Grafica de A0 con carga de 1000W en el sistema

Grafica de A0 con carga de 2000W en el sistema

Como podemos ver es un grafico en forma de onda, esta onda sera la que utilizaremos para el calculo de

Configurar cuenta thinger.io

Para visualizar los datos de una forma gráfica se va a utilizar los servicios de la plataforma thinger.io. Podemos crear una cuenta gratuita con los recursos suficientes para este y otros proyectos.

Una vez registrados en el sistema. En la página principal, debemos crear los siguiente recursos para posteriormente configurarlos en nuestro programa.

Crearemos la siguiente estructura:


Por este orden:

Crear un Device

En este paso se debe pulsar el botón Generate Random Credential, para generar una clave de acceso a este device desde programas externos a la plataforma. O escribir una clave que nosotros deseemos.


Crear un Data Bucket

Aqui se selecciona en Device Source el Device que hemos creado en el apartado anterior. Esto hace que cada nuevo dato que adquiera el Device, se guarde en este contenedor de datos.


Crear un Dashboard

Entramos dentro del Dashboard y añadimos unos componentes visuales


Donde el widget Gauge tiene los siguientes valores:

Aquí estamos seleccionando como origen de datos el Device, que tiene la información en tiempo real, la última que ha recibido.

Y el widget Chart:

Aqui hemos seleccionado como fuente de origen de datos el Bucket, que es un contenedor de datos, estos datos son los distintos que ha recibido el Device y se han estado guardando aqui.

Medicion de consumo electrico

CODIGO

#include <ESP8266WiFi.h>

#include <ThingerESP8266.h>

// Include Emon Library

#include "EmonLib.h"

#define USERNAME "thinger_user"

#define DEVICE_ID "thinger_device_id"

#define DEVICE_CREDENTIAL "thinger_credential"

#define SSID "WIFISSID"

#define SSID_PASSWORD "WIFIPassword"

// Crear una instancia EnergyMonitor

EnergyMonitor energyMonitor;

// Voltaje de nuestra red eléctrica

float voltajeRed = 230.0;

ThingerESP8266 thing(USERNAME, DEVICE_ID, DEVICE_CREDENTIAL);

void setup()

{

Serial.begin(9600);

// Iniciamos la clase indicando

// Número de pin: donde tenemos conectado el SCT-013

// Valor de calibración: valor obtenido de la calibración teórica

energyMonitor.current(0, 31);

thing.add_wifi(SSID, SSID_PASSWORD);

thing["nodemcu"] >> [](pson& out){

  double Irms = energyMonitor.calcIrms(1484);

  double potencia =  Irms * voltajeRed;

  out["Watt"] = potencia;

};

}

void loop()

{

// Obtenemos el valor de la corriente eficaz

// Pasamos el número de muestras que queremos tomar

double Irms = energyMonitor.calcIrms(1484);

// Calculamos la potencia aparente

double potencia =  Irms * voltajeRed;

// Mostramos la información por el monitor serie

Serial.print("Potencia = ");

Serial.print(potencia);

Serial.print("W        Irms = ");

Serial.println(Irms);

thing.handle();

}


Sistema final

CODIGO

// Si usamos un servidor privado Thinger, poner aqui su server
//#define THINGER_SERVER "vish.ieec.uned.es"

// Incluir la libreria para utilizar wifi con Nodemcu
#include <ESP8266WiFi.h>
// Incluir la libreria de Thinger
#include <ThingerESP8266.h>
// Incluir la libreria Emon
#include "EmonLib.h"

// Definir los datos de conexion al API Thinger
#define USERNAME "olopez"
#define DEVICE_ID "nodemcu"
#define DEVICE_CREDENTIAL "oiuomrgL6OHN"

// Datos de conexion al Wifi
#define SSID "PEPETTEYOSCAR"
#define SSID_PASSWORD "Madrid28026"

// Crear una instancia EnergyMonitor
EnergyMonitor energyMonitor;
// Voltaje de nuestra red eléctrica
float voltajeRed = 230.0;

// Creamos la instancia de Thinger
ThingerESP8266 thing(USERNAME, DEVICE_ID, DEVICE_CREDENTIAL);

void setup()
{
 // Iniciamos la clase indicando
 // Número de pin: donde tenemos conectado el SCT-013
 // Valor de calibración: valor obtenido de la calibración teórica
 energyMonitor.current(0, 31);
 thing.add_wifi(SSID, SSID_PASSWORD);
 thing["nodemcu"] >> [](pson& out){
   double Irms = energyMonitor.calcIrms(1484);
   double potencia =  Irms * voltajeRed;
   out["Watt"] = potencia;
 };
}

void loop()
{
 thing.handle();
}


Referencias

Learn - OpenEnergyMonitor.

Teoría, explicación y detalle de medición de corriente continua.

https://learn.openenergymonitor.org/

SCT-013 mide el consumo eléctrico en tu casa con Arduino.

Ejemplo sobre medición en corriente continua. Utilización de libreria emonlib.

https://programarfacil.com/blog/arduino-blog/sct-013-consumo-electrico-arduino/

A Low Cost Live Electricity Consumption Monitor using IoT and The Analyses of Electricity Consumption of Appliances in a Turkish Household

Ejemplo de configuracion Spark Core con sensor SCT-013

http://www.barissanli.com/electronics/spark.php

Tutorial sensor de corriente AC no invasivo SCT-013

Ejemplo de configuracion arduino con sensor SCT-013

http://www.naylampmechatronics.com/blog/51_tutorial-sensor-de-corriente-ac-no-invasivo-s.html

Current monitoring with non-invasive sensor and arduino

Ejemplo configuración arduino con sensor SCT-013.

http://www.homautomation.org/2013/09/17/current-monitoring-with-non-invasive-sensor-and-arduino/

PRÁCTICA 7: THINGER.IO – Configuración, almacenamiento y monitorización de datos (PRIMERA PARTE)

http://www.esploradores.com/thinger-io-configuracion-almacenamiento-y-monitorizacion-de-datos-primera-parte/

Sistema de diseño de circuitos online

http://tinkercad.com

http://fritzing.org

Añadir nodemcu a Fritzing

https://github.com/squix78/esp8266-fritzing-parts

For example, the YHDC SCT-013-030 gives 1 V at a rated current of 30 A, so for this transformer you have:

current constant = 30 ÷ 1 = 30

Or to put it in words, the current constant is the value of current you want to read when 1 V is produced at the analogue input.

https://learn.openenergymonitor.org/electricity-monitoring/ctac/ct-and-ac-power-adaptor-installation-and-calibration-theory?redirected=true

The SCT-013-030 has a built in 62 Ohm resistor

https://forum.allaboutcircuits.com/threads/how-to-wire-non-invasive-ac-current-sensor-sct-013-030-to-telosb-motes-adc-pin.113831/

Burden Resistor Calculations

https://wiki.openenergymonitor.org/index.php/EmonTx_V3#Burden_Resistor_Calculations

1 x Burden resistor 18 Ohms if supply voltage is 3.3V, or 33 Ohms if supply voltage is 5V

https://learn.openenergymonitor.org/electricity-monitoring/ct-sensors/how-to-build-an-arduino-energy-monitor-measuring-current-only


Esquema

Codigo

// Include Emon Library

#include "EmonLib.h"

// Crear una instancia EnergyMonitor

EnergyMonitor energyMonitor;

// Voltaje de nuestra red eléctrica

float voltajeRed = 237.0;

void setup()

{

Serial.begin(9600);

// Iniciamos la clase indicando

// Número de pin: donde tenemos conectado el SCT-013

// Valor de calibración: valor obtenido de la calibración teórica

energyMonitor.current(0, 31);

}

void loop()

{

// Obtenemos el valor de la corriente eficaz

// Pasamos el número de muestras que queremos tomar

double Irms = energyMonitor.calcIrms(1484);

// Calculamos la potencia aparente

double potencia =  Irms * voltajeRed;

// Mostramos la información por el monitor serie

Serial.print("Potencia = ");

Serial.print(potencia);

Serial.print("W        Irms = ");

Serial.println(Irms);

}

Aclaraciones

Oscar Cantero Lopez - oscar@pulpaticien.fr