Kody źródłowe projektu Miernik poziomu dla mikrokontrolerów Arduino, ESP8266, ESP32, biblioteka NewPing, Ethernet2, Ethernet3, UIPEthernet: Repozytorium projektu Github
Wypróbuj projekt miernika poziomu za darmo ze swoim sprzętem - online: TUTAJ - Tylko protokół HTTP (freehosting Endora.cz nie obsługuje połączeń HTTPS).
Wypróbuj projekt miernika poziomu za darmo ze swoim sprzętem - online: TUTAJ - HTTPS (dostępny dla ESP8266 i ESP32, Arduino + Ethernet nie obsługuje HTTPS).
Implementacja dla ESP32 dostępna w frameworku ESP-IDF v4.2 (kompatybilna z 4.0) dostępna od 4 czerwca 2021 z wykorzystaniem FreeRTOS i zadań z mechanizmem blokowania kolejki.
Jeśli interesują Cię kody źródłowe aplikacji internetowej, skontaktuj się z autorem projektu w języku angielskim pod adresem: martinius96@gmail.com
Arduino Ethernet Wiznet W5100 / W5500 ESP8266 ESP32 Ultradźwięk HC-SR04 JSN-SR04T Sigfox IoT WiFi OTA ULP

Sprzęt sterujący - kompatybilne mikrokontrolery AVR / ESP



Moduły technologii transmisji — Ethernet / Sigfox IoT



Kompatybilne ultradźwiękowe czujniki odległości



Miernik poziomu - monitor poziomu wody w studni


Projekt miernika poziomu (monitor poziomu wody) składa się z centralnego interfejsu internetowego, który służy do zbierania danych z węzłów czujników i wizualizacji ich użytkownikowi. Aktualne dane o stanie wody prezentowane są na desce rozdzielczej wraz z przeliczeniem na objętość studni, dane historyczne o stanie wody są również dostępne dla użytkownika w formie tabelarycznej lub graficznej wizualizacji z wykresami liniowymi. Interfejs sieciowy jest responsywny, może dostosować się do dowolnej rozdzielczości ekranu i urządzenia. Interfejs sieciowy projektu wykorzystuje backend napisany w PHP, który może przetwarzać dane przychodzące z żądania za pomocą metody HTTP POST. Backend koryguje zmierzony poziom do rzeczywistego na podstawie znanej głębokości odwiertu, oblicza objętość wody w odwiercie z tego parametru i średnicę odwiertu. Głębokość i średnicę studni wprowadza do systemu użytkownik na podstawie proporcji swojej studni. Dane przesyłane są do serwera WWW przez mikrokontroler wspierany przez technologię (Ethernet/WiFi/LPWAN IoT Sigfox), który wykonuje pomiary co 300 sekund – m.in. 5 minut lub w przypadku transmisji przez sieć LPWAN IoT Sigfox dane przesyłane są co 11 minut, ponieważ modem jest ograniczony przez sieć do transmisji maksymalnie 140 wiadomości dziennie. Pomiar poziomu wody odbywa się za pomocą czujników ultradźwiękowych - HC-SR04 lub jego wodoodpornej odmiany JSN-SR04T. Można również zastosować inne czujniki z sygnałami Trigger / Echo z serii RCW, US-XXX, IOE-SR0X, SR0X, HC-SR0X, HY-SRF0X, DYP-MEXXX, Parallax PING)))™.

Miernik poziomu - dashboard - automatyczne odzyskiwanie aktualnie mierzonych danych przez jQuery

