Source codes of the project Level meter for Arduino microcontrollers, ESP8266, ESP32, library NewPing, Ethernet2, Ethernet3, UIPEthernet: Github project repository
Try Water Level Monitor project for free with your hardware - online: HERE - HTTP protocol only (Endora.cz freehosting does not support HTTPS connections).
Try Water Level Monitor project for free with your hardware - online: HERE - HTTPS (available for ESP8266 and ESP32, Arduino + Ethernet does not support HTTPS)
Implementation for ESP32 available in the ESP-IDF v4.2 framework (4.0 compatible) available from June 4, 2021 using FreeRTOS and tasks with the Queue locking mechanism.
If you are interested in the source codes of the web application, contact the author of the project at: martinius96@gmail.com
Arduino Ethernet Wiznet W5100 / W5500 ESP8266 ESP32 Ultrasonic HC-SR04 JSN-SR04T Sigfox

Supported microcontrollers for Water Level monitor - AVR / ESP



Transmission technology modules - Ethernet / Sigfox



Compatible ultrasonic distance sensors



Water Level monitor - Arduino / ESP8266 / ESP32


Water Level monitor project consists of a central web interface that serves to collect data from sensor nodes and visualize them to the user. Current data on the water level are represented in the dashboard together with the conversion to the volume of the well, historical data on the water level are also available to the user in tabular or graphical visualization with line graphs. Web interface is responsive, it can adapt to any screen and device resolution. Projects web interface uses a backend written in PHP that can process incoming data from the request using the HTTP POST method. Backend corrects the measured level to the actual one based on the known depth of the well, calculates the volume of water in the well from this parameter and the diameter of the well. Depth and diameter of the well are entered into the system by the user based on the proportions of his well. Data is sent to the web server by a microcontroller, which performs measurements every 300 seconds - i. 5 minutes, or in the case of transmission via IoT network Sigfox, data is sent every 11 minutes, as it is limited by the network to transmit a maximum of 140 messages per day. Water level measurement is performed using ultrasonic sensors - HC-SR04, or its waterproof variant JSN-SR04T, other sensors with Trigger / Echo signals from US-02X, IOE-SR0X, HC-SR0X, HY-SRF0X, DYP-ME007 series can also be used.


Principle of measuring ultrasonic sensors is to send a Trigger signal with a length of 10 μs (microseconds), which bounces off the water level and returns to the receiver - Echo. Time-of-Flight method is used to recalculate the time between sending and receiving the signal to determine the distance of the water level from the sensor, which is located at the top of the well. Conversion formula takes into account the speed of sound 343 m/s at a temperature of 20 °C. An important parameter for both ultrasonic sensors is the beam width, in other words the detection characteristic. HC-SR04 sensor has a 15° detection characteristic. The beam is relatively narrow and the sensor is also suitable for narrower wells and tanks, but it is not waterproof and has a high risk of corrosion (oxidation) due to the presence of moisture in the well. For this reason, it is advisable to place this ultrasonic sensor above the well. Waterproof sensor JSN-SR04T has a detection characteristic of 60°, which considerably limits it and prevents its use in narrow wells, as the beam widens with distance and requires a well with a diameter of several meters (6 meters diameter at a well depth of 4.5 meters) . Ultrasonic sensors are fully maintenance-free. The JSN-SR04T sensor has an electronic control board that must not be exposed to moisture and water. Standard communication shielded cable is 2.5 meters long, it is possible to connect counterparts of the same cable to extend the line. In the case of a square well, the diameter of the inscribed circle is entered into the average, which will form the reference value of the water cylinder for the calculation of the well volume. Error of the total well volume in this case will be similar to ~12.5%. Maximum measurable level height (level) by the sensors is about 400 to 450 cm (known from the datasheet).

Other types of water level sensors that can be integrated (you need to create your own firmware):
  • Laser (LiDAR)
  • Hydrostatic
  • Electrostatic (capacitive / inductive)
  • Pressure (differential / with compensating atmospheric pressure sensor)
  • Optical
  • Mechanical (floater)
  • Magnetic (Hall)
  • Microwave (radar)
  • Note: If the water level is recalculated from the bottom on the microcontrollers side, the well depth must be set to 0 cm in the web interface.

  • Video demonstration of the web interface - Water Level monitor:



    Ultrasonic sensors are suitable for:


  • Digged wells
  • Septics and cesspools
  • Streams and lakes
  • Plastic rainwater tanks
  • Silos (measuring bulk filling)
  • Containers (waste monitoring, fill level)
  • Boiler rooms (monitoring of wood, pellets, coal, wood chips materials)
  • Shafts and cellars (flooding - groundwater monitoring)

  • Ultrasonic sensors are NOT suitable for:


  • Drilled wells (due to detection characteristics - wide beam)
  • Pipes and tubes (due to detection characteristics - wide beam)
  • To wells with a tributary (rippled surface attenuates ultrasound, measurement is impossible)
  • In places with a sudden change in temperature (temperature affects the time of sound propagation, so even the stationary level appears to fluctuate)
  • Vacuum tanks (measurement is not possible)

  • Plug n play firmware - Ultra Low Power / StandBy


    Compiled firmware available for immediate upload to the microcontroller (libraries are not required)!
    Firmware name Firmware function ESP8266 ESP32
    Ultra Low Power

    Firmware for ULP applications with low current consumption. The firmware is loaded via the bundled ESPTOOL tool automatically, which is run with a .bat script (in the script it is necessary to change the COM port of your ESP board). After uploading the firmware and assuming that ESP does not have the SSID and password from the previous project stored, WiFiManager will start, which is used to configure the existing WiFi network. ESP will start broadcasting an open WiFi network with SSID -> Hladinomer_AP in AP mode. After connecting the client (Windows / Android / iOS) the Captive portal will start on 192.168.4.1 (the client should be redirected automatically). WiFiManager allows you to select a WiFi network in range in the web interface, set a password. After successfully connecting ESP to the specified WiFi network and assigning IPv4 from the given range, Captive Portal will be turned off, ESP remains in STA-Station mode. Subsequently, the sensor node will start transmitting data to the web interface Water Level Monitor . The next time the sensor node is started, Captive Portal and WiFiManager will no longer start, as the WiFi network configuration is permanently preserved. After datas are sent to server, ESP microcontroller will switch to Deep Sleep mode. It will turn off main processor Xtensa. ESP8266 is awakened via WAKE timer (jumper between GPIO16 and RST required - check Wiring diagram), ESP32 is awakened via RTC Timer.

    ESP8266 firmware ESP32 firmware
    StandBy

    Firmware for StandBy mode of the microcontroller, which sends at regular intervals (5 min) measurements of the water level to the web server and at the same time maintains connectivity with the AP in the LAN network. The firmware is loaded via the bundled ESPTOOL tool automatically, which is run with a .bat script (in the script it is necessary to change the COM port of your ESP board). After uploading the firmware and assuming that ESP does not have the SSID and password from the previous project stored, WiFiManager will start, which is used to configure the existing WiFi network. ESP will start broadcasting an open WiFi network with SSID in AP mode --> Hladinomer_AP. After connecting the client (Windows / Android / iOS) the Captive portal will start on 192.168.4.1 (the client should be redirected automatically). WiFiManager allows you to select a WiFi network in range in the web interface, set a password. After successfully connecting ESP to the specified WiFi network and assigning IPv4 from the given range, Captive Portal will be turned off, ESP remains in STA-Station mode. Subsequently, the sensor node starts transmitting data to the web interface Water Level Monitor. The next time the sensor node is started, Captive Portal and WiFiManager will no longer start, as the WiFi network configuration is permanently stored.

    ESP8266 firmware ESP32 firmware

    Principle of water level measurement and data transmission - Block diagram


    Level meter for cesspool, septic tank, well, measuring principle - ultrasonic distance sensor

    Web interface uses trigonometry to estimate the measurable maximum depth of a well at a known well diameter (another parameter for calculating well volume). Interface allows user to calculate to what maximum depth of the well each of the sensors is suitable based on its characteristics. Project is so easy to use even for laymen who do not know which sensor is more suitable for application in their well. Microcontroller used also plays an important role in the system. For the project, it is possible to use the Arduino platform (Uno / Mega) in revision R3 with an identical pinout, which can be connected to an Ethernet shield that communicates via the ICSP interface. It is also possible to use Ethernet modules and connect them directly to the hardware SPI pins of the microcontroller. Ethernet modules from Wiznet W5100, W5500, USR-ES1 are supported. The Ethernet module ENC28J60 is supported by MicroChip. All Ethernet modules provide HTTP connectivity with the web server. WiFi microcontrollers from Espressif Systems - ESP8266 and ESP32 are also supported. Microcontrollers have several operating modes: StandBy, StandBy + OTA with the possibility of remote firmware upload via LAN network and deep sleep mode for ULP applications - Deep Sleep. In sleep mode for ESP8266 it is necessary to add a physical jumper between GPIO16 (WAKE) and RST - see Wiring Diagram. ESP microcontrollers also allow the implementation of HTTPS (encrypted) connectivity with the web server. Both the ESP8266 and ESP32 platforms use the Root CA, which has issued a certificate (Issuer) for the web server domain. The certificate is embedded in the source code of the microcontrollers in .pem format. In order for the certificate not to take up space in the RAM memory of the microcontroller, it is inserted into the flash memory of the microcontroller - PROGMEM. Certificate of the certification authority is valid for 10 to 20 years, so it does not require frequent renewal of the certificate. Data on the current water level and water volume in the well are available in JSON format from the web interface. The project can integrate the Level meter project via MQTT into home automation (Hassio, Domoticz, Loxone) to display the water level in its own dashboard, e.g. Grafana.

    Source codes for Arduino, ESP8266, ESP32 (required installation of libraries): Available here

    Available libraries for microcontrollers (Arduino / ESP)


    Library archive (.zip) extract to C:/Users/[User]/Documents/Arduino/libraries
    Library name Library function Download
    NewPing

    Library for AVR microcontrollers (ATmega) Arduino Uno / Nano / Mega. It allows to perform measurements with ultrasonic distance sensors US-02X, IOE-SR0X, HC-SR0X, HY-SRF0X, JSN-SR0XT, DYP-ME007.

    Download
    NewPingESP8266

    Library for ESP8266 and ESP32 microcontrollers. It allows to perform measurements with ultrasonic distance sensors US-02X, IOE-SR0X, HC-SR0X, HY-SRF0X, JSN-SR0XT, DYP-ME007.

    Download
    Ethernet2

    Library for AVR microcontrollers (ATmega) Arduino Uno / Nano / Mega. It enables communication with the Ethernet module Wiznet W5200 to W5500 via the SPI interface.

    Download
    Ethernet3

    Library for AVR microcontrollers (ATmega) Arduino Uno / Nano / Mega. It enables communication with Ethernet module Wiznet W5500 V2 - USR-ES1 via SPI interface.

    Download
    UIPEthernet

    Library for AVR microcontrollers (ATmega) Arduino Uno / Nano / Mega. It enables communication with the Ethernet module ENC28J60 from Microchip via the SPI interface.

    Download

    For states, regions without internet coverage, it is also possible to use the LPWAN network Sigfox, which covers most European countries, certain Asian countries and some American countries.. This technology allows you to transmit small volumes of messages up to 12B in size. In the case of the Level project, a 4B water level value is sent. For a project extended by a rain gauge, the value 8B value is sent, which is formed by the height of the water level and the increment of precipitation. As Sigfox allows a maximum of 140 messages to be transmitted per day, the data transmission interval is extended to 11 minutes. In both cases, the message does not contain the full usable length of the payload. Payload messages can also be supplemented with various system information, for example: GEO data (longitude / latitude) based on data from the GPS service Sigfox Atlas, RSSI (Received Signal Strength), message number and others. The communication module that was used for the project is a Sigfox WISOL 868 MHz UART LPWAN modem (in case of USA, Canada or Australia you will need to use 915 MHz version of modem). This modem communicates via AT commands via the UART interface, which is software emulated on microcontrollers. The communication will take over at a speed of 9600 baud / s. The WISOL modem is equipped with an integrated u.FL connector on the PCB module for antenna connection, which significantly reduces coverage even indoors / shaded outdoors. For successful data transmission, coverage by two, preferably three or more BTS stations is required for successful data transmission. The BTS sends the transmitted information to the Sigfox backend, where it is necessary to make a callback, which will start after receiving the data. The callback makes an HTTP or HTTPS request to the domain where the web application is running with the POST method and a suitably encoded payload that the web application backend expects.


    English-speaking countries coverage by LPWAN IoT Sigfox:


    Coverage of the United Kingdom & Ireland by the Sigfox network - a level well for a well Coverage of the South Africa Republic by the Sigfox network - water level meter for digged well Coverage of Australia and New Zealand by the Sigfox network - water level meter for digged well Coverage of the United States of America by the Sigfox network - water level meter for digged well
    Water Level Monitor - Callback settings in Sigfox Backend:
  • Callbacks --> Custom --> New
  • In Custom payload config we write: cislo1::uint:16
  • To URL pattern: http://arduino.clanweb.eu/studna_s_prekladom/data.php (or another URL of your web server where the project will run), the possibility to use HTTPS
  • In the HTTP method, select: POST
  • To the Body (body of the message) we add:
  • hodnota={customData#cislo1}
  • To Content-Type: application/x-www-form-urlencoded

  • Screenshots of Water Level monitor webapp


    Water Level Monitor webapp with automatic refresh of measurement value 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

    Schéma (Wiring diagram)

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