Sisukord:

Teie energiaarve jälgija: 4 sammu
Teie energiaarve jälgija: 4 sammu

Video: Teie energiaarve jälgija: 4 sammu

Video: Teie energiaarve jälgija: 4 sammu
Video: Брата А4 сожрала SCP ГОРКА ПОЖИРАТЕЛЬ? Нашли коробку в горке и открыли! АлояВера Директор ютуба 2024, November
Anonim
Teie energiaarvete jälgija
Teie energiaarvete jälgija

SELLE PROJEKTI KOHTA

Kui soovite tõesti oma kodu targemaks muuta, peaksite tõenäoliselt alustama igakuistest arvetest (st energia, gaas jne). Nagu mõned ütlevad, on hea planeedile, rahakotile ja lõpptulemusele. Avatud lähtekoodiga riistvara on meie viis kodukeskkonnas jätkusuutlikkuse saavutamiseks! See idee tõi meid üles ehitama lihtsa ja turvalise lahenduse, mida on lihtne integreerida mis tahes koduautomaatikatarkvaraga, kuna see paljastab andmed MQTT kaudu (meie puhul näitame teile, kuidas neid Home Assistanti integreerida).

Ülevaade

Elektrienergia tarbimise mõõtmiseks otsustasime kasutada Finderi energiamõõdikut, kuna see on mõeldud DIN -rööpa jaoks ja sobib ideaalselt meie maja peakappi. Selle toote lahe asi on see, et sellel on RS485 Modbus -liides, tööstusstandardiga suhtlusprotokoll, mis muudab Arduinoga rääkimise tõeliselt lihtsaks. Tegelikult on Arduino avaldanud protokolli dekodeerimiseks ametliku kilbi, MKR485 ja kaks raamatukogu. Emaplaadiks valisime Arduino MKR WiFi 1010, kuna sellel on MKR -vorming ja WiFi -ühendus.

SeadistusHoiatus! Kontrollige oma riigi elektrisüsteemiga tegelemise eeskirju ja olge äärmiselt ettevaatlik, sest see võib olla surmav! Kui te ei tea, helistage elektrikule. Esimene samm on arvesti paigaldamine elektrikappi. Turvalises keskkonnas töötamiseks lülitage süsteemi ees olev elektriklemm välja ja kontrollige multimeetriga, kas klemmide vahel pole pinget. Seejärel asetage energiaarvesti oma kapi sisse ja ühendage voolukatkestist voolu- ja neutraaljuhtmed arvesti sisendiga. Ärge unustage kasutada värviskeemi (sinine - neutraalne ja pruun/must/hall - EL -is). Väljund peab olema ühendatud ülejäänud süsteemiga.

Peapingeühendused. Ülaltoodud juhtmed on sisend, kaugemad juhtmed on väljundid.

Samm: vajalikud osad

Vajalikud osad
Vajalikud osad

2. samm: tarkvaravajadused

Tarkvara vajab
Tarkvara vajab

Tarkvara

Käivitage arvuti ja avage IDE. Võite kasutada Arduino IDE või Arduino Create Editori. Kood vastab järgmistele taotlustele: Modbus-side, WiFi-haldus MQTT-protokoll Modbus on ja avatud lähtekoodiga protokoll tööstuslike andurite ja masinate jaoks. Arduino Modbusist rääkimiseks kasutame Arduino Modbusi teeki. See raamatukogu sisaldab kõiki käitlejaid ja muudab Modbusi seadme ühendamise tõesti kiireks. Kuna me hakkame registreid lugema, leiame arvesti andmelehelt kogu vajaliku teabe, nagu funktsioonikoodid, registri aadress ja registri suurus sõnades. Selguse huvides selgitame aga, kuidas Modbus töötab: Modbusi sõnumid on lihtsa ülesehitusega: 01 03 04 00 16 00 02 25 C7 0x01 on seadme aadress 0x03 on funktsioonikood, mis annab seadmele teada, kas me tahame andmeid lugeda või kirjutada *, sel juhul lugege baitide arvu 00 jaoks hoidmisregistreid 0x04 - saadame 4 baiti registriaadressi (00 16), mis ütleb seadmele, mida me lugeda tahame 00 02- seejärel registri suurust (00 02) sõnadega (iga sõna on 2 baiti pikk) Viimased 4 baiti on CRC -kood. See kood genereeritakse matemaatikafunktsioonist üle eelmiste baitide, see tagab sõnumi õige vastuvõtu.

Arvesti lisamine koduabilisse on üsna lihtne. Eeldades, et teil on konfigureeritud MQTT maakler (siin on juhend), peate vaid lisama failile configuration.yaml uued definitsioonid. andur: - platvorm: mqtt name: "Main Voltage" state_topic: "energy/main/pinge" unit_of_measurement: "V" Siin peate panema mõõtmise nime, loetava teema MQTT ja koguse mõõtühiku. Salvestage fail, kontrollige konfiguratsiooni ja laadige Home Assistant uuesti, nüüd kuvatakse mõõtmised avalehel.

Koduabilise tarbimispaneel näitab praeguseid näitu

Home Assistant hoolitseb graafikute loomise ja teie näitude käivitatud protsesside automatiseerimise eest. See õpetus on lõppenud, nüüd peate ise funktsioone lisama ja oma otstarbeks kohandama!

3. samm: pange kokku

Pange kokku
Pange kokku
Pange kokku
Pange kokku

Valmis? On aeg RS485 ühendus sisse keerata! Kasutame maapinnaga keerutatud ühepaarilist kaablit, mida tavaliselt kasutatakse telefoniliinide jaoks. Selle kaabli abil saate edastada pikki vahemaid (1,2 km). Kuid me kasutame lihtsalt piisavalt pikka kaablit, et kapist väljuda ja paigutada Arduino juurdepääsetavasse kohta.

