Miernik mocy Arduino

11

Chcę utworzyć miernik mocy i użyć arduino do zarejestrowania informacji i wysłania do sieci. Czy istnieje jakieś proste rozwiązanie dla miernika mocy? Mieszkam w Argentynie, a linia zasilająca to 220 V. Dzięki

Mariano
źródło
Interesujące pytanie. Jakich oczekiwań oczekujesz od licznika? Jak dokładne powinno być i jaki jest twój budżet? Wiem, że niektórzy ludzie zrobili to za pomocą cęgów pomiarowych prądu na drutach. Czy każdy przewód zasilający jest odsłonięty w pobliżu skrzynki zabezpieczającej, aby można ją było zmierzyć? Czy masz zasilacz jedno- lub trójfazowy? Podaj jak najwięcej informacji.
AndrejaKo

Odpowiedzi:

10

Możesz sprawdzić Tweet-a-Watt i sprawdzić, czy będzie działać z twoją linią zasilania 220 V. Ten projekt powinien przynajmniej dać ci pojęcie, jak zacząć.

Bill jaszczurka
źródło
Bardzo hackerski, interesujący.
Kellenjb
Bo dlaczego to, co już zostało zrobione? Zapewnia jasną ścieżkę do nauczenia się, jak to zrobić, a jeśli dowiesz się więcej, jak to zrobić lepiej / więcej.
Nick T
4

Spójrz na te projekty:

  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/

Wystarczająco? ;-)

avra
źródło
3

Stworzenie dokładnego miernika mocy nie jest łatwym zadaniem. Potrzebujesz sposobu wykrywania napięcia i prądu z wystarczającą dokładnością i prędkością, aby móc wykryć różnice faz między nimi (współczynnik mocy) i obliczyć moc rzeczywistą i pozorną. Prawie chciałbyś do tego DSP.

Tworzenie podstawowego miernika mocy można wykonać przez wykrywanie i uśrednianie napięcia stałego i prądu stałego, ignorując moc bierną i potrzebę próbkowania przy dużych prędkościach. Dokładność będzie się różnić w zależności od jakości ładunku.

Na rynku dostępne są układy scalone specjalnie do pomiaru mocy, takie jak Microchip MCP3909, z których możesz korzystać w połączeniu z Arduino.

Adam Lawrence
źródło
1

Interesujący może być system Smart Energy Groups , oparty na sprzęcie Arduino i tak dalej.


źródło
0

Pracowałem intensywnie nad budowaniem monitorów energii podłączonych do sieci za pomocą ESP8266 (z Arduino IDE) oraz różnych ADC i dedykowanych procesorów DSP do monitorowania energii ( ATM90E26 i ADE7763 ).

Schemat Fritzing podstawowego NodeMCU zgodnego z ADC + Wi-Fi zgodnego z Arduino pokazano poniżej: wprowadź opis zdjęcia tutaj

Przedstawiony powyżej kod używania monitora energii ESP8266 znajduje się tutaj. Należy pamiętać, że jest to proste w użyciu rozwiązanie o niskiej dokładności próbkujące napięcie za pomocą transformatora i prądu za pomocą przekładnika prądowego. Rozwiązania o większej dokładności muszą próbkować bezpośrednio 240 V (przy użyciu drabiny dzielącej napięcie i rezystora bocznikowego) i wymagają dodatkowych rozważań projektowych w celu rozwiązania problemów wynikających z pracy przy wysokich napięciach.

/*


*  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
źródło
Witamy w EE.SE! Niestety wydaje się, że jest to w najlepszym razie pośrednia odpowiedź na pytanie i ma głównie na celu zwiększenie ruchu na twoich stronach, co jest niedozwoloną formą spamu.
Dave Tweed
OK, usunąłeś linki. Wydaje się jednak, że OP pyta więcej o sprzętową stronę problemu, a nie o oprogramowanie. Pamiętaj też, że jest to 5-letnie pytanie, a OP nigdy nie wrócił po zadaniu pytania.
Dave Tweed
Dodałem schematy proponowanego rozwiązania. Sprzęt do wykonania tego w łatwy sposób nie istniał 5 lat temu. Robi to teraz ze względu na rozprzestrzenianie się SoC z obsługą Wi-Fi.
whatnick
1
@Dave Tweed, Kogo to obchodzi OP? Cały punkt SE ma być użyteczny dla całej społeczności, a post whatnick dodał nowy sposób rozwiązania problemu (nawet bez dodanych schematów).
Sredni Vashtar,