Projekt nie je dostupný zdarma na stiahnutie! Pri záujme o kúpu softvérovej časti projektu s funkčnosťou, ktorá je na danej stránke rozpísaná kontaktovať na adrese: martinius96@gmail.com
Arduino ESP8266 ESP32 PHP, HTML MySQL HC-SR04 (Ultrasonic) Water Level Ethernet WiFi JSN-SR04T
Zdrojové kódy pre Arduino, ESP8266, ESP32, knižnica NewPing: Github repozitár projektu
Vyskúšajte projekt Hladinomer zdarma s vašim hardvérom: TU
Vyskúšajte projekt Hladinomer + Zrážkomer zdarma s vašim hardvérom: TU

Riadiace mikrokontroléry pre projekt Hladinomer + Zrážkomer


Riadiaci mikrokontróler Arduino Uno pre termostat
Arduino Uno / Nano
Riadiaci mikrokontróler NodeMCU v2 / v3 Lolin - ESP8266-12E / ESP8266-12F
NodeMCU v3 Lolin
Riadiaci mikrokontróler Wemos D1 Mini - ESP8266-12E / ESP8266-12F
Wemos D1 Mini
Riadiaci mikrokontróler ESP32 Devkit V1 - ESP-WROOM-32 / ESP32-S
ESP32 DevKit V1

Moduly prenosových technológii Ethernet a Sigfox pre projekt Hladinomer + Zrážkomer

Ethernet shield Wiznet W5100
Ethernet shield Wiznet W5100
Ethernet modul Wiznet W5500
Ethernet modul Wiznet W5500
Sigfox Wisol modem - IoT LPWAN Node 868 MHz
Sigfox Node Modem

Podporované a testované ultravukové senzory pre záznam výšky hladiny vody


Ultrazvukový senzor vzdialenosti HC-SR04
HC-SR04
Ultrazvukový vodotesný senzor vzdialenosti JSN-SR04T
JSN-SR04T
Ultrazvukový senzor vzdialenosti HY-SRF05
HY-SRF05
Ultrazvukový senzor vzdialenosti URM07 ovládaný cez UART
URM07

Podporovaný IR zrážkomer


Infračervený IR zrážkomer Hydreon RG-11
Hydreon RG-11

Hladinomer - Arduino / ESP8266 / ESP32


Projekt Hladinomer využíva webové rozhranie pre vizualizáciu nameraných údajov o výške hladiny vody v studni, nádrži. Responzívne webové rozhranie v Bootstrap Bare šablóne sa prispôsobí akejkoľvek obrazovke, na ktorú sú dáta vizualizované. Dáta sú čitateľné na hodinkách, smartfónoch, počítačoch, Smart TV a iných zariadeniach. Webové rozhranie projektu využíva backend napísaný v jazyku PHP, ktorý spracuje prichádzajúce dáta dáta podporovanou POST metódou požiadavky, vykonáva prepočet nameranej teploty na skutočnú výšku hladiny, vypočíta aj objem studne na základe známych údajov o hĺbke a priemere studne, ktoré do systému zadal používateľ. Dáta sa na webserver odosiela mikrokontróler, ktorý vykonáva merania každých 300 sekúnd - t.j. 5 minút, respektíve v prípade prenosu cez IoT sieť Sigfox sa dáta odosielajú každých 11 minút. Meranie výšky hladiny vody sa realizuje s využitím ultrazvukových senzorov - HC-SR04, alebo jeho vodotesnej varianty JSN-SR04T, prípadne UART senzorom URM07 (SKU SEN0153) - dostupný iba v špeciálnej verzii projektu Hladinomer. Dokáže merať vzdialenosť až 750 cm, z dôvodu veľkého detekčného uhla sa nehodí do veľkého množstva studní... Princíp merania ultrazvukových senzorov je vyslanie signálu Trigger s dĺžkou 10μs (mikrosekúnd) a na základe času, kedy sa signál vráti do prijímača - Echo je možné dopočítať vzdialenosť medzi senzorom a hladinou. 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). Vodotesný senzor JSN-SR04T má detekčnú charakteristiku 60 až 75°, čo ho nedovoľuje použiť v úzkych studniach, nakoľko sa lúč so vzdialenosťou veľmi rozširuje a je potrebná studňa s priemerom niekoľko jednotiek metrov (6 metrov pri 4,5 hĺbke studne).


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 sa využila platforma Arduino (Uno) spojená s Ethernet modulom / shieldom z rady Wiznet model W5100, respektíve W5500, ktorý zabezpečoval HTTP konektivitu a umožnil mikrokontroléru prenos dát do vzdialeného webového rozhrania na internete. Nakoľko je hladinomer exteriérovým projektom, mnoho používateľov by si obľúbilo aj možnosť využitia WiFi platformy bez nutnosti pritiahnutia Ethernet konektivity až k studni. WiFi platformy od Espressif Systems - ESP8266 a ESP32, ktoré sú v projekte použité umožňujú prevádzku v rôznych režimoch - StandBy, Deep Sleep (hlboký spánok s vypnutou WiFi anténou), StandBy + OTA - umožňuje vzdialene prostredníctvom LAN siete nahrať do dosky nový firmvér priamo z prostredia Arduino IDE. Pre Deep Sleep prevádzkový režim existuje pri platformy ESP8266 upravená schéma zapojenia, ktorá využíva pre prebudenie mikrokontroléru WAKE signál, ktorý je privedený na RST. Zároveň toto zapojenie neumožňuje aktualizáciu programu bez odpojenia tejto prepojky. Pre ESP32 sa využíva Deep Sleep režim s využitím RTC timera, ktorý ESP prebudí po určitom čase. Platformy dokážu s webovým rozhraním komunikovať po HTTP, ale aj HTTPS protokole. Platforma ESP8266 využíva odtlačok (fingeprint) verejného kľúča webservera v SHA1 formáte, vyžaduje však častejší renew, nakoľko platí maximálne rok, respektíve 2 roky. Mikrokontróler z rady ESP32 využíva pre HTTPS spojenie certifikát koreňovej certifikačnej autority, ktorá pre webserver vydala certifikát - ROOT CA certifikát v .pem formáte. Z hľadiska prevádzky je táto možnosť lepšia, nakoľko certifikát certifikačnej autority platí aj 20 rokov a nie je nutný renew certifikátu.


