Menu

Email: SakulRaider@seznam.cz

Servery:

Dnes návštěv: 375  On-line: 1

Elektronika

uProcesorové konstrukce

 - Odečet elektroměru v2

Odečet elektroměru v2

 
 

Toto zařízení jsem vyvíjel na zakázku, ale protože by možná mohlo být přínosné pro ostatní, rozhodl jsem se ho zde také zařadit. Zadání znělo jasně. Je třeba z elektroměru vyčítat data, která se ukládají 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žno je dále jakkoli zpracovávat. Takže toto je asi v kostce co toto zařízení dělá. Pro měření budete ještě potřebovat samotný elektroměr, s impulzním výstupem a to s dělícím poměrem 800, 1000 nebo 2000 pulzů na 1KWh. Tyto elektroměry jsou celkem levné, takže to není žádný problém.
Bohužel tato konstrukce je poměrně náročná a je u ní nutná znalost programování. Základ sice opět tvoří procesor ATMEGA328P-PU na platformě Arduino UNO, ale protože používáme i ethernetový modul je nutno v programu upravit MAC adresu, která musí být jedinečná. Není tak možné použít adresu, která je defaultně v programu zde na webu zveřejněném, ale tuto adresu si musíte ručně změnit. Ideální je pokud máte doma nějaké síťové zařízení jež má nějakou MAC (síťovka, router, chytrý telefon, wifi karta, atd.) a nehodláte ho už nikdy používat, tak můžete použít MAC adresu z něho. Další problém je webová stránka na kterou se budou odesílat data. Opět je nutno toto v programu změnit a zadat Vaši stránku. Případně by i mohlo 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 ovšem tento server není v místě použití dostupný, je nutno data vyplnit ručně. K těmto problémům se ještě v průběhu dostaneme a povíme si o tom více. Následují již technické specifikace.

Technické specifikace

