Medidor de potencia Arduino


11

Quiero crear un medidor de potencia y usar arduino para registrar la información y enviarla a la web. ¿Hay alguna solución fácil para el medidor de potencia? Vivo en Argentina y la línea de alimentación es de 220V. Gracias


Interesante pregunta. ¿Qué expectativa tienes del medidor? ¿Qué tan preciso debe ser y cuál es su presupuesto? Sé que algunas personas lo hicieron usando pinzas de medición de corriente en cables. ¿Tiene cada cable de alimentación expuesto cerca de la caja de conexiones para poder medirlo? ¿Tiene una fuente de alimentación monofásica o trifásica? Proporcione tanta información como pueda.
AndrejaKo

Respuestas:


10

Puede consultar Tweet-a-Watt y ver si funciona con su línea de alimentación de 220V. Ese proyecto al menos debería darle una idea de cómo comenzar.


Muy hacker, interesante.
Kellenjb

Porque ¿por qué hacer lo que ya se ha hecho? Proporciona un camino claro para aprender cómo hacerlo, y si aprende más, cómo hacerlo mejor / hacer más.
Nick T

4

3

Crear un medidor de potencia preciso no es una tarea trivial. Necesita una forma de detectar el voltaje y la corriente con suficiente precisión y velocidad para poder detectar diferencias de fase entre ellos (factor de potencia) y calcular la potencia real y aparente. Casi querrías un DSP para esto.

La creación de un medidor de potencia rudimentario se puede hacer detectando y DC promediando el voltaje y la corriente, ignorando la potencia reactiva y la necesidad de muestrear a altas velocidades. La precisión variará en función de la calidad de la carga.

Hay circuitos integrados en el mercado específicamente para la medición de energía, como el Microchip MCP3909 que puede usar con su Arduino.


1

Este sistema de Smart Energy Groups puede ser de interés, se basa en el hardware Arduino, etc.



0

He estado trabajando extensamente en la construcción de monitores de energía conectados a la web utilizando el ESP8266 (con Arduino IDE) y varios ADC y DSP dedicados de monitoreo de energía ( ATM90E26 y ADE7763 ).

A continuación se muestra un diagrama detallado de NodeMCU compatible con Arduino compatible con ADC + Wifi básico: ingrese la descripción de la imagen aquí

El código para usar el monitor de energía ESP8266 ilustrado arriba está aquí. Tenga en cuenta que esta es una solución de baja precisión y fácil de implementar que toma muestras del voltaje usando un transformador y la corriente usando un CT. Las soluciones de mayor precisión necesitan muestrear 240V directamente (usando una escalera de división de voltaje y una resistencia de derivación) y requieren consideraciones de diseño adicionales para manejar los problemas derivados del trabajo con altos voltajes.

/*


*  This sketch sends ads1115 current sensor data via HTTP POST request to thingspeak server.
 *  It needs the following libraries to work (besides the esp8266 standard libraries supplied with the IDE):
 *
 *  - https://github.com/adafruit/Adafruit_ADS1X15
 *
 *  designed to run directly on esp8266-01 module, to where it can be uploaded using this marvelous piece of software:
 *
 *  https://github.com/esp8266/Arduino
 *
 *  2015 Tisham Dhar
 *  licensed under GNU GPL
 */

#include <ESP8266WiFi.h>
#include <Wire.h>
#include <Adafruit_ADS1015.h>

// replace with your channel's thingspeak API key, 
String apiKey = "XXXXXXXXXXXXX";
//WIFI credentials go here
const char* ssid     = "XXXXXXXXXXX";
const char* password = "XXXXXXXXXXXXXXXXXXXXX";
Adafruit_ADS1115 ads;  /* Use this for the 16-bit version */

const char* server = "api.thingspeak.com";
WiFiClient client;

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)
{
  /* Be sure to update this value based on the IC and the gain settings! */
  float multiplier = 0.125F;    /* ADS1115 @ +/- 4.096V gain (16-bit results) */
  for (unsigned int n = 0; n < Number_of_Samples; n++)
  {
    sampleI = ads.readADC_Differential_0_1();

    // Digital low pass filter extracts the 2.5 V or 1.65 V dc offset, 
  //  then subtract this - signal is now centered on 0 counts.
    offsetI = (offsetI + (sampleI-offsetI)/1024);
    filteredI = sampleI - offsetI;
    //filteredI = sampleI * multiplier;

    // Root-mean-square method current
    // 1) square current values
    sqI = filteredI * filteredI;
    // 2) sum 
    sumI += sqI;
  }

  Irms = squareRoot(sumI / Number_of_Samples)*multiplier; 

  //Reset accumulators
  sumI = 0;
//--------------------------------------------------------------------------------------       

  return Irms;
}

void setup() {
  Serial.begin(115200);
  delay(10);

  // We start by connecting to a WiFi network

  Serial.println();
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);

  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  Serial.println("");
  Serial.println("WiFi connected");  
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());

  ads.setGain(GAIN_ONE);        // 1x gain   +/- 4.096V  1 bit = 2mV      0.125mV
  ads.begin();
}

void loop() {


  //Serial.print("Differential: "); Serial.print(results); Serial.print("("); Serial.print(trans_volt); Serial.println("mV)");
  double current = calcIrms(2048);

  if (client.connect(server,80)) {  //   "184.106.153.149" or api.thingspeak.com
    String postStr = apiKey;
           postStr +="&field1=";
           postStr += String(current);
           postStr += "\r\n\r\n";

     client.print("POST /update HTTP/1.1\n"); 
     client.print("Host: api.thingspeak.com\n"); 
     client.print("Connection: close\n"); 
     client.print("X-THINGSPEAKAPIKEY: "+apiKey+"\n"); 
     client.print("Content-Type: application/x-www-form-urlencoded\n"); 
     client.print("Content-Length: "); 
     client.print(postStr.length()); 
     client.print("\n\n"); 
     client.print(postStr);  
  }
  client.stop();

  //Serial.println("Waiting...");    
  // thingspeak needs minimum 15 sec delay between updates
  delay(20000);  
}

¡Bienvenido a EESE! Desafortunadamente, esta parece ser, en el mejor de los casos, una respuesta indirecta a la pregunta, y está destinada principalmente a dirigir el tráfico a sus sitios web, que es una forma de spam no permitida aquí.
Dave Tweed

OK, has eliminado los enlaces. Sin embargo, el OP parece estar preguntando más sobre el lado del problema del hardware, no sobre el software. Además, tenga en cuenta que esta es una pregunta de 5 años, y el OP nunca regresó después de hacerla.
Dave Tweed

He agregado esquemas de una solución propuesta. El hardware para hacer esto de manera fácil no existía hace 5 años. Ahora lo hace debido a la proliferación de SoC compatibles con wifi.
Whatnick

1
@Dave Tweed, ¿a quién le importa el OP? El objetivo de SE es ser útil para toda la comunidad, y la publicación de whatnick agregó una nueva forma de resolver el problema (incluso sin los esquemas adicionales).
Sredni Vashtar
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.