Przepływomierz – zużycie wody

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