Đồng hồ đo điện Arduino


11

Tôi muốn tạo một đồng hồ đo điện và sử dụng arduino để ghi thông tin và gửi lên web. Có bất kỳ giải pháp dễ dàng cho đồng hồ điện? Tôi sống ở Argentina và đường dây điện là 220v. Cảm ơn


Câu hỏi thú vị. Bạn kỳ vọng gì về đồng hồ? Nó chính xác đến mức nào và ngân sách của bạn là bao nhiêu? Tôi biết một số người đã làm nó bằng cách sử dụng kẹp đo hiện tại trên dây. Bạn có từng dây điện tiếp xúc gần hộp đột phá để bạn có thể đo nó không? Bạn có nguồn điện một pha hay ba pha? Vui lòng cung cấp càng nhiều thông tin càng tốt.
AndrejaKo

Câu trả lời:


10

Bạn có thể kiểm tra Tweet-a-Watt và xem liệu nó có hoạt động với đường dây điện 220 V của bạn không. Dự án đó ít nhất nên cung cấp cho bạn một ý tưởng về cách bắt đầu.


Rất Hackerish, thú vị.
Kellenjb

Bởi vì tại sao những gì đã được thực hiện? Nó cung cấp một đường dẫn rõ ràng để tìm hiểu làm thế nào để làm điều đó, và nếu bạn học được nhiều hơn, làm thế nào để làm nó tốt hơn / làm nhiều hơn nữa.
Nick T

4

3

Tạo một đồng hồ đo điện chính xác không phải là một nhiệm vụ tầm thường. Bạn cần một cách cảm nhận điện áp và dòng điện với độ chính xác và tốc độ đủ để bạn có thể phát hiện sự lệch pha giữa chúng (hệ số công suất) và tính toán công suất thực và biểu kiến. Bạn gần như muốn có một DSP cho việc này.

Tạo một đồng hồ đo công suất thô sơ có thể được thực hiện bằng cách cảm nhận và DC lấy trung bình điện áp và dòng điện, bỏ qua công suất phản kháng và nhu cầu lấy mẫu ở tốc độ cao. Độ chính xác sẽ thay đổi như một chức năng của chất lượng của tải.

Có các IC trên thị trường dành riêng cho đo năng lượng, như Microchip MCP3909 mà bạn có thể sử dụng với Arduino của mình.




0

Tôi đã và đang làm việc rộng rãi để xây dựng các Màn hình năng lượng được kết nối web bằng cách sử dụng ESP8266 (với Arduino IDE) và các DSP theo dõi năng lượng chuyên dụng và khác nhau của ADC ( ATM90E26ADE7763 ).

Sơ đồ Fritzing cơ bản của ADC + Wifi hỗ trợ NodeMCU tương thích với Arduino được hiển thị bên dưới: nhập mô tả hình ảnh ở đây

Mã để sử dụng màn hình năng lượng ESP8266 được minh họa ở trên là ở đây. Xin lưu ý rằng đây là một đơn giản có độ chính xác thấp để thực hiện giải pháp lấy mẫu điện áp bằng máy biến áp và dòng điện sử dụng CT. Các giải pháp độ chính xác cao hơn cần lấy mẫu trực tiếp 240V (sử dụng thang chia điện áp và điện trở shunt) và yêu cầu xem xét thiết kế bổ sung để xử lý các vấn đề phát sinh khi làm việc với điện áp cao.

/*


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

Chào mừng đến với EE.SE! Thật không may, đây dường như là một câu trả lời gián tiếp cho câu hỏi và chủ yếu nhằm mục đích hướng lưu lượng truy cập đến trang web của bạn, đây là một dạng thư rác không được phép ở đây.
Dave Tweed

OK, bạn đã xóa các liên kết. Tuy nhiên, OP dường như đang hỏi nhiều hơn về khía cạnh phần cứng của vấn đề chứ không phải phần mềm. Ngoài ra, hãy lưu ý rằng đây là câu hỏi 5 năm và OP không bao giờ quay lại sau khi hỏi nó.
Dave Tweed

Tôi đã thêm sơ đồ của một giải pháp đề xuất. Phần cứng để làm điều này một cách dễ dàng đã không tồn tại 5 năm trước. Hiện tại nó đã phát triển do SoC có khả năng phát tán wifi.
whatnick

1
@Dave Tweed, Ai quan tâm đến OP? Toàn bộ quan điểm của SE là hữu ích cho toàn bộ cộng đồng và bài đăng của whatnick đã thêm một cách mới để giải quyết vấn đề (ngay cả khi không có sơ đồ bổ sung).
Sredni Vashtar
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.