Hallo zusammen,
ich versuche über folgenden Sensor (Sensor) den Wasserfluss der durch eine Leitung fließt zu messen. Ich habe den Sensor an +5V des Pi angeschlossen. Die Signalleitung (gelb) habe ich unter der Verwendung eines Vorwiderstandes an einen GPIO angeschlossen. Der GPIO ist als Input mit einem PULL-DOWN-Widerstand per Software konfiguriert. Wenn man das Programm nun startet und das Wasser laufen lässt, werden auch Werte angezeigt. Das Problem ist nur das sich die Werte sehr stark vor einander unterscheiden, obwohl immer genau 1 Liter Wasser durch den Sensor fließt.
Wenn ich das Datenblatt richtig interpretiere, muss bei der Messung / Berechnung der Wassermenge folgendermaßen vorgegangen werden:
- Zählung der Pulse pro Sekunde , Wert x
- Berechnung: x * 60 / 7,5 = Liter pro Minute
- Entspricht 450 Pulse pro Minute = 1 Liter Durchfluss
Ein Puls ist definiert als ein Wechsel der Spannung von +>-.
Eine gewisse Toleranz ist natürlich nachvollziehbar. Jedoch liegen die Werte zwischen 267 - 490 Pulse pro Sekunde.
Habt ihr vielleicht eine Idee woran das liegen könnte? Ist der Sensor vielleicht Schrott?
Falls sich einer einmal das Programm anschauen möchte (Java):
package de.raspi.test;
import com.pi4j.io.gpio.*;
import com.pi4j.io.gpio.event.GpioPinDigitalStateChangeEvent;
import com.pi4j.io.gpio.event.GpioPinListenerDigital;
public class WaterflowTest {
static int x = 0;
public static void main(String args[]) throws InterruptedException {
// create gpio controller
final GpioController gpio = GpioFactory.getInstance();
// provision gpio pin #03 as an input pin with its internal pull down resistor enabled
final GpioPinDigitalInput sensor = gpio.provisionDigitalInputPin(RaspiPin.GPIO_03, PinPullResistance.PULL_DOWN);
// set shutdown state for this input pin
sensor.setShutdownOptions(true);
System.out.println("START!!!!!!");
// create and register gpio pin listener
sensor.addListener(new GpioPinListenerDigital() {
@Override
public void handleGpioPinDigitalStateChangeEvent(GpioPinDigitalStateChangeEvent event) {
if (event.getEdge() == PinEdge.FALLING) {
x++;
}
}
});
for (int i = 1; i < 101; i++) {
System.out.println(i+"sek.\t"+x+"\t"+ (x*60/7.5) + "l/min");
x=0;
Thread.sleep(1000);
}
// stop all GPIO activity/threads by shutting down the GPIO controller
// (this method will forcefully shutdown all GPIO monitoring threads and scheduled tasks)
///gpio.shutdown();
}
}
Alles anzeigen
Besten Dank für eure Hilfe!
Gruß,
Ben