Napájecí napětí: 230V/AC
Jištění pojistkou: 0,1A/F
Vstup: Optočlenový
Dělící poměry: 800/1000/2000 na 1KWh
Max. hodnota elektroměru: 327609999KWh (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í

Toto 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ělícím poměrem 800, 1000 nebo 2000 pulzů na 1KWh. Nastavený dělící poměr se zobrazuje na displeji v prvním řádku zcela vpravo. Před nastaveným dělícím poměrem je aktuální počet přijatých pulzů od připojeného elektroměru označený P=(na obrázku výše je to údaj: P=216/1000, což znamená aktuálně přijato 216 pulzů při dělícím poměru 1000 pulzů na 1KWh). Údaj U= nemá praktický význam. Jedná se o aktuální hodnotu napětí v síti (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 jakýkoli číselný údaj, případně hlášení MAX. Pokud se příliš často zobrazuje nápis MIN, je nutné zkontrolovat napájecí (síťové) napětí, které musí odpovídat hodnotě 230V +/-10%. Na obrázku je to U=998.

Stavba zařízení

Bohužel toto zařízení není určeno ke stavbě začátečníkům. V první řadě z důvodu, že pracuje na síťové napětí 230V. Dále pak z nutnosti ovládat programování. Z principu tohoto zařízení je nutné provést individuální změny a nastavení programu, jako je například zadání jedinečné MAC adresy, webové stránky kam se budou odesílat data, plus ještě nějaká další nastavení.

Jak je ze zapojení patrné, zařízení není ani příliš složité. Základ nám tvoří mikroprocesor ATMEGA328P-PU, který obsahuje bootloader pro snadné aktualizace programu. Dále tu máme zdroj napětí tvořený malým 1,9W trafem 12V (TR1), za kterým následuje usměrňovací můstek a stabilizátor napětí IC1. Zde bych chtěl upozornit na fakt, že se nejedná o klasický monolitický stabilizátor (7805), ale o spínaný měnič. Ten je použit z důvodu větší spotřeby modulu ethernetu a při klasickém stabilizátoru 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 stihly veškerá 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ě jsem ho zamýšlel použít jako watchdog pro IC2. V průběhu vývoje této konstrukce 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 24hodin 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í součástkou je pak LCD displej o dvou řádcích po 16ti znacích. Tento displej se připojuje 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 160x70mm. Bohužel deska obsahuje i prokovené otvory. Naštěstí jich není mnoho a dají se lehce provést protažením slabého drátku společně s vývodem dané součástky a následným zaletováním z obou stran. Kde to bylo jen trochu možné, tak jsem prokovy situoval na vývody součástek jež jdou snadno pájet z obou stran desky (rezistory, diody atd.). Při pájení je doporučeno postupovat pečlivě, aby jste někde nevynechaly prokov, čímž by zařízení nemuselo správně pracovat.

Modul ethernetu

V tomto zařízení se používá ethernetový modul běžně označovaný ENC28J60, což je označení použitého IO v tomto modulu. Jde o poměrně levný a časem prověřený IO od firmy Microchip pro komunikaci po ethernetu rychlostí 10Mb/s. Bohužel tento IO nemá hardware podporu, a tak vše musí být obsluhováno řídícím mikropočítačem. V našem případě je to právě ATMEGA328P-PU. To klade celkem vysoké nároky hlavně na paměť RAM tohoto mikropočítače a bohužel při dlouhodobé činnosti může a většinou i dochází k zamrznutí komunikace a je nutný reset mikropočítače a opětovné navázání komunikace s modulem ethernetu (komunikuje s procesorem přes SPI sběrnici). Právě z tohoto důvodu byl původně použit další procesor PIC12F508 jako watchdog. Nicméně se mi to nakonec podařilo vyřešit programově, takže použití tohoto externího watchdogu není nutné. Zde bych chtěl upozornit na fakt, že tento ethernetový modul se vyskytuje v různých variantách, přičemž 2 varianty jdou zasunout do tohoto zařízení. Avšak pozor toto zařízení je pouze pro moduly, jež jsou napájeny 5V. Běžně jsou k dostání moduly s napájecím napětím 3,3V a ty použít NELZE. Vhodný modul je možno zakoupit například na Aukru nebo v obchodě zde. Modul má již všechny potřebné součástky osazeny a stačí ho tedy pouze zasunout do konektoru na desce odečtu. Bohužel má konektor vyveden na stranu součástek a tak je nutné ho osazovat vzhůru nohama, jak je patrné z úvodního obrázku. Taktéž musí být na desce odečtu vyříznut (vyfrézován) otvor pro ethernetový konektor, který přesahuje nad připojovací konektor. Pro pevné uchycení v desce odečtu jsou použity 4 distanční sloupky o délce 13mm se závity M2,5.
Veškeré vývody tohoto modulu, jež jsou použity, jsou propojeny přímo s procesorem, kromě jednoho, který je přes Jumper (JP5), kde se dá volit na jaký vývod (CS) procesoru se tento vývod připojí. Toto je použito z důvodu, že je možné pro řízení ethernetového modulu použít 2 druhy ovládacích knihoven. Pokud je jumper osazen na pinech 2-3, používá se knihovna EtherCard, která je složitější na obsluhu, ale zato je podstatně stabilnější než jakékoli jiné knihovny. Pro tuto knihovnu je i napsán program pro procesor a je nutné ji mít nainstalovanou v prostředí Arduino IDE, při programování procesoru. V případě osazení jumperu na pinech 1-2, nebude zařízení vůbec fungovat, ale je tam tato možnost 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 založený na IO W5100. Bohužel z důvodu, že náš modul ethernetu založený na IO ENC28J60 nemá hardware podporu, musí vše realizovat knihovna potažmo procesor. Tím pádem knihovna zabírá v procesoru přes 20KB paměti a taktéž si ukousne značnou část RAM. Takže pro samotný program již moc prostředků nezbývá (necelých 10KB). Navíc při testech se bohužel tato knihovna chovala extrémně nestabilně a většinou nedokázala v kuse pracovat déle jak 12 hodin (většinou však méně). Proto jsem to nakonec zprovoznil s knihovnou EtherCard i když je méně přívětivá na obsluhu. Všechny tyto informace je nutné brát s rezervou, neb autoři těchto knihoven je stále upravují a vylepšují, takže je možné, že v tuto chvíli už můžou fungovat dobře.

Modul displeje

Další samostatný modul je modul dvouřádkového LCD displeje. V tomto zapojení jsem použil poněkud nestandardní LCD, které má vývody na boku ve dvouřadém konektoru a nemá podsvícení. V podstatě bude odečet fungovat i bez tohoto displeje, který je možno i za chodu odpojovat a znovu připojovat. V případě připojení za chodu zařízení 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 nebudete mít tento displej, je možno použít jakýkoli jiný, akorát bude nutné ho propojit se zařízením pomocí kabelu a vyřešit jeho upevnění, neb s největší pravděpodobností nebudou pasovat montážní otvory.
Jak už jsem psal v úvodu, na tomto displeji se zobrazují informace o momentálním stavu odečtených KWh plus další informace. Při krátkém stisku S1 je možno vyvolat informace o zařízení. Tyto informace se postupně promítnou. Zobrazuje se verze firmware, web autora, název elektroměru, přidělená IP adresa a MAC adresa.
V případě, že se odesílají data na web, je přepnuto zobrazení na informace o průběhu odesílání dat. Běžně tak můžeme dostat hlášení o tom, že data byla odeslána v pořádku, nebo že se odeslání nezdařilo. Taktéž je zobrazována informace, pokud zrovna probíhá ukládání dat z RAM do EEPROM. Toto je prováděno jednou denně z bezpečnostních důvodů nebo v případě poklesu (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 zda celá inicializace ethernetového modulu proběhla v pořádku.
Ještě k nastavení kontrastu displeje. K tomu slouží trimr R8, který nastavíme 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 takovýto elektroměr měl pulzní výstup a tento výstup měl dělící poměr 800, 1000 nebo 2000 pulzů na 1KWh. Tento dělící poměr se volí jumperem JP8. Pokud není jumper vůbec osazen, bude odečet předpokládat připojení elektroměru s dělícím poměrem 800 pulzů na 1KWh, pokud je osazen jumper na pinech 1-2 je to 2000 pulzů na 1KWh a pokud je jumper na pinech 2-3 je to 1000 pulzů na 1KWh. Protože takovíto elektroměr nepředává informaci kolik má již natočených KWh, ale pouze průběžně odesílá pulzy o momentálním odběru, hodnota odebraných KWh je sestavována až v odečtu, kde je pak na displeji zobrazena. Pokud je připojen elektroměr, který má i svůj displej, kde zobrazuje kolik již natočil, nemusí tento stav souhlasit s tím, kolik má odečteno tento modul odečtu. Pokud pomineme fakt, že elektroměr mohl mít již před připojením k odečtu něco natočeno, může dojít ke zkreslení i v momentě spuštění zařízení, například při výpadku proudu a následném obnovení dodávky proudu. V tento moment pravděpodobně začne elektroměr měřit o zlomek času dříve, než nabootuje modul odečtu. To trvá něco kolem 1 vteřiny a v této době nereaguje odečet na zasílané 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. Poté co odečet po obnovení dodávky proudu nabootuje ještě nějaký čas kontroluje síť (ethernet), zobrazuje informace a celkem to 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šechny tyto data jsou při výpadku napájení zálohována a po spuštění jsou obnovena), v tomto čase jsou však již pulzy z elektroměru zaznamenávány.
Elektroměr se připojuje pomocí svorek X1. Pro maximální universálnost jsou přítomny svorky s napájením cca 22V. Na svorce X1-1 je kladné napětí 22V/DC (nestabilizované a může se pohybovat v rozmezí 15-24V), na svorce X1-4 je GND. Svorka X1-1 může být pomocí osazení jumperu JP1 propojena se svorkou X1-2 což je ANODA optočlenu, jež slouží jako optické oddělení vstupu odečtu od elektroměru. Stejně tak svorka X1-4 může být pomocí jumperu JP2 propojena se svorkou X1-3, což je KATODA optočlenu. Toto nám umožňuje libovolné zapojení elektroměru, tak jak se nám to hodí a to jak s interním napájením z odečtu (22V) nebo zcela galvanicky oddělené, pokud přivedeme externí napěťové pulzy o napětí cca 5-30V na svorky optočlenu X1-2 a X1-3, přičemž pak nejsou JP1 ani JP2 osazeny.

Ovládání

Tento modul odečtu má pouze jeden ovládací prvek (pomineme-li vstup pulzů z elektroměru) a to tlačítko S1. Jak už jsem naznačil v textu dříve, krátký stisk tlačítka vyvolá inicializaci displeje a následně je provedeno vypsání informací na displeji. Je tu však i druhá funkce a tou je vymazání všech uložených hodnot a návrat do továrního nastavení. Toto z bezpečnostních důvodů je o něco složitější (aby reset nemohl být proveden nechtěně). V první řadě je nutné modul odečtu odpojit od napájení. Následně stiskneme tlačítko S1 (stále držíme) a zapneme napájení. Následně je na displeji zobrazena informace “PODRZ TLACITKO MAZU HODNOTY“ Po 5 sekundách, pokud je stále tlačítko 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ímto 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 OK.
LED2 – DHCP Error – toto je kritická chyba, jež může značit odpojený ethernetový kabel, případně jiný problém na síti (ethernetu). Tato chyba bude mít za následek restartování zařízení, dokud se nepodaří získat data z DHCP serveru. S touto chybou nebudou žádná data odesílána na web! Tato chyba je i zobrazována na displeji pokud je připojen.
LED3 – Conect web Error – Méně závažná chyba. Může jít o dočasný výpadek internetového připojení. Případně momentální nedostupnost webové stránky, na kterou se odesílají data. Tato chyba nezpůsobí okamžitý restart, ale pouze se uloží, a teprve pokud se 3x po sobě nepodaří odeslat data na webovou stránku, dojde k restartu, čímž se modul odečtu pokusí znovu navázat spojení. Tato chyba je i zobrazována na displeji pokud je připojen.

Firmaware procesoru

Jak už jsem psal v předchozím textu, je nutné provést v programu procesoru dílčí změny. Je pravdou, že by bylo možné tyto změny upravit uživatelsky bez nutnosti zásahu do programu. Avšak bylo by to poměrně složité, takže si řekneme jak to upravit v programu. Upravit bude nutné následující položky:
MAC adresu, adresu webové stránky, volaný script na webové stránce a název daného elektroměru (odečtu).
MAC adresa – v programu vyhledejte řádek:
static byte mymac[] = { 0x00,0x0c,0x43,0x56,0xdb,0x2c }; Na tomto řádku ve složených závorkách je zapsána MAC adresa (00:0C:43:56:DB:2C) jakou se bude hlásit ethernetový modul v síti. Tato adresa musí být zcela jedinečná. Proto není dobré si tuto adresu, jak se říká vycucat z prstu, ale vhodnějším řešením je použít MAC z nějakého již vyřazeného přístroje. Ethernetová karta, WIFI karta, telefon a podobně). V případě, že tento odečet budete používat na nějaké lokální síti, je pravděpodobnost, že by jste vymysleli nějakou adresu duplicitně malá, nicméně tento odečet je konstruován tak, aby pracoval s internetem a tam by to již problém mohl být. Proto tedy MAC adresu zadejte, tak aby byla jedinečná. Další údaj, který musíte změnit, je adresa webové stránky, se kterou se bude odečet spojovat a na této stránce volat patřičný script pro zápis do databáze. Jedná se o řádek: String web = "www.sakul.cz";
Zde je webová adresa uvedena v uvozovkách (www.sakul.cz). Doporučuji dodržet zápis s www. Webový prohlížeč www nemusí vyžadovat, ale zde je nutné to zadat. V podstatě záleží na tom, jak je to nastaveno na hostingu.
Volaný script – ten vyplníme na řádku:
ether.browseUrl(PSTR("/add_data.php?elektromer=Elektromer-001"), queryString, website, my_callback); Zde je to ta část za zpětným lomítkem (add_data.php). Bližší popis si řekneme dále. V tomto řádku je nutno upravit i poslední položku a tou je 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";
Zde je tento název zapsán v uvozovkách (Elektromer-001).
Tímto máme všechny nezbytné změny provedeny a můžeme se vrhnout na webovou část a databázi, kam se hodnota elektroměru ukládá.

Webové rozhraní

K tomu, aby jste mohly hodnoty uložit na nějakém webu, potažmo do nějaké databáze, je nutné si zajistit nějaký webový hosting. Nebudu zde rozepisovat, jak se to dělá, to není účelem tohoto návodu a jistě na internetu najdete nepřeberné množství poskytovatelů, u kterých je možno zřídit hosting s doménou nejspíše třetího řádu (například: www.elektromer.sakul.cz) a to zcela zdarma. Podstatné je pouze to, aby daný hosting podporoval PHP a databázi MySQL. Samozřejmě to není podmínkou a znalejší si to jistě budou schopni rozchodit i bez MySQL databáze, případně s jinou databází. Nicméně já to popíšu za použití PHP a MySQL databáze. Přičemž v dokumentaci si můžete stáhnout vzorové skripty jak pro ukládání dat do databáze (add_data.php), tak i na čtení dat již v této databázi uložených (review_data.php). Dále ukázkový script obsahuje soubor (dbconnect.php), který se stará o spojení s databází. Nyní jen ve zkratce popíšu jak tento script rozchodit na Vašem hostingu. Budu předpokládat, že jste si zřídili u nějakého poskytovatele hosting s podporou PHP (v tomto jazyce je můj ukázkový script napsán) a MySQL databází.
V první řadě je nutno na Váš hosting nahrát soubory: review_data.php a add_data.php. Tyto soubory netřeba nijak upravovat. Dále je nutno upravit obsah souboru dbconnect.php. Otevřít ho je možno například v poznámkovém bloku. Jde o konfigurační soubor pro spojení s Vaší MySQL databází na Vašem hostingu. Je třeba přepsat:
MyUsername – Uživatelské jméno pro přístup k Vaší databázi
MyPassword – Heslo pro Vaši databázi
MyHostname – Adresa Vaší databáze
Dále již netřeba nic měnit. Ještě tam teda je zadaná tabulka ve Vaší databázi (arduino_sakul_cz), ale to můžete nechat.
Pokud máte vše správně vyplněno, uložte změny a soubor dbconnect.php nahrajte také na Váš hosting. Nyní by Vám to ještě nefungovalo, protože nemáte v databázi vytvořenou správnou tabulku. To uděláte tak, že se přihlásíte do administrace Vaší databáze, přes phpMyAdmin a tam zvolíte možnost IMPORT a vyberete soubor arduino_sakul_cz.sql. Tím by mělo dojít k vytvoření dané tabulky a rovnou se tam nahrají i nějaká data. Ty můžete případně vymazat.
Nyní pokud do webového prohlížeče zadáte adresu Vašeho webu například takto: http://arduino.sakul.cz/review_data.php již by se Vám měla zobrazit tabulka nějakých hodnot. No a pokud máte připojen odečet, přes ethernetový kabel, do sítě s přístupem k internetu, již by se Vám měli data v tabulce aktualizovat.
Ještě je třeba zmínit, že interval odesílání hodnoty elektroměru se nastaví v programu na řádku: unsigned long interval = 3600000; zde je čas uveden v ms a takto je nastaven interval na 1 hodinu.

Závěrem

Jak už jsem psal v úvodu, není zrovna tato konstrukce určena začátečníkům, ale spíše zkušenějším, kteří mají již nějakou praxi s programováním a alespoň okrajově se orientují v jazyku PHP s napojením na databázi. Samozřejmě příklad s webovým rozhraním je pouze ukázkový a pro nějaké smysluplné nasazení by bylo nutné napsat vlastní webovou aplikaci. Zde šlo spíše o to, jak dostat data z elektroniky odečtu do databáze a to co nejjednodušším způsobem.

DOKUMENTACE

Závěrem si zde můžete stáhnout veškerou dokumentaci pro stavbu. Je zde i projekt pro Eagle.
DOWNLOAD  - Včetně programu pro procesor
Diskusi pro tuto konstrukci najdete ZDE.

Podpořte tuto konstrukci

Pokud Vás tato konstrukce zaujala nebo Vám dobře slouží, můžete ji podpořit volitelnou částkou. Stačí kliknout na tlačítko DONATE, zadat požadovanou částku, kterou chcete přispět na další rozvoj této a jiných konstrukcí, poté stiskněte Update Total a přihlaste se k odeslání příspěvku. Za jakékoli příspěvky předem děkuji a věřím, že zde najdete mnoho dalších zajímavých konstrukcí, které třeba vzniknou právě díky Vám.

       

Prohlášení

Tato konstrukce je z mé hlavy a proto není povoleno bez mého souhlasu přejímání na jiné stránky nebo komerční využití. Je povoleno se pouze odkazovat na tento web a tuto konstrukci. Pro více informací mne stačí kontaktovat. Zároveň nepřebírám jakoukoli odpovědnost za chování zařízení a případné škody spůsobené použitím tohoto zařízení, ať by byly jakéhokoli rázu. Zařízení je určeno pouze k užití pro vlastní potřebu.
V této konstrukci je použit program (program mikrokontroleru), na který se vztahují autorská práva. Jakýkoli prodej není bez souhlasu autora možný.

 

Můj Youtube kanál:

fb-large.png, 5,8kB
Copyright © Resi-Design 2017 www.resi-design.cz.
TOPlist