This forum uses cookies
This forum makes use of cookies to store your login information if you are registered, and your last visit if you are not. Cookies are small text documents stored on your computer; the cookies set by this forum can only be used on this website and pose no security risk. Cookies on this forum also track the specific topics you have read and when you last read them. Please confirm whether you accept or reject these cookies being set.

A cookie will be stored in your browser regardless of choice to prevent you being asked this question again. You will be able to change your cookie settings at any time using the link in the footer.

  • 4 voto(s) - 4.25 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Monitor de consumo eléctrico
#1
Escribo este post por si a alguien le interesa fabricarse un monitor de consumo eléctrico. Se coloca de forma no invasiva en el interior del cuadro eléctrico, con objeto de conocer la potencia consumida en casa en cada momento a través de thingspeak (tiene que existir una red wifi para que el monitor de consumo suba los datos a la web). En mi caso, la idea era estudiar la potencia que se consumía en casa, y estudiar si era posible bajar la potencia contratada. En mi caso, sin aplicar patrones de ahorro, ni cambiar los hábitos de consumo, pude comprobar que tenía suficiente con contratar una potencia de 2.300W, pues la demanda total apenas subía de estos valores.
Bueno, paso a describir un poco el sistema. El cerebro del sistema es un ESP8266 nodemcu. La parte medidora será una pinza no intrusiva capaz de medir la corriente que atraviesa un cable (digo no intrusiva porque no es necesario cortar ni pinchar ningún cable). La pinza que yo he utilizado es una SCT013 30A. Esta pinza tiene una capacidad de medición de hasta 30 amperios. Cuando por el cable pasan 30 amperios la tensión en los extremos de los cables de la pinza es de 1 voltio (la tensión es proporcional a la corriente que circula por el cable). El problema es que la tensión es alterna; cambia constantemente de signo. El arduino solo es capaz de medir valores que van de 0V a 3/5V), con lo que habrá que rectificar la señal, o introducir un elemento que sea capaz de medir valores positivos y negativos. Yo opté por la segunda opción, adquiriendo un ADC, el cual es capaz de medir tensiones positivas y negativas. Yo usé el ADS1115.
Para meter todo esto, con la impresora 3D imprimí una cajita que protege los componentes.
Ya tenemos todo el hardware. El montaje es muy sencillo. Se conectan los dos cables de la pinza en los pines A0 y A1 de ADC (medimos la tensión diferencial entre estos dos pines), y el resto de pines del ADC al nodemcu (5V-VDD, GND-GND, SCL-SCL,SDA-SDA, GND-ADDR).
Ya solo queda el código. Éste también es muy sencillo. Utiliza la librería Adafruit ADS1X15. Los datos se suben a THINGSPEAK, por lo que hay que registrarse en esta web y meter los datos del servidor y la apikey (son personales y se obtienen de la cuenta de thingspeak). Indicar que la librería de Adafruit permite ajustar la ganancia del ADS1115, de manera que mientras más ajustado esté, más precisión tendremos. Yo he optado por ajustar a +/-2,048V (usaremos un factor multiplicador de 0.0000625F), pues los valores pico de la pinza son +/-1,41V. El resto son fórmulas matemáticas y físicas, para obtener el valor de la intensidad y de la potencia.
 
Adjunto capturas de los datos de consumo:

[Imagen: thingspeak.jpg]

[Imagen: thingspeak2.jpg]

También adjunto fotos del monitor de consumo:

[Imagen: IMG_20180301_052302.jpg]


[Imagen: IMG_20180301_052326.jpg]

Adjunto también los archivos .stl de la envolvente:


Archivos adjuntos
.zip   envolvente.zip (Tamaño: 3.72 KB / Descargas: 97)
.zip   CODIGO.zip (Tamaño: 1.23 KB / Descargas: 101)
  Responder
#2
Excelente! Gracias por compartir Sonrisa

Lo enlazare al curso de IoT.

Gracias por compartir.
  Responder
#3
Pienso que lo suyo sería eliminar la parte del código que envía los datos a thingspeak, y adaptarlo para que lo envíe al broker mqtt y poder consultar con grafana.
  Responder
#4
Un proyecto muy interesante.
  Responder
#5
(01-03-2018, 08:37 AM)s118 escribió: Pienso que lo suyo sería eliminar la parte del código que envía los datos a thingspeak, y adaptarlo para que lo envíe al broker mqtt y poder consultar con grafana.

En cuanto acabe la tarea de documentar el hw, me pondre a revisar tus codigos para enfocarlos y ofrecer una opcion mas, una solucion mas con el mismo material.

Voy con varias cosas y me tengo que repartir, pero todo llegara Sonrisa

Gracias

Saludos
  Responder
#6
(01-03-2018, 05:44 AM)s118 escribió: [Imagen: thingspeak2.jpg]

Enhorabuena. Muy interesante proyecto pero tengo unas cuantas preguntas:

- Frecuencia de muestreo ¿?
- Resolución conseguida en la medida de la intensidad instantánea en watios

