Medidor de energia Arduino

11

Quero criar um medidor de energia e usar o arduino para registrar as informações e enviar para a web. Existe alguma solução fácil para o medidor de energia? Eu moro na Argentina e a linha de energia é de 220V. obrigado

Mariano
fonte
Pergunta interessante. Que expectativa você tem do medidor? Qual deve ser a precisão e qual é o seu orçamento? Eu sei que algumas pessoas fizeram isso usando pinças de medição atuais nos fios. Você tem cada fio de energia exposto perto da caixa de distribuição, para poder medi-lo? Você possui fonte de alimentação monofásica ou trifásica? Forneça o máximo de informações possível.
precisa saber é o seguinte

Respostas:

10

Você pode conferir o Tweet-a-Watt e ver se ele funciona com sua linha de energia de 220V. Esse projeto deve, pelo menos, dar uma idéia de como começar.

Bill the Lizard
fonte
Muito hacker, interessante.
precisa saber é o seguinte
Porque por que o que já foi feito? Ele fornece um caminho claro para aprender como fazê-lo e, se você aprender mais, como fazê-lo melhor / fazer mais.
Nick T
4

Veja estes projetos:

  1. http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1258971285/all
  2. http://pwrusage.codeplex.com
  3. http://www.cerebralmeltdown.com/programming_projects/Arduino_Kilowatt_Meter/index.html
  4. http://www.alexgirard.com/2009/03/05/powermeter-more-info/
  5. http://jarv.org/pwrmon.shtml
  6. http://openenergymonitor.org/emon/node/58
  7. http://openenergymonitor.org/emon/node/27
  8. http://openenergymonitor.org/emon/node/79
  9. http://www.billporter.info/not-so-tiny-power-meter/

Suficiente? ;-)

avra
fonte
3

Criar um medidor de energia preciso não é uma tarefa trivial. Você precisa de uma maneira de detectar a tensão e a corrente com precisão e velocidade suficientes para detectar diferenças de fase entre elas (fator de potência) e calcular a potência real e aparente. Você quase gostaria de um DSP para isso.

A criação de um medidor de energia rudimentar pode ser feita através da detecção e CC da média da tensão e da corrente, ignorando a energia reativa e a necessidade de amostragem em alta velocidade. A precisão varia em função da qualidade da carga.

Existem CIs no mercado especificamente para medição de energia, como o Microchip MCP3909, que você pode usar com seu Arduino.

Adam Lawrence
fonte
1

Esse sistema do Smart Energy Groups pode ser interessante, é baseado no hardware do Arduino e assim por diante.


fonte
0

Eu tenho trabalhado extensivamente na construção de monitores de energia conectados à Web usando o ESP8266 (com Arduino IDE) e vários ADCs e DSPs de monitoramento de energia dedicados ( ATM90E26 e ADE7763 ).

Diagrama Fritzing do NodeMCU compatível com Arduino compatível com ADC + Wifi e habilitado para Wifi é mostrado abaixo: insira a descrição da imagem aqui

O código para usar o monitor de energia ESP8266 ilustrado acima está aqui. Observe que esta é uma solução simples e de baixa precisão para implementar amostragem de tensão usando um transformador e a corrente usando um TC. Soluções de alta precisão precisam amostrar 240V diretamente (usando uma escada divisora ​​de tensão e resistor de derivação) e exigem considerações adicionais de projeto para lidar com problemas decorrentes do trabalho com altas tensões.

/*


*  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);  
}
whatnick
fonte
Bem-vindo ao EE.SE! Infelizmente, essa parece ser, na melhor das hipóteses, uma resposta indireta à pergunta e se destina principalmente a direcionar tráfego para seus sites, que é uma forma de spam não permitida aqui.
Dave Tweed
OK, você removeu os links. No entanto, o OP parece estar perguntando mais sobre o lado do hardware do problema, não o software. Além disso, esteja ciente de que essa é uma pergunta de 5 anos e o OP nunca voltou depois de fazer.
Dave Tweed
Eu adicionei esquemas de uma solução proposta. O hardware para fazer isso de maneira fácil não existia 5 anos atrás. Isso ocorre agora devido à proliferação de SoCs compatíveis com Wi-Fi.
whatnick
1
@ Dave Tweed, quem se importa com o OP? O objetivo principal do SE é ser útil para toda a comunidade, e a publicação de whatnick adicionou uma nova maneira de resolver o problema (mesmo sem os esquemas adicionados).
Sredni Vashtar