Лічильник потужності Arduino


11

Я хочу створити вимірювач потужності і використовувати arduino для реєстрації інформації та надсилання в Інтернет. Чи є якесь просте рішення лічильника електроенергії? Я живу в Аргентині, а лінія електропередач - 220В. Спасибі


Цікаве запитання. Яке очікування від метра? Наскільки точним він повинен бути і який ваш бюджет? Я знаю, що деякі люди робили це за допомогою поточних вимірювальних затискачів на дротах. Чи є у вас кожен провід живлення поблизу вимикача, щоб його можна було виміряти? У вас є однофазний або трифазний блок живлення? Надайте якомога більше інформації.
AndrejaKo

Відповіді:


10

Ви можете перевірити Tweet-a-Watt і побачити, чи буде він працювати з вашою лінією електроживлення 220В. Цей проект повинен хоча б дати вам уявлення про те, як розпочати роботу.


Дуже хакерський, цікавий.
Kellenjb

Бо навіщо робити те, що вже зроблено? Це забезпечує чіткий шлях до того, як навчитися це робити, і якщо ви дізнаєтесь більше, як зробити це краще / зробити більше.
Нік Т

4

3

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

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

На ринку є ІМС, спеціально для вимірювання електроенергії, як Microchip MCP3909, який ви можете використовувати з Arduino.


1

Ця система від Smart Energy Group може представляти інтерес, вона заснована на апаратному забезпеченні Arduino тощо.



0

Я широко працював над створенням підключених до Інтернету енергомоніторів, використовуючи ESP8266 (з Arduino IDE), а також різні АЦП та спеціалізовані ЦОП енергомоніторингу ( ATM90E26 та ADE7763 ).

Схема фризингу базового ADC + Wifi з підтримкою Arduino, сумісного з NodeMCU, показана нижче: введіть тут опис зображення

Код для використання монітора енергії ESP8266, проілюстрований вище, тут. Зверніть увагу, що це невисока точність простої реалізації рішення відбору проб напруги за допомогою трансформатора і струму за допомогою КТ. Рішення з більш високою точністю повинні пробувати 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);  
}

Ласкаво просимо на EE.SE! На жаль, це, мабуть, є в кращому випадку непрямою відповіддю на питання, і в основному призначене для залучення трафіку на ваші веб-сайти, що є формою спаму, яку тут не дозволено.
Дейв Твід

Гаразд, ви видалили посилання. Однак ОП, здається, запитує більше про апаратну сторону проблеми, а не про програмне забезпечення. Також майте на увазі, що це питання 5-річної давності, і ОП так і не повернулося після того, як його задали.
Дейв Твід

Я додав схеми запропонованого рішення. Апаратних засобів, щоб зробити це легко, не існувало 5 років тому. Зараз це відбувається завдяки розповсюдженню Wi-Fi, здатного SoC.
whatnick

1
@Dave Tweed, Кого хвилює ОП? Вся суть SE полягає в тому, щоб бути корисною всій спільноті, а повідомлення Whatnick додало новий спосіб вирішення проблеми (навіть без доданих схем).
Середній Ваштар
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.