Durchflussmessung

Hallo zusammen, ich bin gerade etwas verzweifelt. Ich hatte mir vor 2 Jahren eine Steuerung für meinen Pool gebaut mit Heizung und Umschaltung auf Dusche usw. Dabei hatte ich den Durchfluss an der Dusche gemessen. Nun will ich die Sache erweitern und den Durchfluss an den 8 Heizkreisen (Solarschlauch) messen. Ich habe folgenden Durchflussmesser:

und den folgenden Programmcode.
Der Durchflussmesser gibt aber immer 0L/min aus??
Habe ich was übersehen?

volatile int flow_frequency; // Measures flow sensor pulses
unsigned int l_hour; // Calculated litres/hour
unsigned char flowsensor = 4; // Sensor Input

unsigned long currentTime;
unsigned long cloopTime;
void flow () // Interrupt function
{
   flow_frequency++;
}
void setup()
{
   
   pinMode(flowsensor, INPUT);
// digitalWrite(flowsensor, HIGH); // Optional Internal Pull-Up
   Serial.begin(9600);
   attachInterrupt(0, flow, RISING); // Setup Interrupt
   sei(); // Enable interrupts
   currentTime = millis();
   cloopTime = currentTime;
}
void loop ()
{
   currentTime = millis();
   // Every second, calculate and print litres/hour
   if(currentTime >= (cloopTime + 1000))
   {
      cloopTime = currentTime; // Updates cloopTime
      // Pulse frequency (Hz) = 7.5Q, Q is flow rate in L/min.
      l_hour = (flow_frequency /7.5 ); // (Pulse frequency x 60 min) / 7.5Q = flowrate in L/hour
      flow_frequency = 0; // Reset Counter
      Serial.print(l_hour,DEC); // Print litres/hour
      Serial.println(" L/min.");
     
   }
}

Danke für Eure Unterstützung.

l_hour sollte schon float sein.

Welcher Pin ist das? (Hängt vom Arduino ab, aber Pin 4 wird es wohl nicht sein.)

Hallo, float bringt nichts, außer dass ganz viele Nachkommastellen angezeigt werden.
@anon58433598 x, stimmt, das hatte ich übersehen.
grafik

Es ist ein Pro mini, also habe ich die 6 eingesetzt. Wert bekomme ich aber trotzdem noch keinen??

Bist du dir sicher dass das korrekt ist?
Versuche mall mit int

print(floatval, DEC); //zeigt wie gewünscht 10 Nachkommastellen an ;)
Wenn die alle 0 sind, ist auch flow_frequency 0 gewesen, d.h. es kam kein Interrupt in der letzten Sekunde an.

Oder besser lies die Referenz zu attachInterrupt

Hallo michael_x, Referenz gelesen und Problem gelöst. Danke erst mal hierfür.
Nun aber die nächste Frage: Ich will ja 8 Sensoren abfragen, habe aber am Mini nur zwei Interrupt fähige Pins. Hat jemand dazu eine Idee?
Ich könnte ja immer den entsprechenden Sensor via Relais auf den Pin legen...
Was haltet Ihr davon?

Welche Vorteile soll int haben?

Sowas tut man nicht!

Gibt es negative Frequenzen?
Nur wenn die Zeit rückwärts laufen könnte.

usw...

Wenn so ein Puls ca 1 ms oder länger ist, braucht es dafür gar keinen Interrupt.
Sonst gibt es auch noch die PinChange Interrupts . Da musst du allerdings von Arduino-Pins auf avr-Ports umsteigen.

Nicht unbedingt, gibt auch einige Libs für
z.B.: GitHub - NicoHood/PinChangeInterrupt: A simple & compact PinChangeInterrupt library for Arduino

Hallo zusammen, danke für die Vorschläge, aber das wird mir dann zu komplex. Soweit bin ich noch nicht bei der Programmierung. Ihr würdet hier im Forum mit meinen Fragen verzweifeln :slight_smile:
Danke für die Hilfe. Jetzt komme ich erstmal ein Stück weiter.

Wir zweifeln auch ohne deine Fragen, da mache dir mal keine unnütze Hoffnungen.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.