Finderi RS485 ühendus

RS485 liides nimetab oma terminalid A, B ja COM. Üldine de facto standard on TX+/RX+ või D+ kasutamine alternatiivina B-le (kõrge MARK-i jaoks, st tühikäigul), TX-/RX- või D- alternatiivina A-le (madal MARK-i puhul, st tühikäigul). MKR-kilp toetab ka täisdupleksi, näete kahte teist klemmi, Y ja Z. Siin kruvime kaabli teise otsa, kuna andmelehelt teame, et pooldupleksne side toimub ainult Y- ja Z-terminalidel. COM -terminal tuleb ühendada ISOGND -ga. Kuna kasutame pooldupleksühendust ja kuna kaabeldus on võrdõiguslik, peame seadistama MKR485 kilbil olevad lülitid vastavalt meie seadistusele: seadsime HALF (2 välja) ja lõpetamise YZ (3 kuni PEAL); esimene pole oluline. Lõpp on takistus, mis ühendab kahte andmeklemmi häirete summutamiseks.

See on see. Nüüd saate kapi sulgeda ja keskenduda tarkvara poolele!

4. samm: kood

Kood
Kood

#kaasake

#include #include #include // teie wifi mandaat const char ssid = "**********"; const char pass = "**********";

WiFiClient net; MQTTClient klient; allkirjata pikk määr = 60000; // vaikimisi värskendussagedus ms unsigned long lastMillis = 0;

// ühendamisfunktsioon void connect () {Serial.print ("wifi kontrollimine …"); while (WiFi.seisund ()! = WL_CONNECTED) {Serial.print ("."); viivitus (1000); } Serial.print ("\ nühendamine …"); while (! client.connect ("seadme_nimi", "kasutaja_nimi", "kasutaja_pw"))) {// MUUDATUS SEADISTUSTE VASTAVALT Serial.print ("."); viivitus (1000); } Serial.println ("\ nühendatud!"); client.subscribe ("energia/põhi/värskendus"); // teema värskendussageduse kaugseadistamiseks} // mqtt tagasihelistamisfunktsiooni vastuvõtmine void messageReceived (String & teema, String & payload) {Serial.println ("sissetulev:" + teema + " -" + kasulik koormus); if (topic == "energy/main/refreshrate") {// värskendussageduse käitleja määr = kasulik koormus.toInt ()*1000; Serial.println ("uus määr"+string (määr)); }}

void setup () {Serial.begin (115200); WiFi.algus (ssid, pass); while (! Seeria); client.begin ("maakler_ip", võrk); // MUUDATUS OMA SEADISTUSE ÜHENDAMISEKS klient.onMessage (messageReceived); // käivitage Modbus RTU klient if (! ModbusRTUClient.begin (9600)) {Serial.println ("Modbus RTU kliendi käivitamine ebaõnnestus!"); samas (1); }}

void loop () {client.loop (); if (! client.connected ()) {// kontrollige võrguühendust connect (); } // avaldada sõnum pärast värskendamise lõppu (mitteblokeeriv rutiin), kui (millis () - lastMillis> rate) {lastMillis = millis (); // tee kõik loetud kõned float volt = readVoltage (); viivitus (100); float amp = readCurrent (); viivitus (100); kahekordne vatt = readPower (); viivitus (100); float hz = readFreq (); viivitus (100); topelt wh = readEnergy (); // avaldada tulemused seotud teemade all client.publish ("energia/põhi/pinge", String (volt, 3)); client.publish ("energia/põhi/vool", string (amp, 3)); client.publish ("energia/põhi/võimsus", String (vatt, 3)); client.publish ("energia/põhi/sagedus", string (hz, 3)); client.publish ("energia/põhi/energia", string (wh, 3)); Seeria.print (String (volt, 3)+"V"+string (amp, 3)+"A"+string (vatt, 3)+"W"); Serial.println (String (hz, 3)+"Hz"+String (wh, 3)+"kWh"); viivitus (100); }}

/ * Funktsioonid Finderi energiamõõturite registrite lugemiseks * * Koodi mõistmiseks vaadake modbusi protokolli käsiraamatut * 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)) {// helista registrile Serial.print ("pinget ei õnnestunud lugeda!"); Serial.println (ModbusRTUClient.lastError ()); // veakäitleja} else {uint16_t word1 = ModbusRTUClient.read (); // lugeda andmeid puhvrist uint16_t word2 = ModbusRTUClient.read (); uint32_t millivolt = sõna1 << 16 | sõna2; // bit matemaatika volt = millivolt/1000.0; } tagasivooluvolt; } float readCurrent () {float ampere = 0.; if (! ModbusRTUClient.requestFrom (0x01, HOLDING_REGISTERS, 0x0016, 2)) {Serial.print ("ei suutnud praegust lugeda!"); Serial.println (ModbusRTUClient.lastError ()); } else {uint16_t sõna1 = ModbusRTUClient.read (); uint16_t sõna2 = ModbusRTUClient.read (); int32_t milliamp = sõna1 << 16 | sõna2; amper = milliamp/1000,0; } tagastamper; }

double readPower () {topeltvatt = 0.; if (! ModbusRTUClient.requestFrom (0x01, HOLDING_REGISTERS, 0x0025, 3)) {Serial.print ("võimu lugemine ebaõnnestus!"); Serial.println (ModbusRTUClient.lastError ()); } else {uint16_t sõna1 = ModbusRTUClient.read (); uint16_t sõna2 = ModbusRTUClient.read (); uint16_t word3 = ModbusRTUClient.read (); uint64_t milliwatt; kui (sõna1 >> 7 == 0) {milliwatt = sõna1

Soovitan: