Events

:

:

Elektronik | Funk | Software

Der Technik-Blog

  • Social Media

    YouTube

    Werbung:


    Neue Artikel


    Events

    • Keine zukünftigen Events vorhanden

    Der Technik-Blog

    Arduino Flowmeter Wasseruhr

    Arduino Wasseruhr

    Alex @ AEQ-WEB

    Mit einem Arduino oder einem anderen Mikrocontroller und einem Paddle Wheel kann man sehr leicht eine Durchflussmenge oder Durchflussgeschwindigkeit messen. Mit den verarbeiteten Sensordaten kann man dann eine einfache Wasseruhr bauen oder erweitert auch die Durchflussmenge einer Wasserpumpe regeln. In diesem Beitrag zeigen wir, wie ein Flowmeter mit dem Arduino funktioniert und wie es kalibriert wird.

    Funktionsprinzip Paddle Wheel

    Ein Paddle Wheel funktioniert grundsätzlich gleich wie ein Anemometer, jedoch wird es nicht durch Luft angetrieben, sondern eben durch Wasser. Im Sensor befindet sich eine kleine Turbine, die teilweise magnetisch ist. Ähnlich wie beim Fahrradcomputer befindet sich im Bauteil ein Hallsensor, der bei jeder Umdrehung einen Impuls abgibt. Bei unserem Sensor Modell befindet sich auch ein Pull-up Widerstand. Das bedeutet, dass genau dieser Sensor ohne weitere Bauteile direkt an den Arduino angeschlossen werden kann. Alternativ zum Paddle Wheel gibt Ultraschall-Flowmeter oder optische Flowmeter, die mit Lichtschranken arbeiten.

    Werbung:

    Interrupts zählen mit dem Arduino

    Um die Durchflussmenge zu ermitteln, muss der Arduino die Impulse zählen, die vom Sensor bei jeder Umdrehung erzeugt werden. Damit das Hauptprogramm am Arduino nicht unnötig von der Messung blockiert wird, sollte man auf Interrupts ausweichen. Mit den Interrupts verliert der Arduino keine Impulse, wenn im Hauptprogramm gerade andere Aufgaben erledigt werden. Um aus den Interrupts einen sinnvollen Wert wie z. B. Liter pro Minute ermitteln zu können, muss bekannt sein, wie viele Impulse einen Liter entsprechen. Die Interrupts werden in unserem Beispiel über den I/O-Pin D2 eingelesen.

    Sensor kalibrieren mit dem Arduino

    Damit der Sensor zuverlässige Werte liefert, muss die Software am Arduino kalibriert werden. Um mit der Kalibrierung beginnen zu können, muss zuerst das Flowmeter und die Leitung voll mit Wasser sein und es sollten sich keine Luftblasen darin befinden. Anschließend füllt man einen Messbecher mit z. B. 500 ml und vergleicht die Ausgabe im Serial Monitor vom Arduino. Je nach dem ob zu viele oder zu wenige Milliliter angezeigt werden, muss der "cfactor" angepasst werden. Dazu kann man am Anfang vom Arduino-Code den "cfactor" modifizieren. Wenn der Wert bei 4.0 liegt und es um 50 ml zu wenig im Messbecher sind, so kann man den Wert z.B. auf 4.7 ändern. Mit dem Wert exprimiert man so lange herum, bis die Füllmenge im Messbecher mit der Menge am Arduino überein stimmt.

    Genauigkeit und Qualität

    Wir haben den Sensor über einige Tage getestet. Das Wichtigste, was man vorab sagen kann, ist, dass der Sensor stabil ist. Auch die Wassertemperatur wirkt sich kaum auf die Messwerte aus. Allerdings ist der Sensor, wenn er auf kleine Mengen kalibriert ist, bei großen Wassermengen etwas ungenau. So hat man bei 10 Liter Wasser eine Genauigkeit von ungefähr +-150 Milliliter. Bei 100 Litern liegt die Genauigkeit dann bei etwa +- 1.5 Liter. Für private Zwecke ist der Sensor daher ganz gut geeignet. Für Verrechnungszwecke ist dieser Sensor jedoch überhaupt nicht geeignet.

    Werbung:

    Arduino Source
    //More information at: https://wwww.aeq-web.com
    
    float cfactor = 5.0;
    
    byte interrupt = 0;
    byte sensorPin = 2;
    byte pulseCount;
    float flowRate;
    unsigned int f_ml;
    unsigned long t_ml;
    unsigned long oldTime;
    
    void setup()
    {
      Serial.begin(9600);
      pinMode(sensorPin, INPUT);
      digitalWrite(sensorPin, HIGH);
      attachInterrupt(interrupt, pulseCounter, FALLING);
    }
    
    void loop()
    {
      if ((millis() - oldTime) > 1000)
      {
        int semic;
        detachInterrupt(interrupt);
        flowRate = ((1000.0 / (millis() - oldTime)) * pulseCount) / cfactor;
        oldTime = millis();
        f_ml = (flowRate / 60) * 1000;
        t_ml += f_ml;
        Serial.print("Current flow: ");
        Serial.print(int(flowRate));
        Serial.print(".");
        semic = (flowRate - int(flowRate)) * 10;
        Serial.print(semic, DEC) ;
        Serial.print("L/min");
        Serial.print("  Total: ");
        Serial.print(t_ml);
        Serial.println("mL");
        pulseCount = 0;
        attachInterrupt(interrupt, pulseCounter, FALLING);
      }
    }
    
    void pulseCounter()
    {
      pulseCount++;
    }


    122X122

    Über den Autor

    Alex, der Gründer von AEQ-WEB. Seit über 10 Jahren beschäftigt er sich mit Computern und elektronischen Bauteilen aller Art. Neben den Hardware-Projekten entwickelt er auch Webseiten, Apps und Software für Computer.

    Top Artikel in dieser Kategorie:

    Arduino IRFZ44N PWM MOSFET Load Control

    Arduino MOSFET Steuerung

    • Video
    • DE/EN

    In diesen Artikel zeigen wir wie man große Lasten mittels eines MOSFET-Transistors über das Arduino Board steuert und die Drehzahl von einem Motor regelt

    Weiterlesen
    Arduino LM358 PT1000 Sensor Converter

    Temperatur messen mit PT1000 & Arduino

    • Video
    • DE/EN

    PT1000 Sensoren können nicht direkt analog mit einem Mikrocontroller gemessen werden. Wie baut man einen Messwandler mit dem LM358 für den PT1000 und Arduino?

    Weiterlesen

    Social Media

    YouTube

    Werbung:


    Neue Artikel


    Events

    • Keine zukünftigen Events vorhanden