Capteur de puissance Arduino


11

Je veux créer un wattmètre et utiliser Arduino pour enregistrer les informations et les envoyer sur le Web. Existe-t-il une solution simple au wattmètre? J'habite en Argentine et la ligne électrique est de 220V. Merci


Question interessante. Qu'attendez-vous du compteur? Quelle doit être sa précision et quel est votre budget? Je sais que certaines personnes l'ont fait en utilisant des pinces de mesure de courant sur des fils. Avez-vous chaque fil d'alimentation exposé près de la boîte de dérivation afin que vous puissiez le mesurer? Avez-vous une alimentation monophasée ou triphasée? Veuillez fournir autant d'informations que possible.
AndrejaKo

Réponses:


10

Vous pouvez vérifier Tweet-a-Watt et voir si cela fonctionnera avec votre ligne électrique 220V. Ce projet devrait au moins vous donner une idée de la façon de commencer.


Très hackerish, intéressant.
Kellenjb

Parce que pourquoi faire ce qui a déjà été fait? Il fournit un chemin clair pour apprendre à le faire, et si vous en apprenez plus, comment le faire mieux / faire plus.
Nick T

4

3

La création d'un wattmètre précis n'est pas une tâche triviale. Vous avez besoin d'un moyen de détecter la tension et le courant avec une précision et une vitesse suffisantes pour détecter les différences de phase entre eux (facteur de puissance) et calculer la puissance réelle et apparente. Vous voudriez presque un DSP pour cela.

La création d'un wattmètre rudimentaire peut être effectuée en détectant et en faisant la moyenne CC de la tension et du courant, en ignorant la puissance réactive et la nécessité d'échantillonner à des vitesses élevées. La précision variera en fonction de la qualité de la charge.

Il existe des circuits intégrés sur le marché spécifiquement pour la mesure de puissance, comme le Microchip MCP3909 que vous pourrez peut-être utiliser avec votre Arduino.


1

Ce système de Smart Energy Groups peut être intéressant, il est basé sur du matériel Arduino et ainsi de suite.



0

J'ai beaucoup travaillé à la création de moniteurs d'énergie connectés au Web en utilisant l'ESP8266 (avec Arduino IDE) et divers ADC et DSP de surveillance de l'énergie dédiés ( ATM90E26 et ADE7763 ).

Le diagramme de Fritzing du NodeMCU compatible Arduino compatible ADC + Wifi de base est illustré ci-dessous: entrez la description de l'image ici

Le code d'utilisation du moniteur d'énergie ESP8266 illustré ci-dessus est ici. Veuillez noter qu'il s'agit d'une solution de faible précision simple à implémenter d'échantillonnage de la tension à l'aide d'un transformateur et du courant à l'aide d'un TC. Les solutions de plus grande précision doivent échantillonner 240 V directement (en utilisant une échelle de diviseur de tension et une résistance de shunt) et nécessitent des considérations de conception supplémentaires pour gérer les problèmes résultant du travail avec des tensions élevé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);  
}

Bienvenue à EE.SE! Malheureusement, cela semble être au mieux une réponse indirecte à la question, et est principalement destiné à générer du trafic vers vos sites Web, qui est une forme de spam non autorisée ici.
Dave Tweed

OK, vous avez supprimé les liens. Cependant, l'OP semble demander plus sur le côté matériel du problème, pas sur le logiciel. Sachez également qu'il s'agit d'une question vieille de 5 ans et que le PO n'est jamais revenu après l'avoir posée.
Dave Tweed

J'ai ajouté des schémas d'une solution proposée. Le matériel pour le faire facilement n'existait pas il y a 5 ans. Il le fait maintenant en raison de la prolifération des SoC compatibles wifi.
Whatnick

1
@Dave Tweed, Qui se soucie de l'OP? L'intérêt de SE est d'être utile à toute la communauté, et le post de whatnick a ajouté une nouvelle façon de résoudre le problème (même sans les schémas ajoutés).
Sredni Vashtar
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.