Turinys:
- 1 žingsnis: reikalingos dalys
- 2 žingsnis: programinės įrangos poreikis
- 3 žingsnis: Surinkite
- 4 žingsnis: kodas
Video: Jūsų energijos sąskaitos monitorius: 4 žingsniai
2024 Autorius: John Day | [email protected]. Paskutinį kartą keistas: 2024-01-30 10:45
APIE ŠĮ PROJEKTĄ
Jei tikrai norite padaryti savo namus protingesnius, tikriausiai norėsite pradėti nuo mėnesinių sąskaitų (ty energijos, dujų ir pan.). Kaip kai kurie sako, „Good for Planet“, „The Wallet“ir „Bottom Line“. Atvirojo kodo aparatinė įranga yra mūsų būdas pasiekti tvarumą namų aplinkoje! Ši idėja paskatino mus sukurti paprastą ir saugų sprendimą, kurį būtų lengva integruoti į bet kurią namų automatikos programinę įrangą, nes ji atskleidžia duomenis per MQTT (mūsų atveju parodysime, kaip juos integruoti į namų asistentą).
Apžvalga
Norėdami išmatuoti elektros energijos suvartojimą, mes pasirinkome naudoti „Finder“energijos matuoklį, nes jis skirtas naudoti DIN bėgeliams ir puikiai tinka pagrindinėje mūsų namo spintoje. Puikus šio gaminio dalykas yra tai, kad jis turi RS485 „Modbus“sąsają, pramoninį standartinį ryšio protokolą, kuris labai palengvina pokalbį su „Arduino“. Tiesą sakant, „Arduino“išleido oficialų skydą, MKR485 ir dvi bibliotekas, skirtas iššifruoti protokolą. Kaip pagrindinę plokštę pasirinkome „Arduino MKR WiFi 1010“, nes ji turi MKR formos faktorių ir turi „WiFi“ryšį.
SąrankaĮspėjimas! Patikrinkite savo šalies taisykles, susijusias su namų elektros sistemos tvarkymu, ir būkite labai atsargūs, nes tai gali būti mirtina! Jei nežinote, kvieskite elektriką. Pirmasis žingsnis yra įdiegti skaitiklį į savo elektros spintelę. Kad užtikrintumėte, jog dirbate saugioje aplinkoje, išjunkite maitinimą iš elektros terminalo prieš sistemą ir dar kartą patikrinkite multimetru, ar nėra įtampos tarp gnybtų. Tada įdėkite energijos matuoklį į savo spintelę ir prijunkite įtampos ir neutralumo laidus nuo pagrindinio pertraukiklio prie skaitiklio įvesties, nepamirškite naudoti spalvų susitarimo (mėlyna - neutrali, o ruda/juoda/pilka - jei gyvenate ES). Išvestis turi būti prijungta prie likusios sistemos.
Pagrindinės įtampos jungtys. Viršuje esantys laidai yra įėjimai, anapus esantys laidai yra išėjimai.
1 žingsnis: reikalingos dalys
2 žingsnis: programinės įrangos poreikis
Programinė įranga
Paleiskite kompiuterį ir atidarykite IDE. Galite naudoti „Arduino IDE“arba „Arduino Create Editor“. Kodas atitinka šias užklausas: „Modbus“ryšys, „WiFi“valdymas MQTT protokolas „Modbus“yra atvirojo kodo protokolas pramoniniams jutikliams ir mašinoms. Norėdami, kad „Arduino“kalbėtų apie „Modbus“, mes naudosime „Arduino Modbus“biblioteką. Ši biblioteka supakuoja visus tvarkytojus ir leidžia labai greitai prijungti bet kurį „Modbus“įrenginį. Kadangi ketiname skaityti registrus, pagal skaitiklio duomenų lapą galime rasti visą mums reikalingą informaciją, pvz., Funkcijų kodus, registro adresą ir registro dydį žodžiais. Bet kad būtų aiškiau, paaiškinkime, kaip veikia „Modbus“: „Modbus“pranešimai yra paprastos struktūros: 01 03 04 00 16 00 02 25 C7 0x01yra įrenginio adresas 0x03 yra funkcijos kodas, nurodantis įrenginiui, ar norime skaityti ar rašyti duomenis *, šiuo atveju skaitykite baitų skaičiaus laikymo registrus 0x04 baitams skaičiuoti 16 16 - Siunčiame 4 baitus registro adreso (00 16), kuris nurodo įrenginiui, ką norime perskaityti 00 02- tada registro dydį (00 02) žodžiais (kiekvienas žodis yra 2 baitų ilgio) Paskutiniai 4 baitai yra CRC kodas. Šis kodas sugeneruotas iš matematinės funkcijos per ankstesnius baitus, tai užtikrina, kad pranešimas buvo priimtas teisingai.
Skaitiklio pridėjimas prie namų asistento yra gana paprastas. Darant prielaidą, kad turite sukonfigūruotą MQTT tarpininką (čia yra vadovas), viskas, ką jums reikia padaryti, yra pridėti naujus apibrėžimus prie failo configuration.yaml. jutiklis: - platforma: mqtt pavadinimas: "Pagrindinė įtampa" state_topic: "energija/pagrindinė/įtampa" unit_of_measurement: "V" Čia turite įdėti matavimo pavadinimą, skaitomą MQTT temą ir kiekio matavimo vienetą. Išsaugokite failą, patikrinkite konfigūraciją ir iš naujo įkelkite „Home Assistant“, dabar matavimai bus rodomi pagrindiniame puslapyje.
„Home Assistant“vartojimo skydelis, kuriame rodomi dabartiniai rodmenys
„Home Assistant“pasirūpins grafikų kūrimu ir automatizuos jūsų rodmenų suaktyvintus procesus. Ši pamoka baigta, dabar jūs turite pridėti funkcijų ir pritaikyti ją savo tikslams!
3 žingsnis: Surinkite
Padaryta? Atėjo laikas įsukti RS485 jungtį! Mes naudosime susuktą vienos poros kabelį su žeme, paprastai naudojamą telefono linijoms. Naudodami šį kabelį galite perduoti dideliu atstumu (1,2 km). Tačiau mes tiesiog naudojame pakankamai ilgą kabelį, kad išeitume iš spintelės ir padėtume „Arduino“prieinamoje vietoje.
„Finder RS485“jungtis
RS485 sąsaja įvardija savo terminalus A, B ir COM. Įprastas de facto standartas yra naudoti TX+/RX+ arba D+ kaip alternatyvą B (aukštas MARK, ty tuščiąja eiga), TX-/RX- arba D- kaip alternatyvą A (žemas MARK, ty tuščiosios eigos). MKR skydas taip pat palaiko „Full Duplex“, pamatysite du kitus gnybtus, Y ir Z. Čia mes užsuksime kitą kabelio galą, nes iš duomenų lapo žinome, kad pusiau dvipusis ryšys vyksta tik Y ir Z terminaluose. COM terminalas turi būti prijungtas prie ISOGND. Kadangi mes naudojame pusiau dvipusį ryšį ir kabeliai yra lygiaverčiai, mes turime nustatyti MKR485 skydo jungiklius, kad jie atitiktų mūsų sąranką: mes nustatome HALF (2 išjungta) ir nutraukimą YZ (nuo 3 iki ĮJUNGTA); pirmasis nesvarbus. Baigimas yra pasipriešinimas, jungiantis du duomenų gnybtus, siekiant slopinti trukdžius.
Tai yra. Dabar galite uždaryti spintelę ir sutelkti dėmesį į programinę įrangą!
4 žingsnis: kodas
#įtraukti
#include #include #include // jūsų „Wi -Fi“prisijungimo duomenys const char ssid = "**********"; const char pass = "**********";
„WiFiClient“tinklas; „MQTTClient“klientas; nepasirašytas ilgas kursas = 60000; // numatytasis atnaujinimo dažnis ms unsigned long lastMillis = 0;
// prisijungimo funkcija void connect () {Serial.print ("wifi tikrinimas …"); while (WiFi.status ()! = WL_CONNECTED) {Serial.print ("."); vėlavimas (1000); } Serial.print ("\ nprijungiamas …"); while (! client.connect ("prietaiso_pavadinimas", "vartotojo_pavadinimas", "vartotojo_pw"))) {// PAKEITIMAS, KAD PATIKRINTŲ JŪSŲ NUSTATYMUS Serial.print ("."); vėlavimas (1000); } Serial.println ("\ nprijungtas!"); client.subscribe ("energija/pagrindinis/atnaujinti"); // tema nuotoliniu būdu nustatyti atnaujinimo dažnį} // mqtt gauti atgalinio ryšio funkciją void messageReceived (String & topic, String & payload) {Serial.println ("gaunamas:" + tema + " -" + naudingoji apkrova); if (topic == "energy/main/refreshrate") {// atnaujinimo dažnio tvarkyklės rodiklis = payload.toInt ()*1000; Serial.println ("naujas tarifas"+eilutė (norma)); }}
void setup () {Serial.begin (115200); WiFi.begin (ssid, pass); while (! Serial); client.begin ("broker_ip", neto); // PAKEISTI, KAD PATIKRINTŲ JŪSŲ SĄRANKOS klientą.onMessage (messageReceived); // paleiskite „Modbus RTU“klientą, jei (! ModbusRTUClient.begin (9600)) {Serial.println ("Nepavyko paleisti„ Modbus RTU Client! "); tuo tarpu (1); }}
void loop () {client.loop (); if (! client.connected ()) {// patikrinkite tinklo ryšį connect (); } // paskelbti pranešimą po atnaujinimo (neužblokuojanti rutina) if (millis () - lastMillis> rate) {lastMillis = millis (); // padaryti visus perskaitytus skambučius float volt = readVoltage (); vėlavimas (100); float amp = readCurrent (); vėlavimas (100); dvigubas vatas = readPower (); vėlavimas (100); plūdė hz = readFreq (); vėlavimas (100); dvigubas wh = readEnergy (); // paskelbti rezultatus susijusiomis temomis client.publish ("energija/pagrindinė/įtampa", eilutė (voltas, 3)); client.publish ("energija/pagrindinė/srovė", eilutė (stiprintuvas, 3)); client.publish ("energija/pagrindinė/galia", eilutė (vatas, 3)); client.publish ("energija/pagrindinis/dažnis", eilutė (hz, 3)); client.publish ("energija/pagrindinė/energija", eilutė (wh, 3)); Serijinis atspaudas (eilutė (voltas, 3)+"V"+eilutė (stiprintuvas, 3)+"A"+eilutė (vatas, 3)+"W"); Serijinis.println (eilutė (hz, 3)+"Hz"+eilutė (wh, 3)+"kWh"); vėlavimas (100); }}
/ * „Finder Energy Meter“registrų skaitymo funkcijos * * Patikrinkite „Modbus“protokolo vadovą, kad suprastumėte kodą * https://gfinder.findernet.com/public/attachments/7E/EN/PRT_Modbus_7E_64_68_78_86EN.pdf */float readVoltage () {float voltas = 0; if (! ModbusRTUClient.requestFrom (0x01, HOLDING_REGISTERS, 0x000C, 2)) {// skambinti registrui Serial.print ("nepavyko nuskaityti įtampos!"); Serial.println (ModbusRTUClient.lastError ()); // klaidų tvarkytojas} else {uint16_t word1 = ModbusRTUClient.read (); // skaityti duomenis iš buferio uint16_t word2 = ModbusRTUClient.read (); uint32_t millivolt = word1 << 16 | žodis2; // bitų matematikos voltas = milivoltas/1000,0; } grąžinimo voltas; } float readCurrent () {float ampere = 0.; if (! ModbusRTUClient.requestFrom (0x01, HOLDING_REGISTERS, 0x0016, 2)) {Serial.print ("nepavyko perskaityti dabartinės!"); Serial.println (ModbusRTUClient.lastError ()); } else {uint16_t word1 = ModbusRTUClient.read (); uint16_t word2 = ModbusRTUClient.read (); int32_t milliamp = word1 << 16 | žodis2; amperas = miliampas/1000,0; } grąžinimo amperas; }
double readPower () {dvigubas vatas = 0.; if (! ModbusRTUClient.requestFrom (0x01, HOLDING_REGISTERS, 0x0025, 3)) {Serial.print ("nepavyko perskaityti galios!"); Serial.println (ModbusRTUClient.lastError ()); } else {uint16_t word1 = ModbusRTUClient.read (); uint16_t word2 = ModbusRTUClient.read (); uint16_t word3 = ModbusRTUClient.read (); uint64_t milivatų; jei (žodis1 >> 7 == 0) {milivatas = žodis1
Rekomenduojamas:
SĄSKAITŲ SĄSKAITOS IR INVENTORIŲ KONTROLĖS SISTEMA: 3 žingsniai
SĄSKAITŲ SĄSKAITŲ IR INVENTORIŲ KONTROLĖS SISTEMA: Naudodamasis šiomis instrukcijomis, aš jums duosiu idėją sukurti sąskaitų faktūrų ir atsargų valdymo sistemą. Naudojant MS prieigą. Tai labai paprasta ir nereikia daugiau žinių apie kompiuterį ar programavimą. Jei turite pagrindinių žinių apie p. Prieiga, lentelės. formas ir ataskaitas
Išmanusis kambarinių augalų monitorius - žinokite, kada jūsų augalą reikia laistyti: 8 žingsniai (su nuotraukomis)
Išmanusis kambarinių augalų monitorius - žinokite, kada jūsų augalą reikia laistyti: Prieš porą mėnesių aš padariau dirvožemio drėgmės stebėjimo lazdelę, kuri maitinama iš baterijų ir gali būti įstrigusi jūsų dirvožemio puode, kad suteiktų jums naudingos informacijos apie dirvą drėgmės lygis ir mirksi šviesos diodai, nurodantys, kada reikia laukti
Energijos monitorius per 15 minučių: 3 žingsniai
Energijos monitorius per 15 minučių: Tai „Wi -Fi“jutiklis, skirtas užfiksuoti elektros skaitiklio blykstę. Jis aptinka blykstes su LDR ir rodo maitinimą OLED ekrane. Siunčia duomenis į „Thingsboard“prietaisų skydelį, tiesioginį pavyzdį čia. Užsiregistruokite nemokamai demonstracinei paskyrai: https: //thingsboard.io
Kaip teisingai išmatuoti belaidžio ryšio modulių energijos suvartojimą mažos energijos suvartojimo laikais?: 6 žingsniai
Kaip teisingai išmatuoti belaidžio ryšio modulių energijos suvartojimą mažo energijos suvartojimo eroje?: Mažas energijos suvartojimas yra labai svarbi daiktų interneto sąvoka. Dauguma daiktų interneto mazgų turi būti maitinami baterijomis. Tik teisingai išmatuodami belaidžio modulio energijos suvartojimą galime tiksliai įvertinti, kiek akumuliatoriaus
Lemputės energijos monitorius: 9 žingsniai (su nuotraukomis)
Lemputės energijos monitorius: atlieku energijos tyrimus savo kasdieniam darbui. Taigi nenuostabu, kad man labai įdomu sužinoti, kaip mes naudojame bute energiją. Per daugelį metų aš naudojau vieno išėjimo energijos monitorių („Kill-A-Watt“matuoklį) ir visą