projekty@dakohran.cz

Měření spotřeby elektřiny pomocí elektroměru s Modbus RTU – 1. část

Měření spotřeby elektřiny pomocí elektroměru s Modbus RTU – 1. část

Vzhledem k rostoucím cenám energií jsem pozpřemýšlel nad možností dálkového odečtu stavu elektroměru, nicméně při koumání jak na to jsem narazil na několik omezení, pojďme se na ně podívat.

TENTO PŘÍSPĚVĚK JE URČEN PRO PRACOVNÍKY S PLATNOU ELEKTROTECHNICKOU KVALIFIKACÍ, PRACUJE SE S ŽIVOTU NEBEZPEČNÝM NAPĚTÍM ! AUTOR ČLÁNKU NENESE ŽÁDNOU ODPOVĚDNOST ZA PŘÍPADNÉ ŠKODY A ÚJMU NA ZDRAVÍ !!!

  • varianta 1 – měření pomocí Hallovy sondy – levné řešení, nicméně nevýhody jsou jasné : nepřesnost měření protékajícího proudu, u spínaných zdrojů ( PC, TV atp.) je odchylka měření tak veliká, že jakékoliv měření postrádá smysl. Zásadní problémem je ale zpracování naměřených hodnot. Jelikož od sondy dostáváte analogový ( nebo digitální ) signál, který v Arduinu ( ESP ) dále zpracováváte například na hodnotu počítadla elektroměru, při výpadku napájení o tyto údaje přijdete pokud není Arduino ( ESP ) trvale napájeno záložním zdrojem, nebo pokud hodnota není v určitých časových intervalech ukládána do paměti EEPROM, odkud by si Arduino po restartu tyto hodnoty načetlo.To je další problém, kdybych ukládal například každou minutu hodnotu do EEPROM jako zálohu při výpadku napájení nebo restartu, za 1 den bych udělal 1 440 záznamů, za rok zhruba 525 000… To by se EEPROM moc nelíbilo, tak tudy cesta nevede…

  • varianta 2 – měření pomocí fototranzistoru umístěného naproti LED pulsy na elektroměru. Touto variantou jsem se chvíli vážně zabýval, ale musel jsem ji zavrhnout z prostých důvodů, co nám normy a dodavatel elektřiny zakazují. Příklad – bydlíte v bytovém domě, elektroměr dodavatele je ve „stupačce“ na chodbě. Řeknete si – fajn, do elektroměru nesmím zasahovat, to je jasné. Já si ale na „svůj“ elektroměr naproti LED pulsy umístím fototranzistor, který bude připojen na Arduino ( ESP ), umístěné ve „stupačce“ a budu ho napájet zdrojem, který bude připojen za „můj“ hlavní jistič ve stupačce. WiFi Arduina je dost silná aby „prosvítila“ rozvaděč na chodbě do mého bytu…. Není možno, protože na elektroměru nebo v jeho blízkosti nesmí být žádné nehomologované elektronické zařízení, které dodavatel neschválil ( elektromagneticé rušení atd. ). Nehledě na to, jak by se sousedi tvářili, kdyby jste se hrabali v rozvaděči na chodbě… Do týdne je tam technik, všechno vám vyškube a budete mít zbytečně problémy, takže tudy ne, elektroměr dodavatele a vše poblíž je pro nás Tabu ! Nehledě na varianta 1 – výpadek napájení nebo restart Arduina…

  • varianta 3 – On-line služby dodavatele nebo koupě Cloud elektroměru. Tato varianta je pohodlná, ale taky má své ale… Nutná stálá platba za služby nebo pronájem HW, data se snímkují v dlouhých intervalech – typicky 1 x za 15 min., naměřené hodnoty se posílájí někam do Cloudu… No za mě taky ne.
  • varianta 4 vítěz – nakonec jsem se rozhodl pro řešení zakoupit si vlatní cejchovaný elektroměr s Modbus, pomocí kterého mohu přijímat data do Arduina ( ESP ) a dále s nimi pracovat. Nebudu preferovat žádný konkrétní elektroměr, princip je u všech stejný, naměřené hodnoty „posílá“ na rozhraní Modbus. Takže si jen vyberte, jestli potřebujete 1-fázový nebo 3-fázový, na Google pohledejte a objednejte a jdeme na to…

