Měření výšky hladiny spodních vod IIoT ultrazvukem za pomocí Arduina

19. prosinec 2019Autor : David P .

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...

zdroj cloud.prumyslovesenzory.cz [refresh 1 hodina]

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

  • Kryt senzoru (IP69) spolu s konektorem a princip zavěšení Kryt senzoru (IP69) spolu s konektorem a princip zavěšení

    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

Software Arduino IDE Software Arduino IDE

  • 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

Struktura dat v mySQL Struktura dat v mySQL

  • 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 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

RS terminál RS terminál

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ů.

Hotový výrobek Hotový výrobek

   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.