Ankündigung

Einklappen

INFORMATION

Dieser Bereich ist für fertige Lösungen gedacht. Nutze bitte für Diskussionen die anderen Bereiche.
Mehr anzeigen
Weniger anzeigen

Füllstandmessung mit Ultraschall + UDP an Miniserver

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Füllstandmessung mit Ultraschall + UDP an Miniserver

    Um bei unserer Zisterne den aktuellen Füllstand zu erfassen habe ich mit einfachen Mitteln einen Ultraschall-Sensor gebaut.

    Hardware
    1 x Arduino Nano
    1 x Ethernet W5100
    1 x HC SR04 Ultraschallsensor

    Elektrische Verbindungen (Schaltung)
    Ethernet zu Arduino
    MO -> Pin 11
    MI -> Pin 12
    SCK -> Pin 13
    SS -> Pin 10
    5v -> 5V
    GND -> GND

    HC SR04 zu Arduino
    VCC -> 5V
    Trig -> Pin 8
    Echo -> Pin 7
    GND -> GND

    Stromversorgung
    5V -> VIN
    GND -> GND

    Arduino Code
    Code:
    // benoetigte Bibliotheken
    #include <Ethernet.h>
    #include <EthernetUdp.h>
    
    // Netzwerk Einstellungen
    //MAC-Adresse bitte anpassen
    byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xEB };
    // UDP Port zum Datenempfang Lox MS -> Arduino
    unsigned int ARDUPORT = xxxx;
    
    // IP Lox MS
    IPAddress MSIP(192, xxx, xxx, xxx);
    // UDP Port zum Datenversand Arduino -> Lox MS
    unsigned int MSPORT = xxxx;
    
    // Daten-Buffer
    char packetBuffer[UDP_TX_PACKET_MAX_SIZE];
    
    // EthernetUDP Instanz um UDP zu senden/empfangen
    EthernetUDP Udp;
    
    // Pin fure HC SR04 festlegen
    #define echoPin 7 // Echo Pin
    #define trigPin 8 // Trigger Pin
    
    // Konstanten
    int maxReichweite = 300; // Maximum Reichweite der Messung
    int minReichweite = 0; // Minimum Recihweite der Messung
    
    // Variablen
    long dauer;
    float distanz;
    char chardistanz[10];
    
    void setup() {
      Serial.begin(9600);
    
      if (!Ethernet.begin(mac)) Serial.println("DHCP fehlgeschlagen");
      else {
    
        Serial.println ("Netzwerkdaten");
        Serial.println ("---------------");
        Serial.print("Arduino MAC: ");
        Serial.print(mac[0], HEX);
        Serial.print(":");
        Serial.print(mac[1], HEX);
        Serial.print(":");
        Serial.print(mac[2], HEX);
        Serial.print(":");
        Serial.print(mac[3], HEX);
        Serial.print(":");
        Serial.print(mac[4], HEX);
        Serial.print(":");
        Serial.println(mac[5], HEX);
        Serial.print("Arduino IP: ");
        Serial.println(Ethernet.localIP());
        Serial.print("Arduino UDP Port: ");
        Serial.println(ARDUPORT);
        Serial.println ("---------------");
        Serial.print ("Miniserver IP: ");
        Serial.println(MSIP);
        Serial.print("Miniserver UDP Port: ");
        Serial.println(MSPORT);
        Serial.println ("---------------");
      }
    
      Udp.begin(ARDUPORT); // Start UDP
    
      pinMode(trigPin, OUTPUT);
      pinMode(echoPin, INPUT);
    
    }
    
    void loop() {
      // Distanz lesen
      digitalWrite(trigPin, LOW);
      delayMicroseconds(2);
      digitalWrite(trigPin, HIGH);
      delayMicroseconds(10);
      digitalWrite(trigPin, LOW);
      dauer = pulseIn(echoPin, HIGH);
    
      //Distanz in cm umrechnen
      distanz = dauer / 58.2;
    
      // min max auswerten, wenn in der Range wird gesendet
      if (distanz >= maxReichweite || distanz <= minReichweite) {
        Serial.println("Messung fehlerhaft!");
      }
      else {
        Serial.print(distanz), Serial.println(" cm");
        dtostrf(distanz, 4, 0, chardistanz); //Distanz fuer UDP Versand umwandeln (1 steht fue  r Nachkommastellen)
        sendUDP(chardistanz); //Messung an MS senden
      }
      delay(5000); // Wartet x Sekunden bis zur naechsten Messung, z.B. 5000 = 5 Sekunden
    }
    
    //UDP-Befehl senden
    void sendUDP(String text)
    {
      Udp.beginPacket(MSIP, MSPORT);
      Udp.print(text);
      Udp.endPacket();
      delay(10);
    }
    Wie funktioniert es
    Der Ultraschallsensor sendet ein Schallsignal aus und misst die Zeit bis es wieder zurück kommt.
    Anhand der Zeit wird die Entfernung umgerechnet.
    Die cm werden an den MS gesendet.

    Im MS wird per Formel der Füllstand berechent.
    Dazu ist die Montagehöhe des Sensor nötig (Zisterne cm leer), sowie die Liter je cm (Zisterne Liter je cm).


    Nötige Anpassungen
    Arduino Code
    MAC-Adresse (mac)
    Port auf den der Arduino hört (ARDUPORT)
    IP MiniServer (MSIP)
    Port MiniServer (MSPORT)

    Loxone
    Empfangsport Virtuller-Eingang... Muss gleich MSPORT im Arduino Code sein
    Befehlserkennung = \v
    Konstanten anlegen...

    Empfehlung
    Da die Messung leichten Schwankungen im Kommstellen-Bereich hat, macht es Sinn wenige Nachkommastellen weiterzugeben.
    In der Zeile "dtostrf(distanz, 4, 1, chardistanz);" werden wo jetzt dei 1 steht die Nachkommastellen angegeben, 0 würde also nur ganze cm weitergeben.



    Klicke auf die Grafik für eine vergrößerte Ansicht

