Sadržaj:

Vaš monitor računa energije: 4 koraka
Vaš monitor računa energije: 4 koraka

Video: Vaš monitor računa energije: 4 koraka

Video: Vaš monitor računa energije: 4 koraka
Video: Как проверить генератор. За 3 минуты, БЕЗ ПРИБОРОВ и умений. 2024, Novembar
Anonim
Vaš monitor računa energije
Vaš monitor računa energije

O OVOM PROJEKTU

Ako zaista želite učiniti svoj dom pametnijim, vjerovatno ćete htjeti početi od mjesečnih računa (tj. Energije, plina itd.). Kako neki kažu, Dobro za planetu, Novčanik i Donja linija. Hardver otvorenog koda je naš način da postignemo održivost u kućnom okruženju! Ova ideja nas je dovela do izgradnje jednostavnog i sigurnog rješenja, lakog za integraciju sa bilo kojim softverom za kućnu automatizaciju jer izlaže podatke preko MQTT -a (u našem slučaju pokazat ćemo vam kako ih integrirati u kućni pomoćnik).

Pregled

Kako bismo izmjerili potrošnju električne energije, odlučili smo se za korištenje Finder mjerača energije, jer je dizajniran za upotrebu na DIN šini i savršeno se uklapa u glavni ormar naše kuće. Zgodna stvar ovog proizvoda je to što ima RS485 Modbus sučelje, industrijski standardni komunikacijski protokol koji čini razgovor s Arduinom zaista lakim. U stvari, Arduino je objavio službeni štit, MKR485 i dvije biblioteke za dekodiranje protokola. Kao matičnu ploču odabrali smo Arduino MKR WiFi 1010, jer dijeli MKR oblik i ima WiFi vezu.

PostavljanjeUpozorenje! Provjerite propise svoje zemlje koji se odnose na kućni električni sistem i budite izuzetno oprezni jer to može biti smrtonosno! Ako ne znate, pozovite električara. Prvi korak je instaliranje mjerača u vaš električni ormar. Kako biste bili sigurni da radite u sigurnom okruženju, isključite napajanje iz električnog terminala ispred vašeg sustava i dvaput provjerite multimetrom da nema napona između priključaka. Zatim postavite mjerač energije u svoj ormar i spojite napete i neutralne žice od glavnog prekidača na ulaz brojila, ne zaboravite koristiti konvenciju boja (plava za neutralnu i smeđa/crna/siva za napete u EU). Izlaz mora biti povezan sa ostatkom sistema.

Priključci glavnog napona. Žice iznad su ulazne, žice iza su izlazi.

Korak 1: Potrebni dijelovi

Potrebni dijelovi
Potrebni dijelovi

Korak 2: Softverske potrebe

Softverske potrebe
Softverske potrebe

Softver

Pokrenite računar i otvorite IDE. Možete koristiti Arduino IDE ili Arduino Create Editor. Kôd zadovoljava sljedeće zahtjeve: Modbus komunikacija, upravljanje WiFi-omMQTT protokol Modbus je i protokol otvorenog koda za industrijske senzore i mašine. Da bi Arduino govorio o Modbusu, koristit ćemo Arduino Modbus biblioteku. Ova biblioteka sadrži sve manipulatore i čini povezivanje bilo kojeg Modbus uređaja vrlo brzim. Budući da ćemo čitati registre, slijedeći tablicu brojila, možemo pronaći sve potrebne podatke poput šifara funkcija, adrese registra i veličine registra riječima. No, da bude jasnije, objasnimo kako funkcionira Modbus: Modbus poruke slijede jednostavnu strukturu: 01 03 04 00 16 00 02 25 C7 0x01je adresa uređaja 0x03 kôd funkcije koji govori uređaju želimo li čitati ili pisati podatke *, u ovom slučaju, pročitajte registre za držanje 0x04 za Byte Count00 16 - Šaljemo 4 bajta adrese registra (00 16) koja govori uređaju šta želimo čitati 00 02- zatim veličinu registra (00 02) riječima (svaka riječ ima 2 bajta) Zadnja 4 bajta su CRC kôd. Ovaj kôd je generiran iz matematičke funkcije u prethodnim bajtovima, što osigurava da je poruka pravilno primljena.

Integracija kućnog pomoćnika Dodavanje mjerača kućnom pomoćniku prilično je jednostavno. Pod pretpostavkom da ste konfigurirali posrednika za MQTT (ovo je vodič), sve što trebate učiniti je dodati nove definicije u datoteku configuration.yaml. senzor: - platforma: naziv mqtt: "Glavni napon" stanje_teme: "energija/glavni/napon" jedinica_mjera: "V" Ovdje morate staviti naziv mjerenja, temu MQTT za čitanje i mjernu jedinicu količine. Spremite datoteku, provjerite konfiguraciju i ponovo učitajte Home Assistant, sada će se mjerenja pojaviti na glavnoj stranici.

Tablica potrošnje kućnog pomoćnika prikazuje trenutna očitanja

Home Assistant će se pobrinuti za stvaranje grafikona i automatizirati procese pokrenute vašim očitanjem. Ovaj vodič je završio, sada je na vama da dodate značajke i prilagodite ga za vlastite potrebe!

Korak 3: Sastavite

Sastavite
Sastavite
Sastavite
Sastavite

Gotovo? Vrijeme je da spojite RS485 vezu! Koristit ćemo upleteni jednoparni kabel sa uzemljenjem, koji se obično koristi za telefonske linije. Pomoću ovog kabela možete prenositi na velike udaljenosti (1,2 km). Međutim, samo koristimo kabel dovoljno dug da izađemo iz ormara i postavimo Arduino na pristupačno mjesto.

RS485 veza Finder -a

