Durchflusssensor YF-S201

Der Sensor YF-S201 ist ein Wasser- bzw. Durchflusssensor auf Basis eines Halleffekt-Sensors, der z.B. in eine Wasserleitung eingebaut werden kann. Der magnetische Sensor ist versiegelt und geschützt in dem Gehäuse integriert. Fließt Wasser durch den Sensor, dann werden elektrische Impulse generiert, die mit einem Mikrocontroller ausgelesen werden können. Jeder Impuls entspricht in etwa 2,25 Millilitern.

Durchflusssensor YF-S201

Technische Daten & Aufbau

Betreibsspannung: 4,5V bis 24 V
Maximale Stromaufnahme: 15 mA
Flussmenge: 1 l/min bis 30 l/min
Max. Wasserdruck: 1,74 MPa
Impulse pro Liter: 450
Genauigkeit: ±10 %
Ausgabetyp: 5 V TTL
Flankensteigungszeit: 0,04 µs
Flankenabfallzeit: 0,18 µs

Es ist zu beachten, dass der YF-S201 kein geeichtes Bauteil darstellt und somit keine sehr hohe Genauigkeit zu erwarten ist. Es kann aber als Grundlage für eigene Versuche dienen. Der gemessene Durchfluss ist beispielsweise abhängig vom Wasserdruck.

Durchflusssensor YF-S201
Abb.: Detailansicht des YF-S201
Durchflusssensor YF-S201
Abb.: Unterseite des geöffneten YF-S201 mit dem magnetischen Flügelrad.
Durchflusssensor YF-S201
Abb.: Oberseite des geöffneten YF-S201 mit dem versiegelten Hall-Sensor und elektrischen Anschlüssen.

Anschlüsse

Pin Beschreibung Arduino Uno/Nano
rot Spannungsversorgung 5V
schwarz Masse/0V GND
gelb Signalausgabe D2 (oder andere digitale Pins)

Verwendete Bauteile

Ex.1: Messung der Impulse

Im ersten Versuch werden die einzelnen Impulse gezählt und einmal pro Sekunde ausgegeben. Im folgenden Sketch wird für jeden Impuls ein Interrupt getriggert und nach einer Sekunde wird die Anzahl der Impulse wieder auf 0 zurückgesetzt.
Wichtig ist, darauf zu achten, dass ein Pin verwendet wird, der als Interrupt benutzt werden kann. (siehe Interrupt-fähige Pins bei Mikrocontrollern)

#define PIN_FLOW 2

#define MEASURE_DELAY 250
#define lmillis() ((long)millis())

volatile int pulses;
long nextMeasure;

void setup()
{
    Serial.begin(9600);
    pinMode(PIN_FLOW, INPUT);

    pulses = 0;
    nextMeasure = lmillis() + MEASURE_DELAY;

    attachInterrupt(digitalPinToInterrupt(PIN_FLOW), countPulse, RISING);
}

void loop()
{
    if (lmillis() - nextMeasure >= 0) {
        noInterrupts();
        nextMeasure = lmillis() + MEASURE_DELAY;
        Serial.println(pulses);
        pulses = 0;
        interrupts();
    }
}

void countPulse()
{
    pulses++;
}
Ausgabe auf dem seriellen Plotter der Arduino-IDE
Abb.: Ausgabe auf dem seriellen Plotter der Arduino-IDE

Ex.2: Ausgabe der Flussrate

Laut Herstellerangaben lässt sich die Flussrate sehr leicht mit folgender Formel errechnen:
Flussrate in l/min. = Pulsfrequenz (Hz) / 7,5

Somit müssen können wir den vorherigen Sketch verwenden, nur dass noch die Zeile:
Serial.println(pulses);
ausgetauscht werden muss mit der Zeile:
Serial.println(String(pulses/7.5) + " l/min");

Ausgabe auf der seriellen Konsole der Arduino-IDE
Abb.: Ausgabe auf der seriellen Konsole der Arduino-IDE
zurück