아두 이노 파워 미터


11

파워 미터를 만들고 arduino를 사용하여 정보를 기록하고 웹으로 보냅니다. 파워 미터에 대한 쉬운 해결책이 있습니까? 나는 아르헨티나에 살고 있으며 전력선은 220V입니다. 감사


흥미로운 질문입니다. 미터에 대한 어떤 기대가 있습니까? 얼마나 정확해야하고 예산은 얼마입니까? 나는 어떤 사람들이 전선에 전류 측정 클램프를 사용하여 그것을했는지 알고 있습니다. 브레이크 아웃 박스 근처에 각 전선이 노출되어 측정 할 수 있습니까? 단상 또는 삼상 전원 공급 장치가 있습니까? 최대한 많은 정보를 제공하십시오.
AndrejaKo

답변:


10

Tweet-a-Watt 를 확인하여 220V 전원 라인과 작동 하는지 확인할 수 있습니다 . 이 프로젝트는 최소한 시작하는 방법에 대한 아이디어를 제공해야합니다.


흥미로운 해커 리쉬.
Kellenjb

왜 이미 무슨 짓을 한거야? 그것은 그것을하는 방법을 배우는 명확한 길을 제공하고, 더 배우면, 더 잘하는 방법 / 더 많은 것을하는 방법을 제공합니다.
Nick T

4

3

정확한 파워 미터를 만드는 것은 쉬운 일이 아닙니다. 전압과 전류를 충분한 정확도와 속도로 감지하여 이들 사이의 위상차 (역률)를 감지하고 실제 및 피상 전력을 계산할 수있는 방법이 필요합니다. 당신은 이것을 위해 거의 DSP를 원할 것입니다.

기초적인 파워 미터를 생성하는 것은 무효 전력을 무시하고 고속으로 샘플링해야 할 필요성을 무시하고 전압 및 전류를 감지하고 DC 평균화하여 수행 할 수 있습니다. 정확도는로드 품질에 따라 다릅니다.

Arduino와 함께 사용할 수있는 Microchip MCP3909 와 같이 전력 계량을 위해 특별히 시장에 출시 된 IC 가 있습니다.


1

Smart Energy Groups 의이 시스템 은 흥미로울 수 있으며 Arduino 하드웨어 등을 기반으로합니다.



0

ESP8266 (Arduino IDE 포함)과 다양한 ADC 및 전용 에너지 모니터링 DSP ( ATM90E26ADE7763 )를 사용하여 웹 연결 에너지 모니터를 광범위하게 구축하고 있습니다 .

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

EE.SE에 오신 것을 환영합니다! 안타깝게도 이는 질문에 대한 간접적 인 답변 인 것으로 보이며 대부분 웹 사이트로의 트래픽을 유도하기위한 것으로, 여기에서는 허용되지 않는 스팸 형태입니다.
Dave Tweed

좋아, 당신은 링크를 제거했습니다. 그러나 OP는 소프트웨어가 아닌 문제의 하드웨어 측면에 대해 더 많은 것을 요구하는 것 같습니다. 또한이 질문은 5 살짜리 질문이며 OP를 요청한 후에는 다시 돌아 오지 않았습니다.
Dave Tweed

제안 된 솔루션의 회로도를 추가했습니다. 쉬운 방법으로이 작업을 수행하는 하드웨어는 5 년 전에 존재하지 않았습니다. Wi-Fi 지원 SoC의 확산으로 인해 이제 발생합니다.
whatnick

1
@ 데이브 트위드, 누가 OP에 관심이 있습니까? SE의 요점은 전체 커뮤니티에 유용하고 whatnick의 게시물은 문제를 해결하는 새로운 방법을 추가했습니다 (추가 된 회로도없이).
Sredni Vashtar
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.