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, Srpanj
Anonim
Vaš monitor računa energije
Vaš monitor računa energije

O OVOM PROJEKTU

Ako doista želite učiniti svoj dom pametnijim, vjerojatno ćete htjeti početi od svojih mjesečnih računa (tj. Energije, plina itd.). Kao što neki kažu, Dobro za planet, Novčanik i Bottom Line. Otvoreni hardver naš je način da postignemo održivost u kućnom okruženju! Ta nas je ideja dovela do izgradnje jednostavnog i sigurnog rješenja, lakog za integraciju sa bilo kojim softverom za kućnu automatizaciju budući da 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 mjerili potrošnju električne energije, odlučili smo se za korištenje Finder mjerača energije, jer je dizajniran za uporabu 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. Zapravo, Arduino je objavio službeni štit, MKR485 i dvije knjižnice za dekodiranje protokola. Kao matičnu ploču odabrali smo Arduino MKR WiFi 1010, budući da dijeli faktor oblika MKR i ima WiFi vezu.

PostavljanjeUpozorenje! Provjerite propise svoje zemlje o postupanju s kućnim električnim sustavom i budite izuzetno oprezni jer može biti smrtonosan! Ako ne znate, nazovite 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 priključka 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 neutralno i smeđa/crna/siva za napon u EU). Izlaz mora biti povezan s ostatkom sustava.

Priključci glavnog napona. Gornje žice 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čunalo 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 strojeve. Kako bismo natjerali Arduino da govori o Modbusu, koristit ćemo Arduino Modbus knjižnicu. Ova knjižnica sadrži sve rukovatelje i čini povezivanje bilo kojeg Modbus uređaja jako brzim. Budući da ćemo čitati registre, slijedeći podatkovni list mjerača, riječima možemo pronaći sve potrebne podatke poput šifara funkcija, adrese registra i veličine registra. No, da bismo bili jasniji, objasnimo kako Modbus radi: 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 držanja 0x04 za Byte Count00 16 - Šaljemo 4 bajta adrese registra (00 16) koja govori uređaju što ž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 generiran je 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 MQTT (Ovdje 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 ponovno učitajte Home Assistant, sada će se mjerenja pojaviti na glavnoj stranici.

Ploča za potrošnju kućnog pomoćnika prikazuje trenutna očitanja

Home Assistant pobrinut će se za izradu grafikona i automatizirati procese pokrenute vašim očitanjem. Ovaj je vodič 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. Ovim kabelom možete emitirati 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. Mirovanje), TX-/RX- ili D- kao alternativa za A (niska za MARK tj. Mirovanje) Budući da MKR štit podržava i Full Duplex, vidjet ćete dva druga terminala, Y i Z. Ovdje ćemo uvrnuti drugi kraj kabela budući da 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 NA); prvi nije bitan. Završetak je otpor koji povezuje dva podatkovna terminala za prigušivanje smetnji.

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

Korak 4: Kodirajte

Kodirati
Kodirati

#uključi

#include #include #include // vaše vjerodajnice za wifi const char ssid = "**********"; const char pass = "**********";

WiFiClient mreža; Klijent MQTTClient; bezznačna 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 ("naziv_uređaja", "korisničko_ime", "korisnički_pw")) {// PROMJENA U SKLADU S VAŠIM POSTAVKAMA 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 ("dolazno:" + tema + " -" + korisni teret); 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.početi (ssid, proći); while (! Serijski); client.begin ("broker_ip", neto); // PROMJENA U SKLADU S VAŠIM POSTAVKAMA 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 (neblokirajuća rutina) if (millis () - lastMillis> rate) {lastMillis = millis (); // učinimo da svi pročitani pozivi plutaju 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 pod srodnim temama client.publish ("energija/glavni/napon", niz (volt, 3)); client.publish ("energija/glavni/trenutni", niz (pojačalo, 3)); client.publish ("energija/glavni/snaga", niz (vati, 3)); client.publish ("energija/glavna/frekvencija", String (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 u registar Serial.print ("nije uspjelo očitavanje napona!"); Serial.println (ModbusRTUClient.lastError ()); // rukovatelj pogreškama} else {uint16_t word1 = ModbusRTUClient.read (); // čitanje 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; }

dvostruko čitanjePower () {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 milivat; if (word1 >> 7 == 0) {milliwatt = word1

Preporučeni: