파워 미터를 만들고 arduino를 사용하여 정보를 기록하고 웹으로 보냅니다. 파워 미터에 대한 쉬운 해결책이 있습니까? 나는 아르헨티나에 살고 있으며 전력선은 220V입니다. 감사
파워 미터를 만들고 arduino를 사용하여 정보를 기록하고 웹으로 보냅니다. 파워 미터에 대한 쉬운 해결책이 있습니까? 나는 아르헨티나에 살고 있으며 전력선은 220V입니다. 감사
답변:
Tweet-a-Watt 를 확인하여 220V 전원 라인과 작동 하는지 확인할 수 있습니다 . 이 프로젝트는 최소한 시작하는 방법에 대한 아이디어를 제공해야합니다.
다음 프로젝트를 살펴보십시오.
충분히? ;-)
정확한 파워 미터를 만드는 것은 쉬운 일이 아닙니다. 전압과 전류를 충분한 정확도와 속도로 감지하여 이들 사이의 위상차 (역률)를 감지하고 실제 및 피상 전력을 계산할 수있는 방법이 필요합니다. 당신은 이것을 위해 거의 DSP를 원할 것입니다.
기초적인 파워 미터를 생성하는 것은 무효 전력을 무시하고 고속으로 샘플링해야 할 필요성을 무시하고 전압 및 전류를 감지하고 DC 평균화하여 수행 할 수 있습니다. 정확도는로드 품질에 따라 다릅니다.
Arduino와 함께 사용할 수있는 Microchip MCP3909 와 같이 전력 계량을 위해 특별히 시장에 출시 된 IC 가 있습니다.
Smart Energy Groups 의이 시스템 은 흥미로울 수 있으며 Arduino 하드웨어 등을 기반으로합니다.
Arduino 보드와 함께 HALL 효과 센서 (10-30e?)를 사용할 수 있습니다 .
ESP8266 (Arduino IDE 포함)과 다양한 ADC 및 전용 에너지 모니터링 DSP ( ATM90E26 및 ADE7763 )를 사용하여 웹 연결 에너지 모니터를 광범위하게 구축하고 있습니다 .
Fritzing 기본 ADC + 와이파이의 그림은 아래와 같습니다 아두 이노 호환 NodeMCU을 사용할 수 :
위에서 설명한 ESP8266 에너지 모니터 사용 코드는 다음과 같습니다. 이것은 변압기를 사용하여 전압을, CT를 사용하여 전류를 샘플링하는 솔루션을 구현하기 위해 정확도가 낮은 간단한 것입니다. 보다 높은 정확도의 솔루션은 240V를 직접 샘플링해야하며 (분압기 래더 및 션트 저항을 사용하여) 고전압으로 인한 문제를 처리하기 위해 추가 설계 고려 사항이 필요합니다.
/*
* 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);
}