Isi kandungan:

Monitor Bil Tenaga Anda: 4 Langkah
Monitor Bil Tenaga Anda: 4 Langkah

Video: Monitor Bil Tenaga Anda: 4 Langkah

Video: Monitor Bil Tenaga Anda: 4 Langkah
Video: ВСЯ НОЧЬ С ПОЛТЕРГЕЙСТОМ В ЖИЛОМ ДОМЕ, я заснял жуткую активность. 2024, November
Anonim
Monitor Bil Tenaga Anda
Monitor Bil Tenaga Anda

MENGENAI PROJEK INI

Sekiranya anda benar-benar ingin menjadikan kediaman anda lebih pintar, anda mungkin ingin bermula dari bil bulanan anda (iaitu tenaga, gas, dll.). Seperti yang dikatakan beberapa orang, Bagus untuk Planet, Dompet dan The Bottom Line. Perkakasan sumber terbuka adalah cara kami untuk mencapai kelestarian di persekitaran rumah! Idea ini membawa kami untuk membina penyelesaian yang mudah dan selamat, mudah disatukan dengan mana-mana perisian automasi rumah kerana ia memperlihatkan data melalui MQTT (dalam kes kami, kami akan menunjukkan kepada anda bagaimana mengintegrasikannya ke Pembantu Rumah).

Gambaran keseluruhan

Untuk mengukur penggunaan tenaga elektrik, kami memilih untuk menggunakan Finder Energy Meter, kerana ia dirancang untuk penggunaan rel DIN dan sangat sesuai di kabinet utama rumah kami. Perkara yang menarik mengenai produk ini ialah ia mempunyai antara muka Modbus RS485, protokol komunikasi standard industri yang menjadikan perbincangan dengan Arduino sangat mudah. Sebenarnya, Arduino telah mengeluarkan perisai rasmi, MKR485 dan dua perpustakaan untuk menyahkod protokol. Sebagai papan utama, kami memilih Arduino MKR WiFi 1010, kerana ia berkongsi faktor bentuk MKR dan mempunyai sambungan WiFi.

PersediaanWarning! Periksa peraturan negara anda mengenai menangani sistem elektrik rumah anda dan berhati-hati kerana boleh membawa maut! Sekiranya anda tidak tahu, hubungi juruelektrik. Langkah pertama ialah memasang meter di kabinet elektrik anda. Untuk memastikan anda bekerja di persekitaran yang selamat, matikan kuasa dari terminal elektrik di hadapan sistem anda dan periksa semula dengan multimeter bahawa tidak ada voltan di antara terminal. Kemudian letakkan meter tenaga di dalam kabinet anda dan sambungkan wayar hidup dan neutral dari pemutus utama ke input meter, ingat untuk menggunakan konvensi warna (biru untuk neutral dan coklat / hitam / kelabu untuk hidup di EU). Keluaran mesti disambungkan ke sistem yang lain.

Sambungan voltan utama. Wayar di atas adalah input, wayar di luar adalah output.

Langkah 1: Bahagian Diperlukan

Bahagian Diperlukan
Bahagian Diperlukan

Langkah 2: Keperluan Perisian

Keperluan Perisian
Keperluan Perisian

Perisian

Mulakan komputer anda dan buka IDE anda. Anda boleh menggunakan Arduino IDE atau Arduino Create Editor. Kod ini memenuhi permintaan berikut: Komunikasi modbus, pengurusan WiFi ProtokolMQTT Modbus adalah dan protokol sumber terbuka untuk sensor dan mesin industri. Untuk menjadikan Arduino talk Modbus, kita akan menggunakan perpustakaan Arduino Modbus. Perpustakaan ini mengemas semua pengendali dan membuat penyambungan mana-mana peranti Modbus sangat cepat. Oleh kerana kita akan membaca daftar, mengikuti lembar data meter, kita dapat menemukan semua maklumat yang kita perlukan seperti kod fungsi, alamat daftar dan ukuran daftar dengan kata-kata. Tetapi untuk membuatnya lebih jelas, mari kita jelaskan bagaimana Modbus berfungsi: Mesej modbus mengikuti struktur mudah: 01 03 04 00 16 00 02 25 C7 0x01adalah Alamat Peranti 0x03 adalah Kod Fungsi yang memberitahu peranti jika kita ingin membaca atau menulis data *, dalam hal ini, baca register register 0x04 untuk Byte Count00 16 - Kami menghantar 4 byte alamat daftar (00 16) yang memberitahu peranti apa yang ingin kita baca 00 02- maka ukuran register (00 02) dengan kata-kata (setiap perkataan panjangnya 2 bait) 4 bait terakhir adalah kod CRC. Kod ini dihasilkan dari fungsi matematik berbanding bait sebelumnya, ini memastikan mesej telah diterima dengan betul.

