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 eléctrica es de 220V. Gracias
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 eléctrica es de 220V. Gracias
Puede consultar Tweet-a-Watt y ver si funcionará con su línea eléctrica de 220V. Ese proyecto debería al menos darte una idea de cómo empezar.
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 las diferencias de fase entre ellos (factor de potencia) y calcular la potencia real y aparente. Casi desearí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 potencia, como Microchip MCP3909 , que Puede ser capaz de usar con tu Arduino.
Este sistema de Smart Energy Groups puede ser de interés, se basa en el hardware de Arduino, etc.
Puede usar un sensor de efecto HALL (¿10-30e quizás?) con una placa Arduino.
He estado trabajando mucho en la construcción de monitores de energía conectados a la web utilizando el ESP8266 (con Arduino IDE) y varios DSP dedicados de monitoreo de energía de ADC ( ATM90E26 y ADE7763 ).
El diagramaFritzing del ADC + Wifi básico compatible con Arduino NodeMCU se muestra a continuación:
ElcódigoparausarelmonitordeenergíaESP8266ilustradoarribaestáaquí.TengaencuentaquesetratadeunasoluciónsimpledebajaprecisiónparaimplementarelmuestreodelvoltajeconuntransformadorylacorrienteconunCT.Lassolucionesdemayorprecisiónnecesitantomarmuestrasde240Vdirectamente(utilizandounaescaleradivisoradevoltajeyunaresistenciadederivación)yrequierenconsideracionesdediseñoadicionalesparamanejarlosproblemasquesurgenaltrabajarconaltosvoltajes.
/**Thissketchsendsads1115currentsensordataviaHTTPPOSTrequesttothingspeakserver.*Itneedsthefollowinglibrariestowork(besidestheesp8266standardlibrariessuppliedwiththeIDE):**-https://github.com/adafruit/Adafruit_ADS1X15**designedtorundirectlyonesp8266-01module,towhereitcanbeuploadedusingthismarvelouspieceofsoftware:**https://github.com/esp8266/Arduino**2015TishamDhar*licensedunderGNUGPL*/#include<ESP8266WiFi.h>#include<Wire.h>#include<Adafruit_ADS1015.h>//replacewithyourchannel'sthingspeakAPIkey,StringapiKey="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);
}
Lea otras preguntas en las etiquetas arduino power-meter