Keďže je platforma Arduino náchylnejšia na "zaseknutie" programu z dôvodu výrazne obmedzených pamäťových a výkonových prostriedkov (v porovnaní s ESP platformami), bol do zdrojových kódov doplnený watchdog, ktorý je schopný platformu reštartovať a obnoviť tak jej prevádzku. Programová implementácia firmvéru mikrokontrolérov je rozšírená o záznam dát z IR zrážkomera Hydreon RG-11, ktorý dokáže emulovať metódu preklápacieho vedra na základe prepnutých DIP prepínačov (podporuje aj iné módy, ktoré majú využitie v automobilovom priemysle, záhradníctve). Umožuje tak mikrokontroléru v prerušení načítavať počet pulzov prichádzajúcich zo zrážkomera, kedy jeden pulz predstavuje hodnotu zrážok na úrovni 0.01 mm. Pulz prichádza v podobe signálu LOW, ktorý je privedený prostredníctvom integrovaného relé, ktoré sa prepne do stavu NO (z NC). K digitálnemu vstupu je pripojený pullup rezistor, ktorý drží úroveň HIGH, pokým dôjde k pulzu z preklápacieho vedra s prírastkom 0.01 mm. Nakoľko je na vstupe stále HIGH a do stavu LOW prechádza iba pri prípočte prírastku zrážok, prírastok sa deteguje metódou prerušenia FALLING, ktorá reaguje na zastupnú hranu. Medzi pulzami sa vykonáva debouncing s dĺžkou 15ms, ktorá zamedzuje pripočítaniu jedného pulzu viackrát z dôvodu zákmitu signálu. Za sekundu je tak možné zaznamenať až 66 pulzov, čo zodpovedá prírastku zrážok 0.66 mm. Zrážkomer má ochranu proti UV žiareniu, nedegraduje v čase, jeho vypuklé sklo, na ktoré sa zachytávajú zrážky má samočistiaci efekt. Prevádzka je tak plne bezúdržbová a spoľahlivá, nakoľko preklápacie vedro je emulované IR zrážkomerom a neobsahuje mechanickú časť ako klasické preklápacie vedro, kde hrozí aj jeho upchatie nečistotami. Pre zrážkomer sa využíva vývod Arduina / ESP s podporou prerušenia. Pulz sa pripočíta do volatile premennej, ktorá môže byť obslúžená v prerušení. Dáta zo zrážkomera tak tvoria súčet zrážok za obdobie po odoslanie dát. Webové rozhranie je taktiež rozšírené pre túto možnosť aj s grafickou a textovou vizualizáciou vývoja zrážok. Textový výstup umožňuje súčet zrážok za hodiny, dni až rok. Projekt zrážkomera je dostupný zatiaľ iba pre platformu Arduino, avšak s niekoľkými zmenami je možné prevádzkovať aj pod ESP32, ESP8266 Obe verzie projektov sú plne preložené do anglického, slovenského, ruského a nemeckého jazyka.

Hlavný prehľad - Hladinomer + Zrážkomer - aktuálne namerané údaje

Pre lokality, kde sa nenachádza pokrytie pevným internetom je možné využiť aj IoT sieť Sigfox, ktorá pokrýva takmer 90% Slovenska, vysielacie BTS stanice má umiestnené 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. 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ú dĺžku, ktorú môže, t.j. 12B. Payload správy je možné doplniť aj o rôzne systémové informácie, napríklad: GEO údaje (zemepisná dĺžka / šírka), 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 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 musí vykonať 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.

Hladiomer - nastavenia Callbacku v Sigfox Backende:
  • 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}
  • Do Content-Type: application/x-www-form-urlencoded
  • Hladiomer + Zrážkomer - nastavenia Callbacku v Sigfox Backende:
  • Callbacks --> Custom --> New
  • Do Custom payload config napíšeme: cislo1::float:16 cislo2::uint:16
  • Do URL pattern: http://arduino.clanweb.eu/studna/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:
  • dazd={customData#cislo1}&hodnota={customData#cislo2}
  • Do Content-Type: application/x-www-form-urlencoded

  • Hladinomer - prehľad v reálnom čase
    Hladinomer - historická tabuľka meraní s rozdielmi hladín, objemu litrov
    Hladinomer - vývoj hladiny počas dňa čiarovým grafom
    Hladinomer - budíková reprezentácia minima, maxima výšky hladiny

    Schéma (Wiring diagram)

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

    Offline tester - Arduino


    #include <NewPing.h>
    
    #define TRIGGER_PIN  5  // Arduino pin tied to trigger pin on the ultrasonic sensor.
    #define ECHO_PIN     6  // Arduino pin tied to echo pin on the ultrasonic sensor.
    #define MAX_DISTANCE 450 // Maximum distance we want to ping for (in centimeters). Maximum sensor distance is rated at 400-500cm.
    
    NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // NewPing setup of pins and maximum distance.
    
    void setup() {
      Serial.begin(115200); // Open serial monitor at 115200 baud to see ping results.
    }
    
    void loop() {
      delay(50);                      // Wait 50ms between pings (about 20 pings/sec). 29ms should be the shortest delay between pings.
      unsigned int uS = sonar.ping(); // Send ping, get ping time in microseconds (uS).
      Serial.print("Ping: ");
      Serial.print(uS / US_ROUNDTRIP_CM); // Convert ping time to distance in cm and print result (0 = outside set distance range)
      Serial.println("cm");
    }
      

    Offline tester - ESP8266


    #include <NewPingESP8266.h>
    
    #define TRIGGER_PIN  5  // Arduino pin tied to trigger pin on the ultrasonic sensor.
    #define ECHO_PIN     4  // Arduino pin tied to echo pin on the ultrasonic sensor.
    #define MAX_DISTANCE 450 // Maximum distance we want to ping for (in centimeters). Maximum sensor distance is rated at 400-500cm.
    
    NewPingESP8266 sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // NewPing setup of pins and maximum distance.
    
    void setup() {
      Serial.begin(115200); // Open serial monitor at 115200 baud to see ping results.
    }
    
    void loop() {
      delay(50);                      // Wait 50ms between pings (about 20 pings/sec). 29ms should be the shortest delay between pings.
      unsigned int uS = sonar.ping(); // Send ping, get ping time in microseconds (uS).
      Serial.print("Ping: ");
      Serial.print(uS / US_ROUNDTRIP_CM); // Convert ping time to distance in cm and print result (0 = outside set distance range)
      Serial.println("cm");
    }
      

    Offline tester - ESP32


    #include <NewPingESP8266.h>
    
    #define TRIGGER_PIN  22  // Arduino pin tied to trigger pin on the ultrasonic sensor.
    #define ECHO_PIN     23  // Arduino pin tied to echo pin on the ultrasonic sensor.
    #define MAX_DISTANCE 450 // Maximum distance we want to ping for (in centimeters). Maximum sensor distance is rated at 400-500cm.
    
    NewPingESP8266 sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // NewPing setup of pins and maximum distance.
    
    void setup() {
      Serial.begin(115200); // Open serial monitor at 115200 baud to see ping results.
    }
    
    void loop() {
      delay(50);                      // Wait 50ms between pings (about 20 pings/sec). 29ms should be the shortest delay between pings.
      unsigned int uS = sonar.ping(); // Send ping, get ping time in microseconds (uS).
      Serial.print("Ping: ");
      Serial.print(uS / US_ROUNDTRIP_CM); // Convert ping time to distance in cm and print result (0 = outside set distance range)
      Serial.println("cm");
    }
      
    Získejte registraci domén s tld .online, .space, .store, .tech zdarma!
    Stačí si k jedné z těchto domén vybrat hosting Plus nebo Mega a registraci domény od nás dostanete za 0 Kč!
    Objednat