Для решения требуется пользовательский веб-сервер

Монитор уровня воды в колодце с Arduino - Попробуйте онлайн здесь


Монитор уровня воды позволяет:
  • Захватите уровень воды с уровня крышки. Нижнее расстояние может быть до 4 метров.
  • Посредством расчета можно определить уровень воды снизу, а объем в литрах можно определить при известной ширине (радиусе) скважины. В зависимости от высоты он может быть представлен в метрах или сантиметрах.
  • Измеренные данные отправляются в базу данных MySQL, которая архивирует их с отметкой времени.
  • Данные представлены в виде таблицы в реальном времени, которая обновляется через AJAX, без обновления в реальном времени также отображаются на графиках. Последние данные на графиках появятся после обновления.
  • Графики показывают изменение высоты воды за: последние 2 часа, последние 24 часа, последние 7 дней, 30 дней.
  • Данные базы данных автоматически удаляются через 60+ дней.
  • В систему также включены аварийные представления последнего значения, максимального, минимального значения за 24 часа, 7 дней, 30 дней.
  • Использованное оборудование:
  • Arduino Uno/MegaArduino Uno R3
  • Ethernet-щит W5100Ethernet Shield Wiznet W5100
  • или модуль Ethernet W5500Ethernet Module Wiznet W5500
  • Ультразвуковой датчик расстояния - HC-SR04HC SR 04
  • Система может использоваться для дополнительных измерений, а также для других расстояний, таких как: высота снега, расстояние до объекта и т. Д.
  • Также может применяться к ESP8266, ESP32, Raspberry, Micro: bit и другим.
  • С Arduine данные по Ethernet отправляются по протоколу HTTP. С помощью плат ESP также возможно создать зашифрованное соединение HTTPS для отправки данных.
  • Возможность реализовать передачу IoT через сеть Sigfox.
  • Скриншоты системы:
    Celý projekt: Github

    Arduino + Ethernet Wiznet W5100

    #include <avr\wdt.h>
    #include <SPI.h>
    #include <Ethernet.h>
    #include <NewPing.h>
    #define pinTrigger    3
    #define pinEcho       4
    #define maxVzdialenost 450
    NewPing sonar(pinTrigger, pinEcho, maxVzdialenost);
    byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
    char server[] = "www.arduino.php5.sk";
    IPAddress ip(192, 168, 1, 101);
    EthernetClient client;
    void setup() {
      Serial.begin(9600);
      if (Ethernet.begin(mac) == 0) {
        Serial.println("Failed to configure Ethernet using DHCP");
        Ethernet.begin(mac, ip);
      }
      wdt_enable(WDTO_8S);
    }
    
    void loop() {
      wdt_reset();
      int vzdialenost = sonar.ping_cm();
      delay(50);
      if (vzdialenost > 0) {
        vzdialenost = 0;
        for (int i = 0; i < 5; i++) {
          vzdialenost += sonar.ping_cm();
          delay(50);
        }
        vzdialenost = vzdialenost / 5;
        Serial.print("Vzdialenost medzi senzorom a predmetom je: ");
        Serial.print(vzdialenost);
        Serial.println(" cm.");
        if (client.connect(server, 80)) {
          String hodnota = String(vzdialenost);
          Serial.println("Pripojenie uspesne na webserver, vykonavam request... ");
          client.print("GET /studna/data.php?hodnota=");
          client.print(hodnota);
          client.println(" HTTP/1.1");
          client.println("Host: www.arduino.php5.sk");
          client.println("Connection: close");
          client.println();
          Serial.println("Data uspesne odoslane na web");
          client.stop();
        } else {
          Serial.println("Pripojenie zlyhalo...");
        }
      }
      else {
        Serial.println("Vzdialenost medzi predmetom a senzorom je mimo rozsah.");
        wdt_reset();
        delay(500);
      }
      for (int i = 0; i <= 300; i++) {
        delay(1000);
        wdt_reset();
      }
    }
    

    ESP8266:

    #include <ESP8266WiFi.h>
    #include <NewPing.h>
    #define pinTrigger    5 //D1
    #define pinEcho       4 //D2
    #define maxVzdialenost 450
    NewPing sonar(pinTrigger, pinEcho, maxVzdialenost);
    
    
    const char * ssid = "wifi_meno"; //meno wifi siete
    const char * password = "wifi_heslo"; //heslo na wifi siet
    const char * host = "www.arduino.php5.sk"; //bez https a bez www
    
    const int httpPort = 80;
    WiFiClient client;
    void setup() {
      Serial.begin(115200);
      WiFi.begin(ssid, password); //pripoj sa na wifi siet s heslom
      while (WiFi.status() != WL_CONNECTED) {
        delay(1000);
        Serial.print(".");
      }
      Serial.println("");
      Serial.println("Wifi pripojene s IP:");
      Serial.println(WiFi.localIP());
    }
    
    void loop() {
      if (WiFi.status() != WL_CONNECTED) {
        WiFi.begin(ssid, password); //pripoj sa na wifi siet s heslom
      }
      while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        Serial.print(".");
      }
      int vzdialenost = sonar.ping_cm();
      delay(50);
      if (vzdialenost > 0) {
        vzdialenost = 0;
        for (int i = 0; i < 5; i++) {
          vzdialenost += sonar.ping_cm();
          delay(50);
        }
        vzdialenost = vzdialenost / 5;
        Serial.print("Vzdialenost medzi senzorom a predmetom je: ");
        Serial.print(vzdialenost);
        Serial.println(" cm.");
        if (client.connect(host, httpPort)) {
          String hodnota = String(vzdialenost);
          Serial.println("Pripojenie uspesne na webserver, vykonavam request... ");
          String url = "/studna/data.php?hodnota=" + hodnota;
          client.print(String("GET ") + url + " HTTP/1.1\r\n" + "Host: " + host + "\r\n" + "User-Agent: NodeMCU\r\n" + "Connection: close\r\n\r\n");
          Serial.println("Hodnoty do databazy uspesne odoslane");
          client.stop();
        } else {
          Serial.println("Pripojenie zlyhalo...");
        }
      }
      else {
        Serial.println("Vzdialenost medzi predmetom a senzorom je mimo rozsah.");
        delay(500);
      }
      for (int i = 0; i <= 300; i++) {
        delay(1000);
      }
    }
    

    ESP32

    #include <WiFi.h>
    #include <NewPing.h>
    #define pinTrigger    5 //D1
    #define pinEcho       4 //D2
    #define maxVzdialenost 450
    NewPing sonar(pinTrigger, pinEcho, maxVzdialenost);
    
    
    const char * ssid = "wifi_meno"; //meno wifi siete
    const char * password = "wifi_heslo"; //heslo na wifi siet
    const char * host = "www.arduino.php5.sk"; //bez https a bez www
    
    const int httpPort = 80;
    WiFiClient client;
    void setup() {
      Serial.begin(115200);
      WiFi.begin(ssid, password); //pripoj sa na wifi siet s heslom
      while (WiFi.status() != WL_CONNECTED) {
        delay(1000);
        Serial.print(".");
      }
      Serial.println("");
      Serial.println("Wifi pripojene s IP:");
      Serial.println(WiFi.localIP());
    }
    
    void loop() {
      if (WiFi.status() != WL_CONNECTED) {
        WiFi.begin(ssid, password); //pripoj sa na wifi siet s heslom
      }
      while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        Serial.print(".");
      }
      int vzdialenost = sonar.ping_cm();
      delay(50);
      if (vzdialenost > 0) {
        vzdialenost = 0;
        for (int i = 0; i < 5; i++) {
          vzdialenost += sonar.ping_cm();
          delay(50);
        }
        vzdialenost = vzdialenost / 5;
        Serial.print("Vzdialenost medzi senzorom a predmetom je: ");
        Serial.print(vzdialenost);
        Serial.println(" cm.");
        if (client.connect(host, httpPort)) {
          String hodnota = String(vzdialenost);
          Serial.println("Pripojenie uspesne na webserver, vykonavam request... ");
          String url = "/studna/data.php?hodnota=" + hodnota;
          client.print(String("GET ") + url + " HTTP/1.1\r\n" + "Host: " + host + "\r\n" + "User-Agent: NodeMCU\r\n" + "Connection: close\r\n\r\n");
          Serial.println("Hodnoty do databazy uspesne odoslane");
          client.stop();
        } else {
          Serial.println("Pripojenie zlyhalo...");
        }
      }
      else {
        Serial.println("Vzdialenost medzi predmetom a senzorom je mimo rozsah.");
        delay(500);
      }
      for (int i = 0; i <= 300; i++) {
        delay(1000);
      }
    }
    

    GSM:

    #include <GSM.h<
    #include <NewPing.h<
    #define pinTrigger    3
    #define pinEcho       4
    #define maxVzdialenost 450
    NewPing sonar(pinTrigger, pinEcho, maxVzdialenost);
    // PIN Number
    #define PINNUMBER ""
    
    // APN data
    #define GPRS_APN       "GPRS_APN" // replace your GPRS APN
    #define GPRS_LOGIN     "login"    // replace with your GPRS login
    #define GPRS_PASSWORD  "password" // replace with your GPRS password
    
    GSMClient client;
    GPRS gprs;
    GSM gsmAccess;
    char server[] = "www.arduino.php5.sk";
    int port = 80; // port 80 is the default for HTTP
    
    void setup() {
      // initialize serial communications and wait for port to open:
      Serial.begin(9600);
      Serial.println("Starting Arduino web client.");
    
      boolean notConnected = true;
    
      // After starting the modem with GSM.begin()
      // attach the shield to the GPRS network with the APN, login and password
      while (notConnected) {
        if ((gsmAccess.begin(PINNUMBER) == GSM_READY) &
            (gprs.attachGPRS(GPRS_APN, GPRS_LOGIN, GPRS_PASSWORD) == GPRS_READY)) {
          notConnected = false;
        } else {
          Serial.println("Not connected");
          delay(1000);
        }
      }
    }
    
    void loop() {
      int vzdialenost = sonar.ping_cm();
      delay(50);
      if (vzdialenost > 0) {
        vzdialenost = 0;
        for (int i = 0; i < 5; i++) {
          vzdialenost += sonar.ping_cm();
          delay(50);
        }
        vzdialenost = vzdialenost / 5;
        Serial.print("Vzdialenost medzi senzorom a predmetom je: ");
        Serial.print(vzdialenost);
        Serial.println(" cm.");
      if (client.connect(server, 80)) {
        String hodnota = String(vzdialenost);
        Serial.println("Pripojenie uspesne na webserver, vykonavam request... ");
        client.print("GET /studna/data.php?hodnota=");
        client.print(hodnota);
        client.println(" HTTP/1.1");
        client.println("Host: www.arduino.php5.sk");
        client.println("Connection: close");
        client.println();
        Serial.println("Data uspesne odoslane na web");
        client.stop();
      } else {
        Serial.println("Pripojenie zlyhalo...");
      }
    }