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
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
Yanıtlar:
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.
Şu projelere bir göz atın:
Yeter? ;-)
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 .
Akıllı Enerji Gruplarından gelen bu sistem ilgi çekici olabilir, Arduino donanımı ve benzeri etrafında kurulmuştur.
Bir kullanabilirsiniz SALONU etkisi sensörü Arduino kurulu ile (10-30e belki?).
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:
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);
}