En este post, discutiremos el uso o la utilización del módulo PZEM-004T V3.0 (del que hemos hablado en este blog en numerosas ocasiones), el cual se interconecta utilizando cualquier variante de Arduino (por ejemplo Arduino UNO o Arduino Mega2560).
A tener en cuenta que si se utiliza el programa de ejemplo con el Hardware Serial, se necesita el Arduino Mega2560 porque el Hardware Serial del Arduino UNO ya se utiliza para la comunicación con el Monitor Serial.
El módulo PZEM-004T V3.0 es una versión mejorada de PZEM-004T V2.0 y también el protocolo para comunicar la interfaz usado es diferente, es decir el programa de la biblioteca para PZEM-004T V2 no se puede utilizar para la interfaz con PZEM-004T V3.0.
Hardware requerido
En este ejemplo de programa de módulo PZEM-004T V3, se necesita algo de hardware, entre otros:
USB a Serial TTL (opcional para probar funciones usando la aplicación Master PZEM-004T).
Diagrama de circuito/cableado
En la siguiente tabla se muestra la conexión o conexión entre el módulo PZEM-004T V3.0 y Arduino
PZEM-004T V3.0
Arduino UNO/Mega2560
CCV
+5V
TIERRA
TIERRA
Texas
RX (serie de software/serie de hardware)
RX
TX (serie de software/serie de hardware)
Para la conexión o conexión entre PZEM-004T V3.0 con Transformador de Corriente (CT), Carga y Arduino en su totalidad se puede ver en la siguiente imagen:
Prueba de funcionamiento del módulo PZEM-004T V3.0
Hay ocasiones en las que hacemos un programa con Arduino y después de subirlo resulta que la salida no es la esperada, muchos se quejan de que el módulo PZEM-004T V3.0 está dañado o funciona mal.
Por esta razón, antes de interconectar el módulo PZEM-004T V3.0 con Arduino, le recomendamos que primero pruebe la función del módulo PZEM-004T V3.0 para asegurarse de que el módulo PZEM-004T V3.0 no esté dañado o funcionando. adecuadamente.
Descargue la aplicación para probar el módulo de función PZEM-004T V3.0 en el siguiente enlace: Software PZEM-004T Nueva versión
Antes de ejecutar el programa debemos descargar isAnalogLibrary.ocx, que es un archivo de componente de objeto ActiveX, es decir un tipo de archivo que se utiliza en sistemas operativos Windows para implementar funcionalidades de software reutilizables. Los componentes de objeto ActiveX se pueden utilizar en aplicaciones de Windows para añadir funcionalidades especiales, como controles de usuario personalizados, gráficos y animaciones, y para interactuar con otros programas o con el sistema operativo.
Los archivos con la extensión .ocx suelen ser archivos de biblioteca de enlace dinámico (DLL) que contienen código ejecutable y datos que se pueden utilizar en aplicaciones de Windows. Los archivos .ocx se pueden cargar en memoria y utilizar en tiempo de ejecución por varias aplicaciones, lo que permite ahorrar espacio en disco y memoria en el sistema.
A continuación, extraiga / descomprima el archivo que descargó anteriormente, luego registre el archivo: isAnalogLibrary.ocx en el sistema operativo Windows PC / Laptop de la siguiente manera:
Copie el archivo isAnalogLibrary.ocx a la carpeta: Windows/System32/
Si tiene éxito, aparecerá una notificación «Registrado con éxito»
Después de registrar correctamente el archivo: isAnalogLibrary.ocx , ejecute el archivo: PZEM004T-Master.exe para comprobar si el módulo PZEM-004T V3.0 funciona o no.
Tenga en cuenta que, para realizar pruebas con la aplicación, necesita un hardware USB a Serial TTL que está ampliamente disponible en el mercado, como: tipo CH340, tipo PL2303, etc., como se muestra a continuación.
Un adaptador USB a Serial TTL es un dispositivo de hardware que se utiliza para convertir señales de transmisión en serie (TTL) en señales USB y viceversa. Los adaptadores de este tipo se utilizan a menudo para conectar dispositivos que utilizan señales de transmisión en serie, como microcontroladores y módems, a un puerto USB de un ordenador soliendo incluir un chip de conversión de señales que se encarga de realizar la conversión entre las señales USB y las señales TTL. Algunos adaptadores también incluyen una interfaz de programación en circuito (ICP) que se puede utilizar para programar microcontroladores o realizar otras tareas de depuración y diagnóstico.
Estos adaptadores suelen ser pequeños y portátiles, y se pueden utilizar para conectar dispositivos a un ordenador de escritorio o portátil mediante un cable USB. Algunos adaptadores también tienen opciones de montaje en panel, lo que los hace adecuados para su uso en equipos de automatización y sistemas de control.
Después de ensamblar el módulo PZEM-004T V3.0 con carga (puede ser una luz eléctrica/taladro) o con USB a Serial TTL y asegúrese de que el sistema operativo Windows haya reconocido/detectado el USB a Serial TTL, haga clic en Establecer COM Puerto y luego haga clic en Iniciar medida .
Después de probar o probar la función y confirmar que el módulo PZEM-004T V3.0 funciona correctamente, se puede continuar haciendo un programa con Arduino u otro microcontrolador.
Ejemplos de programas para el Arduino
Aparte de la instalacion del harware y del sw en nuestro pc con windows debemos instalar un firmaware en la placa arduino para qeu se comunique con el citado programa . En el programa de ejemplo para acceder o interactuar con el módulo PZEM-004T V3.0 usando este Arduino, usamos la siguiente biblioteca:PZEM-004T-v30 o PZEM-004T-v30
Después de descargar e instalar la biblioteca, abra el programa de muestra existente de la biblioteca predeterminada o copie y pegue el siguiente boceto:
#include <PZEM004Tv30.h>
PZEM004Tv30 pzem(11, 12); // Software Pin serie 11 (RX) y 12 (TX)
void setup () {
Serial.begin(115200);
}
void loop () {
voltaje de flotación = pzem.voltage();
if (voltaje! = NAN) {
Serial.print("Voltaje: ");
Serial.print(voltaje);
Serial.println("V");
} else {
Serial.println("Error al leer el voltaje");
}
float current = pzem.current();if(current != NAN){Serial.print("Current: ");Serial.print(current);Serial.println("A");} else {Serial.println("Error al leer la corriente");}float power = pzem.power();if(current != NAN){Serial.print("Power: ");Serial.print(power);Serial.println("W");} else {Serial.println("Error al leer la potencia");
}float energy = pzem.energy();if(current != NAN){Serial.print("Energy: ");Serial.print(energy,3);Serial.println("kWh");} else {Serial.println("Error al leer consumo");}float frequency = pzem.frequency();if(current != NAN){Serial.print("Frequency: ");Serial.print(frequency, 1);Serial.println("Hz");} else {Serial.println("Error al leer la frecuencia");}float pf = pzem.pf();if(current != NAN){Serial.print("PF: ");Serial.println(pf);} else {Serial.println("Error al leer el factor de potencia");}Serial.println();delay(2000);
}
Tambien podemos usar Serial Hardware de la siguiente manera:
#include <PZEM004Tv30.h>
PZEM004Tv30 pzem(&Serie3); // Hardware de Menggunakan Serie 3
void setup () {
Serial.begin(115200);
}
void loop () {
voltaje de flotación = pzem.voltage();
if (voltaje! = NAN) {
Serial.print("Voltaje: ");
Serial.print(voltaje);
Serial.println("V");
} else {
Serial.println("Error al leer el voltaje");
}
float current = pzem.current();if(current != NAN){Serial.print("Current: ");Serial.print(current);Serial.println("A");} else {Serial.println("Error reading current");}float power = pzem.power();if(current != NAN){Serial.print("Power: ");Serial.print(power);Serial.println("W");} else {Serial.println("Error al leer potencia");
}float energy = pzem.energy();if(current != NAN){Serial.print("Energy: ");Serial.print(energy,3);Serial.println("kWh");} else {Serial.println("Error al leer energia");
}float frequency = pzem.frequency();if(current != NAN){Serial.print("Frequency: ");Serial.print(frequency, 1);Serial.println("Hz");} else {Serial.println("Error al leer frequencia");
}float pf = pzem.pf();if(current != NAN){Serial.print("PF: ");Serial.println(pf);} else {Serial.println("Error al leer el factor de potencia");}Serial.println();delay(2000);
}
Después de cargar el programa de boceto anterior en la placa Arduino, abra el monitor serie a velocidad de transmisión: 115200. Si todo funciona bien, los datos de lectura del módulo PZEM-004T V3.0 se mostrarán en la ventana del monitor serie.
El objetivo de este post es ver un ejemplo der cómo medir el voltaje, la corriente y la potencia con dos sensores PZEM 004T de una Raspberry Pi .
En el ejemplo los sensores no están conectados directamente a la Raspberry, pero están conectados a un microcontrolador Arduino (Mega 2560) y este se conecta a la Raspberry a través de un cable USB.
Primero obtenemos todos estos valores usando el microcontrolador Arduino con capacidad de dos puertos serie como podria ser también un ESP32 (NodeMCU) o por supuesto un Arduino Mega, y luego los enviamos a la Raspberry Pi.
Es interesante observar cómo al proporcionar los módulos PZEM004 una salida serie necesitamos usar ese protocolo para recepcionar los datos motivo por el cual precisamente utilizamos dos puertos serie del microcontrolador ( y no sería posible por tanto añadir más módulos PZEM004)
Gracias a la biblioteca PZEM-004T v3.0 para el monitor de energía Peacefair PZEM-004T-10A yPZEM-004T-100A v3.0 utilizando la interfaz ModBUS y un microcontrolador, podemos monitorizar el consumo eléctrico junto a otras variables eléctricas como la tensión , la frecuencia , el factor de potencia, etc.
Es interesante destacar que debemos usar la ultima version del modulo, pues la versión 3.0 PZEM es una versión mejorada del antiguo PZEM-004T
Respecto a las conexiones eléctricas debemos tener especialmente cuidado en el conexionado de las clemas de BT , las cuales viene claramente especificadas en la hoja de característica del modulo PZEM que usemos, pues una parte es para la medida del voltaje ( la medición se hace en paralelo ) y la parte contigua es la parte de la medida de la Intensidad (la medida se toma en serie en versiones de menos intensidad maxima admisible, pero para la version de 100A se suele tomar con una bobina toroidal o con un pinza amperimétrica)
¡Asegúrese de que el dispositivo esté conectado a la alimentación de CA! Los 5V solo alimentan los optoacopladores, no el chip real. Además, tenga cuidado, ¡la corriente alterna es peligrosa! ¡Si no sabe lo que estás haciendo, puede morir ! Es usted responsable de su propia estupidez. Así que no sea estúpido
Peor tanto ,debemos extremar el cuidado especialmente en estas conexiones (las que van con tornillo).
Observe por ejemplo las conexiones del módulo de 100 Amp. usado para escribir este post:
Esta versión PZEM tiene una UART Serial que funciona a 5V, por lo que se debe realizar una simple modificación soldando una resistencia de 1K a 1/4W para permitir que la comunicación funcione a 3.3v en los casos de placas como Raspberry Pi, ESP32 y esp8266, con esta modificación la UART funcionará a 5v o 3.3v.
Nota: Esta es la manera más sencilla y económica si no tienen al alcance un convertidor TTL de 5 a 3.3v, pero no se garantiza que funcione en todos los casos y con todos los medidores (en el prototipo probado funciona sin problemas).
El circuito final para el montaje de los dos PZEM quedaría como se puede ver en la imagen donde vemos como los alimentamos a +5V DC desde el microcontrolador, usamos las lineas tx/rx de forma inversa hacia el microcontrolador y finalmente el microcontrolador lo comunicamos con la Raspberry pi mediante un cable USB
Como se indicó anteriormente, el primer paso es recopilar todos los valores del microcontrolador Arduino, por lo que para hacerlo debemos usar la biblioteca . Esta biblioteca se puede descargar desde la página web: https://github.com/olehs/PZEM004T como un paquete zip, luego se debe agregar dentro del IDE de Arduino
El siguiente paso es conectar los sensores al microcontrolador arduino. Usaremos la librería SoftwareSerial para permitir la comunicación serial en otros pines digitales del Arduino y poder leer más de un dispositivo serial. Entonces, los terminales RX y TX del primer sensor están conectados a los pines 11 y 10 del microcontrolador y los terminales RX y TX del segundo sensor están conectados a los pines 13 y 12 respectivamente.
Ahora es el momento de desarrollar el código en Arduino IDE de la siguiente manera:
///////////////////////////////////////////////////////// ///////////////////////////////////////////////// // /////////////////////////////////////////
//* Código para obtener el voltaje, corriente y potencia de dos sensores AC PZEM conectados al microcontrolador Arduino Mega, luego todos los valores *//
// se concatenan en una variable char para poder enviarla a través de comunicación serie //
///////////////////////////////////////////////////////// ///////////////////////////////////////////////// // ///////////////////////////////////////
#include
#include
IPAddress ip(192,168,1,11);
IPAddress ip1(192,168,1,10);
charix[10];
char iy[10];
char iz[10];
charconc[360];
charix1[10];
char iy1[10];
char iz1[10];
flotante V, V1;
flotar i, i1;
flotante p, p1;
void setup () {
Serial.begin(9600);
}
void loop () {
PZEM004T pzem(10,11); //(RX TX)
pzem.setAddress(ip);
V=pzem.voltage(ip); //voltaje obtenido de la biblioteca pzem
i = pzem.current(ip); // actual obtenido de la biblioteca pzem
p = pzem.power(ip);//potencia obtenida de la biblioteca pzem
dtostrf(V,7,3,ix); //función utilizada para almacenar el valor actual en la variable char ix, especificando 3 como el número de dígitos después del punto
dtostrf(i,7,3,iy); //función utilizada para almacenar el valor actual en la variable char iy, especificando 3 como el número de dígitos después del punto
dtostrf(p,7,3,iz); //función utilizada para almacenar el valor de potencia en la variable char iz, especificando 3 como el número de dígitos después del punto
retraso (1000);
PZEM004T pzem1(12,13); //(RX TX)
pzem1.setAddress(ip1);
V1=pzem1.voltage(ip1); //voltaje obtenido de la biblioteca pzem
i1 = pzem1.current(ip1); // actual obtenido de la biblioteca pzem
p1 = pzem1.power(ip1);//potencia obtenida de la biblioteca pzem
dtostrf(V1,7,3,ix1);//función utilizada para almacenar el valor actual en la variable char ix1, especificando 3 como el número de dígitos después del punto
dtostrf(i1,7,3,iy1); //función utilizada para almacenar el valor actual en la variable char iy1, especificando 3 como el número de dígitos después del punto
dtostrf(p1,7,3,iz1); // función utilizada para almacenar el valor de potencia en la variable char iz1, especificando 3 como el número de dígitos después del punto
retraso (1000);
sprintf(conc,":%s,:%s,:%s,:%s,:%s,:%s,\n", ix,iy,iz,ix1,iy1,iz1); // función utilizada para concatenar todos los valores en una sola variable char
Serial.write(conc);
} /////////////////////////
Observaciones:
Los sensores no se leen al mismo tiempo.
El tipo de los valores dados por el sensor es flotante.
Después de obtener todos los valores, estos se convierten de tipo flotante a char utilizando la función «dtostrf» en la que los lugares decimales se limitan a tres.
Los 6 valores se concatenan mediante la función «sprintf», en una única matriz de caracteres y luego se envían como datos en serie.
Además de poner todos los valores juntos en la matriz char, también ponemos los caracteres ‘:’ y ‘,’. Al final, la matriz de caracteres se ve así: “:val1,:val2,:val3,:val4,:val5,:val6,:”. Se hace con el fin de analizar y sacar los valores fácilmente en python.
Después de cargar y probar el código en el microcontrolador, es hora de lidiar con el script de python. El microcontrolador Arduino debe conectarse a la Raspberry mediante un cable USB.
Antes de comenzar con el código, podría ser bueno saber cómo crear un archivo python desde la terminal de Linux. Se hace escribiendo la siguiente línea de comando:
toque PZEM_Sensors.py
Luego para abrir el archivo ya creado, debemos teclear la siguiente línea de comando:
nano PZEM_Sensores.py
import serial
import time
import re
port = "/dev/ttyACM0"
s1 = serial.Serial(port,9600)
while True:
if s1.inWaiting()>0:
inputValue = s1.readline().decode()
m = re.search('.*:(.*),.*:(.*),.*:(.*),.*:(.*),.*:(.*),.*:(.*),',inputValue) # command used to read the information and split it between the charcaters ':' and ','
v1 = m.group(1).replace(" ","") ## command used to saved the information splitted before in a the variable
i1 = m.group(2).replace(" ","")
p1 = m.group(3).replace(" ","")
v2 = m.group(4).replace(" ","")
i2 = m.group(5).replace(" ","")
p2 = m.group(6).replace(" ","")
a = float(v1)
b = float(i1)
c = float(p1)
d = float(v2)
e = float(i2)
f = float(p2)
print("Voltage1:",+a)
print("Current1:",+b)
print("Power1:",+c)
print("Voltage2:",+d)
print("Current2:",+e)
print("Power2:",+f)
Observaciones:
Deberíamos especificar el puerto de la Raspberry donde está conectado el sensor. Para saberlo, solo debemos escribir el siguiente comando desde la ventana de la Terminal LX: ls /dev –> Los nombres de los dispositivos USB conectados comienzan con: “ttyUSBX”. Donde X indica el número de cada dispositivo USB conectado.
El puerto serie se lee y decodifica para asegurarse de que tenemos una cadena de caracteres. Se hace con la función readline() y decode() respectivamente.
Los seis valores se obtienen mediante el uso de expresiones regulares. Usando ‘.*:(.*),’, tomamos todos los caracteres que están entre ‘:’ y ‘,’ y luego los almacenamos en grupos.
Al final los valores se convierten de tipo char a tipo float.
Después de escribir todo el código y presionar las teclas Ctrl + X, se le pedirá que lo guarde o no. Debe presionar la tecla y o n y luego Enter.
Para ejecutar el código, debemos escribir la siguiente línea de comando:
python PZEM_Sensores.py
Luego, todos los resultados y mensajes aparecerán en las ventanas de la Terminal o aparecerá un mensaje de error si hay algo incorrecto dentro del código.
La siguiente figura muestra todos los resultados obtenidos de los dos sensores PZEM. La corriente 1 es 0 debido a que no hay ningún sensor de corriente conectado y por eso la potencia 1 también es 0. Si hay algún problema de comunicación el valor que obtendremos es -1.
Ya se trató en este blog el hardware de EmonESP/EmonCMS ,una placa medidora de energía que usa tambien un ESP32 proporcionado 6 canales expandibles pudiendo leer 6 canales de corriente y 2 canales de voltaje a la vez. Para ello utiliza transformadores de corriente y un transformador de CA para medir el voltaje y alimentar la(s) placa(s)/ESP32.
Estas son algunas de sus carastericticas
Muestras de 6 canales de corriente y 1 canal de voltaje (ampliable a 2 voltajes)
Las placas complementarias (hasta 6) pueden expandir el medidor hasta 42 canales de corriente y 8 canales de voltaje
Utiliza 2 Microchip ATM90E32AS – 3 canales de corriente y 1 voltaje por IC
Para cada canal, el medidor también puede calcular lo siguiente:
Poder activo
Poder reactivo
Poder aparente
Factor de potencia
Frecuencia
La temperatura
Utiliza abrazaderas de transformador de corriente estándar para probar la corriente
Resistencias de carga de 22 ohmios por canal de corriente
Incluye convertidor reductor incorporado para alimentar ESP32 y electrónica
2 interrupciones IRQ y 1 salida de advertencia conectada a ESP32
Salidas de cruce por cero
Salidas de pulso de energía por IC (4 por IC x2)
Interfaz SPI
Error de medición IC: 0,1%
Rango dinámico IC: 6000:1
Selección de ganancia actual: hasta 4x
Deriva de referencia de voltaje típica (ppm/°C): 6
Resolución ADC (bits): 16
La placa principal cuyas medidas pueden ser bien Monofásica o Trifásicas incluye un convertidor reductor para alimentar la electrónica y la placa de desarrollo ESP32, que se conecta directamente a la placa. Se pueden apilar hasta 6 placas adicionales encima de la placa principal para permitirle monitorear hasta 42 canales actuales en resolución de 16 bits, en tiempo real, ¡todo a la vez!
La potencia se puede calcular en el software, pero el factor de potencia deberá estimarse ((voltaje*corriente)*power_factor)).
A continuación destacamos los elementos hardware necesarios para completar la instalación:
Transformadores de corriente (cualquier combinación de los siguientes, o cualquier transformador de corriente que no supere los 720 mV RMS o la salida de 33 mA)
SCT-006 20A/25mA Micro (apertura de 6 mm – conectores de 3,5 mm)
SCT-010 80A/26.6mA Mini (apertura 10mm – conectores 3.5mm)
Magnelab SCT-0750-100 (conectores de tornillo: debe cortar la conexión de la resistencia de carga en la parte posterior de la placa, ya que tienen una resistencia de carga incorporada).
También se pueden usar otros, siempre que estén clasificados para la cantidad de energía que desea medir y tengan una salida de corriente de no más de 720 mV RMS, o 33 mA en la salida máxima.
Transformador de CA (NO CC):
América del Norte: Jameco Reliapro 120V a 9V AC-AC o 12v. El pin positivo debe ser de 2,5 mm (algunos son de 2,1)
Europa: 240 V a 9 V o 12 V CA-CA al menos 500 mA
ESP32 (elija uno):
NodoMCU 32s
Espressif DevKitC
DevKitC-32U si necesita una mejor recepción wifi (no olvide la antena )
Cualquier otra cosa con los mismos pines que el anterior, que generalmente son 19 pines por lado con 3v3 en la parte superior izquierda y CLK en la parte inferior derecha
Software (elija uno):
La versión personalizada de EmonESP y la biblioteca Arduino ATM90E32
El medidor de energía ESP32 de 6 canales expandible está hecho para que una placa de desarrollo ESP32 se pueda conectar directamente al medidor. Consulte la lista anterior para conocer las placas de desarrollo ESP32 compatibles. Siempre inserte el ESP32 con el pin 3V3 en la parte superior izquierda del medidor . Los pines inferiores se utilizan para conectar la señal de voltaje (del enchufe de alimentación) a las placas adicionales. Si el ESP32 se inserta en los pines inferiores, lo más probable es que haga un cortocircuito en el ESP32.
El medidor de energía ESP32 de 6 canales expandible utiliza SPI para comunicarse con el ESP32. Cada placa utiliza 2 pines CS.
La placa principal utiliza los siguientes pines SPI:
CLK – 18
miso – 19
MOSI – 23
CS1 – 5 (CT1-CT3 y voltaje 1)
CS2 – 4 (CT4-CT6 y voltaje 2)
El software EmonESP/EmonCMS
EmonESP se usa para enviar datos de medidores de energía a una instalación local de EmonCMS o emoncms.org . Los datos también se pueden enviar a un corredor MQTT a través de esto. EmonCMS tiene aplicaciones para Android e IOS. El software ESP32 para EmonESP se encuentra aquí , y se puede flashear a un ESP32 usando Arduino IDE o PlatformIO
ESPHome/Asistente de hogar
ESPHome se puede cargar en un ESP32 para integrar sin problemas los datos de energía en Home Assistant . Los datos de energía se pueden guardar en InfluxDB y mostrar con Grafana. Al mismo tiempo, los datos de energía también se pueden usar para automatizaciones en Home Assistant.
Una nueva característica en Home Assistant le permite monitorear el uso de electricidad directamente en Home Assistant . ¡También puede rastrear el uso de dispositivos individuales y/o energía solar usando el medidor de 6 canales!
Intermitente ESPHome
Si tiene Home Assistant instalado, vaya a Supervisor en el menú de la izquierda, haga clic en Tienda de complementos en la parte superior, busque ESPHome – Haga clic en Instalar
Haga clic en Abrir interfaz de usuario web
Haga clic en el círculo verde + en la parte inferior derecha para agregar un nuevo nodo
Complete el nombre (por ejemplo, ‘energy_meter’ y el tipo de dispositivo como NodeMCU-32S o Generic ESP32
Agregue los detalles de su wifi y haga clic en Enviar para crear el nodo
ESPHome se compilará; cuando esté completo, haga clic en Descargar binario
Conecte el ESP32 que pretende usar con su medidor a su computadora a través de USB (no es necesario que esté conectado al medidor en este punto, pero si lo está, no conecte el transformador de CA todavía para el medidor al mismo tiempo). vez que el ESP32 está conectado al USB)
En la luz intermitente de ESPHome, seleccione el puerto COM al que está conectado el ESP32
Seleccione el archivo .bin que acaba de descargar y haga clic en Flash ESP (si no se conecta, haga clic en ver registros para ver qué está pasando; probablemente tendrá que mantener presionado el botón de arranque derecho en el ESP32 después de hacer clic en Flash ESP)
ESPHome se cargará en el ESP32 con una configuración básica
Suponiendo que el ESP32 esté lo suficientemente cerca del AP al que desea conectarse para WiFi, ahora debería estar disponible en ESPHome dentro de Home Assistant
En Home Assistant, vaya a Configuración > Integraciones y Configure para ESPHome. Debe estar resaltado como Descubierto
En la interfaz de usuario web de Home Assistant/ESPHome, haga clic en Editar para el nodo Medidor de energía
Copie/pegue la configuración de ejemplo, cambie cualquier configuración aplicable, como las calibraciones actuales a los transformadores de corriente que utiliza, y haga clic en Guardar
En este punto, es una buena idea cerrar el cuadro de diálogo de edición y hacer clic en Validar en la pantalla principal para asegurarse de que su archivo .yaml sea válido. Corrige los errores que puedan surgir.
Haga clic en Cargar para guardar su configuración en el ESP32. Tenga en cuenta que si tiene 4 o más placas adicionales, puede recibir un error y quedarse sin memoria en su ESP32 si tiene muchos sensores.
Para una mayor precisión, puede calibrar los sensores de corriente.
Al actualizar los valores de los transformadores de corriente en la configuración de ESPHome, haga clic en Editar y luego en Cargar
Obtener datos en InfluxDB
Si aún no lo ha hecho, instale el complemento InfluxDB en Home Assistant a través de Supervisor > Tienda de complementos
Abra la interfaz de usuario web y haga clic en la pestaña Administrador de InfluxDB , agregue un asistente de base de datos
Haga clic en la pestaña Usuarios (en Bases de datos en la misma pantalla) y cree un nuevo usuario homeassistant con Todos los permisos
Edite su configuración .yaml y agregue los parámetros de InfluxDB enumerados en Supervisor > InfluxDB > Documentación (menú superior) > Integración en Home Assistant
Reiniciar Asistente de inicio
Los datos ahora deberían estar disponibles en Home Assistant y disponibles en http://homeassistant.local:8086 o la IP de Home Assistant
Obtener datos en el panel de energía de Home Assistant
Para mostrar datos en el panel de energía de Home Assistant, debe usar ESPHome v1.20.4 o superior, y tener al menos una total_daily_energyplataforma configurada en su configuración de ESPHome. timetambién se necesita.
Se puede hacer lo mismo que arriba para rastrear el uso y la exportación de paneles solares. Los canales actuales en el medidor que rastrean el uso solar deben tener su propio cálculo de plantilla lambda.
Para dispositivo individual/seguimiento de circuito
Para hacer esto, debe tener la potencia calculada por el medidor, o una plantilla lambda que calcula los vatios por circuito. Luego puede usar una plataforma de kWh para cada uno de los canales actuales en el medidor de energía de 6 canales. Por ejemplo:
ct1Wattshace referencia a la identificación del cálculo de vatios. En la configuración de ejemplo , esto es:
power:
name: ${disp_name} CT1 Watts
id: ct1Watts
Configuración en Home Assistant
Vaya a Configuración > Energía
Para la energía total, haga clic en Agregar consumo en Red eléctrica
El nombre de la plataforma total_daily_energy, como 6C Total kWh, debería estar disponible para elegir
También puede establecer un costo estático por kWh o elegir una entidad que rastree el costo de su electricidad
Para Dispositivos individuales, elija el nombre de los circuitos individuales, como 6C CT1 Watts Daily
Si monitorea sus paneles solares con un medidor de 6 canales, también puede configurar esto aquí, pero no se registrará a menos que su casa consuma energía o fluya hacia la red.
Preguntas más frecuentes
Obtengo una lectura baja o nada en absoluto para un CT. ¿Qué sucede?: A veces, el conector para el CT es un poco rígido y es posible que deba empujar el conector del CT en el conector de la placa hasta que haga clic. Si definitivamente está completamente adentro, es posible que el conector o algún otro lugar tenga una conexión suelta, y reemplazaremos el medidor de forma gratuita.
¿Funciona el medidor de energía de 6 canales en mi país?: ¡Sí! Hay una configuración para configurar el medidor a 50 Hz o 60 Hz de potencia. Deberá comprar un transformador de CA que reduzca el voltaje a entre 9 y 12 V CA. Los transformadores para EE. UU. están a la venta en la tienda circuitsetup.us.
Obtengo un valor negativo en un canal actual. ¿Qué está pasando? Esto generalmente significa que el CT está en la parte posterior del cable, ¡simplemente gírelo!
Obtengo un pequeño valor negativo cuando no hay ninguna carga, pero de lo contrario obtengo un valor positivo. ¿Qué está pasando?: Esto se debe a variaciones en las resistencias y los transformadores de corriente. Puede calibrar los transformadores de corriente al medidor o agregar esta sección lambda para permitir solo valores positivos para un canal de corriente:
Luego, para su cálculo de vatios totales, use ct1WattsPositive
Los cables del CT no son lo suficientemente largos. ¿Puedo extenderlos? ¡Sí, absolutamente puedes! Se puede usar algo como una extensión de auriculares o incluso un cable de ethernet (si no le importa hacer algo de cableado). Se recomienda calibrar los TC después de añadir cualquier extensión particularmente larga.
¿Puedo usar este CT con el medidor de 6 canales?: ¡Lo más probable es que sí! Siempre que la salida tenga una potencia nominal inferior a 720 mV RMS o 33 mA.
¿Puedo usar CT SCT-024 200A con el medidor de 6 canales?: Si necesita medir hasta 200 A, no se recomienda. A 200A, el SCT-024 emitirá 100mA. Eso significa que el máximo que debe medir con el SCT-024 conectado al medidor de 6 canales es 66A . En un entorno residencial con un servicio de 200 A, es muy poco probable que utilice más de 66 A por fase sostenida. De hecho, a menos que tenga su propio transformador dedicado y una casa muy grande, es imposible.
¿Cómo sé si mi CT tiene una resistencia de carga?: Hay una resistencia de carga incorporada si la salida está clasificada en voltios. En este caso, se debe cortar el puente correspondiente en la parte posterior del medidor.
Cuando se usan más de 3 tableros complementarios, ESPHome no funciona. ESPHome se quedará sin memoria de pila después de usar más de 15 sensores, más o menos. Deberá aumentar el tamaño de la memoria de pila antes de compilar. Ver detalles aquí.
ACTUALIZACIÓN: Puede reemplazar la definición esphome: en su configuración de ESPHome para resolver este problema con lo siguiente:
En plena crisis energética, el consumo eléctrico supone una importante fuente de gasto, tanto para las empresas, como para los ciudadanos podríamos haber reducido las emisiones de 32,23 Megatoneladas de Co2.
Para intentar optimizar el consumo eléctrico de cualquier entidad, es necesario previamente medir éste de la forma más fiel posible, pues no se puede optimizar nada que no se pueda medir, siendo lo ideal monitorizarlo en tiempo, con objeto de generar alarmas, registrar eventos y crear informes de análisis de calidad de energía.
Algunas de las utilidades de monitorizar el consumo eléctrico:
Estudiar los hábitos de consumo en función de las franjas horarias con objeto de promover políticas destinadas a su reducción.
Detectar picos indebidos de consumo en horas de baja actividad con objeto de detectar “consumos fantasmas” y consumos indebidos.
Racionalizar el gasto energético consumiendo sólo lo necesario evitando derroches superfluos, contribuyendo de esta manera a luchar contra el cambio climático.
Predecir el consumo energético estudiando el histórico.
Trasladar los picos de consumo, cuando sea posible, a otras franjas horarias con objeto de no sobrecargar la red.
Detectar cortes de suministro con objeto de generar alarmas o tomar medidas correctivas.
Diagnosticar posibles fallos tanto en las instalaciones como en los aparatos eléctricos.
Servicios relacionados con AAL (Ambient Assisted Living), es decir servicios para la independencia de las personas mayores .
Detectar consumos indebidos causados por sabotajes de las instalaciones.
Optimización de la demanda contratada.
Usando técnicas de monitorización según muchos expertos se puede ahorrar desde un 15% hasta 20%. Y no solo esto va de ahorro económico pues por ejemplo en España en 2020 podríamos haber reducido las emisiones de 32,23 Megatoneladas de Co2.
En este contexto, contamos con el OpenZMeter, un medidor monofásico de energía eléctrica, que es además también analizador de calidad de la energía. Este dispositivo, es de código abierto, cuenta con capacidades de IoT y permite medir una amplia gama de variables eléctricas a una elevada frecuencia de muestreo (15625Hz).
Este nuevo código intenta completar las capacidades del OZM adaptando para ello la herramienta de desagregación de la demanda NILMTK, mediante la ampliación del uso de TimeStamp de 13 dígitos, la creación de dos nuevos convertidores y conversores con el soporte de transitorios hasta el orden 50 de tensión , corriente y potencia, la generación de dos nuevos DS y el desarrollo del nuevo código abierto para la desagregación.
Para ello, el entrenamiento contempla el uso de dos de los algoritmos de desagregación más conocidos, como son el de Optimización Combinatoria (CO) y el Modelo de Markovv Factorial Oculto (FHMM).
OZM requiere para la desagregación un periodo bastante más pequeño de unos 30” en contraposición con los requeridos con otros DS públicos que suele estar en torno a los 15’.
Tras el entrenamiento, los datos agregados pueden introducirse en el modelo para su desagregación y posterior análisis de los resultados obtenidos obteniéndose un error que no supera el 1%.
Gracias a que NILMTK proporciona funciones para calcular las métricas de los resultados de cada algoritmo de desagregación, en este estudio podemos comparar resultados obtenidos con diferentes métodos, periodos de muestreo, algoritmos y DS.
Resultados DEPS
RESULTADOS OZM
Destaca el error mínimo en la desagregación así como las métricas MNEAP y RMSE cuyo comportamiento son bastante superiores en OZM frente a otros DS públicos
Conclusiones
El uso de componentes armónicos se demuestra que mejora el resultado de casi todas las métricas dependiendo mucho del tipo del dispositivo eléctrico.
El comportamiento del nuevo DS supera en tiempos de muestreo y métricas a otros DS públicos.
Se entrega código abierto funcional que permite desagregar por completo una instalación convencional.
En un horizonte futuro, como continuación de este trabajo, se propone obtener un mecanismo automatizado para desplegar en una instalación convencional para hacer posible mostrar en tiempo real la desagregación del consumo energético de los diferentes aparatos eléctricos que lo constituyen.
Video resumen
En el siguiente video podemos ver un resumen en video de los conceptos y resultados mas importantes que hemos visto en este post:
El mercado de la gestión de la energía en el hogar ha hecho muchas promesas, pero todavía tiene que ofrecer una visión profunda y reducciones significativas en el uso de energía en el hogar.
Microsoft intentó y fracasó con la plataforma de energía Hohm. Por su parte Google.org probó con el famos paquete de energía para el hogar PowerMeter, solo para luego abandonar el esfuerzo en su famosa primavera de limpieza para adquirir la marca de termostato Nest en su lugar.
Las empresas de administración de energía centradas en hardware, como Tendril, EnergyHub y Onzo, han tenido que hacer cambios drásticos en la estrategia de productos y canales para mantenerse en la búsqueda del cliente. Encontrar un plan de negocios rentable que navegue por los ciclos de gasto de los servicios públicos, los cambios regulatorios y el comportamiento de los clientes de energía ha resultado ser un desafío.
Nest ha trasladado la tecnología de termostatos al año 2008, mientras que Opower, con destino a la oferta pública inicial, ahorra a los clientes de servicios públicos residenciales un promedio de 1,5 a 2,5 por ciento en su factura de electricidad.
Pero «se acerca el tren de la desagregación», según el director general de Bidgely, Abhay Gupta. La desagregación podría ahorrarle al cliente dinero real y cantidades significativas de energía, cambiar la relación de la empresa de servicios públicos con su cliente e impulsar el mercado de administración de energía para el hogar.
Datos de energía a nivel de electrodomésticos de Bidgely
El director ejecutivo de Bidgely afirma que su software de «reconocimiento de patrones profundos» puede brindar datos de consumo de energía a nivel de electrodomésticos, utilizando únicamente la señal del medidor inteligente de una casa.
Segun el CEO de Bidgely, Abhay Gupta, se debería mover la retroalimentación de energía de «un nivel de motivación como Opower a un nivel de empoderamiento.
Con datos de Green Button o AMI a intervalos de una hora, Bidgely puede identificar y detectar cargas de calefacción, refrigeración y bombas, así como energía solar en el techo. Los datos de la red de área doméstica del medidor inteligente pueden brindar suficiente información para identificar electrodomésticos adicionales, como calentadores de agua, estufas, secadoras, bañeras de hidromasaje o vehículos eléctricos.
El CEO dijo que «los servicios públicos nos están empujando hacia nuevos usos». Dio un ejemplo de un programa de bomba de piscina de servicios públicos donde Bidgely realiza la medición y verificación de los dispositivos. También sugirió que la empresa de servicios públicos podría identificar las casas en un territorio que tenía bombas de piscina ineficientes.
La empresa financiada por Khosla Ventures obtiene acceso a los datos de uso no de los sensores de nivel de enchufe, sino a través de grandes conjuntos de datos y análisis inteligentes (aunque se asocia con proveedores de hardware como Blue Line Innovations ). Si Bidgely realmente puede analizar los dispositivos individuales del flujo de datos, los consumidores realmente pueden comenzar a comprender su uso y comenzar a tomar decisiones energéticas más significativas. Las empresas de servicios públicos pueden segmentar el mercado como nunca antes. ¿La empresa de servicios públicos necesita apuntar a 1,500 hogares con bombas para piscinas para un programa de eficiencia energética? Bidgely podría identificar potencialmente a esos propietarios de bombas de piscina.
La firma ha trabajado con cinco empresas de servicios públicos no identificadas, y otras ahora están evaluando el software, que ofrece participación del cliente, gestión del lado de la demanda e inteligencia empresarial.
Preston Roper, director de marketing de la empresa, enfatizó el extremo de ventas del negocio y la necesidad de simplificar el despliegue de una solución de extremo a extremo para una empresa de servicios públicos. Roper describió que la empresa se encuentra en la etapa de comercialización y venta agresiva. Dijo que tiene «vendedores hambrientos y clientes hambrientos que quieren hacer más con los datos«. (Cabe destacar que Opower gastó 30,5 millones de dólares en ventas y marketing en 2013, su mayor gasto, justo por delante de I+D, según su S-1).
«Opower ha hecho un trabajo fantástico en eficiencia energética a través de las ciencias del comportamiento», dijo el CEO de Bidgely. Agregó que Opower había «abierto baldes de dólares y abrió el canal, pero lo estamos llevando al siguiente nivel».
PlotWatt desagrega en Wendy’s, KFC y Dunkin’ Donuts
PlotWatt tiene su propio giro en el software de desagregación basado en la nube. El director ejecutivo de la startup, Luke Fishback, le dijo a GTM que «la desagregación en sí misma es menos interesante que el tipo de inteligencia que podemos ofrecer en función de la desagregación».
«Una factura de electricidad detallada está bien, pero en nuestra experiencia, no es [suficiente]. Lo que realmente perturba al sector es toda la inteligencia genial y procesable que se puede derivar de los datos».
En teoría, los datos de un medidor inteligente o de un conjunto de datos de Green Button tienen el potencial de indicar si hay un segundo refrigerador ineficiente en el garaje o una bomba de piscina deshonesta que consume energía por la tarde, o detectar si un restaurante no está abierto. el congelador está a punto de fallar.
El director ejecutivo de PlotWatt nos dijo que la empresa «ya está generando un nivel increíble de ahorros» con «un nivel de compromiso» mucho más allá del estado de cuenta mensual de kilovatios-hora.
Según Fishback, «Opower ha hecho un trabajo brillante al abordar los puntos débiles de las empresas de servicios públicos». Pero mientras que Opower puede obtener ahorros del 2 por ciento, Fishback sugiere que la tecnología de su empresa puede acercarse a niveles de ahorro del 10 al 15 por ciento. Dijo: «No se ven muchos programas que brinden el nivel de eficiencia energética que nosotros podemos. Tal vez el 2 por ciento es la forma en que se incentivan de manera óptima las empresas de servicios públicos. No se les incentiva para brindar ahorros del 5 por ciento o del 10 por ciento».
Si bien Bidgely se enfoca en los servicios públicos, Fishback de PlotWatt habló de ir donde estaban los datos, y en una de las estrategias de mercado de la empresa, PlotWatt descubrió que los franquiciados de las cadenas de comida rápida Wendy’s, KFC y Dunkin’ Donuts son clientes entusiastas, dada la El ROI de un año reclamado por el producto y más del 10 por ciento de ahorro de electricidad. El servicio de suscripción que ofrece PlotWatt puede reducir las facturas, detectar electrodomésticos averiados y averiados, y proporcionar inteligencia comercial, como si una ubicación en particular cierra antes de tiempo o si las entregas se retrasan. PlotWatt utiliza hardware en la caja de interruptores como registrador de datos. No hay participación de las empresas de servicios públicos, según el CEO.
El CEO enfatizó que no son los datos sin procesar los que ahorran un 14 por ciento de electricidad en la ubicación de Wendy’s: es el correo electrónico enviado al gerente de la tienda que le notifica que el horno se dejó encendido a la hora de cerrar o que una cámara frigorífica está a punto de abrirse. fallar.
La estrategia de mercado de PlotWatt se dirige a cualquier nodo donde se agreguen datos de redes inteligentes. Entonces, además de los restaurantes, la empresa se enfoca en flujos de datos residenciales y de servicios públicos.
El CEO dijo que la parte residencial de este mercado es el «gigante dormido» y agregó: «Queremos construir un negocio para que cuando el gigante despierte o cuando sea provocado, estemos listos».
El líder del mercado Opower no se queda quieto
Opower, que domina el mercado, y su motor de participación del cliente con destino a la oferta pública inicial es una historia de éxito de una startup. La compañía de software financiada por VC creó un nuevo mercado con una inclinación de TI y escaló a lo grande y rápido.
Opower buscaba recaudar $110 millones a través de una oferta pública inicial. Como informó Stephen Lacey de GTM, los ingresos de Opower crecieron de $28,7 millones en 2011 a $88,7 millones en 2013. Más del 90 por ciento de sus ingresos en 2013 provinieron de suscripciones con los 93 clientes de servicios públicos de Opower.
Lacey señala que los ciclos de ventas de Opower van desde tan solo seis meses hasta veinticuatro meses. Muchos de los clientes más importantes de Opower verán expirar sus contratos en 2014 o 2015. Opower identifica a sus competidores como Aclara, C3 Energy, Nest Labs, Oracle, SAP y Tendril, «así como muchos otros proveedores más pequeños». La firma tiene sus propias patentes sobre la desagregación de datos de carga.
Opower sigue siendo la fuerza a tener en cuenta y probablemente insistiría en que este «Opower 2.0» del que sigo escuchando provendrá del mismo Opower.
Un negocio impulsado por programas de eficiencia de servicios públicos
Los contratos y los ingresos que obtiene Opower y que son el objetivo de Bidgely, PlotWatt y el resto de la industria de eficiencia energética generalmente provienen de programas de respuesta a la demanda o eficiencia energética de servicios públicos exigidos por la PUC de un estado. Estos programas brindan incentivos significativos para las reducciones en el consumo anual de energía, además de imponer sanciones por incumplimiento.
Los programas de eficiencia energética de las empresas de servicios públicos financiados por los contribuyentes se han más que duplicado entre 2006 y 2010 a $ 4.8 mil millones, y se espera que los programas se dupliquen nuevamente para 2025, según un estudio del Laboratorio Nacional Lawrence Berkeley.
«Comprender la parte del comportamiento humano y la ciencia humana es tan importante, si no más importante» que los desafíos técnicos involucrados en el desglose de energía, dijo Peter Porteous de Blue Line Innovations en el informe de St. John. «Las empresas que serán exitosos serán los que tengan ambos.”
“Creo que la credibilidad triunfa sobre la precisión” cuando se trata de datos detallados de desglose de viviendas, dijo Porteous. “Lo que quiero decir con eso es que si esta es tu casa, y estás conectado, y de repente los datos regresan y te dicen que estás gastando $10 al mes en un jacuzzi, y tú… Si no tienes un jacuzzi, bueno, nunca volverás a mirar los datos”. Esa comprensión fundamental de la naturaleza humana es la razón por la cual Bidgely o PlotWatt adoptan un «enfoque conservador y muy reacio al riesgo para revelar el uso».
Eso no solo es valioso para los propietarios de viviendas, señaló. “La respuesta de las empresas de servicios públicos, cuando ven que ahora pueden tener acceso a estos datos, realmente cambia las reglas del juego”, dijo. “Esa es su principal frustración: no tienen idea de lo que hacen sus clientes dentro de la casa y dedican grandes cantidades de investigación a tratar de averiguarlo”.
Opower ha tenido una gran ventaja y pronto tendrá acceso a capital público. Los programas de la empresa permiten que las empresas de servicios públicos cumplan con los mandatos de eficiencia sin amenazar el sustento de la empresa de servicios públicos. Como sugirió el director ejecutivo de PlotWatt, «tal vez el 2 por ciento es la forma óptima de incentivar a las empresas de servicios públicos», y un ahorro del 15 por ciento puede ser demasiado perturbador para alentarlo en este momento.
En cualquier caso, esté atento a la convergencia de la ciencia del comportamiento de Opower con la tecnología de los desagregadores en los próximos años. Si el genio de la desagregación es real, no se puede volver a poner en la botella.
A principios de la década de 1980, el Instituto Americano de Investigación de Energía Eléctrica y el MIT ya habían comenzado a realizar investigaciones teóricas relacionadas con la segregacion del consumo eléctrico de forma no intrusiva (los documentos representativos son: Hart, GW Monitoreo de carga de dispositivos no intrusivos, IEEE Proc 1992, 80, 1870–1891).
George W. Hart, Ed Kern y Fred Schweppe del MIT recibieron fondos del Instituto Nacional de Investigación de Energía Eléctrica para inventar el Monitor de Carga de Aparatos No Intrusivos (NALM). Es decir, supervisión de carga de dispositivos no intrusiva ( supervisión de carga de dispositivos no intrusiva) )
La literatura en este período es similar a la idea del tema, que es descomponer la diferencia de potencia de diferentes equipos eléctricos, Esta «descomposición de carga eléctrica» tiene muchos nombres. . . desagregación de carga, monitoreo de carga no intrusivo (NILM) y monitoreo de carga de dispositivo no intrusivo (NIALM o NALM) Todos significan lo mismo de todos modos. . .
El monitoreo de carga no intrusivo del consumo de energía de los electrodomésticos residenciales es en realidad: convertir la señal analógica del voltaje y la corriente de la electricidad a la casa en una señal digital y procesarla para detectar cambios en algunos parámetros.
Entre ellos, la técnica de análisis de conglomerados se utiliza para medir la variación de un conjunto de datos en determinadas categorías, y su lógica se puede utilizar para identificar cada dispositivo y la energía consumida. Para ser claros, es mediante el monitoreo de algunos de los datos identificar los dispositivos en uso (la dirección inicial de la investigación es similar a lo que pienso actualmente, que es estudiar la potencia de los equipos eléctricos ac)
La imagen de arriba es un ejemplo de un antiescarcha refrigerador libre de heladas
Otro ejemplo de ello es la supervisión no intrusiva de la carga de los dispositivos
ARRIBA (LI PENG. DESCOMPOSICIÓN Y MONITOREO DE CARGA DE ENERGÍA NO INVASIVA. TIANJIN: UNIVERSIDAD DE TIANJIN, 2009.)
Entonces, ¿ qué son la potencia reactiva y la potencia activa?..
Primero, la potencia activa. en los circuitos de ca, la parte de la energía consumida en el elemento de resistencia que se reemplaza irreversiblemente por la potencia.(POR EJEMPLO, LA CONVERSIÓN A ENERGÍA TÉRMICA, ÓPTICA O MECÁNICA) SE DENOMINA POTENCIA ACTIVA, EXPRESADA EN «P» EN VATIOS (W).refleja el tamaño de la capacidad de la fuente de alimentación de ca para trabajar en elementos de resistencia, o la cantidad de energía eléctrica convertida en otras formas de energía en una unidad de tiempo.de hecho, es la cantidad de energía eléctrica que se alterna instantáneamente en otras formas de energía durante un período de tiempo.es el promedio de la potencia instantánea de la potencia alterna durante un período de tiempo, de ahí la potencia media.
En segundo lugar, la potencia reactiva ,en los circuitos de ca, los componentes que son inductivos o capacitivos se construyen después de la adopción. el campo magnético de la del inductor o el campo eléctrico entre las placas del capacitor después de pasar bobinas inductivas el campo eléctrico entre el campo magnético o la placa del condensador.por lo tanto, la primera mitad de cada ciclo de ca ( potencia instantánea en tiempo positivo, absorberán energía de la fuente de alimentación para establecer un campo magnético o campo eléctrico, mientras que la segunda mitad (la potencia activa) instantánea, potenativa establecido o la energía del campo eléctrico regresa a la fuente de alimentación.por lo tanto, el valor promedio de esta potencia es igual a cero durante todo el ciclo.es decir, la energía de la fuente de alimentación está relacionada con la energía del campo magnético o la energía de campo eléctrico la conversión de energía reversible se lleva a cabo consumir energía.con el fin de reflejar los hechos anteriores y expresarlos, el inductor o energía intercambiada entre el inductancia o capacitancia elementos capacitivos la potencia intercambiada de un lado a otro con la alimentación de ca se denomina none potencia, expresada en «Q». La unidad es Var..la potencia reactiva es la parte de la potencia eléctrica en el circuito de ca que es convertible debido a la presencia de un elemento eléctricamente resistivo (refiriéndose al inductor puro o condensador puro), que expresa la velocidad ener intergía a la que se la fuente de alimentación de ca con el campo magnético o la energía del campo eléctrico. en la práctica, donde hay una carga inductiva de bobinas y núcleos de hierro, la potencia consumida por el campo magnético que crean durante el trabajo es potencia reactiva. sin potencia reactiva, el motor y el transformador no puedo fun magnest.
En tercer lugar, la potencia que depende LA POTENCIA TOTAL QUE PUEDEN PROPORCIONAR LAS FUENTES DE ALIMENTACIÓN DE CA, LLAMADA POTENCIA VISIBLE O POTENCIA EXPRESIVA, ES NUMÉRICAMENTE EL PRODUCTO DEL VOLTAJE Y LA CORRIENTE EN EL CIRCUITO DE CA. EL PODER DESUAL SE VA RESA ENDA ENDA S. PARA GENERAL, SE UTILIZA REPRESENTAR EL TAMAÑO DE LA CAPACIDAD DE LAS FUENTES DE ALIMENTACIÓN DE CA, COMO LOS TRANSFORMADORES.nota. potencia total-potencia activa-potencia reactiva la potencia visual es la suma vectorial de potencia activa y potencia reactiva.
Cuatro, triángulo de potencia.DEPENDIENDO DE LA RELACIÓN ENTRE POTENCIA (S), POTENCIA ACTIVA (P) Y POTENCIA REACTIVA (Q), SE PUEDEN USAR TRIÁNGULOS DE POTENCIA PARA REPRESENTARLA.COMO SE MUESTRA EN LA SIGUIENTE IMAGEN. ES UN TRIÁNGULO RECTÁNGULO CON DOS LADOS RECTÁNGULO, QYP, RESPECTIVAMENTE., EL BISEL ES S. EL ÁNGULO ENTRE SYP ES EL ÁNGULO DEL FACTOR DE POTENCIA, QUE REFLEJA EL VOLTAJE Y LA CORRIENTE EN EL CIRCUITO DE CA. fase (ángulo) entre el voltaje y la corriente en el circuito de CA. factor de potencia es cos.factor = cos (ɸ).
Teóricamente, es posible distinguir entre diferentes equipos eléctricos bajo ciertas restricciones (de hecho, se ha aplicado pero no es exacto)
DESDE UNA PERSPECTIVA NALM, HAY APROXIMADAMENTE TRES MODELOS ELÉCTRICOS:
PRIMERO: EQUIPOS ON / OFF (DOS ESTADOS), COMO BOMBILLAS O TOSTADORAS. EN CUALQUIER MOMENTO DADO, YA SEA ENCENDIDO O APAGADO.
SEGUNDO: DISPOSITIVOS POLIMÓRFICOS, COMO LAVADORAS O LAVAVAJILLAS. HAY DIFERENCIAS OBVIAS EN EL ESTADO DE ON, POR EJEMPLO, RIEGO, ENJUAGUE, ROTACIÓN, ETC. (SEGÚN LA REVISIÓN, B PRODUCTSCATA AHORA EN EEST)
EL TERCER TIPO: EQUIPO VARIABLE CONTINUO, ES EL TIPO DE EQUIPO EN ESTADO, SE PUEDE AJUSTAR MANUALMENTE EQUIPO ELÉCTRICO. ESTOS SON DIFÍCILES DE MONITOREAR UTILIZANDO MÉTODOS DE MONITOREO NO INVASIVOS.
George usó un modelo llamado máquina de estado finito (FSM) para estudiar un segundo «dispositivo polimórfico».(es una máquina de estado finito, conocida como máquina de estado)
Si la condición de «Girar el interruptor hacia abajo» se cumple en el estado de encendido, el estado se apaga
Si la condición de «Girar el interruptor hacia abajo» se cumple en el estado apagado, el estado pasa a estar encendido
Hay por degracia ejemplos mucho mas compeljos como por ejemplo el Refrigerador sin escarcha
Una cosa que los investigadores tienen en común es que deben haber construido una base de datos de carga recopilada real antes de que se desarrollara el algoritmo, y la introducción de la base de datos relevantes puede serida por el. De Oliver Parson.
A través de estas bases de datos públicas, otros investigadores también pueden usar sus propios algoritmos nuevos y los algoritmos reconocidos actuales para comparar, convertirse en estudios
En consecuencia, se desarrolló un sistema de monitoreo de carga no intrusivo relacionado. Pero cuando los tipos y cantidades de cargas son grandes, la precisión del monitoreo de carga cae drásticamente. Por lo tanto, a principios de este siglo, los investigadores generalmente adoptaron métodos para aumentar las características de carga, que incluyen:
Características transitorias: características de forma de onda de potencia transitoria , características de forma de onda de corriente de inicio, características de ruido de voltaje
Características de estado estable: características de paso de potencia, características de forma de onda de corriente de estado estable , características de trayectoria VI, características armónicas de alto orden
Otras características: características del período , características del ciclo de trabajo, características de transición de estado
Este tipo de método mejora aún más la velocidad correcta de descomposición, pero cuando problemas como el tiempo de uso del equipo se superponen, o cuando hay demasiados dispositivos del mismo tipo, no se puede garantizar la descomposición correcta dentro del tiempo efectivo. Por lo tanto, en los últimos cinco años, la dirección de la investigación se ha desplazado gradualmente hacia el uso de métodos de reconocimiento de patrones, incluido el uso de modelos de Markov ocultos y otros métodos mejorados para mejorar la precisión del reconocimiento a través de una gran cantidad de entrenamiento de datos reales.
En 2012 y 2014, se llevaron a cabo dos conferencias académicas temáticas NILM, y la tercera conferencia se llevará a cabo en Canadá en mayo de 2016.
Los autores de los algoritmos como Zico Kolter, Oliver Parson, etc. son los principales investigadores en la dirección de investigación actual, y se deben básicamente a la investigación en la dirección NILM En los últimos años, el doctorado obtenido y el contenido del algoritmo se describen con detalle en la gran tesis del autor del programa.
Los métodos de investigación de estos investigadores tienen una cosa en común, es decir, antes de que se desarrolle el algoritmo, se debe establecer una base de datos de carga recopilada real. Para la introducción de la base de datos relacionada, consulte el blog de Oliver Parson.
A través de estas bases de datos públicas, otros investigadores pueden comparar sus nuevos algoritmos con los algoritmos actualmente reconocidos y convertirse en ejemplos de cálculo estándar
Aunque el concepto de NILM se ha propuesto durante casi 30 años, con el auge de la ciencia de datos, ha resurgido su valor práctico en los últimos años, y los métodos de investigación se han vuelto más complejos y diversos. La extracción de características es solo uno de los enlaces, y los algoritmos básicos son casi todos ellos han sido tratado (por ejemplo, los estudiantes graduados de un maestro chino probaron los algoritmos clásicos en el aprendizaje de máquinas manuales , tales como método de difundir la Red , de vectores de soporte máquinas, modelos de Markov, Random Forests, etc.,
Es esencial utilizar datos del mundo real al comparar el rendimiento de las técnicas NIALM. Sin embargo, estos conjuntos de datos requieren mucho tiempo, son costosos y, a menudo, son incómodos de recopilar. Con este fin, los investigadores han comenzado a publicar sus conjuntos de datos, lo que permite a otros investigadores comparar sus enfoques con puntos de referencia comunes.
Stephen Makonin lanzó la primera versión del conjunto de datos Almanac of Minutely Power . El conjunto de datos contiene lecturas de medidor agregadas de 1 minuto, así como lecturas submedidas de 19 circuitos individuales. Cada lectura incluye medidas de voltaje, corriente, frecuencia, factor de potencia, potencia real, potencia reactiva y potencia aparente. Además, el consumo total de gas y agua también se midió a intervalos de 1 minuto, además de 1 uso individual para cada servicio. El conjunto de datos abarca un año completo desde abril de 2012 hasta marzo de 2013 de un solo hogar en el área metropolitana de Vancouver, BC, Canadá.
El conjunto de datos está disponible para cualquier persona de forma gratuita, aunque los autores requieren que se solicite un nombre de usuario y una contraseña para realizar un seguimiento del uso.
La Universidad de California, Berkley, ha publicado datos de electricidad recopilados del Cory Hall en el campus de UC Berkeley. El conjunto de datos contiene datos recopilados de 4 categorías de cargas submedidas: iluminación, HVAC, receptáculo (enchufes) y otros, para los cuales hay muchas fuentes disponibles para cada categoría de carga.
El conjunto de datos contiene mediciones de potencia activa, reactiva y aparente que se recopilaron a intervalos de 20 segundos. Los datos están disponibles de forma gratuita a través del sitio web de Mehdi Maasoumy , y un documento que describe brevemente el conjunto de datos apareció en el taller Big Learning en NIPS 2013 .
Thomas Kriechbaumer y Hans-Arno Jacobsen de la Universidad Técnica de Munich (TUM) lanzaron recientemente el conjunto de datos BLOND, que contiene lecturas de voltaje y corriente para circuitos agregados y datos de verdad de tierra totalmente etiquetados (mediciones de aparatos individuales). El estudio cubre 53 aparatos (16 clases) en una red eléctrica trifásica en Alemania.
Los autores han publicado dos versiones del conjunto de datos: 1) BLOND-50 contiene 213 días de mediciones muestreadas a 50 kHz (agregado) y 6.4 kHz (aparatos individuales), 2) BLOND-250 consta de la misma configuración: 50 días, 250 kHz (agregado), 50 kHz (aparatos individuales). El conjunto de datos también se describe con más detalle en el artículo de Datos científicos .
El conjunto de datos BLUED contiene datos a nivel de hogar de alta frecuencia (12 kHz) de un solo hogar de EE. UU. Durante un período de aproximadamente 8 días. El conjunto de datos también contiene una lista de eventos de cada vez que un electrodoméstico dentro del hogar cambia de estado (por ejemplo, se enciende el microondas).
Este conjunto de datos se recopiló principalmente para la evaluación de métodos NIALM basados en eventos. Los autores también tienen acceso protegido con contraseña al conjunto de datos para realizar un seguimiento de su uso.
El conjunto de datos COOLL fue publicado por investigadores del laboratorio PRISME de la Universidad de Orleans, que contiene alta frecuencia de 12 tipos diferentes de aparatos. De manera similar a los conjuntos de datos de tracebase y PLAID, se midieron varias instancias de cada tipo, y cada instancia se midió a lo largo de 20 operaciones. Durante cada operación controlada, se recopilaron datos de corriente y voltaje a una frecuencia de muestreo de 100 kHz. El conjunto de datos se resume en un artículo académico y se puede descargar de github después de completar un formulario de registro.
Pecan Street Inc ha publicado una gran cantidad de datos de electricidad doméstica a través de la iniciativa Dataport.Al momento de escribir este artículo, los datos contienen datos de 669 hogares, en los que tanto la demanda de energía agregada de los hogares como las demandas de energía de los electrodomésticos individuales se monitorean en intervalos de 1 minuto. Las instalaciones comenzaron en enero de 2011 y todavía se están recopilando datos para la mayoría de los edificios.
Los datos están disponibles gratuitamente para los miembros de la Universidad de la comunidad WikiEnergy, y los detalles completos para el acceso a la base de datos se pueden encontrar en la página de inicio de Dataport .
Marc Wenninger, Andreas Maier y Jochen Schmidt han lanzado DEDDIAG , un conjunto de datos de demanda de electricidad doméstica de electrodomésticos individuales en Alemania. El conjunto de datos contiene grabaciones de 15 hogares durante un período de hasta 3,5 años, en los que se han registrado 50 aparatos a una frecuencia de 1 Hz. El conjunto de datos se centra en electrodomésticos de importancia para fines de cambio de carga, como lavavajillas, lavadoras y refrigeradores. Una casa también incluye lecturas de red trifásica que se pueden utilizar para tareas de desagregación.
La Universidad Tecnológica de Delft (TUDelft) ha publicado un conjunto de datos DRED, que contiene información sobre el consumo de energía tanto a nivel de la casa como del electrodoméstico. El despliegue en vivo consta de varios sensores que miden la electricidad, la ocupación de los ocupantes y los parámetros ambientales en un hogar.
El conjunto de datos DRED incluye datos de electricidad (consumo de energía agregado y consumo de energía a nivel del aparato), información ambiental (temperatura interior a nivel de la habitación, temperatura exterior, parámetros ambientales), información de ocupación (información de ubicación de los ocupantes a nivel de la habitación, información de WiFi y BT RSSI para localización) e información del hogar (diseño de la casa, número de electrodomésticos monitoreados, mapeo de ubicación de electrodomésticos, etc.).
El conjunto de datos está disponible públicamente y se puede obtener en el sitio web de DRED..
El conjunto de datos ECO es un conjunto de datos para el monitoreo de carga no intrusivo y la investigación de detección de ocupación. Se recogió en 6 hogares suizos durante un período de 8 meses. Para cada uno de los hogares, el conjunto de datos ECO proporciona datos de consumo agregado de 1 Hz (corriente, voltaje y cambio de fase para cada una de las tres fases en el hogar) y también datos de nivel de enchufe de 1 Hz medidos de electrodomésticos seleccionados.
Además, el conjunto de datos también incluye información de ocupación medida a través de una tableta (etiquetado manual) y un sensor de infrarrojos pasivo (en algunos hogares).
El conjunto de datos se describe en detalle en un artículo publicado en BuildSys 2014.
El conjunto de datos contiene mediciones de potencia activa tomadas a intervalos de 1 segundo de 9 electrodomésticos individuales y la demanda de energía total de los hogares de 9 casas en Italia y Austria, durante un período de hasta un año. Se pueden encontrar más detalles en el documento arXiv adjunto .
Además, también está disponible un convertidor NILMTK para el conjunto de datos.
Como parte de este estudio, se monitorearon 251 hogares ocupantes de propietarios en Inglaterra entre abril de 2010 y abril de 2011. De estos hogares, 26 fueron monitoreados durante 12 meses y 225 durante 1 mes. Para cada hogar, se controló el consumo de energía de 13-51 electrodomésticos a intervalos de 2 minutos.
Actualmente se está desarrollando un portal de software para proporcionar acceso al conjunto de datos, aunque mientras tanto, los datos pueden solicitarse individualmente a ICF International contactando [email protected] y proporcionando una dirección postal y detalles del sistema operativo.
Publicado por investigadores de la Universidad de Edimburgo, el conjunto de datos de energía del hogar IDEAL comprende datos de 255 hogares del Reino Unido. Junto con los datos de electricidad y gas de cada hogar, el corpus contiene lecturas individuales de temperatura y humedad de la habitación y lecturas de temperatura de la caldera. Para 39 de los 255 hogares, se dispone de datos más detallados, incluidos datos sobre el uso de aparatos eléctricos individuales y datos sobre radiadores individuales.
Los datos de los sensores se incrementan con datos de encuestas anonimizados y metadatos, incluidos los datos demográficos de los ocupantes, la conciencia y las actitudes energéticas autoinformadas, y las características del edificio, la habitación y los electrodomésticos.
El Instituto Indraprastha de Tecnología de la Información publicó recientemente el conjunto de datos iAWE , que contiene datos agregados y submedidos de electricidad y gas de 33 sensores domésticos con una resolución de 1 segundo.
El conjunto de datos cubre 73 días de una sola casa en Delhi, India. Cada canal individual de datos se puede descargar por separado en formato SQL o CSV desde la sección de descarga en la parte inferior de la página web.
EDF Energy publicó un conjunto de datos en 2012 que contiene mediciones de energía realizadas en un solo hogar en Francia durante 4 años. Las mediciones promedio están disponibles a una resolución de 1 minuto de la potencia activa, la potencia reactiva, la tensión y la corriente agregadas del hogar, así como la potencia activa de 3 circuitos submedidos.
Aunque cada circuito contiene algunos aparatos, este es el conjunto de datos más grande en términos de duración de la medición.
Pecan Street Research Institute anunció el lanzamiento de un nuevo conjunto de datos diseñado específicamente para permitir la evaluación de la tecnología de desagregación de electricidad. Un conjunto de datos de muestra gratuito está disponible para los miembros de su consorcio de investigación, que ahora se ha abierto a los investigadores universitarios. El conjunto de datos de muestra contiene 7 días de datos de 10 casas en Austin, TX, EE. UU., Para los cuales también se encuentran disponibles datos agregados y de circuito que contienen lecturas de potencia en intervalos de 1 minuto. Además de las cargas domésticas comunes, 2 de las casas también tienen sistemas fotovoltaicos y 1 casa también tiene un vehículo eléctrico.
REDD contiene datos tanto a nivel de hogar como a nivel de circuito de 6 hogares de EE. UU., Durante varias duraciones (entre unas pocas semanas y unos meses). Cada casa tiene una entrada de red bifásica y de 10 a 25 circuitos monitoreados individualmente.
Los datos de corriente y voltaje de alta frecuencia (kHz) están disponibles para ambos circuitos de red, mientras que las mediciones de potencia de baja frecuencia (intervalos de 3-4 segundos) están disponibles para los circuitos del aparato.
Este conjunto de datos se recopiló principalmente para la evaluación de métodos NIALM no basados en eventos. Los autores tienen acceso protegido con contraseña al conjunto de datos para realizar un seguimiento de su uso.
El conjunto de datos REFIT fue publicado como parte del proyecto Smart Home and Energy Demand Reduction , por David Murray y Lina Stankovic. en la Universidad de Strathclyde. El conjunto de datos contiene mediciones de potencia activa del agregado y 9 aparatos individuales de 20 hogares en el área de Loughborough del Reino Unido, con una resolución de 1 muestra cada 8 segundos. Esto convierte al REFIT en el único conjunto de datos del Reino Unido que contiene datos a nivel de electrodomésticos a una frecuencia de muestreo superior a una vez por minuto.
Además, los datos agregados de consumo de gas también se registraron a intervalos de 30 minutos. Sin embargo, debe tenerse en cuenta que los datos se comprimieron al eliminar muestras para las que la demanda de energía no había cambiado desde la última lectura.
Aunque no se recopila específicamente para el desglose de energía, el conjunto de datos Smart * (Smart Star) proporciona datos de energía de 3 hogares reales submedidos. La granularidad de los datos recopilados para los monitores de nivel de circuito (conjunto de instalaciones y circuitos individuales) es de una lectura por segundo, mientras que las cargas de los enchufes individuales se miden aproximadamente cada pocos segundos. Cada casa contiene de 21 a 26 medidores de circuito y casi todos los electrodomésticos se miden con medidores de enchufe. Por el momento, los datos agregados, de circuitos y de electrodomésticos están disponibles para la casa A, pero solo los datos agregados están disponibles para las casas B y C.
El repositorio de tracebase contiene datos de dispositivos individuales con la intención de crear una base de datos para entrenar algoritmos NIALM. El repositorio contiene un total de 1883 días de lecturas de energía, tomadas a intervalos de 1 segundo, para 158 instancias de dispositivos, de 43 tipos de dispositivos diferentes.
Dado que el objetivo es crear una base de datos de dispositivos, no se recopilan medidas agregadas. Los datos se introducen en Reinhardt et al. 2012 y está disponible en el repositorio de tracebase .
Los archivos están protegidos con contraseña, pero se puede solicitar una contraseña a través de la página de descarga .
Jack Kelly lanzó la primera versión de UK-DALE en enero de 2015. El conjunto de datos contiene lecturas de medidores agregados de voltaje y corriente de 16 kHz y datos de energía submedidos de 6 segundos de electrodomésticos individuales en 3 hogares del Reino Unido, así como un agregado de 1 segundo y Datos de potencia submedidos de 6 segundos para 2 hogares adicionales. En agosto de 2015 se publicó una actualización del conjunto de datos que amplió los datos disponibles para la casa 1 a 2,5 años
Los datos de baja frecuencia están disponibles para descargar en formato CSV o NILMTK HDF5, mientras que los datos de alta frecuencia se pueden descargar en formato de archivo FLAC.
Cuando se habla de potencia en corriente alterna (CA), es más complicado, ya que implica forma de onda y diferencia de fase, pero básicamente, hay 3 términos para la alimentación de CA: la potencia aparente , la potencia activa y la potencia reactiva .
La potencia aparente se refiere a la potencia total en un circuito de CA que incluye la potencia disipada y absorbida. Este término es importante para el diseño de generadores de energía y cables para asegurarse de que todo el cableado y la energía puedan soportar todo tipo de cargas. La potencia aparente se puede calcular multiplicando el valor de voltaje de raíz cuadrada media (RMS) y el valor de corriente (RMS).
El segundo término es el Poder Activo / Real . Es la potencia real consumida por la carga. La potencia activa se puede calcular promediando el producto de los valores instantáneos de forma de onda de voltaje y corriente.
El tercer término es la potencia reactiva, que se refiere a la potencia que se desperdicia y que la carga no utiliza como trabajo útil debido a la diferencia de fase entre las formas de onda de voltaje y corriente. Cuando la potencia reactiva se suma a la potencia activa, le dará la potencia aparente.
Usaremos un Arduino para medir la potencia aparente y la potencia real por lo que para medir la energía de CA , necesitamos usar 2 sensores separados que son el módulo de voltaje de CA monofásico y el módulo de corriente de CA.
Cada módulo puede encajar en el pin de entrada analógica Arduino . Para un Arduino UNO, hay 6 pines de entrada analógicas (A0-A5)pero para un Arduino NANO tiene 8 pines, mientras que Arduino MEGA tiene 16 pines de entrada. Los pines de entrada analógica asignarán voltajes de entrada entre 0 y 5 V en valores enteros entre 0 y 1023 con una resolución de 4,9 mV por unidad (5,00 V / 1024 unidades).
!Cuidado ! Asumimos que tiene los conocimientos básicos de electricidad y sabe a qué se enfrenta. Es posible que necesite la orientación de personas con experiencia si es nuevo en el trabajo eléctrico. La seguridad y la precaución deben tenerse siempre en cuenta. No seremos responsables de nada que le suceda.
Puede medir voltaje CA como 110Vac, 220Vac y 240Vac mediante el uso de la disposición en el mercado individual Fase V de CA módulo de voltaje. Puede detectar la forma de onda instantánea para el valor de voltaje. La señal se puede utilizar con el sensor de corriente CA para determinar más información útil, como el factor de potencia, la dirección del flujo de corriente, la potencia real y la potencia aparente.
Es posible que deba precalibrar el módulo. Mediante el uso del potenciómetro trimpot, se puede ajustar la amplitud de la forma de onda de voltaje. Se recomienda utilizar un segundo medidor que lea el voltaje RMS para facilitar la calibración.
Módulo de voltaje CA monofásico
Este módulo ZMPT101 B está equipado con un transformador de voltaje de alta precisión ZMPT101B y un circuito de amplificador operacional. Puede medir voltaje CA dentro de 250V. La señal de salida correspondiente se puede ajustar utilizando el potenciómetro de ajuste.
Estas resumidamente algunas de sus características:
Módulo de transformador de voltaje monofásico activo Sensor de voltaje de salida de CA
Equipado con la serie ZMPT101B de transformador de voltaje de alta precisión y corriente de amplificador operacional de alta precisión, fácil de 250V dentro de la adquisición de señal de alimentación de CA
Transformador de voltaje: Transformador de micro voltaje de precisión a bordo
Salida de voltaje de modo: el módulo puede medir el voltaje de CA dentro de 250 V, el modo de salida correspondiente se puede ajustar
Circuito amplificador operacional: circuito amplificador integrado de alta precisión, la señal para hacer el muestreo exacto y la compensación adecuada y otras funciones
El sensor de Intensidad
El segundo sensor del que queremos hablar es el Módulo Sensor de Corriente. El sensor de corriente ampliamente utilizado que es compatible con Arduino es el módulo de sensor de corriente ACS712. Utiliza el fenómeno de efecto hall cuyo voltaje se produce a partir del movimiento de la corriente dentro de la región del campo magnético. El voltaje producido por el efecto hall es directamente proporcional a la corriente aplicada, lo que lo hace adecuado para estimar la corriente aplicada a partir del voltaje detectado.
El módulo de sensor de corriente estándar ACS712se vende en tres versiones de 5A, 20A y 30A que sons adecuadas para la mayoría de las aplicaciones. El módulo 5A tiene una resolución de 185 mV / amperio, el módulo 20A tiene 100 mV / amperio, mientras que el módulo 30A tiene una resolución de 66 mV / amperio.
Estos módulos requieren contacto directo, lo cual podria ser un gran inconveniente pues debe conectarse en serie al valor medido . El cableado del sistema existente debe modificarse para que el módulo encaje en el sistema existente.
Si no tiene experiencia con la alimentación de CA, personalmente no recomiendo este módulo. Este módulo es aceptable para CC de bajo voltaje, pero puede ser peligroso en CA si no se toma en serio ,por lo que una alternativa es usar un tipo de sensor de efecto Hall con transformador de núcleo dividido (como se muestra en la imagen de la izquierda). Es el móduloHSTS016L del sensor de núcleo dividido de efecto Hall . El modelo va desde 10A hasta 200A . Con el tipo de sensor de corriente de núcleo dividido, no se requiere alteración en el sistema existente. !!! El voltaje de salida de este sensor es de 2,5 V +/- 0,625 V con una precisión decente. Recomiendo encarecidamente este sensor para medir la corriente alterna en caso de no tener experiencia con BT.
Codigo arduino
Para fines de demostración, usaremos el sensor de núcleo dividido de efecto Hall que no requiere contacto eléctrico con el sistema de cableado existente, lo que definitivamente es una forma más segura !!!Las señales detectadas por Arduino están en valores analógicos. A continuación se muestran las señales detectadas por el voltaje (azul) y el sensor de corriente (rojo). Puede copiar el siguiente código para probar el suyo. Puede ver la forma de onda en Serial Plotter. Conecte el módulo de voltaje en el pin A2 de Arduino mientras que el módulo de corriente en el pin A3 . La magnitud del voltaje (onda azul) se puede calibrar mediante el módulo de voltaje de CA utilizando el potenciómetro integrado y se puede comparar con el voltímetro RMS de referencia. Para una onda sinusoidal pura como esta, el valor RMS en el voltímetro multiplicado por la raíz cuadrada 2 es igual al voltaje máximo(magnitud desde la mitad de la oscilación). La magnitud de la onda de corriente (onda roja) está sujeta a su carga aplicada. Puede modificar el código Arduino para aumentar su magnitud con fines de visualización. El patrón de onda de CA puede no ser 100% suave como una onda de voltaje y está sujeto a la carga sobre cómo se extrae la corriente. El cambio de fase o la diferencia de fase entre el voltaje y la corriente también están sujetos a la carga aplicada.
float vAnalogRead; float iAnalogRead; int voltageInputPin = A2; // Analog input pin for voltage sensor int currentInputPin = A3; // Analog input pin for current sensor int currentOffset = 0; // key in value for current offset setting int voltageOffset = 0; // key in value for voltage offset setting float virtualMagnification = 5; // to increase the magnification of current value in display
El punto medio para Ambas ondas debería estar técnicamente en 512 (valor analógico) y fluctúa entre 0 y 1023 de forma predeterminada. Sin embargo, he modificado el código para que las ondas oscilen en el punto medio del valor 0 entre 512 y -512 para facilitar el cálculo más adelante. Antes de continuar, es necesario realizar una calibración antes de la medición, ya que algunos módulos pueden tener un error de desviación diferente. Puede ir a la publicación de sensores individuales para obtener más información.
Cómo se procesa la señal
Necesitamos determinar los 2 valores de potencia de CA, el valor de potencia de CA RMS y el valor de potencia de CA activa . Antes de continuar, comencemos con la calibración inicial de ambos sensores. Necesitamos minimizar cualquier error potencial de desviación o inexactitud tanto como sea posible. Los sensores son muy sensibles, asegúrese de utilizar conectores ajustados y terminales de cable.
Necesitamos una calibración de 2 veces para cada sensor de módulo . Ambas calibraciones deben realizarse sin medir la corriente y el voltaje. La primera calibración es asegurarse de que cuando no se mide voltaje o corriente, se muestra exactamente en el punto 0. Es una calibración de valor analógico. Es posible que algunos módulos no se muestren exactamente en el valor analógico 512 (lo he cambiado al punto 0 usando el código Arduino para una fácil comprensión) cuando no se detecta ningún valor. Necesitamos agregar un valor de compensación para que esto vuelva a ajustarlo al origen cuando no se detecta ningún valor.
La segunda calibración es para eliminar aún más el valor de la señal falsa durante el cálculo RMS. Incluso después de que se realiza la primera calibración, todavía hay algún ruido fantasma o eléctrico menor incluso cuando no se miden voltaje ni corriente. Tenemos que agregar otro desplazamiento para llegar al valor cero en la etapa final de visualización. Esta segunda calibración debe realizarse solo después de que la primera calibración entre en vigor. Ambas calibraciones se pueden realizar manualmente (la forma más difícil) o automáticamente presionando el botón SELECT en el protector de la pantalla LCD y espere unos 5 segundos. Por eso es necesario tener el escudo para que funcione. ¡Puede comprar en nuestro enlace de afiliado aquí !
El cálculo de la potencia cuadrática media de la raíz
La potencia de CA RMS es el producto de los valores de voltaje CA RMS y corriente CA RMS . El voltaje CA RMS y la corriente CA RMS se calculan por separado. Al encontrar la potencia de CA RMS, el voltaje RMS y la corriente RMS se encuentran indirectamente.
Nuestro código está diseñado para calcular o mostrar un valor que se deriva de un promedio de 1000 muestras por conjunto. Encontré un problema de que un tiempo de grabación de muestra más corto (menos de 1 milisegundo para 1 lectura de muestra) podría retrasar el tiempo de procesamiento, lo que hizo que el tiempo de visualización se ralentizara. He configurado que cada muestra se registre cada 1 milisegundo (0,001 segundos). En otras palabras, el conjunto completo total equivale a 50 ondas con cada onda dividida en 20 secciones o lecturas (para 50 Hz). Técnicamente, debería durar 1 segundo para 1 conjunto de lectura. También es adecuado para el sistema de 60 Hz, ya que el tiempo de medición para 1 juego de lectura es de 1 segundo.
Cada valor analógico de muestra individual se eleva al cuadrado inicialmente y una vez que se acumulan los valores de 1000 muestras , el valor promedio de las 1000 muestras se establece en raíz cuadrada para obtener el valor analógico RMS (para 1 sensor). Convierta el valor analógico RMS en voltaje medido o valor actual. Realice el cálculo similar por separado para el otro sensor y multiplique ambos valores RMS para convertirlos en energía CA RMS. A continuación se muestra un ejemplo de cómo funciona el código. Tomo un cuarto de onda como ejemplo .
En la conversión de voltaje RMS , multiplico el valor analógico RMS por 2 . Durante la calibración de este módulo, reduje la amplitud de onda a la mitad (es por eso que en el código es necesario multiplicar por 2) porque la onda de voltaje comenzó a distorsionarse o cortarse cerca de 250Vac, lo que puede dar inexactitud en la medición. Puede aumentar el voltaje de suministro al módulo para eliminar el efecto de corte (según el manual del módulo) pero creo que lo dejaré así ya que no voy a agregar suministro de voltaje adicional. En cuanto a la conversión de corriente RMS, el mV / A es la clasificación del sensor de corriente y lo dejo como el símbolo de la unidad. 1023 es la conversión de valor analógico, mientras que 5000 es el valor de voltaje en mV. Para obtener más información sobre esto, puede ir a mi publicación sobre el sensor de CA aquí..
El cálculo de la potencia instantánea
Active o Real Power es más simple en comparación con RMS Power. Es el valor promedio de todas las multiplicaciones de voltaje instantáneo y valor de corriente instantánea . Los valores analógicos de tensión y corriente se convierten primero en valores de tensión y corriente medidos . Luego, el voltaje se multiplica por su valor de corriente instantánea y se convierte en una lectura de muestra.
Similar al método de potencia RMS, la potencia activa también se deriva de un promedio de 1000 muestras por conjunto. Cada muestra se registra cada milisegundo, es decir, el conjunto completo total equivale a 50 ondas con cada onda dividida en 20 secciones o lecturas (para 50 Hz).
Puede ser interesante añadir una pantalla LCD de 16X2 que se puede colocar directamente en la parte superior de la placa Arduino sin la necesidad de cableado adicional para la pantalla LCD. Sin la pantalla LCD, solo puede monitorear el valor de corriente medido en la PC a través del Monitor en serie.
La buena noticia es que no necesita calibrar manualmente la configuración de compensación si tiene lapantalla LCDcon usted. A continuación, adjuntamos el código que utiliza la función del botón que podría calibrarse automáticamente por sí mismo cuando presionó el botón SELECT . Puede descargar desde el final de esta página a continuación.
Conexión de hardware
Es posible que deba encontrar una manera de colocar el cable del sensor de CA en el pin Arduino. El cable del sensor que compré venía presoldado en la punta, lo que facilita el acceso a los pines de Arduino. Abra el módulo de corriente Split Core y se mostrará un símbolo de flecha que indica el camino del flujo de corriente. Una vez que todo esté listo, asegúrese de que el núcleo partido esté bien cerrado.
Asegúrese de que debajo del sensor de voltaje no haya conductores expuestos o placas de metal que puedan causarle un cortocircuito accidental en el terminal del módulo. Debe obtener el fusible rápido de baja corriente para el cable del sensor de voltaje, mientras que el MCB o el fusible de corriente nominal suficiente según su carga para protegerlo contra cualquier posible cortocircuito y riesgo de incendio.
Para conectar el cableado entre la placa Arduino y el módulo, necesita los cables de línea dupont macho a hembra . ¡Puedes conseguirlo en nuestro enlace de afiliado aquí !
Necesita el conector que pueda asegurar los cables y aislarlos del contacto accidental. ¡Obtenga el conector rápido en nuestro enlace de afiliado aquí !
Código final Arduino
El paso final sería agregar el código fuente a la placa Arduino. Supongo que ha instalado el software Arduino. Si no ha instalado el software, el enlace aquí puede llevarlo al sitio oficial de descarga. Una vez que haya descargado el software, puede descargar el archivo de código (.ino) para esta aplicación a continuación (haga clic con el botón derecho en el enlace para guardar).
Hay 2 archivos de códigos fuente adjuntos que son código fuente con y sin función de protección de pantalla LCD. Si no tiene el protector de pantalla LCD con usted, elija el código que no tiene el protector de pantalla LCD, pero debe calibrar manualmente e ingresar los 2 valores de compensación para ambos sensores. Sin embargo, le recomiendo encarecidamente que obtenga un protector de pantalla LCD.
Con el protector de pantalla LCD, una vez que el código se carga en la placa Arduino, el valor actual se mostrará en la pantalla LCD. Hemos agregado la función de autocalibrado, una vez que se presiona el botón SELECT, el valor regresa al punto cero exacto. Puede que tenga que esperar entre 5 y 8 segundos hasta que se vuelvan a calibrar todos los valores. Si la primera pulsación no está satisfecha, puede repetir pulsando de nuevo .
Proceso de calibracion
Una vez que el código se carga en el Arduino, si tiene un protector de pantalla LCD adjunto, verá la corriente, el voltaje, la potencia activa y el valor de potencia aparente. Asegúrese de apagar la fuente de voltaje de CA que está midiendo. Presione el botón SELECT del protector de pantalla LCD y espere 5 segundos. Debería llegar a 0 voltios . Lo mismo para la corriente CA que muestra 0A . Para las personas que no tienen el protector de pantalla LCD, puede compensar manualmente ingresando el valor de compensación en el código y volver a cargarlo. Hay 2 valores de compensación (voltageOffset1 y voltageOffset2) que se deben calibrar. Haga lo mismo para el módulo de corriente CA para 2 valores de compensación (currentOffset1 y currentOffset2) y finalmente es el powerOffset.
Ajuste de voltaje de CA del potenciómetro de trimpot
Esta configuración es para ajustar la magnitud de la onda de voltaje de CA. A diferencia de la corriente CA, calculamos y obtenemos la corriente esperada, pero para el voltaje CA, necesitamos un voltaje de referencia para el ajuste.
Una vez realizada la calibración, debería ver el valor 0 voltios cuando no se detecta voltaje. Ahora, encienda la fuente de voltaje y encienda el lector de voltaje de referencia (el multímetro o el medidor de energía). Compare ambos valores de voltaje. Gire el potenciómetro de ajuste (trimpot) con un destornillador pequeño para reducir o aumentar el valor de voltaje detectado por Arduino. Debe girar el potenciómetro hasta que el voltaje que se muestra en la pantalla LCD Shield o Monitor serial sea el mismo que el valor de referencia de voltaje en el medidor de voltaje o energía. ¡¡¡Y felicitaciones, ya está hecho !!!!
Si realmente lee los códigos, en realidad hemos reducido la amplitud de onda potencial a la mitad (en la fórmula es por 2).
RMSVoltageMean = (sqrt (voltageMean)) * 2;
Es por eso que cuando se aplica voltaje de monitoreo, el valor medido es alto y es necesario reducirlo. La amplitud de onda completa (x 1) se distorsiona cuando está cerca de 250 V, lo que nos hizo tener esta opción para superar el problema de distorsión.
Resultado: en monitor de serie
Para archivos de código Arduino, recuerde hacer clic derecho> Guardar enlace como … Puede modificar el código interno como desee. ¡Feliz codificación!
AC Power.ino
// AC Power Monitoring By Solarduino
// Note Summary
// Note : Safety is very important when dealing with electricity. We take no responsibilities while you do it at your own risk.
// Note : This AC Power Monitoring Code needs AC current module and AC Voltage Module to determine AC Power value.
// Note : This Code monitors RMS Voltage, RMS current, RMS AC Power (Apparent Power) and Instantaneous AC Power (Active Power)
// Note : The value shown in Serial Monitor is refreshed every second, can be used for 50Hz and 60Hz.
// Note : The frequency is measured by counting time and average it for every 50 samples taken (1 sample is 1 cycle for 50Hz by default).
// Note : You have to manually calibrate 5 offsets readings : voltageOffset1,voltageOffset2,currentOffset1,currentOffset2 & powerOffset.
// Note : The unit provides reasonable accuracy and may not be comparable with other expensive branded and commercial product.
// Note : All credit shall be given to Solarduino.
/*/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////*/////////////*/
/* 0- General */
int decimalPrecision = 2; // decimal places for all values shown in LED Display & Serial Monitor
/* 1- AC Voltage Measurement */
int voltageOffset1 = 0; // key in offset value
int voltageOffset2 = 0; // key in offset value
int VoltageAnalogInputPin = A2; // Which pin to measure voltage Value
float voltageSampleRead = 0; /* to read the value of a sample*/
float voltageLastSample = 0; /* to count time for each sample. Technically 1 milli second 1 sample is taken */
float voltageSampleSum = 0; /* accumulation of sample readings */
float voltageSampleCount = 0; /* to count number of sample. */
float voltageMean ; /* to calculate the average value from all samples*/
float RMSVoltageMean ; /* square roof of voltageMean*/
/* 2- AC Current Measurement */
int currentOffset1 = 0; // key in offset value
int currentOffset2 = 0; // key in offset value
int CurrentAnalogInputPin = A3; // Which pin to measure Current Value
float mVperAmpValue = 31.25; // If using ACS712 current module : for 5A module key in 185, for 20A module key in 100, for 30A module key in 66
// If using "Hall-Effect" Current Transformer, key in value using this formula: mVperAmp = maximum voltage range (in milli volt) / current rating of CT
/* For example, a 20A Hall-Effect Current Transformer rated at 20A, 2.5V +/- 0.625V, mVperAmp will be 625 mV / 20A = 31.25mV/A */
float currentSampleRead = 0; /* to read the value of a sample*/
float currentLastSample = 0; /* to count time for each sample. Technically 1 milli second 1 sample is taken */
float currentSampleSum = 0; /* accumulation of sample readings */
float currentSampleCount = 0; /* to count number of sample. */
float currentMean ; /* to calculate the average value from all samples*/
float RMSCurrentMean =0 ; /* square roof of currentMean*/
float FinalRMSCurrent ; /* the final RMS current reading*/
/* 3- AC Power Measurement */
int powerOffset =0; // key in offset value
float sampleCurrent1 ; /* use to calculate current*/
float sampleCurrent2 ; /* use to calculate current*/
float sampleCurrent3 ; /* use to calculate current*/
float apparentPower; /* the apparent power reading (VA) */
float realPower = 0; /* the real power reading (W) */
float powerSampleRead = 0; /* to read the current X voltage value of a sample*/
float powerLastSample = 0; /* to count time for each sample. Technically 1 milli second 1 sample is taken */
float powerSampleCount = 0; /* to count number of sample. */
float powerSampleSum = 0; /* accumulation of sample readings */
float powerFactor = 0; /* to display power factor value*/
void setup() /*codes to run once */
{
/* 0- General */
Serial.begin(9600); /* to display readings in Serial Monitor at 9600 baud rates */
}
void loop() /*codes to run again and again */
{
/* 1- AC Voltage Measurement */
if(millis() >= voltageLastSample + 1 ) /* every 1 milli second taking 1 reading */
{
voltageSampleRead = 2*(analogRead(VoltageAnalogInputPin)- 512) + voltageOffset1; /* read the sample value */
voltageSampleSum = voltageSampleSum + sq(voltageSampleRead) ; /* accumulate value with older sample readings*/
voltageSampleCount = voltageSampleCount + 1; /* to move on to the next following count */
voltageLastSample = millis() ; /* to reset the time again so that next cycle can start again*/
}
if(voltageSampleCount == 1000) /* after 1000 count or 1000 milli seconds (1 second), do the calculation and display value*/
{
voltageMean = voltageSampleSum/voltageSampleCount; /* calculate average value of all sample readings taken*/
RMSVoltageMean = sqrt(voltageMean)+ voltageOffset2; /* square root of the average value*/
Serial.print("Voltage RMS: ");
Serial.print(RMSVoltageMean,decimalPrecision);
Serial.println("V ");
voltageSampleSum =0; /* to reset accumulate sample values for the next cycle */
voltageSampleCount=0; /* to reset number of sample for the next cycle */
}
/* 2- AC Current Measurement */
if(millis() >= currentLastSample + 1) /* every 1 milli second taking 1 reading */
{
currentSampleRead = analogRead(CurrentAnalogInputPin)-512 + currentOffset1; /* read the sample value */
currentSampleSum = currentSampleSum + sq(currentSampleRead) ; /* accumulate value with older sample readings*/
currentSampleCount = currentSampleCount + 1; /* to move on to the next following count */
currentLastSample = millis(); /* to reset the time again so that next cycle can start again*/
}
if(currentSampleCount == 1000) /* after 1000 count or 1000 milli seconds (1 second), do the calculation and display value*/
{
currentMean = currentSampleSum/currentSampleCount; /* calculate average value of all sample readings taken*/
RMSCurrentMean = sqrt(currentMean)+currentOffset2 ; /* square root of the average value*/
FinalRMSCurrent = (((RMSCurrentMean /1024) *5000) /mVperAmpValue); /* calculate the final RMS current*/
Serial.print("Current RMS: ");
Serial.print(FinalRMSCurrent,decimalPrecision);
Serial.println(" A ");
currentSampleSum =0; /* to reset accumulate sample values for the next cycle */
currentSampleCount=0; /* to reset number of sample for the next cycle */
}
/* 3- AC Power with Direction */
if(millis() >= powerLastSample + 1) /* every 1 milli second taking 1 reading */
{
sampleCurrent1 = analogRead(CurrentAnalogInputPin)-512+ currentOffset1;
sampleCurrent2 = (sampleCurrent1/1024)*5000;
sampleCurrent3 = sampleCurrent2/mVperAmpValue;
voltageSampleRead = 2*(analogRead(VoltageAnalogInputPin)- 512)+ voltageOffset1 ;
powerSampleRead = voltageSampleRead * sampleCurrent3 ; /* real power sample value */
powerSampleSum = powerSampleSum + powerSampleRead ; /* accumulate value with older sample readings*/
powerSampleCount = powerSampleCount + 1; /* to move on to the next following count */
powerLastSample = millis(); /* to reset the time again so that next cycle can start again*/
}
if(powerSampleCount == 1000) /* after 1000 count or 1000 milli seconds (1 second), do the calculation and display value*/
{
realPower = ((powerSampleSum/powerSampleCount)+ powerOffset) ; /* calculate average value of all sample readings */
Serial.print("Real Power (W): ");
Serial.print(realPower);
Serial.println(" W ");
apparentPower= FinalRMSCurrent*RMSVoltageMean; /*Apparent power do not need to recount as RMS current and RMS voltage values available*/
Serial.print("Apparent Power (VA): ");
Serial.print(apparentPower,decimalPrecision);
Serial.println(" VA ");
powerFactor = realPower/apparentPower;
if(powerFactor >1 || powerFactor<0)
{
powerFactor = 0;
}
Serial.print("Power Factor: ");
Serial.println(powerFactor,decimalPrecision);
Serial.println(" ");
powerSampleSum =0; /* to reset accumulate sample values for the next cycle */
powerSampleCount=0; /* to reset number of sample for the next cycle */
}
}
lcd (AP Power with LCD Disply.ino)
// AC Power Monitoring with LCD By Solarduino
// Note Summary
// Note : Safety is very important when dealing with electricity. We take no responsibilities while you do it at your own risk.
// Note : This AC Power Monitoring Code needs AC current module and AC Voltage Module to determine AC Power value.
// Note : This Code monitors RMS Voltage, RMS current, RMS AC Power (Apparent Power) and Instantaneous AC Power (Active Power)
// Note : The value shown in Serial Monitor is refreshed every second, can be used for 50Hz and 60Hz.
// Note : The frequency is measured by counting time and average it for every 25 samples taken (1 sample is 1 cycle).
// Note : The auto calibration (voltageOffset1 & currentOffset1) is using averaged analogRead value of 1000 samples.
// Note : The auto calibration (voltageOffset2 & currentOffset2) is using calculated RMS value including Offset1 value for calibration.
// Note : The unit provides reasonable accuracy and may not be comparable with other expensive branded and commercial product.
// Note : All credit shall be given to Solarduino.
/*/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////*/////////////*/
/* 0- General */
int decimalPrecision = 2; // decimal places for all values shown in LED Display & Serial Monitor
/* 1- AC Voltage Measurement */
int VoltageAnalogInputPin = A2; // Which pin to measure voltage Value
float voltageSampleRead = 0; /* to read the value of a sample*/
float voltageLastSample = 0; /* to count time for each sample. Technically 1 milli second 1 sample is taken */
float voltageSampleSum = 0; /* accumulation of sample readings */
float voltageSampleCount = 0; /* to count number of sample. */
float voltageMean ; /* to calculate the average value from all samples*/
float RMSVoltageMean ; /* square roof of voltageMean*/
/*1.1 Offset AC Voltage */
int voltageOffsetRead = 0; /* to change the mode for offset */
float voltageOffset1 = 0; // to Offset deviation and accuracy. Offset any fake current when no current operates.
// Offset will automatically callibrate when SELECT Button on the LCD Display Shield is pressed.
// If you do not have LCD Display Shield, look into serial monitor to add or minus the value manually and key in here.
float voltageOffset2 = 0; // to offset value due to calculation error from squared and square root.
float voltageSampleSumOffset =0; /* accumulation of sample readings for offset */
float offsetVoltageMean = 0; /* to calculate the average value from all samples for offset, in analog values*/
float voltageOffsetLastSample = 0; /* to count time for each sample for offset purpose. */
float voltageOffsetSampleCount = 0; /* to count number of sample for offset. */
/* 2- AC Current Measurement */
int CurrentAnalogInputPin = A3; // Which pin to measure Current Value
float mVperAmpValue = 31.25; // If using ACS712 current module : for 5A module key in 185, for 20A module key in 100, for 30A module key in 66
// If using "Hall-Effect" Current Transformer, key in value using this formula: mVperAmp = maximum voltage range (in milli volt) / current rating of CT
/* For example, a 20A Hall-Effect Current Transformer rated at 20A, 2.5V +/- 0.625V, mVperAmp will be 625 mV / 20A = 31.25mV/A */
float currentSampleRead = 0; /* to read the value of a sample*/
float currentLastSample = 0; /* to count time for each sample. Technically 1 milli second 1 sample is taken */
float currentSampleSum = 0; /* accumulation of sample readings */
float currentSampleCount = 0; /* to count number of sample. */
float currentMean ; /* to calculate the average value from all samples*/
float RMSCurrentMean =0 ; /* square roof of currentMean*/
float FinalRMSCurrent ; /* the final RMS current reading*/
/*2.1 Offset AC Current */
int currentOffsetRead = 0; /* to change the mode for offset */
float currentOffset1 = 0; // to Offset deviation and accuracy. Offset any fake current when no current operates.
// Offset will automatically callibrate when SELECT Button on the LCD Display Shield is pressed.
// If you do not have LCD Display Shield, look into serial monitor to add or minus the value manually and key in here.
// 26 means add 26 to all analog value measured
float currentOffset2 = 0; // to offset value due to calculation error from squared and square root.
float currentSampleSumOffset = 0; /* accumulation of sample readings for offset */
float offsetCurrentMean = 0; /* to calculate the average value from all samples for offset, in analog values*/
float currentOffsetLastSample = 0; /* to count time for each sample for offset purpose. */
float currentOffsetSampleCount = 0; /* to count number of sample for offset. */
/* 3- AC Power Measurement */
float sampleCurrent1 ; /* use to calculate current*/
float sampleCurrent2 ; /* use to calculate current*/
float sampleCurrent3 ; /* use to calculate current*/
float apparentPower; /* the apparent power reading (VA) */
float realPower = 0; /* the real power reading (W) */
float powerSampleRead = 0; /* to read the current X voltage value of a sample*/
float powerLastSample = 0; /* to count time for each sample. Technically 1 milli second 1 sample is taken */
float powerSampleCount = 0; /* to count number of sample. */
float powerSampleSum = 0; /* accumulation of sample readings */
float powerFactor = 0; /* to display power factor value*/
/*3.1 Offset AC Power */
int powerOffsetRead = 0; /* to change the mode for offset */
float powerOffset = 0; // to Offset deviation and accuracy. Offset any fake current when no current operates.
// Offset will automatically callibrate when SELECT Button on the LCD Display Shield is pressed.
// If you do not have LCD Display Shield, look into serial monitor to add or minus the value manually and key in here.
float powerOffsetLastSample = 0; /* to count time for each sample for offset purpose. */
float powerOffsetSampleCount = 0; /* to count number of sample for offset. */
/* 4 - LCD Display */
#include<LiquidCrystal.h> /* Load the liquid Crystal Library (by default already built-it with arduino solftware)*/
LiquidCrystal LCD(8,9,4,5,6,7); /* Creating the LiquidCrystal object named LCD. The pin may be varies based on LCD module that you use*/
unsigned long startMillisLCD; /* start counting time for LCD Display */
unsigned long currentMillisLCD; /* current counting time for LCD Display */
const unsigned long periodLCD = 1000; // refresh every X seconds (in seconds) in LED Display. Default 1000 = 1 second
int page = 1; /* flip page to display values*/
void setup() /*codes to run once */
{
/* 0- General */
Serial.begin(9600); /* to display readings in Serial Monitor at 9600 baud rates */
/* 4 - LCD Display */
LCD.begin(16,2); /* Tell Arduino that our LCD has 16 columns and 2 rows*/
LCD.setCursor(0,0); /* Set LCD to start with upper left corner of display*/
startMillisLCD = millis(); /* Start counting time for LCD display*/
}
void loop() /*codes to run again and again */
{
/* 0- General */
/* 0.1- Button Function */
int buttonRead;
buttonRead = analogRead (0); // Read analog pin A0. Pin A0 automatically assigned for LCD Display Button function (cannot be changed)
/*Right button is pressed */
if (buttonRead < 60)
{ LCD.setCursor(0,0); LCD.print ("PRESS <SELECT> "); }
/* Up button is pressed */
else if (buttonRead < 200)
{
page = 1;
}
/* Down button is pressed */
else if (buttonRead < 400)
{
page = 2;
}
/* Left button is pressed */
else if (buttonRead < 600)
{ LCD.setCursor(0,0); LCD.print ("PRESS <SELECT> "); }
/* Select button is pressed */
else if (buttonRead < 800)
{
currentOffsetRead = 1; // to activate offset for current
voltageOffsetRead = 1; // to activate offset for voltage
powerOffsetRead = 1; // to activate offset for power
LCD.setCursor(0,0); /* set display words starting at upper left corner*/
LCD.print ("INITIALIZING..... ");
LCD.setCursor(0,1); /* set display words starting at lower left corner*/
LCD.print ("WAIT 5 SEC ..... ");
}
/* 1- AC Voltage Measurement */
if(millis() >= voltageLastSample + 1 ) /* every 1 milli second taking 1 reading */
{
voltageSampleRead = 2*(analogRead(VoltageAnalogInputPin)- 512) + voltageOffset1; /* read the sample value */
voltageSampleSumOffset = voltageSampleSumOffset + voltageSampleRead; /* values accumulate for offset purpose every milli second */
voltageSampleSum = voltageSampleSum + sq(voltageSampleRead) ; /* accumulate value with older sample readings*/
voltageSampleCount = voltageSampleCount + 1; /* to move on to the next following count */
voltageLastSample = millis() ; /* to reset the time again so that next cycle can start again*/
}
if(voltageSampleCount == 1000) /* after 1000 count or 1000 milli seconds (1 second), do the calculation and display value*/
{
offsetVoltageMean = voltageSampleSumOffset/voltageSampleCount; /* average the offset reading*/
voltageMean = voltageSampleSum/voltageSampleCount; /* calculate average value of all sample readings taken*/
RMSVoltageMean = sqrt(voltageMean)+ voltageOffset2; /* square root of the average value*/
Serial.print(" The Voltage RMS value is: ");
Serial.print(RMSVoltageMean,decimalPrecision);
Serial.println(" V ");
voltageSampleSum =0; /* to reset accumulate sample values for the next cycle */
voltageSampleCount=0; /* to reset number of sample for the next cycle */
voltageSampleSumOffset=0;
}
/* 1.1 - Offset AC Voltage */
if(voltageOffsetRead == 1) /* Run this code when button SELECT is pressed */
{
voltageOffset1 = 0;
if(millis()>= voltageOffsetLastSample + 1) /* keep countng time for offset1*/
{
voltageOffsetSampleCount = voltageOffsetSampleCount + 1; /* 1 milli second add 1 count*/
voltageOffsetLastSample = millis(); /* to reset the time again so that next cycle can start again*/
}
if(voltageOffsetSampleCount == 2000) /* after 2 seconds, run this codes. */
{
voltageOffset1 = -1*(offsetVoltageMean); /* set the offset values */
voltageOffsetRead = 2; /* go for second offset Settings */
voltageOffsetSampleCount = 0; /* to reset the time again so that next cycle can start again */
}
}
if(voltageOffsetRead == 2) /* Run this code after first offset done */
{
voltageOffset2 = 0; /* set back currentOffset2 as default*/
if(millis()>= voltageOffsetLastSample + 1) /* keep countng time for offset2*/
{
voltageOffsetSampleCount = voltageOffsetSampleCount + 1;
voltageOffsetLastSample = millis();
}
if(voltageOffsetSampleCount == 2000) /* after 2 seconds, run this codes. */
{
voltageOffset2 = - RMSVoltageMean; /* set the offset values */
voltageOffsetRead = 0; /* change the offset mode to original, wait until the button is pressed again */
voltageOffsetSampleCount = 0; /* to reset the time again so that next cycle can start again */
}
}
/* 2- AC Current Measurement */
if(millis() >= currentLastSample + 1) /* every 1 milli second taking 1 reading */
{
currentSampleRead = analogRead(CurrentAnalogInputPin)-512 + currentOffset1; /* read the sample value */
currentSampleSumOffset = currentSampleSumOffset + currentSampleRead; /* accumulate offset value */
currentSampleSum = currentSampleSum + sq(currentSampleRead) ; /* accumulate value with older sample readings*/
currentSampleCount = currentSampleCount + 1; /* to move on to the next following count */
currentLastSample = millis(); /* to reset the time again so that next cycle can start again*/
}
if(currentSampleCount == 1000) /* after 1000 count or 1000 milli seconds (1 second), do the calculation and display value*/
{
offsetCurrentMean = currentSampleSumOffset/currentSampleCount; /* average offset value*/
currentMean = currentSampleSum/currentSampleCount; /* calculate average value of all sample readings taken*/
RMSCurrentMean = sqrt(currentMean)+currentOffset2 ; /* square root of the average value*/
FinalRMSCurrent = (((RMSCurrentMean /1024) *5000) /mVperAmpValue); /* calculate the final RMS current*/
Serial.print(" The Current RMS value is: ");
Serial.print(FinalRMSCurrent,decimalPrecision);
Serial.println(" A ");
currentSampleSum =0; /* to reset accumulate sample values for the next cycle */
currentSampleCount=0; /* to reset number of sample for the next cycle */
currentSampleSumOffset=0; /* to reset accumulate offset value for the next cycle*/
}
/* 2.1 - Offset AC Current */
if(currentOffsetRead == 1) /* Run this code when button SELECT is pressed */
{
currentOffset1 = 0; /* set currentOffset back to default value*/
if(millis()>= currentOffsetLastSample + 1) /* keep countng time for offset1*/
{
currentOffsetSampleCount = currentOffsetSampleCount + 1;
currentOffsetLastSample = millis();
}
if(currentOffsetSampleCount == 2000) /* after 2 seconds, run this codes. */
{
currentOffset1 = - offsetCurrentMean; /* set the offset values */
currentOffsetRead = 2; /* go for second offset Settings */
currentOffsetSampleCount = 0; /* to reset the time again so that next cycle can start again */
}
}
if(currentOffsetRead == 2) /* Run this code after first offset done */
{
currentOffset2 = 0; /* set back currentOffset2 as default*/
if(millis()>= currentOffsetLastSample + 1) /* keep countng time for offset2*/
{
currentOffsetSampleCount = currentOffsetSampleCount + 1;
currentOffsetLastSample = millis();
}
if(currentOffsetSampleCount == 2000) /* after 2 seconds, run this codes. */
{
currentOffset2 = - RMSCurrentMean; /* set the offset values */
currentOffsetRead = 0; /* change the offset mode to original, wait until the button is pressed again */
currentOffsetSampleCount = 0; /* to reset the time again so that next cycle can start again */
}
}
/* 3- AC Power with Direction */
if(millis() >= powerLastSample + 1) /* every 1 milli second taking 1 reading */
{
sampleCurrent1 = analogRead(CurrentAnalogInputPin)-512+ currentOffset1;
sampleCurrent2 = (sampleCurrent1/1024)*5000;
sampleCurrent3 = sampleCurrent2/mVperAmpValue;
voltageSampleRead = 2*(analogRead(VoltageAnalogInputPin)- 512)+ voltageOffset1 ;
powerSampleRead = voltageSampleRead * sampleCurrent3 ; /* real power sample value */
powerSampleSum = powerSampleSum + powerSampleRead ; /* accumulate value with older sample readings*/
powerSampleCount = powerSampleCount + 1; /* to move on to the next following count */
powerLastSample = millis(); /* to reset the time again so that next cycle can start again*/
}
if(powerSampleCount == 1000) /* after 1000 count or 1000 milli seconds (1 second), do the calculation and display value*/
{
realPower = ((powerSampleSum/powerSampleCount)+ powerOffset) ; /* calculate average value of all sample readings */
Serial.print(" The Real Power (W) is: ");
Serial.print(realPower);
Serial.println(" W ");
apparentPower= FinalRMSCurrent*RMSVoltageMean; /*Apparent power do not need to recount as RMS current and RMS voltage values available*/
Serial.print(" The Apparent Power (VA) is: ");
Serial.print(apparentPower,decimalPrecision);
Serial.println(" VA ");
powerFactor = realPower/apparentPower;
if(powerFactor >1 || powerFactor<0)
{
powerFactor = 0;
}
Serial.print(" The Power Factor is: ");
Serial.println(powerFactor,decimalPrecision);
powerSampleSum =0; /* to reset accumulate sample values for the next cycle */
powerSampleCount=0; /* to reset number of sample for the next cycle */
}
/* 3.1 - Offset AC Power */
if(powerOffsetRead == 1) /* Run this code after first offset done */
{
powerOffset = 0; /* set back currentOffset2 as default*/
if(millis()>= powerOffsetLastSample + 1) /* keep countng time for offset2*/
{
powerOffsetSampleCount = powerOffsetSampleCount + 1;
powerOffsetLastSample = millis();
}
if(powerOffsetSampleCount == 5000) /* after 5 seconds, run this codes. */
{
powerOffset = -realPower;
powerOffsetRead = 0; /* change the offset mode to original, wait until the button is pressed again */
powerOffsetSampleCount = 0; /* to reset the time again so that next cycle can start again */
}
}
/* 4 - LCD Display */
currentMillisLCD = millis(); /* Set current counting time */
if (currentMillisLCD - startMillisLCD >= periodLCD && page ==1) /* for every x seconds, run the codes below*/
{
LCD.setCursor(0,0); /* Set cursor to first colum 0 and second row 1 */
LCD.print("I=");
LCD.print(FinalRMSCurrent,decimalPrecision); /* display current value in LCD in first row */
LCD.print("A ");
LCD.print("V=");
LCD.print(RMSVoltageMean,decimalPrecision); /* display current value in LCD in first row */
LCD.print("V ");
LCD.setCursor(0,1);
LCD.print(realPower,decimalPrecision);
LCD.print("W ");
LCD.print(apparentPower,decimalPrecision); /* display current value in LCD in first row */
LCD.print("VA ");
startMillisLCD = currentMillisLCD ; /* Set the starting point again for next counting time */
}
if( currentMillisLCD - startMillisLCD >= periodLCD && page ==2)
{
LCD.setCursor(0,0); /* Set cursor to first colum 0 and second row 1 */
LCD.print("PF=");
LCD.print(powerFactor,decimalPrecision);
LCD.print(" ");
LCD.setCursor(0,1);
LCD.print(" ");
startMillisLCD = currentMillisLCD ; /* Set the starting point again for next counting time */
}
}
El sensor SCT-013 es un sensor de corriente no invasivo cuya principal utilidad es medir la intensidad en corriente alterna que atraviesa un conductor sin necesidad de interconectarlo en serie. Podemos emplear estos sensores con un microcontrolador como Arduino para medir la intensidad o potencia consumida por una carga.
Una de las ventajas más interesantes es su precio, pero sin duda otra facilidad innegable es que no tenemos que manipular el cable ya que se trata de un sensor de corriente alterna no invasivo.
La precisión del sensor puede ser de 1-2%, pero para ello es muy importante que el núcleo ferromagnético se cierre adecuadamente. Hasta un pequeño hueco de aire puede introducir desviaciones del 10%.
Como desventaja, al ser una carga inductiva, el SCT-013introduce una variación del ángulo de fase cuyo valor es función de la carga que lo atraviesa, pudiendo llegar a ser de hasta 3º.
SCT-013 principio de funcionamiento
Un factor importante dentro de los transformadores de corriente es el número de espiras o número de vueltas que da el cable al núcleo ferromagnético. Conociendo estos datos y la corriente que circula por uno de los devanados podemos calcular la corriente por el otro devanado.
Esto es debido a que guardan la siguiente relación:
A esta fórmula se le llama relación de transformación porque relaciona el número de espiras del primario (Np), del secundario (Ns), las intensidades del primario (Ip), del secundario (Is), el voltaje del primario (Vp) y del secundario (Vs).
En el caso del sensor de corriente alterna SCT-013 el devanado primario es el cable del aparato que queremos medir y el número de vueltas sería uno. El devanado secundario tiene 2.000 vueltas.
Si aplicamos la relación de transformación a esta situación y suponiendo que queremos medir una intensidad de 10 Amperios, el resultado sería el siguiente.
Como se puede comprobar se produce una transformación de energía pues hemos bajado de 10 A (imposible de medir esta corriente con Arduino) hasta los 0,005 A
Ahora nos faltaría conocer cómo medir la intensidad con Arduino a través de una resistencia de carga o resistencia burden (su función es convertir la corriente en un voltaje limitado que podamos medir, por ejemplo, con Arduino.).
Pero antes de meternos en ello, vamos a ver los tipos de sensores de corriente alterna SCT-013 que podemos encontrar.
Podemos comprar diferentes tipos de sensores de corriente alterna SCT-013 que se pueden organizar en dos grupos. Los que proporcionan una corriente o los que proporcionan un voltaje. La gran diferencia entre ellos es que en los primeros no viene incluida una resistencia de carga y en los segundos sí. Solo el SCT-013-000 es que nos proporciona una corriente y no tiene resistencia de carga. pudiendo medir una corriente de entre 50 mA y 100 A.
El resto de la familia de sensores SCT-013 si que tienen incluida la resistencia de carga. Podemos encontrar varios modelos pero todos tienen un voltaje de salida entre 0V y 1V y por tanto elegir uno u otro sensor SCT-013 dependerá de las necesidades según la intensidad de corriente del circuito a medir.
Con Arduino y otra placas como NodeMCU, solo podemos medir voltajes. Si además ese voltaje varía entre un mínimo y un máximo, solo podremos hacerlo a través de una entrada analógica. Por otro lado, en estos cálculos debemos conocer el consumo aproximado del aparato que vamos a medir. Esto nos permitirá ajustar la precisión. El SCT-013-000 puede medir desde 50 mA hasta los 100 A. El objetivo de calcular la resistencia de carga es obtener un valor de resistencia que nos permita leer el voltaje de la corriente que pasa por el sensor SCT-013-000. Debemos de conseguir la máxima resolución posible y para ello debemos conocer la potencia aproximada del aparato o electrodoméstico que vamos a medir.
El consumo aproximado en vatios deberemos sacarlo de las características técnicas del electrodoméstico o aparato que quiera medir. Como ejemplo hagamos los calculos para una carga de 1kw :
Calculo de la corriente :Para una carga de 1kw hacemos los cálculos para 1.000W y un voltaje típico, 220V, calculamos la corriente.
Convertir la corriente máxima eficaz en corriente de pico.La corriente que hemos obtenido en el paso anterior es corriente eficaz. Ahora hay que convertirla en corriente de pico con la siguiente fórmula.
Calcular la corriente de pico en el devanado secundario. Con la fórmula de relación de transformación que hemos visto antes, podemos calcular la corriente de pico en el devanado secundario.
Maximizar la resolución con el máximo valor de la entrada analógica.En este punto entra en juego la placa que estés utilizando ya que depende de cada placa la referencia interna de la entrada analógica. Esta referencia se llama AREF y nos informa del voltaje máximo que podemos medir en una entrada analógica. Por ejemplo, NodeMCU y Arduino MKR1000 utilizan 3,3V y Arduino UNO utiliza 5V. En este ejemplo vamos a utilizar el AREF de Arduino UNO, 5V. La idea es aplicar la Ley de Ohm pero utilizando la mitad de voltaje. Lo que hemos hecho en los pasos anteriores es calcular la corriente de pico lo que significa que todavía tenemos una onda sinusoidal que varía de positivo a negativo. El objetivo es ajustar la resistencia para que se cumpla la Ley de Ohm y tengamos un voltaje entre 2,5V y -2,5V ya que la corriente la tenemos fija. Por eso, como veremos ahora en la fórmula, debemos dividir AREF entre dos.
Obteniendo un valor coherente para la resistencia de carga.El valor que nos ha dado para la resistencia de carga es de 778Ω. Este valor no es un valor que podamos encontrar fácilmente. Por eso debemos utilizar varias resistencias en serie que sean más comunes para conseguir un valor aproximado .También se podría hacer con resistencias en paralelo: por ejemplo, podemos poner en serie dos resistencias de 330Ω y una de 100Ω. Esto nos daría un valor de 760Ω más o menos aproximado al que habíamos calculado. Siempre que lo hagas quédate por debajo del valor calculado. Esto evitará que nos salgamos del límite de voltaje establecido por AREF ya que podemos llegar a dañar la placa de desarrollo con el sensor SCT-013.
RESUMEN: Excepto el modelo SCT-013-100, todos los demás modelos tienen una resistencia de burden interna para que la salida sea una señal de tensión de 1V, por lo tanto si elegimos el adecuado ni siquiera tendremos que preocuparnos por ello. Únicamente en el caso del SCT-013-100, carece de resistencia burden interna, por lo que la salida es una señal de ±50mA aunque a efectos prácticos una resistencia de 33Ω en paralelo con el sensor será suficiente.
Offset
En la resistencia de carga vamos a tener un voltaje que varía de 2,5V a -2,5V que sigue siendo una señal sinusoidal por lo que el problema que existe es que ni Arduino ni NodeMCU leen voltajes negativos. Así que tenemos que modificar la señal para que pase a estar en el rango de 0V a 5V.
Eso se hace añadiendo un offset en DC a nuestra señal bastando con sumar 2,5V y estaría resuelto. Esto lo haremos a través de un circuito conocido como circuito offset en DC que básicamente consiste en poner un divisor de tensión y un condensador. El condensador tiene que ser de 10μF y unos pocos cientos de voltios. Esto hace que la reactancia sea baja y la corriente alterna evite la resistencia.
El valor de las resistencias del divisor de tensión puede ser 10kΩ siempre y cuando lo alimentemos a través de la red eléctrica. Si su dispositivo va a funcionar con pilas utilize unas resistencias de 470kΩ para que el consumo sea mínimo.
El circuito
Con todo lo que hemos visto, ya podemos montar el circuito eléctrico donde conectemos el SCT-013 y Arduino.
Antes de ver como conectar los componentes vamos a echar un vistazo al conector que viene incluido en toda la familia SCT-013. Se trata del típico conector de audio que tenemos en todos los auriculares, conocido como jack. Cada tipo de jack hembra es diferente. Deberemos investigar como se hacen las conexiones o bien cortar el cable; encontrará dos cables, uno rojo y otro blanco. Estos colores pueden variar dependiendo del fabricante y del modelo.
En el siguiente esquema vemos el montaje del circuito de offset y la resistencia de carga con un sensor SCR-013-000. Obviamente si usamos otro sensor podemos eliminar la resistencia de carga , y por tanto haciendo mas sencillo el circuito al estar dicha resistencia integrada y calibrada en el propio sensor
Por último vamos a ver cómo tenemos que abrazar los cables de alta tensión con el sensor de corriente alterna SCT-013. No vale de cualquier forma, hay que hacerlo de una manera determinada ya que de lo contrario, no estaremos midiendo correctamente el consumo.
Lo más importante es que tenemos que abrazar solo uno de estos cables, en caso contrario la medición será cero. Esto es debido a que por uno de los cables la corriente fluye en un sentido y por el otro cable fluye en sentido contrario. Si abrazamos los dos cables un flujo magnético compensará al otro flujo magnético y se anulará.
Es importante utilizar cables de buena calidad. Por tu seguridad y para conseguir una buena precisión.
Seguramente encuentre tres cables cuando quites la funda que cubre todo. Los colores de la fase suelen ser azul o negro y para el neutro marrón. En uno de estos cables es donde tienes que abrazar el sensor SCT-013(no el de masa) . El tercer cable suele ser de color verde y amarillo y sirve para la toma de tierra por lo que no daría ninguna lectura en caso de abrazar este cable.
Calibración del sensor de corriente alterna SCT-013
Debemos partir del concepto de que nuestros aparatos no son perfectos. Es imposible fabricar cualquier cosa con absoluta precisión. Hay una relación directamente proporcional (incluso exponencial) entre precisión y precio. Cuanto más preciso más caro es el aparato.
Hay tres factores importantes a tener en cuenta y que influyen en la precisión (fuente Open Energy Monitor):
La relación de transferencia del transformador
El valor de la resistencia de carga y su tolerancia
La precisión del ADC a la hora de medir el voltaje en la resistencia de carga
La idea es empezar con la teórica y luego corregir ese valor con la fase experimental. Mucho ojo en la parte experimental. Vamos a trabajar con alto voltaje y puede ser muy peligroso. SI NO ESTÁ SEGURO NO HAGA LA PARTE EXPERIMENTAL.
Proceso de calibración
El proceso de calibración es sencillo. Solo tenemos que aplicar la siguiente fórmula.
Lo que hacemos es calcular el factor de calibración dividiendo el factor de transformación (corriente máxima eficaz dividida entre la corriente mínima eficaz) entre la resistencia de carga.
El valor que nos da sería el valor que tenemos que poner en el sketch del SCT-013. Si sustituimos los valores para la resistencia de carga que hemos calculado quedaría de la siguiente manera.
Este sería el valor teórico. Ya tendríamos algo por donde empezar. Para asegurarnos de que realmente este factor de calibración es bueno sería interesante conectar un aparato del cual sepamos su consumo aproximado.Por ejemplo, podemos utilizar una bombilla incandescente. Se recomienda una con bastante potencia para no perder resolución. El sensor SCT-013 nos dará una resolución de 2 decimales por lo tanto, si queremos calibrar bien este sensor debemos utilizar un aparato que consuma más de 20W.
A efectos prácticos tenemos que medir la corriente real con la corriente que está dando el sensor SCT-013 para lo cual podemos usar diferentes métodos.
Midiendo el voltaje de la red eléctrica :Para medir el voltaje necesitarás un multímetro. Lo primero es configurar el aparato correctamente. Tienes que seleccionar voltaje en alterna y el rango correspondiente a 220V. Además tienes que conectar el cable rojo (suele ser de este color) en voltios y el cable negro en COM. Una vez configurado debes meter las dos puntas en un enchufe. Cada una en un agujero. Da lo mismo en que agujero metas la punta. La diferencia es que te dará o positivo o negativo. Esto te dará un valor de voltaje y es el que tienes que apuntar y actualizar en el sketch.Las mediciones en este punto dependen mucho de la calidad del multímetro. Este es otro caso claro donde el precio tiene que ver mucho con la precisión.
Midiendo la corriente alterna con el multímetro: La corriente es algo más complicado ya que tenemos que cortar el cable y poner el mutímetro en serie con el cable, como si fuera una resistencia. En estos casos es interesante tener una clema, bornera o ficha de empalme. Eso sí, que soporte la corriente que va a pasar por la bornera. No pongas una de electrónica porque puedes dañar la instalación. Antes de nada vamos a ver cómo configurar el multímetro para medir una corriente alterna. Es diferente a la configuración de voltaje en alterna. Es importante que también tengas conectado el sensor de corriente alterna SCT-013 para poder comparar una medida y otra. Cuando mido con el multímetro obtengo el siguiente resultado. ida de 0,33A. Si hacemos los cálculos para obtener la potencia se obtiene lo siguiente P=V x I=230v x 0,33a=75,9w. Con los datos obtenidos anteriormente donde teníamos una potencia de unos 120W, comprobamos que este factor de calibración hay que ajustarlo. Por lo tanto, el factor de calibración está mal. Hay que corregirlo. Pero ahora que tenemos los datos experimentales resulta sencillo. Si el valor obtenido a través del sensor de corriente alterna SCT-013 es mayor, baja el factor de corrección. Ajusta dicho valor hasta conseguir un dato aproximado al que has obtenido en el multímetro. Solo es cuestión de ir modificando y cargando el código en la placa hasta que tener un valor correcto. No te olvides de modificar también el valor del voltaje obtenido. Al final con un factor de calibración de 1.6 y un voltaje de 230V consigo ajustarme a la corriente que nos mostraba el multímetro.
Código final para obtener la potencia con el sensor SCT-013
Gracias a Emonlib no tenemos que hacer cálculos complejos pues podemos ayudarnos en esta tarea de una librería. En concreto vamos a utilizar Emonlib creado por el proyecto Open Energy Monitor. Open Energy Monitor es un proyecto que nos proporciona diferente hardware para medir el consumo en multitud de dispositivos y aparatos. Han creado sus propias placas compatibles con Arduino. Para inlcuir esta libreria Abra el gestor de librería y busque Emonlib. También puede descargarlo desde el repositorio en GitHub.Con unas pocas líneas de código obtendremos de una forma muy sencilla la potencia que está consumiendo el aparato. Lo primero es el voltaje de tu red eléctrica.
En la función setup() iniciamos la comunicación serie para poder mostrar los datos a través del monitor serie.
Luego iniciamos el objeto que hemos creado de la clase EnergyMonitor con la función current(pinAnalogico, factorCalibracion). Esta función admite dos parámetros:
pinAnalogico: es el pin analógico donde hemos conectado el sensor de corriente alterna SCT-013.
factorCalibracion: es un valor que tenemos que calcular para corregir errores de diferentes tipos como la tolerancia de la resistencia de carga o del propio sensor SCT-013.
El pin analógico no tiene duda. Según el esquema mostrado más arriba vamos a utilizar el A0 así que pasamos como argumento un 0. El factor de corrección de momento lo dejamos a 2,6. En el siguiente apartado veremos como se calcula.
Por último en la función loop() obtenemos la corriente eficaz llamando a la función calcIrms(numMuestras). Esta función admite un parámetro:
numMuestras: indica cuantas muestras tiene que tomar para calcular la corriente eficaz.
El número de muestras es importante. Como hemos estado hablando a lo largo de todo este artículo, estamos trabajando con una señal sinusoidal. Esto quiere decir que tiene ciclos que se van repitiendo en el tiempo.
El número de muestras indica el número de veces que se va a leer la señal para obtener el valor de la corriente eficaz. Es interesante que estas muestras sean en ciclos completos. Según la velocidad de acceso a los pines analógicos con Arduino UNO, aproximadamente podemos medir 106 muestras en cada ciclo. Si está utilizando otro microcontrolador este valor puede variar.
Si queremos medir 14 ciclos (un valor recomendado por el proyecto Open Energy Monitor), tendremos que medir . De aquí viene el valor que se pasa a la función calcIrms().
Por último mostramos toda esta información a través del monitor serie.
// Include Emon Library
#include "EmonLib.h"
// Crear una instancia EnergyMonitor
EnergyMonitor energyMonitor;
// Voltaje de nuestra red eléctrica
float voltajeRed = 230.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, 1.6);
}
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(" Irms = ");
Serial.println(Irms);
}
Si no deseamos usar la librería también podemos realizar los cálculos internos nosotros mismos, si bien el código ahora ya no queda tan claro como la version anterior:
Añadir un ADC con entrada diferencial, nos permite realizar mediciones de tensiones positivas y negativas, como el ADS1115. Esta es la opción que vamos a comentar como mejora.
Este convertidor analógico digital tiene una resolución de 16 bits y una interfaz I2C para un control cómodo.
El módulo es adecuado para todos los microcontroladores actuales con 2.0V – 5.5V, el uso con Raspberry es posible sin problemas.
La frecuencia de muestro del módulo es programable hasta 860/s.
Gracias a la PGA interna, es posible amplificar hasta 16 veces la señal analógica.
Ajustando la ganancia del ADS1115 a 2.048V estaremos dentro del rango de ±1.414V. En el caso de un sensor de 30A tendremos una precisión de 1.87mA, y 6,25 mA para un sensor de 100A.
Si usáis un SCT-013-100 con salida de ±50mA, tendremos que añadir una resistencia burden externa de 33Ω y subir la ganancia del ADS1115 a 4.096V para cumplir con el rango de ±2.33V.
Si no queréis usar un ADC externo, podéis usar la solución más convencional, que es añadir un circuito que nos permita añadir un offset central como vimos al principio del post.
Si habéis usado el montaje con un SCT-013 con salida de ±1V RMS y ADS1115, el código necesario es similar al que vimos en la entrada sobre el ADS1115. Necesitarémios la librería de Adafruit para el ADS1115.
Para que el ADS1115 muestree a una velocidad superior, deberemos modificar la siguiente línea del fichero ‘Adafruit_ADS1015.h’
#define ADS1115_CONVERSIONDELAY
Por,
#define ADS1115_CONVERSIONDELAY
Con esto conseguiremos bajar el tiempo de muestreo de unos 8-9 ms (unos 100 Hz) a 1.8 aprox (unos 500 Hz). Con eso nos alejamos de la frecuencia de Nyquist, y mejoramos el comportamiento de la medición.
Otra versión es emplear el máximo y el mínimo de la medición, y calcular la medición a partir del valor de pico. Los resultados deberían ser similares a los vistos en el ejemplo con la suma al cuadrado. Para ello, podéis sustituir la función por la siguiente.
Aunque depende mucho de las necesidades del aparato que quieras medir, estos sensores invasivos (debes alterar el cable que conecta el aparato) pueden ser una buena alternativa.
Interruptor Sonoff WiFi y medidor de corriente de Itead
El autor de esta idea perteneze a un pueblo de Odisha, India, donde los cortes de energía frecuentes son muy comunes. Obstaculiza la vida de todos. Durante su de infancia, continuar con los estudios después del anochecer fue un verdadero desafío. Debido a este problema diseño un sistema solar para su casa de forma experimental. Uso un panel solar de 10 Watt, 6V para iluminar algunos LED brillantes. Después de enfrentar muchas dificultades, el proyecto tuvo éxito. Luego decidio monitorear el voltaje, la corriente, la potencia y la energía involucradas en el sistema. Esto trajo la idea de diseñar un MEDIDOR DE ENERGÍA. Uso ARDUINO como el corazón de este proyecto porque es muy fácil escribir código en su IDE y hay una gran cantidad de bibliotecas de código abierto disponibles en Internet que se pueden usar de acuerdo con el requisito.
Características: 1-Monitoreo de energía por pantalla LCD 2. Envio de lecturas a través de Internet (carga Xively) 3. Registro de datos en una tarjeta SD
Piezas necesarias:
Potencia y energía
ARDUINO UNO
ARDUINO ETHERNET SHIELD
LCD DE CARACTERES 16×2
SENSOR DE CORRIENTE ACS 712
RESISTENCIAS (10k, 330ohm)
POTENCIOMETRO 10K
CABLES DE PUENTE
CABLE ETHERNET
PANEL DE PAN
Potencia: potencia es el producto del voltaje (voltios) y la corriente (Amp).P = VxI La unidad de potencia es Watt o KW
Energía: Energía es producto de la potencia (Watt) y el tiempo (Hora) E = Pxt Unidad de energía es Watt Hora o Kilovatios hora (kWh) De la fórmula anterior, queda claro que para medir la energía necesitamos tres parámetros: 1. Voltaje 2. Corriente 3. Tiempo
Medición de voltaje
El voltaje se mide con la ayuda de un circuito divisor de voltaje.Como el voltaje de entrada del pin analógico ARDUINO está restringido a 5V, diseño el divisor de voltaje de tal manera que el voltaje de salida debería ser inferior a 5V.Labatería utilizada para almacenar la potencia del panel solar es de 6 V, 5,5 Ah, por lo que tenemps que reducir este 6,5 V a un voltaje inferior a 5 V. Usaremos R1 = 10k y R2 = 10K. El valor de R1 y R2 puede ser menor, pero el problema es que cuando la resistencia es baja, el flujo de corriente más alto lo atraviesa, como resultado, una gran cantidad de energía (P = I ^ 2R) se disipa en forma de calor. Por lo tanto, se pueden elegir diferentes valores de resistencia, pero se debe tener cuidado para minimizar la pérdida de potencia a través de la resistencia.
Vout = R2 / (R1 + R2) * Vbat Vbat = 6.5 cuando está completamente cargado R1 = 10k y R2 = 10k Vout = 10 / (10 + 10) * 6.5 = 3.25v que es inferior a 5v y adecuado para el pin analógico ARDUINO
NOTA Hemos mostrado que la batería de 9 voltios en el circuito de la placa desnuda es solo por ejemplo para conectar los cables. Se utiliza una batería de plomo-ácido de 6 voltios y 5,5 Ah.
Calibración de voltaje: Cuando la batería está completamente cargada (6.5v) obtendremos un Vout = 3.25v y un valor más bajo para otro voltaje de batería más bajo.
ARDUINO ADC convierte la señal analógica a la correspondiente aproximación digital. Cuando el voltaje de la batería es de 6.5v, obtuve 3.25v del divisor de voltaje y sample1 = 696 en el monitor en serie, donde sample1 es el valor ADC corresponde a 3.25v
Para una mejor comprensión, he adjuntado la simulación en tiempo real del circuito 123D para la calibración de medición de voltaje:
3.25v equivalente a 696 1 es equivalente a 3.25 / 696 = 4.669mv Vout = (4.669 * sample1) / 1000 volt Voltaje real de la batería = (2 * Vout) volt
CÓDIGO ARDUINO:
// tomando 150 muestras del divisor de voltaje con un intervalo de 2seg y luego promediar los datos de muestras
for (int i = 0; i <150; i ++) { sample1 = sample1 + analogRead (A2); // lee el voltaje del circuito divisor delay (2); } muestra1 = muestra1 / 150; voltaje = 4.669 * 2 * muestra1 / 1000;
Medición de corriente
Para la medición de corriente utilicé un sensor de corriente de efecto Hall ACS 712 (20 A). Hay diferentes sensores de rango de corriente ACS712 disponibles en el mercado, así que elija según sus necesidades. En el diagrama de la placa de pruebas, he mostrado el LED como una carga, pero la carga real es diferente. PRINCIPIO DE FUNCIONAMIENTO:
El efecto Hall es la producción de una diferencia de voltaje (el voltaje de Hall) a través de un conductor eléctrico, transversal a una corriente eléctrica en el conductor y un campo magnético perpendicular a la corriente. Para saber más sobre el sensor de efecto Hall, haga clic aquí. La hoja de datos del sensor ACS 712 se encuentra aquí.
De la hoja de datos 1. El ACS 712 mide 20 amperios positivos y negativos, correspondientes a la salida analógica 100 mV / A 2. Ninguna corriente de prueba a través del voltaje de salida es VCC / 2 = 5v / 2 = 2.5V
Calibración: La lectura analógica produce un valor de 0-1023, lo que equivale a 0v a 5v Por lo que la lectura analógica 1 = (5/1024) V = 4.89. Valor mv = (4.89 * Valor de lectura analógica) / 1000 V. Pero según las hojas de datos, la compensación es 2.5V (Cuando la corriente es cero, obtendrá 2.5V de la salida del sensor) Valor real = (valor-2.5) V Corriente en amperios = real valor * 10
CÓDIGO ARDUINO:
// tomar 150 muestras de sensores con un intervalo de 2 segundos y luego promediar los datos de muestras recolectados for (int i = 0; i <150; i ++) { sample2 + = analogRead (A3); // lee la corriente del sensor delay (2); } muestra2 = muestra2 / 150; val = (5.0 * muestra2) /1024.0; actualval = val-2.5; // el voltaje de compensación es 2.5v amps = actualval * 10;
Medición del tiempo
Para la medición del tiempo no se necesita ningún hardware externo, ya que ARDUINO tiene un temporizador incorporado.
La función millis () devuelve el número de milisegundos desde que la placa Arduino comenzó a ejecutar el programa actual.
CÓDIGO ARDUINO: milisec largo = milis (); // calcula el tiempo en milisegundos long time = milisec / 1000; // convierte milisegundos a segundos
Todos los resultados se pueden visualizar en el monitor en serie o utilizando una pantalla LCD. Utilicé una pantalla LCD de 16×2 caracteres para mostrar todos los resultados obtenidos en los pasos anteriores. Para los esquemas, consulte el circuito de la placa de pan que se muestra arriba.
Conecte la pantalla LCD con ARDUINO como se indica a continuación:
LCD -> Arduino 1. VSS -> Arduino GND 2. VDD -> Arduino + 5v 3. VO -> Arduino GND pin + Resistencia o potenciómetro 4. RS -> Arduino pin 8 5. RW -> Pin 7 de Arduino 6. E -> Pin 6 de Arduino 7. D0 -> Arduino – No conectado 8. D1 -> Arduino – No conectado 9. D2 -> Arduino – No conectado 10. D3 -> Arduino – No conectado 11 . D4 -> Pin 5 de Arduino 12. D5 -> Pin 4 de Arduino 13. D6 -> Pin 3 de Arduino 14. D7 -> Pin 2 de Arduino 15. A -> Pin 13 de Arduino + Resistencia (potencia de luz de fondo) 16. K -> Arduino GND (tierra de luz de fondo)
CÓDIGO ARDUINO:
Para monitor serie: Serial.print ("VOLTAJE:"); Serial.print (voltaje); Serial.println ("Volt"); Serial.print ("ACTUAL:"); Serial.print (amperios); Serial.println ("Amperios"); Serial.print ("POWER:"); Serial.print (vatios); Serial.println ("Watt"); Serial.print ("ENERGÍA CONSUMIDA:"); Serial.print (energía); Serial.println ("Watt-Hora"); Serial.println (""); // imprime los siguientes conjuntos de parámetros después de un retraso de línea en blanco (2000);
Para LCD:
Para la pantalla LCD, primero debe importar la biblioteca «LiquidCrystal» en el código aquí
El siguiente código es un formato para mostrar en LCD todo el cálculo de potencia y energía
#include <LiquidCrystal.h> lcd (8, 7, 6, 5, 4, 3, 2); int backLight = 9;configuración vacía () { pinMode (luz de fondo, SALIDA); // establece el pin 9 como salida analogWrite (backLight, 150); // controla la intensidad de la luz de fondo 0-254 lcd.begin (16,2); // columnas filas. tamaño de la pantalla lcd.clear (); // limpia la pantalla } void loop () { lcd.setCursor (16,1); // coloca el cursor fuera del recuento de la pantalla lcd.print (""); // imprime un carácter vacío delay (600);////////////////////////////////////////// Imprime potencia y energía en una pantalla LCD / ///////////////////////////////////////////////// lcd.setCursor (1,0); // coloca el cursor en la 1ª columna y la 1ª filalcd.print (vatios); lcd.print ("W"); lcd.print (voltaje); lcd.print ("V"); lcd.setCursor (1,1); // coloca el cursor en la 1ª columna y la 2ª fila lcd.print (energía); lcd.print ("WH"); lcd.print (amperios); lcd.print ("A"); }
Carga de datos a Xively.com
Elija un nombre de usuario, contraseña, establezca su dirección Recibirá un correo electrónico de confirmación; luego haga clic en el enlace de activación para activar su cuenta. Después de abrir correctamente la cuenta, será redirigido a la página de dispositivos de desarrollo .Haga clic en el cuadro + Agregar dispositivo .Dé un nombre a su dispositivo y una descripción (por ejemplo,MONITOREO DE ENERGÍA). Elija datos privados o públicos (elijo privados) Haga clic en Agregar dispositivo-Después de agregar el dispositivo, se le redirige a una nueva página donde hay mucha información importante. ID de producto,secreto de producto, número de serie, código de activación·
Feed ID, Feed URL, API End Point (Feed ID se usa en el código ARDUINO)
Agregar canales (elijo ENERGÍA y POTENCIA, pero puede elegir según su elección) Proporcione la unidad y el símbolo para el parámetro·Agrega tu ubicación·Claves API (utilizadas en el código ARDUINO, evite compartir este número)·Disparadores (hacer ping a una página web cuando ocurre un evento, como cuando el consumo de energía supera un cierto límite)
Para almacenar datos en una tarjeta SD, debe importar la biblioteca SD.
El código para almacenar datos en una tarjeta SD se escribe por separado, ya que no tengo suficiente memoria en mi ARDUINO UNO después de escribir el código para la pantalla LCD y cargar los datos xively.com. Pero estoy tratando de mejorar el código de la versión beta para que un solo código pueda contener todas las funciones (pantalla LCD, carga de datos Xively y almacenamiento de datos en una tarjeta SD). El código para el registro de datos se adjunta a continuación.
/*
SD card datalogger
This example shows how to log data from three analog sensors
to an SD card using the SD library.
The circuit:
* SD card attached to SPI bus as follows:
** UNO: MOSI - pin 11, MISO - pin 12, CLK - pin 13, CS - pin 4 (CS pin can be changed)
and pin #10 (SS) must be an output
** Mega: MOSI - pin 51, MISO - pin 50, CLK - pin 52, CS - pin 4 (CS pin can be changed)
and pin #52 (SS) must be an output
** Leonardo: Connect to hardware SPI via the ICSP header
Pin 4 used here for consistency with other Arduino examples
original code was created on 24 Nov 2010 and modified 9 Apr 2012 by Tom Igoe
I (Debasish Dutta) was again modified for my energy monitoring requirement on 14/01/14
podermos
This example code is in the public domain.
*/
#include <SD.h>
// On the Ethernet Shield, CS is pin 4. Note that even if it's not
// used as the CS pin, the hardware CS pin (10 on most Arduino boards,
// 53 on the Mega) must be left as an output or the SD library
// functions will not work.
const int chipSelect = 4;
File dataFile;
float sample1=0; // for voltage
float sample2=0; // for current
float voltage=0.0;
float val; // current callibration
float actualval; // read the actual current from ACS 712
float amps=0.0;
float totamps=0.0;
float avgamps=0.0;
float amphr=0.0;
float watt=0.0;
float energy=0.0;
void setup()
{
// Open serial communications and wait for port to open:
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for Leonardo only
}
Serial.print("Initializing SD card...");
// make sure that the default chip select pin is set to
// output, even if you don't use it:
pinMode(SS, OUTPUT);
// see if the card is present and can be initialized:
if (!SD.begin(chipSelect)) {
Serial.println("Card failed, or not present");
// don't do anything more:
while (1) ;
}
Serial.println("card initialized.");
// Open up the file we're going to log to!
dataFile = SD.open("energy.txt", FILE_WRITE);
if (! dataFile) {
Serial.println("error opening energy.txt");
// Wait forever since we cant write data
while (1) ;
}
}
void loop()
{
long milisec = millis(); // calculate time in milisec
long time=milisec/1000; // convert time to sec
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// taking 150 samples from sensors with a inerval of 2sec and then average the samples data collected
for(int i=0;i<150;i++)
{
sample1+=analogRead(A2); //read the voltage from the sensor
sample2+=analogRead(A3); //read the current from sensor
delay(2);
}
sample1=sample1/150;
sample2=sample2/150;
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////voltage calculation//////////////////////
voltage=4.669*2*sample1/1000; // callibration // 3.25 from voltage div is eqv 696 in A0 reading
// multiply 2 to get actual voltage// I used two 1k resistor to read 6.36v battery volt
//////////////////////////////////////////////// current calculation //////////////////////
val =(5.0*sample2)/1024.0;
actualval =val-2.5; // offset voltage is 2.5v
amps =actualval*10;// 10 is multiplied as 100mv/A ( from data sheet )
totamps=totamps+amps; // total amperes
avgamps=totamps/time; // average amperess
amphr=(avgamps*time); // ampere hour
watt =voltage*amps; // power=voltage*current
energy=(watt*time)/3600; // energy = power*timein Watt-sec ///again convert to Watt-Hr by dividing 3600sec
////////////////////////////////////////////////////////
// make a string for assembling the data to log:
String dataString = "";
int parameter[4]={voltage,amps,watt,energy}; // here parameters are power,energy,watt-hour and current
// read 4 parameters and append to the string:
for (int i = 0; i < 4; i++)
{
int sensor = parameter[i];
dataString += String(sensor);
if (i < 4)
{
dataString += ",";
}
}
dataFile.println(dataString);
// print to the serial port too:
Serial.println(dataString);
// The following line will 'save' the file to the SD card after every
// line of data - this will use more power and slow down how much data
// you can read but it's safer!
// If you want to speed up the system, remove the call to flush() and it
// will save the file only every 512 bytes - every time a sector on the
// SD card is filled with data.
dataFile.flush();
// Take 1 measurement every 500 milliseconds
delay(500);
}
Fuente https://www.instructables.com/ARDUINO-ENERGY-METER/
Debe estar conectado para enviar un comentario.