
Toto zařízení jsem vyvíjel na zakázku, ale protože by mohlo být přínosné i pro ostatní, rozhodl jsem se ho zde také zařadit. Zadání znělo jasně: z elektroměru vyčítat data, ukládat je v této elektronice a současně je odesílat na web do databáze pro pohodlný přístup k měřeným datům odkudkoli a kdykoli. Díky tomu, že jsou data uložena v databázi, je možné je dále libovolně zpracovávat.
Pro měření budete potřebovat samotný elektroměr s impulzním výstupem a dělicím poměrem 800, 1000 nebo 2000 pulzů na 1 kWh. Takové elektroměry jsou celkem levné, takže to není zásadní problém. Konstrukce je ale poměrně náročná a je u ní nutná znalost programování. Základ tvoří procesor ATmega328P-PU na platformě Arduino UNO, ale protože je použit ethernetový modul, je nutné v programu upravit MAC adresu, která musí být jedinečná. Nelze použít adresu, která je v programu zveřejněném v dokumentaci jako výchozí.
Ideální je použít MAC adresu z nějakého vyřazeného síťového zařízení, které už nebudete používat, například síťové karty, routeru, telefonu nebo Wi-Fi adaptéru. Další věcí je webová stránka, na kterou se budou odesílat data. I tu je nutné v programu změnit a zadat vlastní stránku. Případně může být nutné zadat IP adresu a bránu. Tyto informace jsou v programu nastaveny tak, aby si je ethernetový modul stáhl z DHCP serveru. Pokud ale DHCP server v místě použití dostupný není, je nutné data vyplnit ručně.
Technické specifikace
| Napájecí napětí | 230 V/AC |
|---|---|
| Jištění pojistkou | 0,1 A/F |
| Vstup | Optočlenový |
| Dělicí poměry | 800 / 1000 / 2000 pulzů na 1 kWh |
| Maximální hodnota elektroměru | 327609999 kWh, poté přeteče a počítá od 0 |
| Ukládání hodnot | Do EEPROM procesoru |
| Odesílání hodnot | Na web do databáze přes Ethernet |
Popis zařízení
Zařízení se používá k odečtu z elektroměrů, které poskytují pulzní výstup. Elektronika dokáže pracovat s elektroměry s dělicím poměrem 800, 1000 nebo 2000 pulzů na 1 kWh. Nastavený dělicí poměr se zobrazuje na displeji v prvním řádku zcela vpravo. Před nastaveným dělicím poměrem je aktuální počet přijatých pulzů od připojeného elektroměru označený P. Na úvodním obrázku je údaj P=216/1000, což znamená aktuálně přijato 216 pulzů při dělicím poměru 1000 pulzů na 1 kWh.
Údaj U nemá praktický význam pro uživatele. Jedná se o aktuální hodnotu napětí v síti, která není uvedena ve voltech. Na jejím základě elektronika vyhodnocuje případné výpadky napětí a provádí zálohy měřených hodnot do interní EEPROM paměti. Při správných podmínkách by se měl zobrazovat libovolný číselný údaj, případně hlášení MAX. Pokud se příliš často zobrazuje nápis MIN, je nutné zkontrolovat síťové napětí, které musí odpovídat hodnotě 230 V +/- 10 %. Na obrázku je to U=998.
Stavba zařízení
Upozornění: zařízení pracuje se síťovým napětím 230 V, proto není určeno začátečníkům. Stavba vyžaduje zkušenosti s elektronikou, bezpečnou práci se síťovým napětím a zároveň schopnost upravit a nahrát firmware.
Z principu tohoto zařízení je nutné provést individuální změny a nastavení programu, například zadání jedinečné MAC adresy, webové stránky pro odesílání dat a dalších parametrů.