Integrasi Pembantu Rumah Menambah meter ke Pembantu Rumah cukup mudah. Dengan andaian anda mempunyai broker MQTT yang dikonfigurasikan (Inilah panduannya), yang perlu anda lakukan hanyalah menambahkan definisi baru di bawah file config.yaml. sensor: - platform: nama mqtt: "Voltan Utama" state_topic: "energy / main / voltage" unit_of_measurement: "V" Di sini anda harus meletakkan nama pengukuran, topik MQTT untuk dibaca dan unit pengukuran kuantiti. Simpan fail, periksa konfigurasi dan muatkan semula Pembantu Rumah, sekarang pengukuran akan muncul di halaman utama.

Panel penggunaan Pembantu Rumah menunjukkan bacaan semasa

Pembantu Rumah akan mengurus membuat grafik dan mengautomasikan proses yang dicetuskan oleh pembacaan anda. Tutorial ini telah selesai, sekarang terserah anda untuk menambahkan ciri dan menyesuaikannya untuk tujuan anda sendiri!

Langkah 3: Berkumpul

Berkumpul
Berkumpul
Berkumpul
Berkumpul

Selesai? Sudah tiba masanya untuk memasang sambungan RS485! Kami akan menggunakan kabel pasangan tunggal berpintal dengan tanah, biasanya digunakan untuk saluran telefon. Dengan kabel ini, anda boleh menghantar jarak jauh (1.2 km). Namun, kami hanya menggunakan kabel yang cukup lama untuk keluar dari kabinet dan meletakkan Arduino di tempat yang mudah dicapai.

Sambungan RS485 Finder

Antara muka RS485 menamakan terminal A, B dan COM. Piawai de-facto yang biasa adalah penggunaan TX + / RX + atau D + sebagai alternatif untuk B (tinggi untuk MARK iaitu idle), TX- / RX- atau D- sebagai alternatif untuk A (rendah untuk MARK iaitu idle) Sejak Perisai MKR menyokong juga Full Duplex, anda akan melihat dua terminal lain, Y dan Z. Di sini kita akan mengacaukan hujung kabel yang lain kerana kita tahu dari lembaran data bahawa komunikasi half-duplex hanya berlaku pada terminal Y dan Z. Terminal COM mesti disambungkan ke ISOGND. Oleh kerana kita menggunakan sambungan half-duplex dan kerana kabelnya peer-to-peer, kita harus mengatur suis pada pelindung MKR485 agar sesuai dengan persediaan kita: kita menetapkan HALF (2 to off) dan penamatan pada YZ (3 hingga HIDUP); yang pertama tidak menjadi masalah. Penamatan adalah rintangan yang menghubungkan dua terminal data, untuk meredam gangguan.

Inilah dia. Sekarang anda boleh menutup kabinet dan fokus pada bahagian perisian!

Langkah 4: Kod

Kod
Kod

#sertakan

#include #include #include // kelayakan wifi anda const char ssid = "**********"; const char pass = "**********";

Jaringan WiFiClient; Pelanggan pelanggan MQTTC; kadar panjang yang tidak ditandatangani = 60000; // kadar penyegaran lalai dalam ms terakhir tidak ditandatangani lastMillis = 0;