De la gráfica parece como si el "cero" estuviera más bien en 0.6 kW lo que parece un poco elevado a no ser que tengas muchos, muchos "vampiros" eléctricos. Por otra parte parece que hay muchos valores anómalos (espúreos / outliers) sobre todo los que caen por debajo de la "línea de base" 

¿Has "calibrado" los valores medidos frente a los "facturados"?
  Responder
#7
Frecuencia de muestreo: toma 1024 muestras, hace la media, y devuelve el valor de intensidad para calcular la potencia.
Resolución obtenida: antes de echar a andar el aparato hice unas pruebas midiendo la intensidad instantánea con un polímetro y con el monitor, y el error, una vez aplicado el factor de corrección de 1,33 era inferior al 1%. Las pruebas las hice con una plancha de ropa, un secador de pelo, una aspiradora, un tostador de pan, una sandwichera, una licuadora, un ventilador y una plancha de pelo. El error de la pinza, por su diseño, se produce cuando circula muy poca intensidad, pero dado que es poca intensidad el error es despreciable (esto lo he constatado midiendo el consumo que tiene una raspberry, donde el error relativo es grande). Por cierto, la intensidad no se mide en watios, sino en amperios. La potencia se mide en watios.
Los valores obtenidos son los existentes en la vivienda. En su día, el código medía los kw/h, y los valores coincidían con el consumo que daba Sevillana Endesa en su web.
  Responder
#8
El tema es muy interesante y creo que me apunto. Pero creo que deberíamos buscar un sensor de 50A de fondo de escala como mucho. No permitirá tener una mayor precisión para la corriente que estamos midiendo. 30 o 40A para temas caseros.
Otra opción sería dar dos vueltas pero en este caso tendríamos que modificar un poco la longitud del cable y eso no es siempre posible


Impresoras, CeNeCe, aviones, multicopteros y helicópteros.
  Responder
#9
(01-03-2018, 05:44 AM)s118 escribió: Escribo este post por si a alguien le interesa fabricarse un monitor de consumo eléctrico. Se coloca de forma no invasiva en el interior del cuadro eléctrico, con objeto de conocer la potencia consumida en casa en cada momento a través de thingspeak (tiene que existir una red wifi para que el monitor de consumo suba los datos a la web). En mi caso, la idea era estudiar la potencia que se consumía en casa, y estudiar si era posible bajar la potencia contratada. En mi caso, sin aplicar patrones de ahorro, ni cambiar los hábitos de consumo, pude comprobar que tenía suficiente con contratar una potencia de 2.300W, pues la demanda total apenas subía de estos valores.
Bueno, paso a describir un poco el sistema. El cerebro del sistema es un ESP8266 nodemcu. La parte medidora será una pinza no intrusiva capaz de medir la corriente que atraviesa un cable (digo no intrusiva porque no es necesario cortar ni pinchar ningún cable). La pinza que yo he utilizado es una SCT013 30A. Esta pinza tiene una capacidad de medición de hasta 30 amperios. Cuando por el cable pasan 30 amperios la tensión en los extremos de los cables de la pinza es de 1 voltio (la tensión es proporcional a la corriente que circula por el cable). El problema es que la tensión es alterna; cambia constantemente de signo. El arduino solo es capaz de medir valores que van de 0V a 3/5V), con lo que habrá que rectificar la señal, o introducir un elemento que sea capaz de medir valores positivos y negativos. Yo opté por la segunda opción, adquiriendo un ADC, el cual es capaz de medir tensiones positivas y negativas. Yo usé el ADS1115.
Para meter todo esto, con la impresora 3D imprimí una cajita que protege los componentes.
Ya tenemos todo el hardware. El montaje es muy sencillo. Se conectan los dos cables de la pinza en los pines A0 y A1 de ADC (medimos la tensión diferencial entre estos dos pines), y el resto de pines del ADC al nodemcu (5V-VDD, GND-GND, SCL-SCL,SDA-SDA, GND-ADDR).
Ya solo queda el código. Éste también es muy sencillo. Utiliza la librería Adafruit ADS1X15. Los datos se suben a THINGSPEAK, por lo que hay que registrarse en esta web y meter los datos del servidor y la apikey (son personales y se obtienen de la cuenta de thingspeak). Indicar que la librería de Adafruit permite ajustar la ganancia del ADS1115, de manera que mientras más ajustado esté, más precisión tendremos. Yo he optado por ajustar a +/-2,048V (usaremos un factor multiplicador de 0.0000625F), pues los valores pico de la pinza son +/-1,41V. El resto son fórmulas matemáticas y físicas, para obtener el valor de la intensidad y de la potencia.
 
Adjunto capturas de los datos de consumo:

[Imagen: thingspeak.jpg]

[Imagen: thingspeak2.jpg]

También adjunto fotos del monitor de consumo:

[Imagen: IMG_20180301_052302.jpg]


[Imagen: IMG_20180301_052326.jpg]

Adjunto también los archivos .stl de la envolvente:

Muy buen aporte,

Solo una duda, mide consumos inversos o negativos? es decir en lugar de consumos, generación pero como potencia negativa. 

No sé si me explico
  Responder