Jak je ze zapojení patrné, zařízení není příliš složité. Základ tvoří mikroprocesor ATmega328P-PU, který obsahuje bootloader pro snadné aktualizace programu. Zdroj napětí je tvořen malým 1,9W trafem 12 V, označeným TR1, za kterým následuje usměrňovací můstek a stabilizátor napětí IC1. Nejedná se o klasický monolitický stabilizátor 7805, ale o spínaný měnič. Ten je použit kvůli větší spotřebě ethernetového modulu, protože s klasickým stabilizátorem by byl nutný poměrně velký chladič.
Součástí zdroje je i vysokokapacitní kondenzátor C5, který slouží k zálohování napětí při výpadku proudu, aby se stihla všechna data držená procesorem v paměti bezpečně uložit do interní EEPROM. Další procesor IC3, PIC12F508, není ve finální verzi osazen. Původně byl zamýšlen jako watchdog pro IC2. V průběhu vývoje se totiž ukázalo, že ethernetový modul není tak stabilní, jak bych si přál, a občas docházelo k výpadkům činnosti. I z tohoto důvodu je jednou za 24 hodin proveden restart. Vyčítání pulzů z elektroměru je řešeno přes optočlen OK1, jehož vstup je vyveden na svorky X1. Poslední podstatnou částí je LCD displej o dvou řádcích po 16 znacích. Připojuje se do konektoru JP4 a trimrem R8 se nastavuje kontrast.
Deska spoje a osazovací plán



