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.