V tomto příkladě se budeme věnovat 1-fázovému elektroměru, nicméně oproti 3-fáz.elektroměru není žádný rozdíl v zapojení pouze je nutno mírně doladit program, aby jsme mohli číst data z jednotlivých fází ( proud, napětí, účiník ).

Funkce projektu – elektroměr Modbus je umístěn v bytovém rozvaděči – typicky na chodbě bytu nebo RD 🙂 , přívodní fáze původně připojená na přívod jističů je nyní připojena na přívod Modbus elektroměru, odvod z něho je připojen zpět na přívod jističů. Pracovní nula je připojena též na Modbus elektroměr. Viz obrázek bývá svorka 3 a 4 interně proklemována.

Typické zapojení elektroměru : POZOR, ZAPOJENÍ SE MŮŽE U ELEKTROMĚRŮ LIŠIT, ŘÁDNĚ SI PROSTUDUJTE ZAPOJENÍ U VAŠEHO ELEKTROMĚRU !!!

Seznam použitých komponent :

  • Elektroměr 1 – fázový nebo 3 – fázový s Modbus
  • Arduino nebo ESP s Wi-Fi a HW sériovým portem – zde Wemos D1 R2
  • Převodník TTL na RS 485
  • Databázový server Maria DB 10 ( není podmínka )

Funkce zařízení

Pomocí protokolu Modbus naše Arduino ( ESP ) načítá z elektroměru hodnoty uložené v tzv. Modbus registrech, v tomto projektu nás zajímá napětí sítě ( V ), aktuální proud ( A ), účiník ( Cos φ ), aktuální odběr ( W ) a celková spotřeba ( kWh ). Zde poznamenám nespornou výhodu Modbus elektroměru, dojde-li k výpadku napájení nebo restartu, elektroměr „nezapomene“ hodnotu celkové spotřeby, ale pokračuje dále od hodnoty, jakou měl při výpadku napájení. Data se zasílají relativně svižně, hodnoty se nám obnovují cca po 2 vteřinách. Arduino tyto hodnoty přijme, zpracuje a každých 10 vteřin je odešle na Thingspeak a do naší databáze ( není nutná, ale má nesporně svoje výhody ). Čas odeslání na Thingspeak lze pochopitelně změnit, máte-li Free účet Thingspeak, tam zkrácení času nemá význam, protože Free účet nám umožňuje zapisovat data na jejich server co 15 vteřin, takže v našem případě tam zapíše 3 – 4x za minutu, to bohatě stačí na zobrazení na telefonu. Do naší databáze v lokální síti to pochopitelně zapíše 6x za minutu. Databáze nám poskytne tolik dat, že ani komerční placené služby nám nedodají tolik informací.

Ukázka z aplikace Elektroměr

Thingspeak na telefonu nám též umožní zobrazit trendy, je to takové light, ale stačí 🙂

Cena jednotlivých komponent

  • 1 fázový elektroměr Modbus na DIN lištu : cca 1 600 Kč
  • Wemos D1 R2 : cca 150 Kč
  • Převodník TTL na RS 485 : cca 20 Kč
  • Zdroj z 230 V na 5 V 1 A stejnos. : cca 150 Kč

Cena všech komponent nepřesáhne většinou 2 000 Kč u jednofázového elektroměru, u 3 – fázového ta cena bude vyšší, tam elektroměr zhruba stojí 3 500 Kč. Doporučuji si elektroměr vybírat tak, aby maximální proud co povoluje výrobce byl aspoň 45 A u jednofázového a 3x 100 A u třífázového elektroměru. Beru v úvahu, že budete měřit odběr běžné domácnosti v bytě nebo v RD, ne nějaký kolový mlýn ve fabrice 🙂

Zapojení elektroměru a Arduina ( ESP )

Jak jsem psal zcela nahoře, pracujeme s napětím 1 x 230 V nebo s 3 x 400 V a docela velkými proudy ! Práci se silovými obvody musí provést elektromechanik s platnou vyhláškou 50. Pokud nejste elektrikáři, nějakého poproste ať vám to zapojí. Třeba se mu bude líbit a bude to chtít doma taky. On vám to zadarmo zapojí a vy mu zadarmo naprogramujete a zapojíte Arduino 🙂 🙂 🙂

