Měření výšky hladiny spodních vod IIoT ultrazvukem za pomocí Arduina
Sledovaní stavu hladiny spodních vod a eliminování případných škod
Úkolem je snímání výšky hladiny vody a záznam hodnot pro sledování jak v reálném čase, tak i využivání historie údajů pro sledování případného poklesu/nárustu hladiny v různých ročních obdobích. Jelikož nám případné rozdíly úbytku/nárustu hladiny ovlivňuje spoustu faktorů (využívání spodních vod, období sucha, četnost srážek apod) je takové měření přinejmenším zajímavé z pohledu dlouhodobé statistiky. Za cíl máme jediné - případné rozdíly dlouhodobě sledovat a vyhodnocovat za účelem eliminace případných škod a ztrát způsobené nadměrným využíváním zdroje popřípadě zahájit opatření pro šetření s touto životně důležitou komoditou. U tohoto projektu můžeme využít i velice populárního termínu "predikce". Ano jedná se o prediktivní opatření pro eliminaci případných škod způsobených nesprávným nakládáním s vodním zdrojem.
Grafické zobrazení naměřených hodnot
Možnost interakce přímo v grafu, zobrazení aktuálních hodnot po najetí kurzorem myši, vypnutí vrstev...
Vybraný hardware a software v duchu IIoT
Pro tuto úlohu jsem vybral ultrazvukový senzor UCC4000-50GK-B26-8MOL, který je popsaný na této stránce , který mně vyhovoval svými parametry. Mezi hlavní důležité předpoklady hardwaru považuji:
Senzor UCC4000-50GK-B26-8MOL
- Princip měření - ultrazvukový senzor. Spojitý princip snímání kapaliny.
- Dosah 4m - plně dostačuje dané aplikaci pro měření hladiny.
- Rozlišovací schopnost 16mm, s použitím ultrazvuku UCC2500-50GK-B26-8MOL dokonce i 10mm
- Standardizovaný výstup UART. Senzor disponuje i PWM výstupem popřípadě LiN interfeace pro rozšíření možnosti použití.
- Nízký odběr!!! Jelikož se jedná o dlouhodobé snímání je velice důležité docílit nízkého odběru. Díky tomu, že senzor sám o sobě nízký odběr má a měří vždy jen jednou při vykonávání programu, tak zcela vyhovuje funkci "energy saving", kterou považuji za základní předpoklad pro tuto úlohu.
- Možnost sledování okolní teploty senzoru. Zajímavý benefit, který jsem zprvu ani nezamýšlel, ale proč ho nevyužít.
- Senzor je umístěn do plastové krabičky s krytím IP69 o rozměrech cca 60x60x40mm, připojení je řešeno průmyslovým konektorem 4-pin M12.
Srdcem je mikrokontrolér Arduino UNO R3 se známým cpu Atmega
- Kompatibilnost s daným senzorem přes UART komunikaci.
- Variabilita zapojení a rozšířitelnost pro případné další požadavky a inovace.
- Nízký odběr zcela vyhovoval dané úloze
- Připojitelnost do světa IIoT pomocí Ethernetového shieldu W5100.
- Napájení 5V přes micro USB. Díky nízkému odběru lze zařízení umístit v místech bez elektrické energie s použitím fotovoltaického panelu a baterie.
MySQL databáze, php a java
- MySQL - momentálně nejrozšířenější databáze pro ukládání různých informací
- nejběžnější implementace s webovým serverem
- jednoduchá obsluha přes php skripty
- využití API demo grafů s podporou Java
Princip:
Arduino a ultrazvuk UCC4000*50GK
Senzor je připojen přes UART rozhraní s napájením 3,3V přímo na desku Arduina. Arduino je pak napájeno 5V z USB. Jelikož jsem použil kompaktní verzi mikrokontroléru, který neumožňoval více seriových rozhraní najednou, bylo zapotřebí vytvořit softwarovou seriovou komunikaci pomocí knihovny SoftwareSerial. Hlavní důvodem byl fakt, že senzor pracuje na přenosové rychlosti 19200kbaud, kdežto seriová komunikace s počítačem u UNA R3 na 9600kBaud. Následně jsem si situaci ještě ztížil přidáním Ethernet shieldu.
Ve chvíli, kdy se komunikace "oživila" nastala druhá fáze: vyčítání dat po seriové lince. Komunikaci s ultrazvukem jsem popisoval zde.
Zbývalo jen určit, které data se budou Arduinem vyčítat a vyhodnocovat. Použil jsem funkci vyčitání profilu B (střední šíře vyzařování) a teploty, které Arduino v hodinovém intervalu zpracovává (filtruje, eliminuje chyby) a posílá dál.
Zprvu jsem data vyhodnocoval po seriové lince do PC, později jsem však vyhodnotil, že bude lepší zcela samostatné zařízení se zápisem hodnot do tabulky. Přišel na řadu Ethernet shield W5100 a oživení "tabuky" pro zapisování naměřených dat. Využívám známou tabulku mySQL, která beží na našem serveru a data ukládám pomocí jednoduchých php skriptů.
Zobrazení pak následně pomocí php skriptu vyčítám do grafu, který jste mohli vidět výše. Obsahuje interaktivní prvky a finální podobu grafu můžete sami změnit. Jelikož zařízení nesesbíralo za tak krátkou dobu data pro podrobnou statistiku, graf proto neobsahuje další funkce a je velice jednoduchý.
Další fázi mám rozpracovanou a jakmile budu mít dostatek dat pro generování průměrných hodnot hladiny/teploty za daná období (rok, měsíc, sezóna apod), následně do grafu tuto funkci zanesu. Zvláště bude zajímavé "porovnání" různých období, např za různé roky a zobrazení jejich max a min hodnot.
Nejčtenější články
IO-link master - hardware (Ethernet/Profinet rozhraní, 8IN/OUT, 24VDC/16A), část první
29. květen 2019
SmartRunner - 2D senzor pro přesnou detekci profilů,kvality dílů,třídění zboží,správnosti založení
04. leden 2018