Arduino Leistungsmesser


11

Ich möchte einen Leistungsmesser erstellen und Arduino verwenden, um die Informationen zu protokollieren und an das Web zu senden. Gibt es eine einfache Lösung für den Leistungsmesser? Ich lebe in Argentinien und die Stromleitung ist 220V. 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 eine ein- oder dreiphasige Stromversorgung? Bitte geben Sie so viele Informationen wie möglich an.
AndrejaKo

Antworten:


10

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


Sehr hackerisch, interessant.
Kellenjb

Denn warum tun, was bereits getan wurde? Es bietet einen klaren Weg, um zu lernen, wie man es macht, und wenn Sie mehr lernen, wie man es besser macht / mehr macht.
Nick T

4

3

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 Phasendifferenzen zwischen ihnen (Leistungsfaktor) zu erkennen und die tatsächliche und scheinbare Leistung zu berechnen. Sie würden fast einen DSP dafür wollen.

Das Erstellen eines rudimentären Leistungsmessers kann durch Erfassen und Gleichstrommittelung von Spannung und Strom erfolgen, wobei die Blindleistung ignoriert wird und die Notwendigkeit besteht, bei hohen Geschwindigkeiten abzutasten. Die Genauigkeit hängt von der Qualität der Last ab.

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


1

Dieses System von Smart Energy Groups kann von Interesse sein, es basiert auf Arduino-Hardware und so weiter.



0

Ich habe ausgiebig daran gearbeitet, mit dem ESP8266 (mit Arduino IDE) und verschiedenen ADCs und dedizierten Energieüberwachungs-DSPs ( ATM90E26 und ADE7763 ) webbasierte Energiemonitore zu erstellen .

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

Der oben abgebildete Code für die Verwendung des 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 werden. Lösungen mit höherer Genauigkeit müssen 240 V direkt abtasten (unter Verwendung einer Spannungsteilerleiter und eines Nebenschlusswiderstands) und zusätzliche Konstruktionsüberlegungen erfordern, um Probleme zu lösen, die sich aus dem Arbeiten 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.
Dave Tweed

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 nach der Beantwortung nie zurückgekommen ist.
Dave Tweed

Ich habe Schaltpläne einer vorgeschlagenen Lösung hinzugefügt. Die Hardware, um dies auf einfache Weise zu tun, gab es vor 5 Jahren noch nicht. Dies ist jetzt auf die Verbreitung von WLAN-fähigen SoCs zurückzuführen.
Whatnick

1
@ Dave Tweed, wen interessiert das OP? Der springende Punkt von SE ist, für die gesamte Community nützlich zu sein, und Whatnicks Beitrag fügte einen neuen Weg hinzu, um das Problem zu lösen (auch ohne die hinzugefügten Schaltpläne).
Sredni Vashtar
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.