Kód programu pro Arduino ( ESP )

Ještě před rozpitváním kódu jedna důležitá poznámka : sériový port Wemos nám bude komunikovat s TTL – RS 485 převodníkem elektroměru, Wi-Fi nám bude posílat data na Thingspeak a do lokální databáze, takže při oživování si nebudeme moci posílat data na sériový monitor a dívat se, jak nám chodí data z elektroměru 🙁 Já jsem při prvotních pokusech s elektroměrem použil Arduino Mega, data z elektroměru jsem posílal na TX2 / RX2 ( Serial2 ) a na PC jsem mohl použít Serial monitor. Wemos D1 má pouze 1 sériový port, takže načítání a monitoring dat není možný ( nebudeme řešit SW serial port ) 🙂 Nicméně pokud vše zapojíme tak jak to má být a v programu uděláme ty správné úpravy v kódu, mělo by to fungovat na první zapnutí.

Credentials.h

char ssid[] = „Jmeno_Wi-Fi“; // your network SSID (name)
char pass[] = „Heslo_Wi-Fi“; // your network password

char user[] = „ESP“; // MySQL user login username – jméno uzivatele databaze
char password[] = „passwordSQL“; // MySQL heslo uzivatele databaze

Tak tady je to docela jednoduché, upravte soubor Credentials.h tak, aby obsahoval přihlašovací údaje Vaší Wi-Fi sítě a SQL databáze.

Arduino code ( ESP )

Pojďme na to, naimportovat knihovny… Upravili jsme si Credentials.h ? #define MAX485_RE_NEG D9 – pozor u některých Wemos je to D7 Jméno a IP adresa databázového serveru – já mám jméno stejné jako IP adresu 🙂 vy můžete také, ale ZADEJTE SKUTEČNOU ADRESU VAŠEHO SQL SERVERU !!!

Já mám v domácí síti Synology disk ( supr hračka ). Disk běží nonstop, takže jsem spustil službu PHPmyAdmin a Maria DB 10…

Pokud nemáte Synology disk ( nebo jiný který podporuje SQL služby ), můžete si data odesílat například do jiného PC co běží nonstop ve vaší síti ( Raspberry, mini PC… ).

Zadáme číslo portu Vaší databáze, jméno databáze a tabulky….

Tady toho moc není, snad jen za zmínku : podud se ESP do 10 vteřin nepřipojí k Wi-Fi, dojde k jeho restartu. Pak následuje standartní OTA – přehrání ESP přes Wi-Fi, je-li nutno. Ono chodit s notebookem k domácímu rozvaděči, rozdělávat ho a šachovat s USB kabelem když je všechno okolo pod napětím není zrovna supr 🙂 Jdeme dál… STOP ! Ale je : Serial.begin(9600, SERIAL_8E1);

Většina elektroměrů s Modbus podporuje pouze přenosovou rychlost 9 600 bitů/sec 8 Bits, Even Parity, 1 Stop Bit ! Takže opatrně na experimenty 🙂

Tady zapisuji do SQL databáze, není potřeba nic měnit za předpokladu, že jména proměnných v SQL souhlasí s proměnnými zde.

Pro zápis dat do Thingspeak databáze je nutno zde zadat Váš API klíč !

Tady již načítáme z Modbus registrů žádané hodnoty. Zde například registr 0x500A obsahuje hodnotu aktuálního proudu. Pozor, každý typ elektroměru to má jinak poskládané, není pravidlo, že tento registr je proud pro všechny elektroměry.

ADRESY REGISTRŮ VAŠEHO ELEKTROMĚRU NAJDETE V MANUÁLU NEBO NA WEBOVÝCH STRÁNKÁCH VÝROBCE !

Na konci programu jsou už jen dva časy co nás zajímají…. Zapiš do lokální databáze, počkej 5 vteřin, zapiš do Thingspeak, počkej 5 vteřin. Vidím, že v kódu zůstalo nějaké smetí po oživování, nemusí tam být… Ale budiž…

Pokračování příště – zápis do Thingspeak

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.