- składniki
- Moduł czujnika ultradźwiękowego
- Działanie automatycznego kontrolera poziomu wody
- Schemat obwodu i wyjaśnienie
- Programowanie
W tym projekcie automatycznego wskaźnika poziomu wody i kontrolera opartego na Arduino będziemy mierzyć poziom wody za pomocą czujników ultradźwiękowych. Podstawowa zasada ultradźwiękowego pomiaru odległości opiera się na ECHO. Gdy fale dźwiękowe są przenoszone w środowisku, po uderzeniu w jakąkolwiek przeszkodę wracają do źródła jako ECHO. Musimy więc tylko obliczyć czas podróży obu dźwięków, czyli czas ucieczki i powrót do początku po uderzeniu w jakąkolwiek przeszkodę. A po pewnych obliczeniach możemy otrzymać wynik, czyli odległość. Koncepcja ta została wykorzystana w naszym projekcie sterownika wody, w którym pompa z silnikiem wodnym jest automatycznie włączana, gdy poziom wody w zbiorniku jest niski. Możesz również sprawdzić ten prosty obwód wskaźnika poziomu wody, aby uzyskać prostszą wersję tego projektu.
składniki
- Arduino Uno
- Moduł czujnika ultradźwiękowego
- Wyświetlacz LCD 16x2
- Przekaźnik 6 wolt
- ULN2003
- 7806
- PVT
- Miedziany przewód
- Bateria 9 V lub 12 Voltadaptor
- Przewody łączące
Moduł czujnika ultradźwiękowego
Czujnik ultradźwiękowy HC-SR04 służy do pomiaru odległości w zakresie od 2cm do 400cm z dokładnością do 3mm. Moduł czujnika składa się z nadajnika ultradźwiękowego, odbiornika i obwodu sterującego.
Moduł czujnika ultradźwiękowego działa na naturalne zjawisko ECHO dźwięku. Impuls jest wysyłany na około 10us w celu wyzwolenia modułu. Po czym moduł automatycznie wysyła 8 cykli sygnału ultradźwiękowego 40 kHz i sprawdza jego echo. Sygnał po uderzeniu w przeszkodę wraca i jest przechwytywany przez odbiornik. Zatem odległość przeszkody od czujnika jest po prostu obliczana na podstawie wzoru podanego jako
Odległość = (czas x prędkość) / 2.
Tutaj podzieliliśmy iloczyn prędkości i czasu przez 2, ponieważ czas to całkowity czas potrzebny na dotarcie do przeszkody i powrót. W ten sposób czas pokonania przeszkody to tylko połowa całkowitego czasu.
Działanie automatycznego kontrolera poziomu wody
Działanie tego projektu jest bardzo proste, zastosowaliśmy moduł czujnika ultradźwiękowego, który wysyła fale dźwiękowe w zbiorniku wody i wykrywa odbicie fal dźwiękowych czyli ECHO. Przede wszystkim musimy wyzwolić moduł czujnika ultradźwiękowego w celu przesłania sygnału za pomocą Arduino, a następnie poczekać na odebranie ECHO. Arduino odczytuje czas między wyzwoleniem a odebraniem ECHO. Wiemy, że prędkość dźwięku wynosi około 340 m / s. więc możemy obliczyć odległość używając podanego wzoru:
Odległość = (czas podróży / 2) * prędkość dźwięku
Gdzie prędkość dźwięku wynosi około 340 m na sekundę.
Dzięki tej metodzie uzyskujemy odległość od czujnika do powierzchni wody. Po tym musimy obliczyć poziom wody.
Teraz musimy obliczyć całkowitą długość zbiornika na wodę. Znając długość zbiornika na wodę, możemy obliczyć poziom wody odejmując wynikową odległość pochodzącą od ultradźwięków od całkowitej długości zbiornika. Otrzymamy odległość od poziomu wody. Teraz możemy przeliczyć ten poziom wody na procent wody i wyświetlić go na wyświetlaczu LCD. Działanie całego projektu wskaźnika poziomu wody pokazano na poniższym schemacie blokowym.
Schemat obwodu i wyjaśnienie
Jak pokazano na poniższym obwodzie kontrolera poziomu wody, piny „wyzwalacza” i „echa” modułu czujnika ultradźwiękowego są bezpośrednio podłączone do styków 10 i 11 arduino. Wyświetlacz LCD 16x2 jest połączony z arduino w trybie 4-bitowym. Piny sterujące RS, RW i En są bezpośrednio podłączone do pinu 7, GND i 6 arduino. Piny danych D4-D7 są podłączone do 5, 4, 3 i 2 arduino, a brzęczyk jest podłączony do pinu 12. Przekaźnik 6 wolt jest również podłączony do pinu 8 arduino przez ULN2003 do włączania lub wyłączania pompy wodnej. Regulator napięcia 7805 jest również używany do dostarczania 5 woltów do przekaźnika i do pozostałego obwodu.
W tym obwodzie moduł czujnika ultradźwiękowego jest umieszczony na górze wiadra (zbiornika na wodę) w celu demonstracji. Ten moduł czujnika odczyta odległość między modułem czujnika a powierzchnią wody i pokaże odległość na ekranie LCD z komunikatem „Przestrzeń wodna w zbiorniku to:”. Oznacza to, że pokazujemy tutaj puste miejsce w odległości lub objętości dla wody zamiast poziomu wody. Dzięki tej funkcjonalności możemy zastosować ten system w każdym zbiorniku na wodę. Gdy poziom pustej wody osiągnie odległość około 30 cm, Arduino włącza pompę wody poprzez wysterowanie przekaźnika. A teraz wyświetlacz LCD pokaże „NISKI poziom wody” „Silnik włączony”, a dioda LED stanu przekaźnika zacznie świecić
Teraz, jeśli pusta przestrzeń osiągnie odległość około 12 cm, arduino wyłączy przekaźnik, a na wyświetlaczu LCD pojawi się komunikat „Zbiornik jest pełny” „Silnik wyłączony”. Brzęczyk również emituje sygnał dźwiękowy przez pewien czas, a dioda LED stanu przekaźnika gaśnie.
Programowanie
Aby zaprogramować Arduino dla kontrolera poziomu wody, najpierw definiujemy wszystkie piny, których będziemy używać w projekcie do łączenia urządzeń zewnętrznych, takich jak przekaźnik, wyświetlacz LCD, brzęczyk itp.
# zdefiniuj wyzwalacz 10 # zdefiniuj echo 11 # zdefiniuj silnik 8 # zdefiniuj brzęczyk 12
Następnie inicjalizujemy wszystkie urządzenia użyte w projekcie.
lcd.begin (16,2); pinMode (wyzwalacz, WYJŚCIE); pinMode (echo, INPUT); pinMode (silnik, WYJŚCIE); pinMode (buzzer, OUTPUT); lcd.print ("Poziom wody"); lcd.setCursor (0,1); lcd.print ("Wskaźnik"); opóźnienie (2000);
Teraz zainicjalizuj moduł czujnika ultradźwiękowego i odczytaj czas wysłania i odbioru fal ultradźwiękowych lub dźwięku za pomocą funkcji pulseIn (pin). Następnie wykonaj obliczenia i wyświetl wynik na wyświetlaczu LCD 16x2 za pomocą odpowiednich funkcji.
digitalWrite (wyzwalacz, WYSOKI); delayMicroseconds (10); digitalWrite (wyzwalacz, LOW); delayMicroseconds (2); time = pulseIn (echo, HIGH); odległość = czas * 340/20000; lcd.clear (); lcd.print ("Przestrzeń wodna w środku"); lcd.setCursor (0,1); lcd.print ("Zbiornik to:"); lcd.print (odległość); lcd.print ("Cm");
Następnie sprawdzamy warunki, czy zbiornik na wodę jest pełny lub poziom wody jest NISKI i podejmujemy odpowiednie działania.
if (odległość <12 && temp == 0) {digitalWrite (silnik, LOW); digitalWrite (buzzer, HIGH); lcd.clear (); lcd.print ("Pełny zbiornik na wodę"); lcd.setCursor (0,1); lcd.print ("Silnik wyłączony"); opóźnienie (2000); digitalWrite (buzzer, LOW); opóźnienie (3000); temp = 1; } else if (odległość <12 && temp == 1) {digitalWrite (silnik, LOW); lcd.clear (); lcd.print ("Pełny zbiornik na wodę"); lcd.setCursor (0,1); lcd.print ("Silnik wyłączony"); opóźnienie (5000); }