// fungsi sambung batal sambung () {Serial.print ("memeriksa wifi …"); sementara (WiFi.status ()! = WL_CONNECTED) {Serial.print ("."); kelewatan (1000); } Serial.print ("\ nmenghubungkan …"); sementara (! client.connect ("device_name", "user_name", "user_pw")) {// TUKAR UNTUK MENARIK PENYEDIAAN ANDA Serial.print ("."); kelewatan (1000); } Serial.println ("\ nhubungkan!"); pelanggan.subscribe ("energy / main / refreshrate"); // topik untuk menetapkan kadar penyegaran dari jauh} // mqtt menerima fungsi panggilan balik membatalkan mesejDiterima (Rentetan & topik, Rentetan & muatan) {Serial.println ("masuk:" + topik + "-" + muatan); if (topic == "energy / main / refreshrate") {// kadar pengendali kadar penyegaran = muatan.toInt () * 1000; Serial.println ("kadar baru" + Rentetan (kadar)); }}

persediaan tidak sah () {Serial.begin (115200); WiFi.begin (ssid, lulus); sementara (! bersiri); client.begin ("broker_ip", bersih); // TUKAR UNTUK MENARIK PENYELESAIAN ANDA client.onMessage (messageReceived); // mulakan klien Modbus RTU jika (! ModbusRTUClient.begin (9600)) {Serial.println ("Gagal memulakan Modbus RTU Client!"); sementara (1); }}

gelung kosong () {client.loop (); jika (! client.connected ()) {// periksa sambungan rangkaian menyambung (); } // terbitkan mesej setelah penyegaran berlalu (rutin tidak menyekat) jika (milis () - lastMillis> menilai) {lastMillis = millis (); // buat semua panggilan baca mengapung volt = readVoltage (); kelewatan (100); float amp = readCurrent (); kelewatan (100); dua watt = readPower (); kelewatan (100); terapung hz = readFreq (); kelewatan (100); double wh = readEnergy (); // menerbitkan hasil di bawah topik berkaitan client.publish ("energy / main / voltage", String (volt, 3)); client.publish ("tenaga / utama / semasa", Rentetan (amp, 3)); client.publish ("tenaga / utama / kuasa", Rentetan (watt, 3)); client.publish ("tenaga / utama / frekuensi", Rentetan (hz, 3)); client.publish ("tenaga / utama / tenaga", Rentetan (wh, 3)); Serial.print (String (volt, 3) + "V" + String (amp, 3) + "A" + String (watt, 3) + "W"); Serial.println (String (hz, 3) + "Hz" + String (wh, 3) + "kWh"); kelewatan (100); }}

/ * Fungsi untuk membaca register Finder Energy Meter * * Periksa manual protokol modbus untuk memahami kod * https://gfinder.findernet.com/public/attachments/7E/EN/PRT_Modbus_7E_64_68_78_86EN.pdf * / float readVoltage () {float volt = 0.; jika (! ModbusRTUClient.requestFrom (0x01, HOLDING_REGISTERS, 0x000C, 2)) {// buat panggilan ke daftar Serial.print ("gagal membaca voltan!"); Serial.println (ModbusRTUClient.lastError ()); // pengendali ralat} lain {uint16_t word1 = ModbusRTUClient.read (); // baca data dari penyangga uint16_t word2 = ModbusRTUClient.read (); uint32_t millivolt = word1 << 16 | perkataan2; // bit math volt = milivolt / 1000.0; } pulangan volt; } float readCurrent () {float ampere = 0.; jika (! ModbusRTUClient.requestFrom (0x01, HOLDING_REGISTERS, 0x0016, 2)) {Serial.print ("gagal membaca semasa!"); Serial.println (ModbusRTUClient.lastError ()); } lain {uint16_t word1 = ModbusRTUClient.read (); uint16_t word2 = ModbusRTUClient.read (); int32_t milliamp = word1 << 16 | perkataan2; ampere = milliamp / 1000.0; } kembali ampere; }

double readPower () {double watt = 0.; jika (! ModbusRTUClient.requestFrom (0x01, HOLDING_REGISTERS, 0x0025, 3)) {Serial.print ("gagal membaca kuasa!"); Serial.println (ModbusRTUClient.lastError ()); } lain {uint16_t word1 = ModbusRTUClient.read (); uint16_t word2 = ModbusRTUClient.read (); uint16_t word3 = ModbusRTUClient.read (); uint64_t milliwatt; jika (word1 >> 7 == 0) {milliwatt = word1

Disyorkan: