W artykule zostanie omówiony czujnik przepływu wody, który podłączymy do arduino. Będziemy robić z niego odczyt przepływu wody na minutę oraz ilość wody która przepłynęła w mililitrach i litrach.
Spis treści
- Krótki opis
- Specyfikacja
- Podłączenie czujnika do arduino
- Zaprogramowanie arduino
- Kalibracja czujnika
Krótki opis
Jest to prosty czujnik do pomiaru przepływu cieczy. Poprzez zliczanie impulsów kręcącego się wiatraka mierzony jest przepływ cieczy.
Specyfikacja
- Materiał: Tworzywo
- Kolor: przezroczysty
- Napięcie robocze: DC 5 ~ 15 V.
- Maksymalny prąd roboczy: 15 mA (DC 5 V).
- Zakres napięcia roboczego: DC 5 ~ 15 v.
- Temperatura pracy: di 80 ° C
- Dopuszczalne ciśnienie: 1,75 MPa
- Zakres przepływu: 1-30 l / min
- Dokładność (w 1 ~ 30L MIN): ± 10%
- Charakterystyka impulsu przepływu (5xQ): Q = L / Min ± 3%
- Cykl pracy impulsu wyjściowego: 50% ± 10%
- Montaż na rurę o średnicy 1/2
- Wymiary: 54 x 29 mm
Podłączenie czujnika do arduino
Połączenie jest bardzo proste, z czujnika wychodzą trzy kable: żółty odpowiada za wysyłanie impulsu sygnału, czerwony za zasilanie 5V i czarny za uziemienie. Zaczniemy od zasilania, czarny przewód wpinamy do GDN, czerwony do 5V. Zajmiemy się teraz żółtym przewodem który podłączamy do pinu 2. Całe połączenie przedstawione jest poniżej.
-
Czujnik Przepływu Wody 1-30L / Min20.63zł
-
Arduino Nano V3.0 ATmega328P CH34020.25zł
Zaprogramowanie arduino
Zaczniemy od zadeklarowania potrzebnych zmiennych
byte statusLed = 13; byte sensorInterrupt = 0; byte sensorPin = 2; float calibrationFactor = 4.5; volatile byte pulseCount; float flowRate; unsigned int flowMilliLitres; unsigned long totalMilliLitres; unsigned long oldTime;
Ustawiamy potrzebne ustawienia w funkcji setup
void setup() { Serial.begin(9600);//rozpoczęcie transmisji na porcie szeregowym pinMode(statusLed, OUTPUT);//ustawienie pinu statusLed jako wyjście digitalWrite(statusLed, HIGH);//ustawienie stanu wysokiego na pinie statusLed pinMode(sensorPin, INPUT);//ustawienie pinu sensorPin jako wejście digitalWrite(sensorPin, HIGH);//ustawienie stanu wysokiego na pinie sensorPin //ustawienie potrzebnych zmiennych na zero pulseCount = 0; flowRate = 0.0; flowMilliLitres = 0; totalMilliLitres = 0; oldTime = 0; attachInterrupt(sensorInterrupt, pulseCounter, FALLING);//ustawienie przerwania na pinie sensorInterrupt i wywołanie funkcji pulseCounter podczas zmiany stanu na niski pinu sensorInterrupt }
Przechodzimy do głównej funkcji loop
void loop() { if((millis() - oldTime) > 1000) {//wykonuj co jedną sekundę detachInterrupt(sensorInterrupt); flowRate = ((1000.0 / (millis() - oldTime)) * pulseCount) / calibrationFactor;//obliczenie częstotliwości przepływu oldTime = millis();//przypisujemy do starego czasu obecny flowMilliLitres = (flowRate / 60) * 1000;//obliczanie mililitrów totalMilliLitres += flowMilliLitres;//suma milimitrów i przepływu mililitrów unsigned int frac;//stworzenie zmiennej //Wypisanie na ekran dancyh Serial.print("Czestotliwosc przeplywu: "); Serial.print(int(flowRate)); Serial.print("L/min"); Serial.print("\t"); Serial.print("Ilosc przelanej wody: "); Serial.print(totalMilliLitres); Serial.print("mL ~ "); Serial.print(totalMilliLitres/1000); Serial.println(" L "); pulseCount = 0; attachInterrupt(sensorInterrupt, pulseCounter, FALLING); } }
Ostatnim elementem będzie stworzenie funkcji zliczającej sygnały
void pulseCounter() { pulseCount++; }
Po wgraniu powinniśmy zobaczyć w monitorze portów szeregowych odczyty z naszego czujnika.
Kalibracja czujnika
Po podłączeniu i wgraniu programu do arduino, może okazać się, że wyniki nie są zgodne ze stanem rzeczywistym i trzeba go ustawić. Do kalibracji czujnika użyłem butelki 1 litrowej ze zrobionymi na spodzie dziurkami, aby zapewnić dojście powietrza. Przelewając przez czujnik całą wodę z butelki, sprawdzałem końcowy odczyt ilości wody przelanej w mililitrach i zmieniałem calibrationFactor, który domyślnie jest ustawiony na 4,5 (możecie znaleźć tą zmienną na samej górze programu). W moim wypadku zadawalające wyniki dawało ustawienie go na 5.1, oczywiście sytuacja u was może być całkowicie inna i sami musicie dostosować odpowiednią wartość. Poniżej zamieszczam filmik, który ukazuje, jak to wyglądało w domowych warunkach.