Arduino güç ölçer


11

Bir güç ölçer oluşturmak ve bilgileri günlüğe kaydetmek ve web'e göndermek için arduino kullanmak istiyorum. Enerji analizörüne kolay bir çözüm var mı? Arjantin'de yaşıyorum ve elektrik hattı 220V. Teşekkürler


İlginç soru. Sayaçtan ne bekliyorsunuz? Ne kadar doğru olmalı ve bütçeniz nedir? Bazı insanların bunu teller üzerindeki akım ölçüm kelepçelerini kullanarak yaptığını biliyorum. Her güç kablosunun kesme kutusunun yanında açıkta kalmasını sağlayın, böylece ölçebilirsiniz? Tek veya üç fazlı güç kaynağınız var mı? Lütfen olabildiğince fazla bilgi verin.
Ocak

Yanıtlar:


10

Tweet-a-Watt'a göz atabilir ve 220V güç hattınızla çalışıp çalışmayacağını görebilirsiniz. Bu proje en azından nasıl başlayacağınız hakkında bir fikir vermelidir.


Çok Hackerish, ilginç.
Kellenjb

Çünkü neden zaten yapılmış? Nasıl yapılacağını öğrenmek için açık bir yol sağlar ve daha fazla öğrenirseniz, nasıl daha iyi / daha iyi yapılacağını öğrenin.
Nick T

4

3

Doğru bir güç ölçer oluşturmak önemsiz bir iş değildir. Gerilim ve akımı, aralarındaki faz farklarını (güç faktörü) tespit edebileceğiniz ve gerçek ve görünen gücü hesaplayabileceğiniz yeterli doğruluk ve hız ile algılamanın bir yoluna ihtiyacınız vardır. Bunun için neredeyse bir DSP istersiniz.

Temel bir güç ölçer oluşturmak, reaktif gücü ve yüksek hızlarda örnekleme ihtiyacını göz ardı ederek voltaj ve akımın ortalamasını algılayarak ve DC ile yapılabilir. Doğruluk, yükün kalitesinin bir fonksiyonu olarak değişecektir.

Arduino'nuzla kullanabileceğiniz Microchip MCP3909 gibi piyasada özellikle güç ölçümü için IC'ler var .




0

ESP8266 (Arduino IDE ile) ve çeşitli ADC'ler ve özel Enerji izleme DSP'lerini ( ATM90E26 ) kullanarak web bağlantılı Enerji Monitörleri oluşturmak için yoğun olarak çalışıyorum. ve ve ADE7763 ) .

FritzingTemel ADC + Wifi özellikli Arduino uyumlu NodeMCU'nun şeması aşağıda gösterilmiştir: resim açıklamasını buraya girin

Yukarıda gösterilen ESP8266 Enerji monitörünü kullanma kodu burada. Bunun, trafo ve akım trafosu kullanarak akım örneklemesi yapan düşük doğrulukta basit bir çözüm olduğunu unutmayın. Daha yüksek doğruluk çözümlerinin doğrudan 240V örneklemesi (bir voltaj bölücü merdiveni ve şönt direnç kullanarak) ve yüksek voltajlarla çalışmaktan kaynaklanan sorunların üstesinden gelmek için ek tasarım hususları gerekir.

/*


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

EE.SE'ye Hoşgeldiniz! Ne yazık ki, bu en iyi soruya dolaylı bir cevap gibi görünüyor ve çoğunlukla web sitelerinize trafik çekmek için tasarlanmıştır, bu da burada izin verilmeyen bir spam türüdür.
Dave Tweed

Tamam, bağlantıları kaldırdınız. Ancak, OP yazılımın değil sorunun donanım tarafı hakkında daha fazla soru soruyor gibi görünüyor. Ayrıca, bunun 5 yaşında bir soru olduğunu ve OP'nin bunu sorduktan sonra asla geri gelmediğini unutmayın.
Dave Tweed

Önerilen bir çözümün şemalarını ekledim. Bunu kolay bir şekilde yapacak donanım 5 yıl önce yoktu. Şimdi wifi yetenekli SoC'lerin çoğalması nedeniyle.
whatnick

1
@ Tweed, OP'yi kim önemsiyor? SE'nin tüm amacı, tüm topluluk için faydalı olmaktır ve whatnick'in gönderisi, sorunu çözmek için yeni bir yol ekledi (eklenen şemalar olmasa bile).
Sredni Vashtar
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.