Arduino-Leistungsmesser

Ich möchte einen Leistungsmesser erstellen und Arduino verwenden, um die Informationen zu protokollieren und an das Internet zu senden. Gibt es eine einfache Lösung für den Leistungsmesser? Ich lebe in Argentinien und die Stromleitung ist 220 V. Vielen Dank

Interessante Frage. Welche Erwartungen haben Sie an das Messgerät? Wie genau sollte es sein und wie hoch ist Ihr Budget? Ich weiß, dass einige Leute es mit Strommessklemmen an Drähten gemacht haben. Haben Sie jedes Stromkabel in der Nähe der Breakout-Box freigelegt, damit Sie es messen können? Haben Sie ein- oder dreiphasige Stromversorgung? Bitte geben Sie so viele Informationen wie möglich an.

Antworten (6)

Sie können Tweet-a-Watt ausprobieren und sehen, ob es mit Ihrer 220-V-Stromleitung funktioniert. Dieses Projekt sollte Ihnen zumindest eine Vorstellung davon geben, wie Sie anfangen können.

Sehr hackerisch, interessant.
Denn warum tun, was bereits getan wurde? Es bietet einen klaren Weg, um zu lernen, wie es geht, und wenn Sie mehr lernen, wie Sie es besser machen/mehr tun können.

Das Erstellen eines genauen Leistungsmessers ist keine triviale Aufgabe. Sie benötigen eine Möglichkeit, Spannung und Strom mit ausreichender Genauigkeit und Geschwindigkeit zu erfassen, um Phasenunterschiede zwischen ihnen (Leistungsfaktor) zu erkennen und die Wirk- und Scheinleistung zu berechnen. Sie würden fast einen DSP dafür brauchen.

Die Erstellung eines rudimentären Leistungsmessers kann durch Erfassen und DC-Mittelung von Spannung und Strom erfolgen, wobei die Blindleistung und die Notwendigkeit, bei hohen Geschwindigkeiten abzutasten, ignoriert werden. Die Genauigkeit hängt von der Qualität der Last ab.

Es gibt auf dem Markt ICs speziell für die Leistungsmessung, wie den Microchip MCP3909 , den Sie möglicherweise mit Ihrem Arduino verwenden können.

Dieses System von Smart Energy Groups könnte interessant sein, es basiert auf Arduino-Hardware und so weiter.

Sie könnten einen HALL- Effektsensor (vielleicht 10-30e?) mit einem Arduino-Board verwenden.

Ich habe intensiv daran gearbeitet, mit dem Internet verbundene Energiemonitore mit dem ESP8266 (mit Arduino IDE) und verschiedenen ADCs und dedizierten Energieüberwachungs-DSPs ( ATM90E26 und ADE7763 ) zu bauen.

Das Fritzing -Diagramm eines einfachen ADC + Wifi-fähigen Arduino-kompatiblen NodeMCU ist unten dargestellt:Geben Sie hier die Bildbeschreibung ein

Der Code für die Verwendung des oben abgebildeten ESP8266-Energiemonitors ist hier. Bitte beachten Sie, dass dies eine einfach zu implementierende Lösung mit geringer Genauigkeit ist, bei der die Spannung mit einem Transformator und der Strom mit einem Stromwandler abgetastet wird. Lösungen mit höherer Genauigkeit müssen 240 V direkt abtasten (unter Verwendung einer Spannungsteilerleiter und eines Shunt-Widerstands) und erfordern zusätzliche Designüberlegungen, um Probleme zu bewältigen, die sich aus der Arbeit mit hohen Spannungen ergeben.

/*


*  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);  
}
Willkommen bei EE.SE! Leider scheint dies bestenfalls eine indirekte Antwort auf die Frage zu sein und soll hauptsächlich den Verkehr auf Ihre Websites lenken, was eine Form von Spam ist, die hier nicht erlaubt ist.
OK, Sie haben die Links entfernt. Das OP scheint jedoch mehr nach der Hardwareseite des Problems zu fragen, nicht nach der Software. Beachten Sie auch, dass dies eine 5 Jahre alte Frage ist und das OP nie zurückkam, nachdem es sie gestellt hatte.
Ich habe Schemata einer vorgeschlagenen Lösung hinzugefügt. Die Hardware, um dies auf einfache Weise zu tun, gab es vor 5 Jahren noch nicht. Aufgrund der Verbreitung von WLAN-fähigen SoCs ist dies jetzt der Fall.
@Dave Tweed, wen interessiert das OP? Der ganze Sinn von SE besteht darin, für die gesamte Community nützlich zu sein, und Whatnicks Beitrag fügte einen neuen Weg hinzu, um das Problem zu lösen (sogar ohne die hinzugefügten Schaltpläne).