Sučelje RS485 imenuje svoje terminale A, B i COM. Uobičajeni de-facto standard je upotreba TX+/RX+ ili D+ kao alternative za B (visoka za MARK tj. U praznom hodu), TX-/RX- ili D- kao alternativa za A (niska za MARK tj. Mirovanje) Od MKR štit podržava i Full Duplex, vidjet ćete dva druga terminala, Y i Z. Ovdje ćemo zašrafiti drugi kraj kabela jer iz podatkovne tablice znamo da se poludupleksna komunikacija događa samo na Y i Z terminalima. COM terminal mora biti spojen na ISOGND. Budući da koristimo poludupleksnu vezu i budući da je kabel peer-to-peer, moramo postaviti prekidače na štitniku MKR485 kako bi odgovarali našim postavkama: postavljamo HALF (2 na isključeno) i završavamo na YZ (3 do ON); prvi nije bitan. Završetak je otpor koji povezuje dva terminala podataka za prigušivanje smetnji.

To je to. Sada možete zatvoriti ormar i usredotočiti se na softversku stranu!

Korak 4: Kodirajte

Kod
Kod

#include

#include #include #include // vaši WiFi akreditivi const char ssid = "**********"; const char pass = "**********";

WiFiClient mreža; Klijent MQTTClient; nepotpisana duga stopa = 60000; // zadana brzina osvježavanja u ms unsigned long lastMillis = 0;

// funkcija povezivanja void connect () {Serial.print ("provjera wifi …"); while (WiFi.status ()! = WL_CONNECTED) {Serial.print ("."); kašnjenje (1000); } Serial.print ("\ npovezivanje …"); while (! client.connect ("device_name", "user_name", "user_pw")) {// PROMENI DA SE PODEŠAVA SA VAŠIM PODEŠAVANJEM Serial.print ("."); kašnjenje (1000); } Serial.println ("\ npovezano!"); client.subscribe ("energija/glavno/osvježavanje"); // tema za daljinsko postavljanje brzine osvježavanja} // mqtt prima funkciju povratnog poziva void messageReceived (String & topic, String & payload) {Serial.println ("incoming:" + topic + " -" + payload); if (topic == "energy/main/refreshrate") {// brzina obrade brzine osvježavanja = payload.toInt ()*1000; Serial.println ("nova stopa"+niz (stopa)); }}

void setup () {Serial.begin (115200); WiFi.begin (ssid, pass); while (! Serijski); client.begin ("broker_ip", neto); // PROMJENA U SKLADU SA VAŠIM PODEŠAVANJEM client.onMessage (messageReceived); // pokretanje Modbus RTU klijenta if (! ModbusRTUClient.begin (9600)) {Serial.println ("Nije uspjelo pokretanje Modbus RTU klijenta!"); while (1); }}

void loop () {client.loop (); if (! client.connected ()) {// provjerite mrežnu vezu connect (); } // objaviti poruku nakon proteklog osvježavanja (ne blokirajuća rutina) if (millis () - lastMillis> rate) {lastMillis = millis (); // čini sve pozive za čitanje float volt = readVoltage (); kašnjenje (100); float amp = readCurrent (); kašnjenje (100); dvostruki vat = readPower (); kašnjenje (100); float hz = readFreq (); kašnjenje (100); double wh = readEnergy (); // objaviti rezultate u srodnim temama client.publish ("energija/glavni/napon", niz (volt, 3)); client.publish ("energija/glavni/trenutni", niz (amp, 3)); client.publish ("energija/glavna/snaga", niz (vati, 3)); client.publish ("energija/glavna/frekvencija", niz (hz, 3)); client.publish ("energija/glavna/energija", String (wh, 3)); Serial.print (niz (volti, 3)+"V"+niz (pojačalo, 3)+"A"+niz (vati, 3)+"W"); Serial.println (niz (hz, 3)+"Hz"+niz (wh, 3)+"kWh"); kašnjenje (100); }}

/ * Funkcije za čitanje registra Finder mjerača energije * * Provjerite priručnik protokola modbus da biste razumjeli kôd * https://gfinder.findernet.com/public/attachments/7E/EN/PRT_Modbus_7E_64_68_78_86EN.pdf */float readVoltage () {float volt = 0.; if (! ModbusRTUClient.requestFrom (0x01, HOLDING_REGISTERS, 0x000C, 2)) {// uputite poziv registru Serial.print ("nije uspjelo očitavanje napona!"); Serial.println (ModbusRTUClient.lastError ()); // rukovatelj greškom} else {uint16_t word1 = ModbusRTUClient.read (); // očitavanje podataka iz međuspremnika uint16_t word2 = ModbusRTUClient.read (); uint32_t millivolt = word1 << 16 | word2; // bitni matematički volt = milivolt/1000,0; } povratni volt; } float readCurrent () {float amper = 0.; if (! ModbusRTUClient.requestFrom (0x01, HOLDING_REGISTERS, 0x0016, 2)) {Serial.print ("nije uspjelo čitanje trenutne!"); Serial.println (ModbusRTUClient.lastError ()); } else {uint16_t word1 = ModbusRTUClient.read (); uint16_t word2 = ModbusRTUClient.read (); int32_t milliamp = word1 << 16 | word2; amper = miliamper/1000,0; } povratni amper; }

double readPower () {dvostruki vat = 0.; if (! ModbusRTUClient.requestFrom (0x01, HOLDING_REGISTERS, 0x0025, 3)) {Serial.print ("nije uspjelo čitanje snage!"); Serial.println (ModbusRTUClient.lastError ()); } else {uint16_t word1 = ModbusRTUClient.read (); uint16_t word2 = ModbusRTUClient.read (); uint16_t word3 = ModbusRTUClient.read (); uint64_t milliwatt; if (word1 >> 7 == 0) {milliwatt = word1

Preporučuje se: