Pengukur daya Arduino


11

Saya ingin membuat pengukur daya dan menggunakan Arduino untuk mencatat info dan mengirim ke web. Apakah ada solusi mudah untuk meteran listrik? Saya tinggal di Argentina dan saluran listriknya 220V. Terima kasih


Pertanyaan menarik. Apa harapan Anda tentang meter? Seberapa akurat seharusnya dan berapa anggaran Anda? Saya tahu beberapa orang melakukannya menggunakan klem pengukur saat ini pada kabel. Apakah Anda memiliki setiap kabel daya yang terbuka di dekat kotak pelarian sehingga Anda dapat mengukurnya? Apakah Anda memiliki catu daya tunggal atau tiga fase? Harap berikan informasi sebanyak mungkin.
AndrejaKo

Jawaban:


10

Anda mungkin memeriksa Tweet-a-Watt dan melihat apakah itu akan berfungsi dengan saluran listrik 220V Anda. Proyek itu setidaknya harus memberi Anda ide tentang cara memulai.


Sangat Hacker, menarik.
Kellenjb

Karena mengapa apa yang sudah dilakukan? Ini memberikan jalan yang jelas untuk belajar bagaimana melakukannya, dan jika Anda belajar lebih banyak, bagaimana melakukannya dengan lebih baik / berbuat lebih banyak.
Nick T

4

3

Membuat pengukur daya yang akurat bukanlah tugas yang sepele. Anda memerlukan cara merasakan tegangan dan arus dengan akurasi dan kecepatan yang cukup sehingga Anda dapat mendeteksi perbedaan fasa di antara mereka (faktor daya) dan menghitung daya nyata dan nyata. Anda hampir menginginkan DSP untuk ini.

Membuat meteran listrik yang belum sempurna dapat dilakukan dengan merasakan dan DC rata-rata tegangan dan arus, mengabaikan daya reaktif dan kebutuhan untuk sampel pada kecepatan tinggi. Akurasi akan bervariasi sebagai fungsi dari kualitas beban.

Ada IC di pasaran khusus untuk pengukuran daya, seperti Microchip MCP3909 yang mungkin dapat Anda gunakan dengan Arduino Anda.


1

Sistem ini dari Smart Energy Groups mungkin menarik, didasarkan pada perangkat keras Arduino dan sebagainya.



0

Saya telah bekerja secara luas membangun Monitor Energi yang terhubung dengan web menggunakan ESP8266 (dengan Arduino IDE) dan berbagai DSC dan DSC pemantauan Energi khusus ( ATM90E26 dan ADE7763 ).

Diagram fritzing dari ADC + Wifi diaktifkan NodeMCU yang kompatibel dengan Arduino ditampilkan di bawah ini: masukkan deskripsi gambar di sini

Kode untuk menggunakan monitor Energi ESP8266 yang diilustrasikan di atas ada di sini. Harap dicatat bahwa ini adalah akurasi rendah yang sederhana untuk mengimplementasikan solusi pengambilan sampel tegangan menggunakan transformator dan arus menggunakan CT. Solusi dengan akurasi yang lebih tinggi perlu mengambil sampel 240V secara langsung (menggunakan tangga pembagi tegangan dan shunt resistor) dan memerlukan pertimbangan desain tambahan untuk menangani masalah yang timbul akibat bekerja dengan tegangan tinggi.

/*


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

Selamat datang di EE.SE! Sayangnya, ini tampaknya merupakan jawaban terbaik untuk pertanyaan tidak langsung, dan sebagian besar ditujukan untuk mengarahkan lalu lintas ke situs web Anda, yang merupakan bentuk spam yang tidak diizinkan di sini.
Dave Tweed

Oke, Anda sudah menghapus tautannya. Namun, OP tampaknya bertanya lebih banyak tentang sisi hardware dari masalahnya, bukan pada perangkat lunaknya. Perlu diketahui juga bahwa ini adalah pertanyaan berusia 5 tahun, dan OP tidak pernah kembali setelah menanyakannya.
Dave Tweed

Saya telah menambahkan skema solusi yang diusulkan. Perangkat keras untuk melakukan ini dengan cara yang mudah tidak ada 5 tahun yang lalu. Itu sekarang karena proliferasi SoC wifi mampu.
whatnick

1
@ Dave Tweed, Siapa yang peduli dengan OP? Inti dari SE adalah untuk berguna bagi seluruh komunitas, dan postingan whatnick menambahkan cara baru untuk menyelesaikan masalah (bahkan tanpa skema tambahan).
Sredni Vashtar
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.