เครื่องวัดกำลัง Arduino


11

ฉันต้องการสร้างมิเตอร์ไฟฟ้าและใช้ Arduino เพื่อบันทึกข้อมูลและส่งไปยังเว็บ มีวิธีแก้ปัญหาง่าย ๆ สำหรับเครื่องวัดกำลังงานหรือไม่? ฉันอาศัยอยู่ในอาร์เจนตินาและสายไฟคือ 220V ขอบคุณ


คำถามที่น่าสนใจ คุณมีความคาดหวังอะไรของมิเตอร์? มันแม่นยำแค่ไหนและงบประมาณของคุณเป็นเท่าไหร่? ฉันรู้ว่าบางคนทำโดยใช้ที่หนีบสายไฟ คุณมีสายไฟแต่ละเส้นอยู่ใกล้กับกล่องฝ่าวงล้อมเพื่อให้คุณสามารถวัดได้หรือไม่? คุณมีแหล่งจ่ายไฟเดี่ยวหรือสามเฟสหรือไม่? โปรดให้ข้อมูลมากที่สุดเท่าที่จะทำได้
AndrejaKo

คำตอบ:


10

คุณอาจตรวจสอบTweet-a-Wattและดูว่ามันจะทำงานกับสายไฟ 220V ของคุณหรือไม่ อย่างน้อยโครงการนั้นควรให้แนวคิดในการเริ่มต้นกับคุณ


น่ารำคาญมากน่าสนใจ
Kellenjb

เพราะเหตุใดสิ่งที่ทำไปแล้ว มันมีเส้นทางที่ชัดเจนในการเรียนรู้วิธีการทำและถ้าคุณเรียนรู้เพิ่มเติมวิธีการทำได้ดีขึ้น / ทำมากขึ้น
Nick T

4

3

การสร้างตัววัดพลังงานที่แม่นยำไม่ใช่งานที่สำคัญ คุณต้องการวิธีการตรวจจับแรงดันและกระแสไฟฟ้าด้วยความแม่นยำและความเร็วที่เพียงพอซึ่งคุณสามารถตรวจจับความแตกต่างของเฟสระหว่างปัจจัยเหล่านี้ (ตัวประกอบกำลังไฟฟ้า) และคำนวณกำลังที่แท้จริงและชัดเจน คุณเกือบจะต้องการ DSP สำหรับสิ่งนี้

การสร้างเครื่องวัดพลังงานเบื้องต้นสามารถทำได้โดยการตรวจจับและ DC เฉลี่ยแรงดันและกระแสไฟฟ้าโดยไม่สนใจพลังงานปฏิกิริยาและความต้องการตัวอย่างด้วยความเร็วสูง ความแม่นยำจะแตกต่างกันไปตามหน้าที่ของคุณภาพของโหลด

มีไอซีในตลาดโดยเฉพาะสำหรับการวัดพลังงานเช่นMicrochip MCP3909ซึ่งคุณอาจใช้กับ Arduino ของคุณได้




0

ฉันทำงานอย่างกว้างขวางในการสร้างเครื่องวัดพลังงานที่เชื่อมต่อกับเว็บโดยใช้ ESP8266 (กับ Arduino IDE) และ ADC หลายเครื่องและการตรวจสอบพลังงานเฉพาะของ DSP ( ATM90E26และADE7763 )

แผนภาพFritzingของ ADC + Wifi พื้นฐานที่รองรับ Arduino NodeMCU ที่แสดงด้านล่าง: ป้อนคำอธิบายรูปภาพที่นี่

รหัสสำหรับการใช้ ESP8266 การตรวจสอบพลังงานที่แสดงด้านบนอยู่ที่นี่ โปรดทราบว่านี่เป็นความแม่นยำต่ำที่ง่ายต่อการปรับใช้โซลูชันการสุ่มตัวอย่างแรงดันไฟฟ้าโดยใช้หม้อแปลงและกระแสโดยใช้ CT โซลูชันความแม่นยำที่สูงขึ้นจำเป็นต้องมีตัวอย่าง 240V โดยตรง (โดยใช้ตัวแบ่งแรงดันไฟฟ้าและตัวต้านทาน shunt) และต้องการการพิจารณาการออกแบบเพิ่มเติมเพื่อจัดการกับปัญหาที่เกิดขึ้นจากการทำงานกับแรงดันไฟฟ้าสูง

/*


*  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 ปีที่แล้ว มันทำตอนนี้เนื่องจากการแพร่กระจายของ WiFi ที่มีความสามารถของ SoC
whatnick

1
@Dave ทวีดใครสนใจ OP? จุดรวมของ SE จะเป็นประโยชน์ต่อชุมชนทั้งหมดและโพสต์ของ whatnick ได้เพิ่มวิธีการใหม่ในการแก้ปัญหา (แม้ไม่มีแผนผังเพิ่ม)
Sredni Vashtar
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.