#10
Subo el código adaptado para usar en el proyecto SpainLabsIoT2018. Esta preparado para usar con Atom+PlatformIO.

Saludos


Archivos adjuntos
.rar   SpainLabsIoT_MedidorDeConsumo_s118.rar (Tamaño: 1.06 MB / Descargas: 96)
  Responder
#11
Buenos días, como se ha visto en otro tema que abrí, al fichero del nodo de medición de consumo, le falta añadir en el loop la función para reconexión.

if (!client.connected()) {
reconnect();
}
client.loop();
  Responder
#12
He conectado una bobina SCT013 30A/1V a un módulo ADS1115, conectado a su vez a un ESP8266 WEMOS D1 mini.
He cargado su programa mediante el IDE 1.8.14 de Arduino, realizando antes pequeñas modificaciones, como eliminar todo lo relacionado con la conexión Wifi, el enlace a Thingspeak.com y cambiar la referencia <Adafruit_ADS1015.h> por <Adafruit_ADS1X15.h> de la actual librería de Adafruit.
Queda así:


Código:
#include <Wire.h>
#include <Adafruit_ADS1X15.h>
Adafruit_ADS1115 ads;

double offsetI;
double filteredI;
double sqI,sumI;
int16_t sampleI;
double Irms;

double squareRoot(double fg) 
{
  double n = fg / 2.0;
  double lstX = 0.0;
  while (n != lstX)
  {
    lstX = n;
    n = (n + fg / n) / 2.0;
  }
  return n;
}

double calcIrms(unsigned int Number_of_Samples)
{
  float multiplier = 0.0000625F; 
  for (unsigned int n = 0; n < Number_of_Samples; n++)
  {
    sampleI = ads.readADC_Differential_0_1();
    offsetI = (offsetI + (sampleI-offsetI)/1024);
    filteredI = sampleI - offsetI;
    sqI = filteredI * filteredI;
    sumI += sqI;
  }
  Irms = squareRoot(sumI / Number_of_Samples)*multiplier * 30 * 1.33;  //Valor empírico 1.33 en NODEMCU
  sumI = 0;
  return Irms;
}
void setup() {
  Serial.begin(9600);
  ads.setGain(GAIN_TWO);       
  ads.begin();
}

void loop() {
  double current = calcIrms(1024);
  double P;
  P = 230 * current / 1000;
//  enviarP(P);
Serial.print("amperios: "); Serial.print(current); Serial.print(" vatios: "); Serial.println(P);
}


Me funciona. Obtengo valores estables y repetitivos para varios electrodomésticos conectados.
Pero cada 5 medidas, se resetea el programa debido, por lo que entiendo, al disparo del WDT.


Código:
--------------- CUT HERE FOR EXCEPTION DECODER ---------------

Soft WDT reset

>>>stack>>>

ctx: cont
sp: 3ffffcf0 end: 3fffffc0 offset: 01a0
3ffffe90:  60000314 00000001 3ffee518 4020299a 
3ffffea0:  00000001 3ffee3d3 3ffee518 40202ce0 
3ffffeb0:  00000000 3ffee350 3ffee518 40202c11 
3ffffec0:  3ffee34f 00000048 3ffee518 00000000 
3ffffed0:  3ffee336 00000002 00000002 40202e9c 
3ffffee0:  00000000 00000001 3ffee34d 402014b0 
3ffffef0:  00000000 00000003 3ffef8b4 402014e4 
3fffff00:  00000000 00000001 3ffef8b4 402017ea 
3fffff10:  00000001 00000000 3ffef8b4 4020179f 
3fffff20:  00000001 00000000 000a0d00 00000000 
3fffff30:  00000000 3ffee336 3ffee328 4020160c 
3fffff40:  00000000 0000035b 3ffee328 40201639 
3fffff50:  4020189c 3ffee470 3ffee328 402016c1 
3fffff60:  3ffee308 0000035b 3ffee308 4020110d 
3fffff70:  00000000 00000000 00000400 40201ad4 
3fffff80:  00000000 00000000 00000001 3ffee4d8 
3fffff90:  3fffdad0 00000000 3ffee498 40201261 
3fffffa0:  3fffdad0 00000000 3ffee498 4020217c 
3fffffb0:  feefeffe feefeffe 3ffe84e8 40100e11 
<<<stack<<<

--------------- CUT HERE FOR EXCEPTION DECODER ---------------
R0⸮  >⸮@b⸮⸮amperios: 0.00 vatios: 0.00
amperios: 0.00 vatios: 0.00
amperios: 0.00 vatios: 0.00


¿Es normal esto? ¿Cómo puedo evitarlo? ¿He cometido algún error?
Gracias.
  Responder


Posibles temas similares…
Tema Autor Respuestas Vistas Último mensaje
  CONSULTA proyecto reloj con RTC - mejora consumo Jasobrino 5 1,605 27-01-2021, 01:10 PM
Último mensaje: Jasobrino
  APORTE [SpainLabsIoT2018] ESP8266 NodeMCU - Ajustando su consumo (hack) grafisoft 10 8,963 24-04-2019, 04:49 PM
Último mensaje: grafisoft