Misuratore di potenza Arduino


11

Voglio creare un misuratore di potenza e utilizzare Arduino per registrare le informazioni e inviarle al Web. Esiste una soluzione semplice al misuratore di potenza? Vivo in Argentina e la linea elettrica è a 220V. Grazie


Domanda interessante. Che aspettativa hai del contatore? Quanto dovrebbe essere accurato e qual è il tuo budget? So che alcune persone lo hanno fatto usando dei morsetti di misurazione della corrente sui cavi. Hai ogni cavo di alimentazione esposto vicino al breakout box in modo da poterlo misurare? Avete un alimentatore monofase o trifase? Si prega di fornire quante più informazioni possibili.
AndrejaKo

Risposte:


10

Puoi controllare Tweet-a-Watt e vedere se funzionerà con la tua linea di alimentazione 220V. Quel progetto dovrebbe almeno darti un'idea di come iniziare.


Molto hacker, interessante.
Kellenjb,

Perché perché cosa è già stato fatto? Fornisce un percorso chiaro per imparare come farlo e, se impari di più, come farlo meglio / fare di più.
Nick T

4

3

Creare un misuratore di potenza accurato non è un compito banale. È necessario un modo per rilevare la tensione e la corrente con sufficiente precisione e velocità da poter rilevare le differenze di fase tra loro (fattore di potenza) e calcolare la potenza reale e apparente. Avresti quasi bisogno di un DSP per questo.

La creazione di un misuratore di potenza rudimentale può essere effettuata rilevando e DC calcolando la media della tensione e della corrente, ignorando la potenza reattiva e la necessità di campionare ad alta velocità. La precisione varia in funzione della qualità del carico.

Esistono sul mercato circuiti integrati specifici per la misurazione della potenza, come il Microchip MCP3909 che potresti essere in grado di utilizzare con il tuo Arduino.


1

Questo sistema di Smart Energy Groups può essere interessante, è basato sull'hardware Arduino e così via.



0

Ho lavorato ampiamente alla costruzione di monitor di energia connessi al web utilizzando ESP8266 (con Arduino IDE) e vari ADC e DSP dedicati al monitoraggio dell'energia ( ATM90E26 e ADE7763 ).

Di seguito è mostrato il diagramma fritzing di NodeMCU compatibile con Arduino compatibile con ADC + Wifi: inserisci qui la descrizione dell'immagine

Il codice per l'utilizzo del monitor energetico ESP8266 illustrato sopra è qui. Si prega di notare che questa è una soluzione semplice da implementare a bassa precisione che campiona la tensione usando un trasformatore e la corrente usando un CT. Le soluzioni di maggiore precisione devono campionare direttamente 240 V (utilizzando una scala divisoria di tensione e un resistore di shunt) e richiedere ulteriori considerazioni di progettazione per gestire i problemi derivanti dal lavoro con alte tensioni.

/*


*  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);  
}

Benvenuto in EE.SE! Sfortunatamente, questa sembra essere nel migliore dei casi una risposta indiretta alla domanda ed è principalmente destinata a indirizzare il traffico verso i tuoi siti Web, che è una forma di spam non consentita qui.
Dave Tweed

OK, hai rimosso i collegamenti. Tuttavia, l'OP sembra chiedere di più sul lato hardware del problema, non sul software. Inoltre, tieni presente che questa è una domanda di 5 anni e il PO non è più tornato dopo averlo posto.
Dave Tweed

Ho aggiunto gli schemi di una soluzione proposta. L'hardware per farlo in modo semplice non esisteva 5 anni fa. Ora lo fa a causa della proliferazione di SoC WiFi.
whatnick

1
@Dave Tweed, a chi importa dell'OP? L'intero punto di SE deve essere utile a tutta la comunità e il post di whatnick ha aggiunto un nuovo modo di risolvere il problema (anche senza gli schemi aggiunti).
Sredni Vashtar,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.