Sisällysluettelo:

Energialaskuri: 4 vaihetta
Energialaskuri: 4 vaihetta

Video: Energialaskuri: 4 vaihetta

Video: Energialaskuri: 4 vaihetta
Video: Etäseuraa kotisi energiankulutusta | PZEM-004T | RemoteXY IoT Cloud 2024, Marraskuu
Anonim
Energialaskurisi
Energialaskurisi

TIETOJA TÄSTÄ PROJEKTISTA

Jos haluat todella tehdä kodistasi älykkäämmän, kannattaa luultavasti aloittaa kuukausittaisista laskuistasi (eli energia, kaasu jne.). Kuten jotkut sanovat, Good for Planet, The Wallet ja Bottom Line. Avoimen lähdekoodin laitteisto on tapa saavuttaa kestävyys kotiympäristössä! Tämä idea sai meidät rakentamaan yksinkertaisen ja turvallisen ratkaisun, joka on helppo integroida mihin tahansa kodin automaatio -ohjelmistoon, koska se paljastaa tiedot MQTT: n kautta (tässä tapauksessa näytämme sinulle, kuinka integroida se Home Assistantiin).

Yleiskatsaus

Sähkönkulutuksen mittaamiseksi päätimme käyttää Finder -energiamittaria, koska se on suunniteltu DIN -kiskokäyttöön ja sopii täydellisesti talomme pääkaappiin. Tämän tuotteen viileä asia on, että siinä on RS485 Modbus -rajapinta, teollinen standardiviestintäprotokolla, joka tekee Arduinolle puhumisen todella helpoksi. Itse asiassa Arduino on julkaissut virallisen kilven, MKR485 ja kaksi kirjastoa protokollan purkamiseen. Emolevyksi valitsimme Arduino MKR WiFi 1010: n, koska sillä on MKR -muoto ja WiFi -yhteys.

AsennusVaroitus! Tarkista maasi säännökset talosi sähköjärjestelmän käsittelystä ja ole erittäin varovainen, koska se voi olla tappava! Jos et tiedä, soita sähköasentaja. Ensimmäinen askel on asentaa mittari sähkökaappiin. Varmistaaksesi, että työskentelet turvallisessa ympäristössä, katkaise virta järjestelmän edessä olevasta sähköliittimestä ja tarkista yleismittarilla, ettei liittimien välillä ole jännitettä. Aseta sitten energiamittari kaappisi sisälle ja kytke jännitteiset ja nollajohdot pääkatkaisimesta mittarin tuloon. Muista käyttää värimallia (sininen neutraalille ja ruskea/musta/harmaa EU: ssa). Lähtö on kytkettävä muuhun järjestelmään.

Pääjänniteliitännät. Yllä olevat johdot ovat tuloa, johdot sen ulkopuolella ovat lähtöjä.

Vaihe 1: Tarvittavat osat

Tarvittavat osat
Tarvittavat osat

Vaihe 2: Ohjelmistotarpeet

Ohjelmistotarpeet
Ohjelmistotarpeet

Ohjelmisto

Käynnistä tietokone ja avaa IDE. Voit käyttää Arduino IDE: tä tai Arduino Create Editoria. Koodi vastaa seuraaviin pyyntöihin: Modbus-tiedonsiirto, WiFi-hallinta MQTT-protokolla Modbus on ja avoimen lähdekoodin protokolla teollisille antureille ja koneille. Jos haluat saada Arduinon puhumaan Modbusista, käytämme Arduino Modbus -kirjastoa. Tämä kirjasto pakkaa kaikki ohjaimet ja tekee minkä tahansa Modbus -laitteen kytkemisestä todella nopeaa. Koska aiomme lukea rekistereitä, voimme löytää kaikki tarvitsemamme tiedot, kuten funktiokoodit, rekisterin osoitteen ja rekisterin koon sanoin. Selvyyden vuoksi selitämme kuitenkin, miten Modbus toimii: Modbus -viestit noudattavat yksinkertaista rakennetta: 01 03 04 00 16 00 02 25 C7 0x01 on laiteosoite 0x03 on toimintokoodi, joka kertoo laitteelle, haluammeko lukea tai kirjoittaa tietoja *, tässä tapauksessa, lue rekisterit 0x04 tavumäärälle 00 16 - Lähetämme 4 tavua rekisteriosoitetta (00 16), joka kertoo laitteelle, mitä haluamme lukea 00 02- sitten rekisterin koko (00 02) sanoin (jokainen sana on 2 tavua pitkä) Viimeiset 4 tavua ovat CRC -koodia. Tämä koodi luodaan matemaattisesta funktiosta edellisten tavujen yli, mikä varmistaa, että viesti on vastaanotettu oikein.

