Zdrojové kódy projektu Hladinomer pre mikrokontroléry Arduino, ESP8266, ESP32, knižnica NewPing, Ethernet2, Ethernet3, UIPEthernet: Github repozitár projektu
Vyskúšajte projekt Hladinomer zdarma s Vašim hardvérom - on-line: TU - len HTTP protokol (Endora.cz freehosting nepodporuje HTTPS pripojenia).
Vyskúšajte projekt Hladinomer zdarma s Vašim hardvérom - on-line: TU - HTTPS (dostupné pre ESP8266 a ESP32, Arduino + Ethernet nepodporuje HTTPS)
Od 4. Júna 2021 dostupná implementácia pre ESP32 vo frameworku ESP-IDF v4.2 (4.0 kompatibilné) s využitím FreeRTOS a taskov s blokovacím mechanizmom Queue.
Pri záujme o zdrojové kódy webaplikácie kontaktujte autora projektu na: martinius96@gmail.com
Arduino Ethernet Wiznet W5100 / W5500 ESP8266 ESP32 Ultrazvuk HC-SR04 JSN-SR04T Sigfox IoT WiFi OTA ULP

Riadiaci hardvér - kompatibilné mikrokontroléry AVR / ESP



Moduly prenosových technológii - Ethernet / Sigfox IoT


Ethernet modul Wiznet USR-ES1
Ethernet modul Wiznet USR-ES1 (W5500 V2)
Kúpiť Techfun.sk
Sigfox Wisol modem - IoT LPWAN Node 868 MHz
Sigfox WISOL SFM10R1
Kúpiť GME.sk

Kompatibilné ultrazvukové senzory vzdialenosti



Hladinomer - monitor výšky hladiny vody v studni


Projekt hladinomer (monitor výšky hladiny vody) je tvorený centrálnym webovým rozhraním, ktoré slúži zber dát zo senzorových uzlov a ich vizualizáciu používateľovi. Aktuálne dáta o výške hladiny vody sú reprezentované v dashboarde spolu s prepočtom na objem studne, historické dáta o výške hladiny vody má používateľ k dispozícii aj v tabuľkovej, alebo grafickej vizualizácii čiarovými grafmi. Webové rozhranie je responzíve, dokáže sa prispôsobiť každej obrazovke a rozlíšeniu zariadenia. Webové rozhranie projektu využíva backend napísaný v jazyku PHP, ktorý dokáže spracovať prichádzajúce dáta z requestu HTTP POST metódou. Backend vykonáva korekciu nameranej výšky hladiny na skutočnú na základe známej hĺbky studne, počíta objem vody v studni z tohto parametra a priemeru studne. Hĺbku a priemer studne do systému vkladá používateľ na základe proporcií jeho studne. Dáta na webserver odosiela mikrokontróler podporovanou technológiou (Ethernet / WiFi / LPWAN Sigfox), ktorý vykonáva merania každých 300 sekúnd - t.j. 5 minút, respektíve v prípade prenosu cez LPWAN IoT sieť Sigfox sa dáta odosielajú každých 11 minút, nakoľko je modem limitovaný sieťou na prenos max 140 správ denne. Meranie výšky hladiny vody sa realizuje s využitím ultrazvukových senzorov - HC-SR04, alebo jeho vodotesnej varianty JSN-SR04T. Možno využiť aj iné senzory so signálmi Trigger / Echo z rady US-02X, IOE-SR0X, HC-SR0X, HY-SRF0X, DYP-ME007.


