Przepływomierz – zużycie wody

przeplywomierz

Po zliczaniu zużycia prądu i gazu przy pomocy Arduino nadszedł czas za monitorowanie zużycia wody. Niestety nie udało się złapać sygnału bezpośrednio z licznika wody na rurze, więc postawiłem na przepływomierz.

Przepływomierz, czyli cylindryczne urządzenie mechanicznie, mocowane na rurze z cieczą, w moim przypadku wodą. Ciśnienie przepływającej przez przepływomierz cieczy wprawia w ruch wirowy łopatki, których obrót jest „łapany” przez mocowany na obudowie przepływomierza czujnik Halla. Innymi słowy wprawione w ruch łopaki dają sygnał czujnikowi, który daje syngnał na mikrokontroler, który zlicza impulsy.

Wyliczenie przepływu wody

Z uwagi różne przekroje rury z woda (1”, 3/4”, inne) oraz różne ćiśnienia wody w układzie, sposób wyliczenia przepływu wody na sekundę oraz zużycie wody jest bardziej skomplikowane niż zwykłe zliczanie impulsów, gdyż to jest informacja, która nic nie mówi o ilości przelanej cieczy. W związku z tym przykład kodu Arduino wygląda następująco. Wartym zaznaczenia jest fakt, że jest to przykład niewykorzystujący pinu przerwania (interrupt), gdyż tak jest raczej prościej.

  byte sensorPin = 5;
  float calibrationFactor = 11;
  volatile byte pulseCount;
  float flowRate;
  unsigned int flowMilliLitres;
  unsigned long totalMilliLitres;
  unsigned long oldTime;
  int lastState = LOW;
  
  void setup() {
  
    Serial.begin(115200);
  
    pinMode(sensorPin, INPUT);
    digitalWrite(sensorPin, HIGH);
  
    pulseCount = 0;
    flowRate = 0.0;
    flowMilliLitres = 0;
    totalMilliLitres = 0;
    oldTime = 0;
  
  }
  
  void loop() {
  
    int state = digitalRead(sensorPin);
    if (state != lastState) {
      pulseCounter();
    }
  
    lastState = state;
  
    if ((millis() - oldTime) > 1000) {
  
      flowRate = ((1000.0 / (millis() - oldTime)) * pulseCount) / calibrationFactor;
      oldTime = millis();
      flowMilliLitres = (flowRate / 60) * 1000;
  
      totalMilliLitres += flowMilliLitres;
  
      Serial.print("Flow rate: ");
      Serial.print(int(flowRate));
      Serial.print("L/min");
      Serial.print("\t");
  
      Serial.print("Output Liquid Quantity: ");
      Serial.print(totalMilliLitres);
      Serial.print("mL");
      Serial.print("\t");
      Serial.print(totalMilliLitres / 1000);
      Serial.println("L");
  
      pulseCount = 0;
  
    }
  }
  
  void pulseCounter() {
    pulseCount++;
  }

Wartym zaznaczenia i opisania jest zmienna calibrationFactor, wartość której pozwala skalibrować odczyty z przepływomierza. Jest wartość dziesiętna, która albo jest podana i zdefiniowana przez producenta przepływomierza, albo można ją samemu ustalić. Najlepiej pod kran podłożyć szklankę o pojemności dokładnie 500ml, wypełnić ją i porównać z odczytami z terminala z Arduino. W razie potrzeb doprecyzować trzeba calibrationFactor żeby wartość odczytu była równa 500ml.

Tak zliczane wartości już w postaci ml można zapisywać do bazy i obrazować na wykresie czasu.

Montaż przypływomierza na rurze

Co do montażu, to są dwie opcje. Albo pomoc hydraulika w sprawie, albo narzędzia w ręce, trochę odwagi i wiary, że będzie dobrze i po 20 minutach będą odczyty. Co się przyda:

  • klucze, duże klucze do rur, 28, 30, 32 – zależy jakie kto ma rury
  • nożyce do rur pex, kalibrator, złączka, jakiś nypel, teflon, pakuły… sprawa indywidualna jaki kto ma system do wody i preferencje uszczelniania połączeń, gdyż – jak wiadomo – woda lubi wyciekać
  • przepływomierz, z gwintem
  • kable
  • arduino
  • komputer
  • program

A gdy po montażu wszystko będzie szczelne, odczyty powinny wyglądać mniej więcej tak:


Opublikowano: 28 grudnia, 2020 przez Pan z Pogodna

Leave a Reply