Home Assistant -integraatio Mittarin lisääminen Home Assistantiin on melko yksinkertaista. Jos olet määrittänyt MQTT -välittäjän (tässä on opas), sinun tarvitsee vain lisätä uusia määritelmiä config.yaml -tiedostoon. anturi: - alusta: mqtt name: "Main Voltage" state_topic: "energy/main/jännite" unit_of_measurement: "V" Tässä sinun on asetettava mittauksen nimi, luettava MQTT -aihe ja määrän mittausyksikkö. Tallenna tiedosto, tarkista kokoonpano ja lataa Home Assistant uudelleen, nyt mittaukset näkyvät pääsivulla.

Home Assistant -kulutuspaneeli näyttää nykyiset lukemat

Home Assistant huolehtii kaavioiden luomisesta ja lukemiesi käynnistämien prosessien automatisoinnista. Tämä opetusohjelma on valmis, nyt voit itse lisätä ominaisuuksia ja muokata sitä omiin tarkoituksiisi!

Vaihe 3: Kokoa

Koota
Koota
Koota
Koota

Tehty? On aika kiinnittää RS485 -liitäntä! Käytämme kierrettyä yksiparikaapelia maan kanssa, jota käytetään tyypillisesti puhelinlinjoihin. Tällä kaapelilla voit lähettää pitkiä matkoja (1,2 km). Käytämme kuitenkin vain tarpeeksi pitkää kaapelia poistuaksesi kaapista ja sijoittaa Arduino helposti saavutettavaan paikkaan.

Finder RS485 -liitäntä

RS485 -liitäntä nimeää liittimet A, B ja COM. Yleinen de facto -standardi on TX+/RX+: n tai D+: n käyttö vaihtoehtona B: lle (korkea MARK: lle eli joutokäynnillä), TX-/RX- tai D- vaihtoehtona A: lle (alhainen MARKille eli tyhjäkäynnille) MKR-suoja tukee myös Full Duplex -tekniikkaa, näet kaksi muuta liitintä, Y ja Z. Tässä ruuvataan kaapelin toinen pää, koska tiedämme taulukosta, että puolisuuntainen tiedonsiirto tapahtuu vain Y- ja Z-liittimissä. COM -pääte on liitettävä ISOGND -järjestelmään. Koska käytämme puoli-dupleksiliitäntää ja koska kaapelointi on vertaisverkkoa, meidän on asetettava MKR485-suojan kytkimet asetuksiemme mukaan: asetamme HALF (2 pois päältä) ja päätteen YZ: lle (3- PÄÄLLÄ); ensimmäisellä ei ole väliä. Pääte on vastus, joka yhdistää kaksi datapäätelaitetta häiriöiden vaimentamiseksi.

Tämä se on. Nyt voit sulkea kaapin ja keskittyä ohjelmistopuolelle!

Vaihe 4: Koodi

Koodi
Koodi

#sisältää

#include #include #include // wifi -tunnuksesi const char ssid = "**********"; const char pass = "**********";

WiFi -asiakasverkko; MQTTClient -asiakas; allekirjoittamaton pitkä korko = 60000; // oletuspäivitystaajuus ms unsigned long lastMillis = 0;