Princíp merania ultrazvukových senzorov je vyslanie signálu Trigger s dĺžkou 10 μs (mikrosekúnd), ktorý sa od hladiny vody odrazí a vráti sa do prijímača - Echo. Využíva sa metóda Time-of-Flight pre prepočet času medzi vyslaním a prijatím signálu na určenie vzdialenosti hladiny vody od senzora, ktorý je umiestnený na vrchu studne. Vzorec prepočtu počíta s rýchlosťou zvuku 343 m/s pri teplote 20 °C. Dôležitým parametrom u oboch ultrazvukových senzorov je šírka lúča, inými slovami detekčná charakteristika. Senzor HC-SR04 má 15° detekčnú charakteristiku. Lúč je relatívne úzky a senzor je tak vhodný aj pre užšie studne a nádrže, avšak nie je vodotesný a má vysoké riziko korózie (oxidácie) z dôvodu prítomnej vlhkosti v studni. Z toho dôvodu je tento ultrazvukový senzor vhodné umiestniť nad studňu. Vodotesný senzor JSN-SR04T má detekčnú charakteristiku 60°, čo ho značne limituje a zamedzuje jeho použitiu v úzkych studniach, nakoľko sa lúč so vzdialenosťou veľmi rozširuje a je potrebná studňa s priemerom niekoľko metrov (6 metrov priemer pri hĺbke studne 4,5 metra). Ultrazvukové senzory sú plne bezúdržbové. Senzor JSN-SR04T má riadiacu elektronickú dosku, ktorá nesmie byť vystavená vlhkosti a vode. Štandardný komunikačný tienený kábel má dĺžku 2,5 metra, možno nadpojiť protikusy rovnakého kábla pre predĺženie vedenia. V prípade štvorcovej studne sa do priemeru dosádza priemer vpísanej kružnice, ktorá bude tvoriť referenčnú hodnotu vodného valca pre výpočet objemu studne. Chyba celkového objemu studne bude v tomto prípade na úrovni ~12,5%. Maximálna merateľná výška hladiny (úrovne) senzormi je cca 400 až 450cm (známe z datasheetu).

Iné typy senzorov pre záznam výšky hladiny vody, ktoré je možné integrovať (nutné vytvoriť vlastný firmvér):
  • Laserové (LiDAR)
  • Hydrostatické
  • Elektrostatické (kapacitné / indukčné)
  • Tlakové (diferenčné / s kompenzačným senzorom atmosférického tlaku)
  • Optické
  • Mechanické (plavák)
  • Magnetické (Hall)
  • Mikrovlnné (radarové)
  • Poznámka: Ak sa vykonáva prepočet výšky hladiny vody od dna na strane mikrokontroléra, je nutné na webovom rozhraní nastaviť hĺbku studne na 0 cm.

  • Video demonštrácia webového rozhrania - Hladinomer:



    Ultrazvukové senzory sú vhodné do:


  • Kopaných studní
  • Septikov a žúmp
  • Potokov a jazier
  • Plastových nádrží na dažďovú vodu
  • Silá (meranie naplnenia sypkými materiálmi)
  • Kontajnery (monitoring odpadu, naplnenia zbernej nádoby)
  • Kotolne (monitoring zásoby dreva, peliet, uhlia, štiepky)
  • Šachty a pivnice (monitoring vytopenia - spodnej vody)

  • Ultrazvukové senzory nie sú vhodné do:


  • Vŕtaných studní (z dôvodu detekčnej charakteristiky - široký lúč)
  • Potrubí a rúr (z dôvodu detekčnej charakteristiky - široký lúč)
  • Do studní so spádovým prítokom (rozbúrená hladina utlmí ultrazvuk, meranie je nemožné / skokovité)
  • Do miest s náhlou zmenou teplôt (teplota ovplyvňuje čas šírenia zvuku, teda aj stacionárna hladina sa javí ako kolísavá)
  • Vákuových nádrží (meranie je nemožné)

  • Plug n play firmware - Ultra Low Power / StandBy


    Skompilovaný firmvér dostupný pre okamžité nahratie do mikrokontroléra (nevyžaduje inštaláciu knižníc).
    Názov firmvéru Funkcia firmvéru ESP8266 ESP32
    Ultra Low Power

    Firmvér pre ULP aplikácie s nízkym prúdovým odberom (viz. schéma zapojenia). Firmvér sa nahráva cez pribalený nástroj ESPTOOL automatizovane, ktorý je spustený s .bat scriptom (v scripte nutné zmeniť COM port vašej ESP dosky). Po nahratí firmvéru a za predpokladu, že ESP nemá uložené SSID a heslo z predchádzajúceho projektu, spustí sa WiFiManager, ktorý slúži pre konfiguráciu existujúcej WiFi siete. ESP začne vysielať v režime AP otvorenú WiFi sieť s SSID --> Hladinomer_AP. Po pripojení klienta (Windows / Android / iOS) sa spustí Captive portál na 192.168.4.1 (klient by mal byť presmerovaný automaticky). WiFiManager umožní vo web rozhraní vybrať WiFi sieť v dosahu, nastaviť heslo. Po úspešnom pripojení ESP na zadanú WiFi sieť a pridelení IPv4 z daného rozsahu sa Captive Portal vypne, ESP zostáva v móde STA - Station. Následne senzorový uzol začne prenášať dáta do web rozhrania Hladinomera. Pri následnom spustení senzorového uzla sa už Captive Portal a WiFiManager nespustí, nakoľko je konfigurácia WiFi siete permanetne uchovaná. Mikrokontróler po odoslaní dát prechádza do režimu hlbokého spánku - Deep Sleep. V režime spánku je vypnutý hlavný procesor Xtensa. ESP8266 je prebudené cez WAKE timer (vyžaduje sa prepojka medzi GPIO16 a RST), ESP32 cez RTC Timer.

    ESP8266 firmvér ESP32 firmvér
    StandBy

    Firmvér pre StandBy režim mikrokontroléra, ktorý odosiela v pravidelných intervaloch (5 min) meranie o výšky hladiny vody na webserver a zároveň udržuje konektivitu s AP v LAN sieti. Firmvér sa nahráva cez pribalený nástroj ESPTOOL automatizovane, ktorý je spustený s .bat scriptom (v scripte nutné zmeniť COM port vašej ESP dosky). Po nahratí firmvéru a za predpokladu, že ESP nemá uložené SSID a heslo z predchádzajúceho projektu, spustí sa WiFiManager, ktorý slúži pre konfiguráciu existujúcej WiFi siete. ESP začne vysielať v režime AP otvorenú WiFi sieť s SSID --> Hladinomer_AP. Po pripojení klienta (Windows / Android / iOS) sa spustí Captive portál na 192.168.4.1 (klient by mal byť presmerovaný automaticky). WiFiManager umožní vo web rozhraní vybrať WiFi sieť v dosahu, nastaviť heslo. Po úspešnom pripojení ESP na zadanú WiFi sieť a pridelení IPv4 z daného rozsahu sa Captive Portal vypne, ESP zostáva v móde STA - Station. Následne senzorový uzol začne prenášať dáta do web rozhrania Hladinomera. Pri následnom spustení senzorového uzla sa už Captive Portal a WiFiManager nespustí, nakoľko je konfigurácia WiFi siete permanetne uchovaná.

    ESP8266 firmvér ESP32 firmvér

    Princíp fungovania hladinomera - Bloková schéma


    Hladinomer do žumpy, septiku, studne, princíp merania - ultrazvukový senzor vzdialenosti

    Webové rozhranie využíva trigonometriu pre odhad merateľnej maximálnej hĺbky studne pri známom priemere studne (ďalší parameter pre výpočet objemu studne). Používateľovi vie tak webové rozhranie dopočítať, do akej maximálnej hĺbky studne je každý zo senzorov vhodný na základe jeho charakteristiky. Projekt je tak jednoduchý na použitie aj pre laikov, ktorí nevedia, ktorý senzor je pre aplikáciu v ich studni vhodnejší. Dôležitú úlohu v systéme zohráva aj použitý mikrokontróler. Pre projekt je možné využiť platformu Arduino (Uno / Mega) v revízii R3 s identickým pinoutom, ktorú je možné spojiť s Ethernet shieldom, ktorý komunikuje cez ICSP rozhranie. Taktiež je možné využiť aj Ethernet moduly a pripojiť ich priamo na hardvérové SPI piny mikrokontroléra. Podporované sú Ethernet moduly od výrobcu Wiznet W5100, W5500, USR-ES1. Od výrobcu MicroChip je podporovaný Ethernet modul ENC28J60. Všetky Ethernet moduly zabezpečujú HTTP konektivitu s webserverom. Podporované sú aj WiFi mikrokontroléry od Espressif Systems - ESP8266 a ESP32. Mikrokontroléry majú viacero prevádzkových režimov: StandBy, StandBy + OTA s možnosťou vzdialeného uploadu firmvéru cez LAN sieť a režim hlbokého spánku pre ULP aplikácie - Deep Sleep. V režime spánku pre ESP8266 je nutné pridať fyzickú prepojku medzi GPIO16 (WAKE) a RST - pozri Schému zapojenia. Mikrokontroléry ESP umožňujú implementovať aj HTTPS (šifrovanú) konektivitu s webserverom. Platforma ESP8266 i ESP32 využíva certifikát koreňovej certifikačnej autority (Root CA), ktorá pre doménu webservera vydala certifikát (Issuer). Certifikát je vložený do zdrojového kódu mikrokontrolérov v .pem formáte. Aby certifikát nezaberal miesto v RAM pamäti mikrokontroléra, je vložený do flash pamäte mikrokontroléra - PROGMEM. Certifikát certifikačnej autority platí v rozmedzí 10 až 20 rokov, nevyžaduje tak častý renew certifikátu. Dáta o aktuálnej výške hladiny vody a objeme vody v studni sú z webového rozhrania dostupné v JSON formáte. Projekt je možné integrovať projekt Hladinomer cez MQTT do domácej automatizácie (Hassio, Domoticz, Loxone) pre zobrazenie výšky hladiny vody vo vlastnom dashboarde napr. Grafana.

    Programové implementácie pre Arduino, ESP8266, ESP32 (vyžadujú doinštalovanie knižníc): Dostupné tu

    Dostupné knižnice pre mikrokontroléry (Arduino / ESP)


    Archív knižnice (.zip) rozbaliť do C:/Používatelia/[Používateľ]/Dokumenty/Arduino/libraries
    Názov knižnice Funkcia knižnice Stiahnuť
    NewPing

    Knižnica pre AVR mikrokontroléry (ATmega) Arduino Uno / Nano / Mega. Umožňuje vykonávať meranie ultrazvukovými senzormi vzdialenosti US-02X, IOE-SR0X, HC-SR0X, HY-SRF0X, JSN-SR0XT, DYP-ME007.

    Stiahnuť
    NewPingESP8266

    Knižnica pre ESP8266 a ESP32 mikrokontroléry. Umožňuje vykonávať meranie ultrazvukovými senzormi vzdialenosti US-02X, IOE-SR0X, HC-SR0X, HY-SRF0X, JSN-SR0XT, DYP-ME007.

    Stiahnuť
    Ethernet2

    Knižnica pre AVR mikrokontroléry (ATmega) Arduino Uno / Nano / Mega. Umožňuje komunikáciu s Ethernet modulom Wiznet W5200 až W5500 cez SPI rozhranie.

    Stiahnuť
    Ethernet3

    Knižnica pre AVR mikrokontroléry (ATmega) Arduino Uno / Nano / Mega. Umožňuje komunikáciu s Ethernet modulom Wiznet W5500 V2 - USR-ES1 cez SPI rozhranie.

    Stiahnuť
    UIPEthernet

    Knižnica pre AVR mikrokontroléry (ATmega) Arduino Uno / Nano / Mega. Umožňuje komunikáciu s Ethernet modulom ENC28J60 od Microchipu cez SPI rozhranie.

    Stiahnuť

    Pre lokality, kde sa nenachádza pokrytie pevným internetom je možné využiť aj LPWAN IoT sieť Sigfox, ktorá pokrýva takmer 90% geografickej oblasti Slovenska. Bunkové stanice má operátor SimpleCell, ktorý IoT sieť Sigfox prevádzkuje hlavne na Towercom vysielačoch. Táto technológia umožňuje prenášať malé objemy správ s veľkosťou do 12B. V prípade projektu Hladinomer sa odosiela 4B hodnota výšky hladiny vody (UINT_32). Pre projekt rozšírený o zrážkomer sa odosiela hodnota 8B hodnota, ktorá je tvorená výškou hladiny vody a prírastkom zrážok. Nakoľko Sigfox dovoľuje preniesť denne maximálne 140 správ, je interval odosielania dát rozšírený na 11 minút. V oboch prípadoch tak správa neobsahuje plnú využívateľnú dĺžku payloadu. Payload správy je možné doplniť aj o rôzne systémové informácie, napríklad: GEO údaje (zemepisná dĺžka / šírka) na základe údajov z GPS služby Sigfox Atlas, RSSI (Sila prijatého signálu), číslo správy a iné. Komunikačný modul, ktorý bol využitý pre projekt je Sigfox WISOL 868MHz UART LPWAN modem. Tento modem komunikuje cez AT príkazy prostredníctvom UART rozhrania, ktoré je softvérovo emulované na mikrokontroléry. Komunikácia preberia rýchlosťou 9600 baud/s. WISOL modem je vybavený integrovaným u.FL konektorom na PCB modulu pre pripojenie antény, ktorá výrazne zdostupní pokrytie aj v interiéri / zatienenom exteriéri. Pre úspešný prenos dát sa vyžaduje pokrytie dvomi, najlepšie tromi a viac BTS stanicami pre úspešný prenos údajov. BTS-ky prenesenú informáciu odošlú do Sigfox backendu, kde je nutné urobiť Callback, ktorý sa spustí po prijatí dát. Callback vykoná HTTP, respektíve HTTPS request na doménu, kde webaplikácia beží s POST metódou a vhodne enkódovaným payloadom, ktorý backend webaplikácie očakáva.


    Pokrytie Slovenska a Česka sieťou LPWAN IoT Sigfox:


    Pokrytie Slovenskej republiky IoT LPWAN sieťou Sigfox - Simplecell - Hladinomer do studne Pokrytie Českej republiky IoT LPWAN sieťou Sigfox - Sigfox Česká republika - Hladinoměr do studny

    Nastavenie Sigfox backend callbacku pre vyskúšanie webaplikácie

    Hladinomer:
  • Callbacks --> Custom --> New
  • Do Custom payload config napíšeme: cislo1::uint:16
  • Do URL pattern: http://arduino.clanweb.eu/studna_s_prekladom/data.php (alebo iná URL adresa vašho webservera, kde bude projekt bežať), možnosť využiť i HTTPS
  • V HTTP metóde zvolíme: POST
  • Do Body (tela správy) doplníme:
  • hodnota={customData#cislo1}&token=123456789
  • Do Content-Type: application/x-www-form-urlencoded

  • Screenshoty webového rozhrania pre projekt Hladinomer


    Obnova posledných nameraných údajov automaticky cez AJAX - Hladinomer - Monitor výšky hladiny vody v studni Hlavný prehľad - Hladinomer - výška hladiny vody v studni Historický prehľad nameraných údajov s časovou značkou - Hladiomer Grafická vizualizácia výšky hladiny vody za deň, 7 dní, 30 dní, rok - Hladinomer Rekordy nameraných údajov o výške hladiny vody - MAX, MIN - Hladiomer Podporovaný hardvér pre projekt Hladinomer - Arduino - Ethernet - WiFi - ESP8266 - ESP32

    Schéma (Wiring diagram)

    Hladinomer - schéma zapojenia pre Arduino, ESP32, ESP8266 - ultrazvukový senzor vzdialenosti HC-SR04 / JSN-SR04T