Ардуино измеритель мощности

11

Я хочу создать измеритель мощности и использовать arduino для регистрации информации и отправки в Интернет. Есть ли простое решение для измерителя мощности? Я живу в Аргентине, и линия электропередачи 220V. Спасибо

Mariano
источник
Интересный вопрос. Какие ожидания у вас от метра? Насколько точным должно быть и каков ваш бюджет? Я знаю, что некоторые люди делали это с помощью токовых зажимов на проводах. Каждый ли провод питания выставлен рядом с распределительной коробкой, чтобы вы могли его измерить? У вас есть одно или трехфазный источник питания? Пожалуйста, предоставьте как можно больше информации.
AndrejaKo

Ответы:

10

Вы можете проверить Tweet-a-Watt и посмотреть, будет ли он работать с вашей линией питания 220 В. Этот проект должен, по крайней мере, дать вам представление о том, как начать.

Билл Ящерица
источник
Очень хакерский, интересный.
Kellenjb
Потому что зачем делать то, что уже сделано? Это обеспечивает четкий путь, чтобы узнать, как это сделать, и если вы узнаете больше, как это сделать лучше / сделать больше.
Ник Т
4

Взгляните на эти проекты:

  1. http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1258971285/all
  2. http://pwrusage.codeplex.com
  3. http://www.cerebralmeltdown.com/programming_projects/Arduino_Kilowatt_Meter/index.html
  4. http://www.alexgirard.com/2009/03/05/powermeter-more-info/
  5. http://jarv.org/pwrmon.shtml
  6. http://openenergymonitor.org/emon/node/58
  7. http://openenergymonitor.org/emon/node/27
  8. http://openenergymonitor.org/emon/node/79
  9. http://www.billporter.info/not-so-tiny-power-meter/

Довольно? ;-)

Avra
источник
3

Создание точного измерителя мощности не является тривиальной задачей. Вам нужен способ измерения напряжения и тока с достаточной точностью и скоростью, чтобы вы могли обнаружить разность фаз между ними (коэффициент мощности) и рассчитать реальную и кажущуюся мощность. Вы бы почти хотели DSP для этого.

Создание элементарного измерителя мощности может быть выполнено путем измерения и усреднения постоянного тока по напряжению и току, игнорирования реактивной мощности и необходимости отбора образцов на высоких скоростях. Точность будет зависеть от качества нагрузки.

На рынке существуют специальные микросхемы для измерения мощности, например, Microchip MCP3909, который вы можете использовать с Arduino.

Адам Лоуренс
источник
1

Эта система от Smart Energy Groups может представлять интерес, она основана на оборудовании Arduino и так далее.


источник
0

Я активно работал над созданием мониторов энергии, подключенных к сети, используя ESP8266 (с Arduino IDE) и различные АЦП и выделенные ЦСП для мониторинга энергии ( ATM90E26 и ADE7763 ).

Диаграмма фризинга базового ADC + Wifi с поддержкой Arduino NodeMCU показана ниже: введите описание изображения здесь

Код для использования ESP8266 Energy Monitor, показанный выше, здесь. Обратите внимание, что это простое в применении решение с низкой точностью, позволяющее измерять напряжение с помощью трансформатора, а ток - с помощью ТТ. Решения с более высокой точностью требуют непосредственного опроса 240 В (с использованием лестницы делителя напряжения и шунтирующего резистора) и требуют дополнительных конструктивных решений для решения проблем, возникающих при работе с высоким напряжением.

/*


*  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);  
}
whatnick
источник
Добро пожаловать в EE.SE! К сожалению, это, в лучшем случае, косвенный ответ на вопрос, и в основном он предназначен для привлечения трафика на ваши сайты, что является формой спама, недопустимого здесь.
Дейв Твид,
ОК, вы удалили ссылки. Тем не менее, OP, кажется, спрашивает больше об аппаратной стороне проблемы, а не о программном обеспечении. Кроме того, имейте в виду, что это 5-летний вопрос, и ФП так и не вернулся после того, как спросил его.
Дейв Твид
Я добавил схемы предложенного решения. Аппаратного обеспечения для этого простым способом не было 5 лет назад. Теперь это происходит из-за распространения SoC с поддержкой Wi-Fi.
Whatnick
1
@ Дэйв Твид, кого волнует ОП? Весь смысл SE состоит в том, чтобы быть полезным для всего сообщества, и сообщение Whatnick добавило новый способ решения проблемы (даже без добавленных схем).
Средний Ваштар