// connect function void connect () {Serial.print ("wifi -yhteyden tarkistus…"); while (WiFi.status ()! = WL_CONNECTED) {Serial.print ("."); viive (1000); } Serial.print ("\ nyhteys …"); while (! client.connect ("laitteen_nimi", "käyttäjän_nimi", "käyttäjän_pw"))) {// VAIHDA SOVITTAMASI ASETUKSET Serial.print ("."); viive (1000); } Serial.println ("\ nyhteys!"); client.subscribe ("energia/pää/virkistys"); // aihe päivitystaajuuden asettamiseksi etänä} // mqtt vastaanottaa takaisinsoittotoiminnon void messageVastaanotettu (Jono & aihe, Jono ja hyötykuorma) {Serial.println ("saapuva:" + aihe + " -" + hyötykuorma); if (topic == "energy/main/refreshrate") {// virkistystaajuuden käsittelijä rate = payload.toInt ()*1000; Serial.println ("uusi hinta"+merkkijono (hinta)); }}

void setup () {Serial.begin (115200); WiFi. Alku (ssid, pass); while (! Sarja); client.begin ("välittäjä_ip", netto); // MUUTA MÄÄRITTÄMÄÄN ASETUKSET client.onMessage (messageReceived); // Käynnistä Modbus RTU -asiakas, jos (! ModbusRTUClient.begin (9600)) {Serial.println ("Modbus RTU Client -ohjelman käynnistäminen epäonnistui!"); kun taas (1); }}

void loop () {client.loop (); if (! client.connected ()) {// tarkista verkkoyhteys connect (); } // julkaise viesti päivityksen jälkeen (ei -esto rutiini) if (millis () - lastMillis> rate) {lastMillis = millis (); // tehdä kaikki lukukutsut float volt = readVoltage (); viive (100); float amp = readCurrent (); viive (100); kaksinkertainen watt = readPower (); viive (100); float hz = lukuFreq (); viive (100); double wh = readEnergy (); // julkaista tulokset aiheeseen liittyvissä aiheissa client.publish ("energia/pää/jännite", merkkijono (voltti, 3)); client.publish ("energia/pää/virta", merkkijono (amp, 3)); client.publish ("energia/pää/teho", merkkijono (wattia, 3)); client.publish ("energia/pää/taajuus", Jono (hz, 3)); client.publish ("energia/pää/energia", Jono (wh, 3)); Serial.print (Jono (voltti, 3)+"V"+merkkijono (amp, 3)+"A"+merkkijono (watt, 3)+"W"); Sarja.println (Jono (hz, 3)+"Hz"+Jono (wh, 3)+"kWh"); viive (100); }}

/ * Finder Energy Meter -rekisterien lukutoiminnot * * Tarkista koodi Modbus -protokollan käsikirjasta * https://gfinder.findernet.com/public/attachments/7E/FI/PRT_Modbus_7E_64_68_78_86EN.pdf */float readVoltage () {float voltti = 0; if (! ModbusRTUClient.requestFrom (0x01, HOLDING_REGISTERS, 0x000C, 2)) {// soita rekisterille Serial.print ("jännitteen lukeminen epäonnistui!"); Serial.println (ModbusRTUClient.lastError ()); // virheenkäsittelijä} else {uint16_t word1 = ModbusRTUClient.read (); // lukea tietoja puskurista uint16_t word2 = ModbusRTUClient.read (); uint32_t millivoltti = sana1 << 16 | sana2; // bittimatematiikan voltti = millivoltti/1000,0; } paluu voltti; } float readCurrent () {float ampeeri = 0.; if (! ModbusRTUClient.requestFrom (0x01, HOLDING_REGISTERS, 0x0016, 2)) {Serial.print ("virran lukeminen epäonnistui!"); Serial.println (ModbusRTUClient.lastError ()); } else {uint16_t sana1 = ModbusRTUClient.read (); uint16_t word2 = ModbusRTUClient.read (); int32_t milliamp = sana1 << 16 | sana2; ampeeri = milliampeeri/1000,0; } palautusampeeri; }

double readPower () {double watt = 0.; if (! ModbusRTUClient.requestFrom (0x01, HOLDING_REGISTERS, 0x0025, 3)) {Serial.print ("virran lukeminen epäonnistui!"); Serial.println (ModbusRTUClient.lastError ()); } else {uint16_t sana1 = ModbusRTUClient.read (); uint16_t word2 = ModbusRTUClient.read (); uint16_t word3 = ModbusRTUClient.read (); uint64_t milliwattia; jos (sana1 >> 7 == 0) {milliwatt = sana1

Suositeltava: