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