Zasada pomiaru czujników ultradźwiękowych polega na przesłaniu sygnału Trigger o długości 10 μs (mikrosekund), który odbija się od poziomu wody i wraca do odbiornika – Echo. Metoda Time-of-Flight służy do przeliczania czasu między wysłaniem a odebraniem sygnału w celu określenia odległości poziomu wody od czujnika, który znajduje się na szczycie studni. Wzór konwersji uwzględnia prędkość dźwięku 343 m/s w temperaturze 20 °C. Ważnym parametrem dla obu czujników ultradźwiękowych jest szerokość wiązki, czyli charakterystyka detekcji. Czujnik HC-SR04 ma charakterystykę detekcji 15°. Wiązka jest stosunkowo wąska i czujnik nadaje się również do węższych studni i zbiorników, ale nie jest wodoszczelny i ma duże ryzyko korozji (utleniania) ze względu na obecność wilgoci w studni. Z tego powodu wskazane jest umieszczenie czujnika ultradźwiękowego nad studnią. Wodoodporny czujnik JSN-SR04T ma charakterystykę detekcji 60°, co znacznie ją ogranicza i uniemożliwia zastosowanie w wąskich studniach, ponieważ wiązka rozszerza się wraz z odległością i wymaga studni o średnicy kilku metrów (średnica 6 metrów na głębokości studni 4,5 metra). Czujniki ultradźwiękowe są w pełni bezobsługowe. Czujnik JSN-SR04T ma elektroniczną płytkę sterującą, która nie może być narażona na działanie wilgoci i wody. Standardowy ekranowany kabel komunikacyjny ma długość 2,5 metra, istnieje możliwość podłączenia odpowiedników tego samego kabla w celu przedłużenia linii. W przypadku studni kwadratowej do średniej wprowadza się średnicę koła wpisanego, która stanowi wartość odniesienia cylindra wodnego do obliczenia objętości studni. Błąd całkowitej objętości odwiertu w tym przypadku będzie na poziomie ~12,5%. Maksymalna mierzalna wysokość poziomu (poziom) przez czujniki wynosi około 400 do 450 cm (znane z karty katalogowej).

Inne typy czujników poziomu wody, które można zintegrować (musisz stworzyć własne oprogramowanie):
  • Laser (LiDAR)
  • Hydrostatyczna (zanurzalna)
  • Elektrostatyczne (pojemnościowe / indukcyjne)
  • Ciśnienie (różnicowe / z kompensacyjnym czujnikiem ciśnienia atmosferycznego)
  • Optyczne
  • Mechaniczny (pływający)
  • Magnetyczne (hala)
  • Kuchenka mikrofalowa (radar)
  • Ultradźwięki - inny typ wyjścia (UART, RS-232, pętla prądowa, Modbus TCP / RTU, M-bus, RS-485, PROFINET, CAN)
  • Uwaga: Jeśli poziom wody jest ponownie obliczany od dołu po stronie mikrokontrolera, w interfejsie internetowym należy ustawić głębokość studni na 0 cm.

  • Prezentacja wideo interfejsu internetowego - Miernik poziomu:



    Czujniki ultradźwiękowe nadają się do:


  • Wykopane studnie
  • Szambo i szambo
  • Strumienie i jeziora
  • Plastikowe zbiorniki na wodę deszczową
  • Wytrzymałość (pomiar wypełnienia luzem)
  • Kontenery (monitorowanie odpadów, napełnianie pojemników zbiorczych)
  • Kotły (monitorowanie drewna, pelet, węgla, zrębków)
  • Szyby i piwnice (monitoring powodzi / wód gruntowych)
  • Produkcja (wykrywanie produktów, ich wysokość i ilość, wysokość nawijanego materiału)
  • Parkingi (wykrywanie wolnych i zajętych miejsc parkingowych)

  • Czujniki ultradźwiękowe nie nadają się do:


  • Studnie wiercone (ze względu na charakterystykę wykrywania - szeroka wiązka)
  • Rury i rurki (ze względu na charakterystykę wykrywania - szeroka wiązka)
  • Do studni z dopływem (turbulentna powierzchnia tłumi ultradźwięki, pomiar jest niemożliwy / krokowy)
  • W miejscach o nagłej zmianie temperatury (temperatura wpływa na czas rozchodzenia się dźwięku, więc nawet poziom stacjonarny wydaje się wahać)
  • Zbiorniki próżniowe (pomiar niemożliwy)
  • Charakterystyka detekcji ultradźwiękowych czujników odległości - skrypty MATLAB do wizualizacji:
  • HC-SR04.m Ściągnij
  • JSN-SR04T.m Ściągnij

  • Plug n' play firmware - Ultra Low Power / StandBy


    Skompilowany firmware dostępny do natychmiastowego wgrania do mikrokontrolera (nie wymaga instalacji biblioteki).
    Tytuł Funkcja oprogramowania ESP8266 ESP32
    Ultra Low Power

    Firmware dla aplikacji ULP o niskim poborze prądu (patrz schemat połączeń). Oprogramowanie układowe jest ładowane automatycznie za pomocą dołączonego narzędzia ESPTOOL, które jest uruchamiane za pomocą skryptu .bat (w skrypcie konieczna jest zmiana portu COM płyty ESP). Po wgraniu oprogramowania układowego i założeniu, że ESP nie ma zapisanego identyfikatora SSID i hasła z poprzedniego projektu, uruchomi się WiFiManager, który służy do konfiguracji istniejącej sieci WiFi. ESP rozpocznie nadawanie otwartej sieci WiFi z SSID w trybie AP --> Hladinomer_AP. Po podłączeniu klienta (Windows / Android / iOS) portal Captive uruchomi się na 192.168.4.1 (klient powinien zostać przekierowany automatycznie). WiFiManager umożliwia wybór sieci WiFi w zasięgu w interfejsie internetowym, ustawienie hasła. Po udanym podłączeniu ESP do określonej sieci WiFi i przypisaniu IPv4 z podanego zakresu, Captive Portal zostanie wyłączony, ESP pozostanie w trybie STA-Station. Następnie węzeł czujnika rozpocznie transmisję danych do interfejsu sieciowego miernika poziomu . Następnym razem, gdy węzeł czujnika zostanie uruchomiony, Captive Portal i WiFiManager przestaną się uruchamiać, ponieważ konfiguracja sieci WiFi zostanie zachowana na stałe. Po przesłaniu danych mikrokontroler przechodzi w tryb głębokiego uśpienia - Deep Sleep. Główny procesor Xtens jest wyłączony w trybie uśpienia. ESP8266 jest wybudzany przez zegar WAKE (wymagana zworka między GPIO16 a RST), ESP32 przez zegar RTC.

    ESP8266 firmware ESP32 firmware
    StandBy

    Firmware dla trybu StandBy mikrokontrolera, który w regularnych odstępach (5 min) wysyła pomiary poziomu wody do serwera WWW i jednocześnie utrzymuje łączność z AP w sieci LAN. Oprogramowanie układowe jest ładowane automatycznie za pomocą dołączonego narzędzia ESPTOOL, które jest uruchamiane za pomocą skryptu .bat (w skrypcie konieczna jest zmiana portu COM płyty ESP). Po wgraniu oprogramowania układowego i założeniu, że ESP nie ma zapisanego identyfikatora SSID i hasła z poprzedniego projektu, uruchomi się WiFiManager, który służy do konfiguracji istniejącej sieci WiFi. ESP rozpocznie nadawanie otwartej sieci WiFi z SSID w trybie AP --> Hladinomer_AP. Po podłączeniu klienta (Windows / Android / iOS) portal Captive uruchomi się na 192.168.4.1 (klient powinien zostać przekierowany automatycznie). WiFiManager umożliwia wybór sieci WiFi w zasięgu w interfejsie internetowym, ustawienie hasła. Po udanym podłączeniu ESP do określonej sieci WiFi i przypisaniu IPv4 z podanego zakresu, Captive Portal zostanie wyłączony, ESP pozostanie w trybie STA-Station. Następnie węzeł czujnika rozpocznie transmisję danych do interfejsu sieciowego miernika poziomu . Przy następnym uruchomieniu węzła czujnika, Captive Portal i WiFiManager przestaną się uruchamiać, ponieważ konfiguracja sieci WiFi jest zachowana na stałe.

    ESP8266 firmware ESP32 firmware

    Konfiguracja sieci WiFi przez WiFiManager - Plug n' play firmware


    Sieć Wi-Fi Hladinomer_AP, Captive Portal i interfejs sieciowy WiFiManager na Androidzie

    Zasada działania miernika poziomu - Schemat blokowy


    Miernik poziomu do szamba, szamba, studni, zasada pomiaru - ultradźwiękowy czujnik odległości

    Interfejs sieciowy wykorzystuje trygonometrię do oszacowania mierzalnej maksymalnej głębokości odwiertu przy znanej średnicy odwiertu (inny parametr do obliczania objętości odwiertu). Interfejs sieciowy pozwala zatem użytkownikowi obliczyć, do jakiej maksymalnej głębokości odwiertu każdy z czujników jest odpowiedni na podstawie jego właściwości. Projekt jest tak łatwy w obsłudze nawet dla laików, którzy nie wiedzą, który czujnik bardziej nadaje się do zastosowania w ich studni. Istotną rolę w systemie odgrywa również zastosowany mikrokontroler. Do projektu możliwe jest wykorzystanie platformy Arduino (Uno/Mega) w rewizji R3 z identycznym pinoutem, którą można podłączyć do nakładki Ethernet komunikującej się poprzez interfejs ICSP. Możliwe jest również wykorzystanie modułów Ethernet i podłączenie ich bezpośrednio do sprzętowych pinów SPI mikrokontrolera. Obsługiwane są moduły Ethernet z Wiznet W5100, W5500, USR-ES1. Moduł Ethernet ENC28J60 jest obsługiwany przez MicroChip. Wszystkie moduły Ethernet zapewniają łączność HTTP z serwerem WWW. Obsługiwane są również mikrokontrolery WiFi firmy Espressif Systems - ESP8266 i ESP32. Mikrokontrolery posiadają kilka trybów pracy: StandBy, StandBy + OTA z możliwością zdalnego wgrywania firmware przez sieć LAN oraz tryb głębokiego uśpienia dla aplikacji ULP - Deep Sleep. W trybie uśpienia dla mikrokontrolera ESP8266 konieczne jest dodanie fizycznej zworki pomiędzy GPIO16 (WAKE) a RST - patrz Schemat połączeń. Mikrokontrolery ESP pozwalają również na realizację szyfrowanej komunikacji z serwerem WWW za pomocą protokołu HTTPS. Zarówno platformy ESP8266, jak i ESP32 korzystają z głównego urzędu certyfikacji, który wystawił certyfikat (wystawcę) dla domeny serwera WWW. Certyfikat jest osadzony w kodzie źródłowym mikrokontrolerów w formacie .pem. Aby certyfikat nie zajmował miejsca w pamięci RAM mikrokontrolera, umieszczany jest w pamięci flash mikrokontrolera - PROGMEM. Certyfikat urzędu certyfikacji jest ważny od 10 do 20 lat, więc nie wymaga częstego odnawiania certyfikatu. Dane o aktualnym stanie wody i objętości wody w studni są dostępne w formacie JSON z interfejsu WWW. Projekt miernika poziomu można zintegrować za pośrednictwem MQTT z automatyką domową (Hassio, Domoticz, Loxone), aby wyświetlać poziom wody na własnym pulpicie, np. Grafana. W dalszej kolejności możliwe jest wykonanie sterowania peryferyjnego w podsystemie (nawadnianie, podlewanie, uruchamianie wodociągów domowych) na podstawie danych o stanie wody w studni z interfejsu webowego.

    Implementacje oprogramowania dla Arduino, ESP8266, ESP32 (wymaga instalacji biblioteki): Dostępny tutaj

    Dostępne biblioteki dla mikrokontrolerów (Arduino / ESP)


    Archiwum biblioteki (.zip) rozwiń do C:/Users/[User]/Documents/Arduino/libraries
    Tytuł Funkcja biblioteki Ściągnij
    NewPing

    Biblioteka dla mikrokontrolerów AVR (ATmega) Arduino Uno / Nano / Mega. Umożliwia wykonywanie pomiarów ultradźwiękowymi czujnikami odległości RCW, US-XXX, IOE-SR0X, SR0X, HC-SR0X, HY-SRF0X, DYP-MEXXX, Parallax PING)))™.

    Ściągnij
    NewPingESP8266

    Biblioteka dla mikrokontrolerów ESP8266 i ESP32. Umożliwia wykonywanie pomiarów ultradźwiękowymi czujnikami odległości RCW, US-XXX, IOE-SR0X, SR0X, HC-SR0X, HY-SRF0X, DYP-MEXXX, Parallax PING)))™.

    Ściągnij
    Ethernet2

    Biblioteka dla mikrokontrolerów AVR (ATmega) Arduino Uno / Nano / Mega. Umożliwia komunikację z modułem Ethernet Wiznet W5200 do W5500 poprzez interfejs SPI.

    Ściągnij
    Ethernet3

    Biblioteka dla mikrokontrolerów AVR (ATmega) Arduino Uno / Nano / Mega. Umożliwia komunikację z modułem Ethernet Wiznet W5500 V2 - USR-ES1 poprzez interfejs SPI.

    Ściągnij
    UIPEthernet

    Biblioteka dla mikrokontrolerów AVR (ATmega) Arduino Uno / Nano / Mega. Umożliwia komunikację z modułem Ethernet ENC28J60 firmy Microchip poprzez interfejs SPI.

    Ściągnij

    W przypadku lokalizacji, w których nie ma stałego zasięgu Internetu, możliwe jest również skorzystanie z sieci LPWAN IoT Sigfox, która obejmuje swoim zasięgiem różne obszary Polski. Uwzględnione są miasta i ich najbliższe otoczenie: Łódź, Warszawa, Olsztyn, Poznań, Zielona Góra, Szczecin, Gdańsk, Gliwice. Uwzględniono również obszary przygraniczne z Republiką Czeską i Słowacją. Technologia ta pozwala na przesyłanie niewielkich ilości wiadomości o rozmiarze do 12B. W przypadku projektu Miernik poziomu wysyłana jest wartość poziomu wody 4B (UINT_32). W przypadku projektu rozszerzonego o deszczomierz wysyłana jest wartość 8B, która jest utworzona przez wysokość lustra wody i przyrost opadów. Ponieważ Sigfox pozwala na przesłanie maksymalnie 140 wiadomości dziennie, interwał transmisji danych został wydłużony do 11 minut. W obu przypadkach wiadomość nie zawiera pełnej długości użytecznej ładunku. Wiadomości Payload mogą być również uzupełniane różnymi informacjami systemowymi, na przykład: dane GEO (długość/szerokość geograficzna) na podstawie danych z usługi GPS Sigfox Atlas, RSSI (Received Signal Strength), numer wiadomości i inne. Moduł komunikacyjny, który został wykorzystany w projekcie to modem Sigfox WISOL 868MHz UART LPWAN. Modem ten komunikuje się za pomocą poleceń AT za pośrednictwem interfejsu UART, który jest oprogramowaniem emulowanym na mikrokontrolerach. Komunikacja przejmie prędkość 9600 bodów/s. Modem WISOL jest wyposażony w zintegrowane złącze u.FL na module PCB do podłączenia anteny, co znacznie zmniejsza zasięg nawet w pomieszczeniach / na zewnątrz zacienionych. Do pomyślnej transmisji danych wymagane jest pokrycie przez dwie, najlepiej trzy lub więcej stacji BTS do pomyślnej transmisji danych. BTS przesyła przesyłane informacje do backendu Sigfox, gdzie konieczne jest wykonanie callbacku, który rozpocznie się po otrzymaniu danych. Wywołanie zwrotne wysyła żądanie HTTP lub HTTPS do domeny, w której działa aplikacja internetowa, z metodą POST i odpowiednio zakodowanym ładunkiem, którego oczekuje backend aplikacji internetowej.


    Zasięg Polski przez sieć LPWAN IoT Sigfox:


    Pokrytie Poľska IoT LPWAN sieťou Sigfox - hladinomer do studne

    Konfiguracja wywołania zwrotnego Sigfox do testowania aplikacji internetowych

    Miernik poziomu:
  • Callbacks --> Custom --> New
  • Do Custom payload config będziemy pisać: cislo1::uint:16
  • Do URL pattern będziemy pisać: http://arduino.clanweb.eu/studna_s_prekladom/data.php (lub inny adres URL Twojego serwera WWW, na którym będzie działał projekt), możliwość korzystania z HTTPS
  • V HTTP metodę wybieramy: POST
  • Do Body (treść wiadomości) będziemy pisać:
  • hodnota={customData#cislo1}&token=123456789
  • Do Content-Type: application/x-www-form-urlencoded

  • Zrzuty ekranu interfejsu internetowego dla projektu miernika poziomu


    WaterWell Level monitor - webapp - main page - Last measured values with automatic refresh - AJAX WaterWell Level monitor - webapp - Historical measured datas with timestamp WaterWell Level monitor - Record, minimal, maximal value per day, week, month WaterWell Level monitor - graph of water level in time - week / year ESP32 - FreeRTOS - ESP-IDF - ultrasonic sensor measurement and data transfer to webserver via HTTP, POST transfer method ESP32 - FreeRTOS - ESP-IDF - ultrasonic sensor measurement and data transfer to webserver via HTTPS, POST transfer method Supported hardware for well level project - Arduino - Ethernet and WiFi connectivity - ESP8266 - ESP32