Deska plošného spoje je zhotovena na oboustranné desce spojů o velikosti 160 x 70 mm. Deska obsahuje i prokovené otvory. Naštěstí jich není mnoho a dají se provést protažením slabého drátku společně s vývodem dané součástky a následným zapájením z obou stran. Kde to bylo možné, jsou prokovy situovány na vývody součástek, které jdou snadno pájet z obou stran desky, například rezistory nebo diody. Při pájení je nutné postupovat pečlivě, aby nezůstal vynechaný prokov, protože zařízení by pak nemuselo správně pracovat.
Modul ethernetu
V zařízení se používá ethernetový modul běžně označovaný ENC28J60, což je označení použitého integrovaného obvodu. Jde o poměrně levný a časem prověřený obvod od firmy Microchip pro komunikaci po Ethernetu rychlostí 10 Mb/s. Tento obvod bohužel nemá hardwarovou podporu, takže vše musí obsluhovat řídicí mikropočítač, v našem případě ATmega328P-PU. To klade vysoké nároky hlavně na paměť RAM. Při dlouhodobé činnosti může docházet k zamrznutí komunikace, kdy je nutný reset mikropočítače a opětovné navázání komunikace s ethernetovým modulem přes SPI sběrnici.
Právě z tohoto důvodu byl původně použit další procesor PIC12F508 jako watchdog. Nakonec se problém podařilo vyřešit programově, takže použití externího watchdogu není nutné. Ethernetový modul existuje v různých variantách a do tohoto zařízení jdou zasunout dvě z nich. Zařízení je ale určeno pouze pro moduly napájené 5 V. Běžně jsou k dostání také moduly s napájecím napětím 3,3 V a ty zde použít nelze.
Modul má všechny potřebné součástky osazené a stačí ho zasunout do konektoru na desce odečtu. Má však konektor vyvedený na stranu součástek, takže je nutné ho osadit vzhůru nohama, jak je patrné z úvodního obrázku. Na desce odečtu musí být také vyříznut nebo vyfrézován otvor pro ethernetový konektor, který přesahuje nad připojovací konektor. Pro pevné uchycení v desce odečtu jsou použity čtyři distanční sloupky o délce 13 mm se závity M2,5.
Všechny použité vývody modulu jsou propojeny přímo s procesorem kromě vývodu CS, který je veden přes jumper JP5. Tím lze volit, na jaký vývod procesoru se připojí. Důvodem je možnost použití dvou různých knihoven pro řízení ethernetového modulu.
Pokud je jumper osazen na pinech 2-3, používá se knihovna EtherCard. Je složitější na obsluhu, ale zato podstatně stabilnější než jiné knihovny. Pro tuto knihovnu je napsán i program pro procesor a je nutné ji mít nainstalovanou v Arduino IDE při programování procesoru.
Při osazení jumperu na pinech 1-2 nebude zařízení s dodaným programem fungovat, ale tato možnost je připravena pro případné použití programu napsaného s knihovnou UIPEthernet. Tato knihovna je na programovou obsluhu velmi jednoduchá a měla by být kompatibilní s původní Arduino knihovnou určenou pro ethernetový modul s obvodem W5100. Protože ale ENC28J60 nemá hardwarovou podporu, musí vše realizovat knihovna a procesor. Knihovna tak v procesoru zabírá přes 20 kB paměti a vezme i značnou část RAM. Pro samotný program pak zbývá málo prostředků, necelých 10 kB. Při testech se tato knihovna chovala velmi nestabilně a většinou nedokázala pracovat déle než 12 hodin. Proto je konstrukce nakonec zprovozněna s knihovnou EtherCard, i když je méně přívětivá na obsluhu. Tyto informace je nutné brát s rezervou, protože autoři knihovny průběžně upravují a vylepšují.
Modul displeje
Dalším samostatným modulem je dvouřádkový LCD displej. V tomto zapojení byl použit poněkud nestandardní LCD, který má vývody na boku ve dvouřadém konektoru a nemá podsvícení. Odečet bude v podstatě fungovat i bez tohoto displeje, který je možné i za chodu odpojovat a znovu připojovat. V případě připojení za chodu je nutné krátkým stiskem tlačítka S1 vyvolat informace o zařízení, čímž dojde i k inicializaci LCD displeje a ten začne správně zobrazovat. Pokud tento displej nemáte, je možné použít jiný, ale bude nutné ho propojit kabelem a vyřešit jeho upevnění, protože pravděpodobně nebudou pasovat montážní otvory.
Na displeji se zobrazují informace o momentálním stavu odečtených kWh a další provozní informace. Krátkým stiskem S1 je možné vyvolat informace o zařízení. Ty se postupně promítnou: verze firmware, web autora, název elektroměru, přidělená IP adresa a MAC adresa. Při odesílání dat na web se zobrazení přepne na informace o průběhu odesílání. Běžně tak můžeme dostat hlášení, že data byla odeslána v pořádku, nebo že se odeslání nezdařilo. Zobrazuje se také informace o ukládání dat z RAM do EEPROM. To se provádí jednou denně z bezpečnostních důvodů nebo při poklesu či výpadku napětí.
Při zapnutí jsou zobrazeny informace o webu autora, verze firmware, název elektroměru a následně několik hlášení o dostupnosti internetu, DHCP serveru a o tom, zda inicializace ethernetového modulu proběhla v pořádku. Kontrast displeje se nastavuje trimrem R8 tak, aby byl displej dobře čitelný.
Použitý elektroměr a jeho připojení
Odečet je univerzální modul a může pracovat s různými elektroměry. Podstatné je, aby elektroměr měl pulzní výstup s dělicím poměrem 800, 1000 nebo 2000 pulzů na 1 kWh. Tento dělicí poměr se volí jumperem JP8. Pokud není jumper vůbec osazen, odečet předpokládá elektroměr s dělicím poměrem 800 pulzů na 1 kWh. Pokud je jumper osazen na pinech 1-2, jde o 2000 pulzů na 1 kWh, a pokud je na pinech 2-3, jde o 1000 pulzů na 1 kWh.
Takový elektroměr nepředává informaci, kolik už má natočených kWh, ale pouze průběžně odesílá pulzy podle momentálního odběru. Hodnota odebraných kWh je proto sestavována až v odečtu a zobrazena na displeji. Pokud je připojen elektroměr, který má vlastní displej, nemusí jeho stav souhlasit s tím, kolik má odečteno modul odečtu. Pokud pomineme fakt, že elektroměr mohl mít už před připojením něco natočeno, může dojít ke zkreslení i při spuštění zařízení, například při výpadku proudu a následném obnovení dodávky. Elektroměr pravděpodobně začne měřit o zlomek času dříve, než nabootuje modul odečtu. To trvá zhruba jednu vteřinu a v této době odečet nereaguje na pulzy z elektroměru.
Při častých výpadcích napájení tak může dojít k rozsynchronizování modulu odečtu a elektroměru. I z tohoto důvodu je použití odečtu spíše orientační s možností nahlížet na stav elektroměru na dálku přes webové rozhraní, což je hlavní funkce tohoto odečtu. Po obnovení dodávky proudu odečet nabootuje, ještě nějaký čas kontroluje síť, zobrazuje informace a trvá několik desítek vteřin, než se zobrazí hlavní obrazovka s hodnotou odečtených kWh a aktuálně přijatých pulzů. Všechna tato data jsou při výpadku napájení zálohována a po spuštění obnovena. V tomto čase jsou ale už pulzy z elektroměru zaznamenávány.
Elektroměr se připojuje pomocí svorek X1. Pro maximální univerzálnost jsou přítomny svorky s napájením přibližně 22 V. Na svorce X1-1 je kladné napětí 22 V/DC, nestabilizované a pohybující se přibližně v rozmezí 15-24 V, na svorce X1-4 je GND. Svorka X1-1 může být osazením jumperu JP1 propojena se svorkou X1-2, což je anoda optočlenu. Stejně tak svorka X1-4 může být pomocí JP2 propojena se svorkou X1-3, tedy katodou optočlenu. To umožňuje libovolné zapojení elektroměru podle potřeby, jak s interním napájením z odečtu, tak zcela galvanicky oddělené, pokud přivedeme externí napěťové pulzy o napětí cca 5-30 V na svorky X1-2 a X1-3. V takovém případě nejsou JP1 ani JP2 osazeny.
Ovládání
Modul odečtu má pouze jeden ovládací prvek, pokud pomineme vstup pulzů z elektroměru, a tím je tlačítko S1. Krátký stisk tlačítka vyvolá inicializaci displeje a následně výpis informací na displeji. Druhou funkcí je vymazání všech uložených hodnot a návrat do továrního nastavení. Z bezpečnostních důvodů je tento postup složitější, aby reset nemohl být proveden nechtěně.
Nejprve je nutné modul odečtu odpojit od napájení. Následně stiskneme tlačítko S1, stále ho držíme, a zapneme napájení. Na displeji se zobrazí informace PODRZ TLACITKO MAZU HODNOTY. Po pěti sekundách, pokud je tlačítko stále sepnuté, dojde k vymazání všech hodnot a návratu do továrního nastavení. Smazání je indikováno nápisem HODNOTY SMAZANY UVOLNI TLACITKO. Tím je stav kWh vynulován včetně stavu čítače pulzů. Následně odečet přejde do běžného provozu. Toto smazání hodnot je vhodné provést při prvním spuštění odečtu, aby se vyčistila paměť.
Signalizační LED
| LED1 | Signalizuje, že je napájení modulu odečtu v pořádku. |
|---|---|
| LED2 | DHCP Error. Kritická chyba, která může značit odpojený ethernetový kabel nebo jiný problém v síti. Tato chyba způsobí restartování zařízení, dokud se nepodaří získat data z DHCP serveru. S touto chybou nebudou žádná data odesílána na web. Chyba je zobrazována i na displeji, pokud je připojen. |
| LED3 | Connect web Error. Méně závažná chyba. Může jít o dočasný výpadek internetového připojení nebo momentální nedostupnost webové stránky, na kterou se odesílají data. Chyba nezpůsobí okamžitý restart, pouze se uloží. Pokud se třikrát po sobě nepodaří odeslat data na webovou stránku, dojde k restartu, aby se modul pokusil znovu navázat spojení. Chyba je zobrazována i na displeji, pokud je připojen. |
Firmware procesoru
Jak už bylo uvedeno, v programu procesoru je nutné provést dílčí změny. Bylo by možné tyto změny upravit uživatelsky bez zásahu do programu, ale bylo by to poměrně složité, proto je zde popsán postup úprav přímo v programu. Upravit je nutné MAC adresu, adresu webové stránky, volaný skript na webové stránce a název daného elektroměru.
MAC adresu najdete v programu na řádku:
static byte mymac[] = { 0x00,0x0c,0x43,0x56,0xdb,0x2c };
Ve složených závorkách je zapsána MAC adresa 00:0C:43:56:DB:2C, pod kterou se bude ethernetový modul hlásit v síti. Tato adresa musí být zcela jedinečná. Není vhodné ji vymyslet náhodně, lepší je použít MAC adresu z vyřazeného zařízení, například ethernetové karty, Wi-Fi karty nebo telefonu. V lokální síti by pravděpodobnost duplicitní adresy byla malá, ale odečet je konstruován pro práci s internetem, kde by to už problém být mohl.
Dalším údajem je adresa webové stránky, se kterou se odečet spojuje a na které volá skript pro zápis do databáze:
String web = "www.sakul.cz";
Webová adresa je uvedena v uvozovkách. Doporučuji dodržet zápis s www.. Webový prohlížeč ho nemusí vyžadovat, ale zde je nutné ho zadat podle nastavení hostingu.
Volaný skript se nastavuje na řádku:
ether.browseUrl(PSTR("/add_data.php?elektromer=Elektromer-001"), queryString, website, my_callback);
Důležitá je část za zpětným lomítkem, tedy add_data.php. V tomto řádku je nutné upravit i poslední položku, název elektroměru Elektromer-001. Název elektroměru je nutné zadat ještě jednou na začátku programu v řádku:
String NazElekt = "Elektomer-001";
Tím jsou nezbytné změny programu provedeny a můžeme přejít k webové části a databázi, kam se hodnota elektroměru ukládá.
Webové rozhraní
Aby bylo možné hodnoty ukládat na webu do databáze, je nutné zajistit webový hosting. Účelem tohoto článku není popisovat založení hostingu, ale podstatné je, aby podporoval PHP a databázi MySQL. Zkušenější uživatelé si řešení mohou přizpůsobit i bez MySQL nebo s jinou databází. Zde je postup popsán pro PHP a MySQL. V dokumentaci jsou vzorové skripty pro ukládání dat do databáze add_data.php, čtení uložených dat review_data.php a soubor dbconnect.php, který se stará o spojení s databází.
Na hosting je nutné nahrát soubory review_data.php a add_data.php. Tyto soubory není potřeba upravovat. Dále je nutné upravit obsah souboru dbconnect.php, například v poznámkovém bloku. Jde o konfigurační soubor pro spojení s MySQL databází na hostingu.
MyUsername | Uživatelské jméno pro přístup k databázi. |
|---|---|
MyPassword | Heslo k databázi. |
MyHostname | Adresa databáze. |
Dále není potřeba nic měnit. V souboru je ještě zadaná tabulka databáze arduino_sakul_cz, kterou je možné ponechat. Pokud je vše správně vyplněno, soubor dbconnect.php nahrajeme na hosting. Nyní by to ještě nefungovalo, protože v databázi není vytvořena správná tabulka. Tu vytvoříme přihlášením do administrace databáze přes phpMyAdmin, kde zvolíme import a vybereme soubor arduino_sakul_cz.sql. Tím by mělo dojít k vytvoření tabulky a nahrání ukázkových dat, která je možné případně vymazat.
Pokud do webového prohlížeče zadáte adresu webu například http://arduino.sakul.cz/review_data.php, měla by se zobrazit tabulka hodnot. Pokud je odečet připojen ethernetovým kabelem do sítě s přístupem k internetu, data by se měla v tabulce aktualizovat.
Interval odesílání hodnoty elektroměru se nastavuje v programu na řádku:
unsigned long interval = 3600000;
Čas je uveden v milisekundách a takto je nastaven interval na jednu hodinu.
Závěrem
Jak už bylo uvedeno v úvodu, tato konstrukce není určena začátečníkům, ale spíše zkušenějším, kteří mají praxi s programováním a alespoň okrajově se orientují v PHP s napojením na databázi. Příklad webového rozhraní je pouze ukázkový a pro smysluplné nasazení by bylo nutné napsat vlastní webovou aplikaci. Cílem zde bylo ukázat, jak dostat data z elektroniky odečtu do databáze co nejjednodušším způsobem.
Dokumentace
Zde si můžete stáhnout veškerou dokumentaci pro stavbu. Je zde projekt pro Eagle, program pro procesor i vzorové webové skripty.
Prohlášení
Tato konstrukce je autorská práce. Není povoleno bez souhlasu autora přejímání na jiné stránky nebo komerční využití. Je povoleno se pouze odkazovat na tento web a tuto konstrukci. Autor nepřebírá odpovědnost za chování zařízení ani případné škody způsobené jeho použitím. Zařízení je určeno pouze k užití pro vlastní potřebu. V konstrukci je použit program mikrokontroleru, na který se vztahují autorská práva. Jakýkoli prodej není bez souhlasu autora možný.