Name: image_2602.png
Ansichten: 3243
Größe: 38,5 KB
ID: 22829Klicke auf die Grafik für eine vergrößerte Ansicht

Name: image_2599.png
Ansichten: 4102
Größe: 14,8 KB
ID: 22833
    Klicke auf die Grafik für eine vergrößerte Ansicht

Name: Zisterne2.png
Ansichten: 3021
Größe: 4,9 KB
ID: 22827Klicke auf die Grafik für eine vergrößerte Ansicht

Name: Zisterne3.png
Ansichten: 3014
Größe: 1,1 KB
ID: 22828
    Zuletzt geändert von hismastersvoice; 17.01.2016, 17:47.
    Kein Support per PN!

  • #2
    hismastersvoice,

    vielen vielen Dank für das sehr ausführliche und gut geschriebene HowTo

    ich werde es demnächst mal ausprobieren und dann berichten.
    Vielleicht kann man den Ultraschallsensor auch für einen Briefkasten verwenden....

    Kommentar


    • #3
      Arduino ist Neuland für mich...ist dieses Board ein Arduino Nano oder ist es nur eine Kopie




      Und wo sitzt diese Konstellation bei dir? Im Deckel oder im Verteiler?

      Kommentar


      • #4
        Ist eine Kopie...
        Kannst aber auch nutzen, ich habe auch meist keine originale.

        Sitzen tut sie im Schacht am Einstieg an der Wand montiert.
        Kein Support per PN!

        Kommentar


        • Gast-Avatar
          Gast kommentierte
          Kommentar bearbeiten
          Hallo ich habe eine Frage zur Einbausituation. Sitzt bei dir der Arduino im Haus oder auch beim Sensor in der Zisterne? Hätte bei meinem Projekt nämlich eine Leitungslänge von ca. 40m (Abstand Haus zu Zisterne). Mir persönlich würde es besser gefallen den Arduino im Haus zu verbauen und mittels Cat7 Kabel den Sensor in der Zisterne speisen und abfragen.

        • hismastersvoice
          hismastersvoice kommentierte
          Kommentar bearbeiten
          In der Zisterne...
          Das wird wohl nicht möglich sein, bei 40 Meter.
          Ich habe das CAT das gleichzeitig den Strom liefert in eine IP67 Dose gesetzt. Geht jetzt seit 1 Jahr gut. Langzeit kann ich dir nicht sagen.

      • #5
        Top! Auf jeden Fall günstiger als der 0-10V, den Loxone anbietet und mit dem Arduino auch schön einzubinden. Würde evtl. ein WLAN-Shield dazu nehmen, dann ist die Einbindung ins Heimetzwerk noch einfacher =)
        Wie sieht's mit der langzeit-Haltbarkeit aus, immerhin ist eine Zisterne ja doch ein leucht feuchtes Milieu? Hast du die Hardware hübsch verpackt?
        Der SR04 hat laut Datenblatt eine maximale Reichweite von 3m. Weißt du, ob es noch leistungsstärkere Sensoren dieser Bauart gibt?
        MfG Benny

        Kommentar


        • #6
          Ich kann euch nur raten einen wasserfesten Sensor zu nehmen, die normalen gammeln weg.
          zB Ebay ArtikelNr.: 121796151959

          Kommentar


          • hismastersvoice
            hismastersvoice kommentierte
            Kommentar bearbeiten
            Habe den Sensor nun bekommen...
            Er ist zwar Wasserdicht, aber dafür sehr ungenau. Er hat differenzen von bis zu 6cm je nach gemessener Enfernung.
            Auch sind die Schwanckungen zwischen den Messungen recht groß.
            Für die Zysterne zwar nicht ausschalgebend, aber für andere Anwendungen denke ich kaum geeignet.
            Ich habe jetzt mal beide verbaut und schaue mal wie lange der SR04 hält.

        • #7
          Zitat von Benjamin Jobst Beitrag anzeigen
          Top! Auf jeden Fall günstiger als der 0-10V, den Loxone anbietet und mit dem Arduino auch schön einzubinden. Würde evtl. ein WLAN-Shield dazu nehmen, dann ist die Einbindung ins Heimetzwerk noch einfacher =)
          Wie sieht's mit der langzeit-Haltbarkeit aus, immerhin ist eine Zisterne ja doch ein leucht feuchtes Milieu? Hast du die Hardware hübsch verpackt?
          Der SR04 hat laut Datenblatt eine maximale Reichweite von 3m. Weißt du, ob es noch leistungsstärkere Sensoren dieser Bauart gibt?
          Langzeiterfahrung = keine
          Hardware ist in einem IP65 mit Verschraubungen.
          Die Ultraschallsensoren schauen nach unten und sind mit Silicon verklebt.

          Wie viel Reichweite brauchst du?
          Bei langen Messstrecken sollte man auch eine Temp-Korrektur einbauen, da sonst die Messergebnisse verfälscht werden.

          Zitat von Helmut Beitrag anzeigen
          Ich kann euch nur raten einen wasserfesten Sensor zu nehmen, die normalen gammeln weg.
          zB Ebay ArtikelNr.: 121796151959
          Hab ich mal bestellt, Reichweite erst ab 30cm, aber das geht ja für eine Zisterne leicht.
          Danke für den Tipp.
          Kein Support per PN!

          Kommentar


          • Benjamin Jobst
            Benjamin Jobst kommentierte
            Kommentar bearbeiten
            Ich bin mir nicht zu 100% sicher, wie tief unsere Zisterne ist, werde sie im Sommer aber mal genauer untersuchen, da sowieso eine neue Tauchpumpe rein muss. Von oben gesehen, wird das Wasser vielleicht knapp 3,50m drin stehen plus ein bisschen Reserve wären mir da wahrscheinlich 4m lieber... Aber das wird sich zeigen müssen.

          • hismastersvoice
            hismastersvoice kommentierte
            Kommentar bearbeiten
            Wow ganz schön große Zisterne... >10m³?

            Wenn du mehr als die besagten 300cm beim HC-SR04 brauchst wirst wohl um eine Lösung >200€ wie z.B. den Lox Ultraschall (600cm) nicht rum kommen.
            Der Sensor den Helmut vorgeschlagen hat geht bis ca. 350mm

            Habe gerade den SR04 getestet bis 3,40 Meter arbeitet er fehlerfrei ab 3,70 Meter ist jede 2 Messung fehlerhaft.
            Jedoch stimmt die eine die nicht fehlerhaft ist gut.

            Sobald der andere Sensor da ist werde ich den mal testen.

        • #8
          Hallo zusammen, ich würde auch gerne meine Zisterne nachrüsten, bin aber im Arduino Bereich noch relativ neu. Könnte man auch so ein Board mit integriertem WLAN dafür benutzen?
          Vielen Dank!
          Jan
          Günstige V3 drahtlose Modul nodemcu 4 MT Bytes LUA WIFI Internet der Dinge Entwicklung Basis ESP8266 f&uuml;r Arduino kompatibel, Kaufe Qualität Andere elektronische Komponenten direkt vom China-Lieferanten: Willkommen zu unserem Speicher &amp;nbsp; Wenn Sie mehr Quantit&auml;t kaufen,

          Kommentar


          • #9
            Klar kann man das benutzen, du musst dann das Programm um das WLAN erweitern, da das Skript oben für LAN geschrieben ist.
            Aber vom Grundsatz her geht das natürlich.

            Bitte ein bekanntes Board kaufen, da findest im Netz mehr Hilfe.
            Kein Support per PN!

            Kommentar


            • #10
              Ok, vielen Dank! Welches würdest du empfehlen mit integriertem WLAN?

              Kommentar


              • hismastersvoice
                hismastersvoice kommentierte
                Kommentar bearbeiten
                Das Baord ist schon OK für den Zweck.
                Es ist ein ESP8266 drauf der gut unterstützt wird.
                Schau dich mal bei exp-tech um da findest gute Qualität, hab mit den China-Nachbauten eher schlechte Erfahrungen.

            • #11
              Super Idee.. cool wäre es wenn jetzt jemand noch ein Code basteln könnte für den gleichen (bzw. wasserfesten) Ultraschallsensor und einem Raspberry Pi nano (5$) und einem USB-Wlan-Adapter (unter 10€) .. bei Linux steig ich leider aus..
              Miniserver, 1-wire, KNX, Pollin AVR-net-io

              Kommentar


              • Robert L.
                Robert L. kommentierte
                Kommentar bearbeiten
                ja, warum einfach, wenns auch kompliziert geht ;-)


                der wasserfeste sensor scheint gleich zu funktionieren (hat die gleichen Anschlüsse..) wie der HC-SR04
                scheint auch gleich zu funktionieren (trigger->echo)
                sollte also 1:1 austauschbar sein..

              • hismastersvoice
                hismastersvoice kommentierte
                Kommentar bearbeiten
                Der Wasserfeste Sensor funktioniert nicht gleich! Es muss die Formel angepasst werden.
                Die Messwerte stimmen nicht wenn er einfach ausgetauscht wird.
                Habe beide zu Hause...

              • Robert L.
                Robert L. kommentierte
                Kommentar bearbeiten
                ok, kann sein
                ich verwende einfach https://bitbucket.org/teckel12/ardui...ping/wiki/Home
                die kommt mit allen sensoren zurecht..

            • #12
              falls dann mal jemand auch eine optische Anzeige vom Abstand (oder für sonstwas) braucht
              ich hätte da was gebastelt (ist noch ein Prototyp am breadboard)

               

              Kommentar


              • #13
                Hallo zusammen,

                könnte mal jemand ein Bild von dem Sensor hochladen?
                Ich hab noch nie was mit dem Arduino gemacht, würde mich aber echt interessieren.
                Brauch ich dann lediglich die 3 Bauteile wie oben beschrieben?
                Programmieren könnte man den Arduino dann über den Raspberry oder?

                Von den Leitungen würde ich eben ein LAN-Kabel benötigen und dann noch zusätzlich die Spannungsversorgung mit 5V?

                Das mit der optischen Anzeige find ich auch sehr nett

                Gruß Patrick
                Zuletzt geändert von Patrick_92; 16.06.2016, 08:56.

                Kommentar


              • #14
                okay,
                ich dachte immer, man benötigt einen extra programmer dafür.
                das Ethernet W5100 wird dann nur auf den Pi gesteckt und dort kann später das Netzwerkkabel angeschlossen werden?

                Das mit den Leitungen würde mich dann noch interessieren.

                Kommentar


                • Patrick_92
                  Patrick_92 kommentierte
                  Kommentar bearbeiten
                  Sorry, da hab ich mit vertippt. Ich hab den Arduino gemeint.

                  Ich benötige ja auf jedenfall eine Netzwerkleitung, um den Arduino mit meinem Heimnetz zu verbinden, deshlab auch den W5100 richtig?

                  Aber benötige ich dann für den Aufbau noch eine separate Spannungsversorgung oder holt sich der Arduino die Spannung über die Netzwerkleitung?
                  Oben steht ja:
                  Stromversorgung
                  5V -> VIN
                  GND -> GND

                  deshalb die Frage ob noch zusätzliche Leitungen benötigt werden

                • Robert L.
                  Robert L. kommentierte
                  Kommentar bearbeiten
                  ja, du brauchst (normalerweise) eine eigene stromversorgung

                  geben würde es PoE schon auch,
                  Explore the full range of official Arduino products including Boards, Modules, Shields and Kits, for all ability levels and use cases.

                • Patrick_92
                  Patrick_92 kommentierte
                  Kommentar bearbeiten
                  Okay,

                  ob mein Switch PoE unterstütz weiß ich jetzt nicht.
                  Aber ich gehe nicht davon aus.

                  Wie habt ihr das mit der Spannungsversorgung dann gelöst?
                  Ein kleines Netzteil direkt am Arduino oder vom Haus aus zugeführt.
                  Bei mir ist Wäre der Weg zum Haus ca. 15m

              • #15
                Patrick_92
                Als erstes empfehle ich das Du Dich in die Materie Arduino etwas einliest.
                Ganz ohne Grundwissen sollte man so was nicht bauen.

                Du kannst jeder Zeit POE Injektoren nutzen, die gibt es schon ab 7-8€, das mach ich z.T. auch wenn ich z.B. unterschiedliche Spannungen habe.
                Bei 15m sollte das auch kein Problem sein, hab auch 12Meter und der Spannungsabfall ist 0,1-0,2 Volt, also OK.
                Kein Support per PN!

                Kommentar

                Lädt...
                X