[PRZYKŁAD] Bezdotykowy czujnik poziomu cieczy i KAmduino UNO
Niniejszy przykład przedstawia sposób użycia bezdotykowego czujnika poziomu cieczy firmy DFRobot. W przypadku wykrycia cieczy za ścianką naczynia (np. kubka), układ zapala diodę LED. Kod można wykorzystać do próbnika obecności cieczy w sytuacjach, gdy umieszczenie czujnika tam, gdzie znajduje się badany płyn jest niemożliwe. Kodu można też użyć do projektu, którego elementem jest reagowanie na pojawienie się cieczy w zbiorniku.
W projekcie wykorzystano następujące komponenty:
- Bezdotykowy czujnik poziomu cieczy – moduł Gravity
- KAmduino UNO – płytka rozwojowa z mikrokontrolerem ATmega328P
- Dioda LED
- Rezystor 510 Ω
- Niewielka płytka stykowa
- Przewody męsko-męskie
Rys. 1. Bezdotykowy czujnik poziomu cieczy
Bezdotykowy czujnik poziomu cieczy pozwala na uzyskanie szybkiego oraz bezkontaktowego pomiaru wszędzie tam, gdzie sensor nie może mieć kontaktu z badanym płynem (toksyczne ciecze, kwasy, mocne zasady itp.). Ma możliwość ustawienia jednego z czterech stopni czułości (zmiana odbywa się przy pomocy przycisku znajdującego się na płytce). Złącze na płytce jest zgodne z standardem Gravity. Zestaw składa się z czujnika, płytki PCB z odpowiednimi złączami oraz przewodu Gravity (3-żyłowy).
Wyjście czujnika jest binarne – wyjście sensora jest w stanie wysokim, gdy ciecz jest wyczuwana i w stanie niskim, gdy nie jest. Wyjście czujnika można więc wykorzystać jako źródło przerwania dla mikrokontrolera. Na płytce Arduino UNO oraz płytkach kompatybilnych (np. KAmduino Uno) przerwania zewnętrzne można realizować tylko na pinach cyfrowych 2 i 3. Dodatkowym atutem czujnika jest możliwość przymocowania go do naczynia, w którym znajduje się mierzona ciecz. Przykłady takiego zamocowania przedstawiono poniżej na obrazkach pochodzących ze strony wiki firmy DFRobot.
Rys. 2. Sposób mocowania czujnika na powierzchniach niemetalowych
Rys. 3. Sposób mocowania czujnika na powierzchniach metalowych
W przypadku użycia przewodu dołączonego do zestawu, żyła czerwona to zasilanie, czarna – masa, a zielona – sygnał OUT.
Połączenie układu przedstawiono w tabeli poniżej:
Pin KAmduino UNO | Pin czujnika poziomu cieczy |
5 V | VCC |
GND | GND |
2 | OUT |
Ponadto do pinu cyfrowego 7 podłączono diodę LED szeregowo z rezystorem 510 Ω.
Połączony układ można zobaczyć na poniższej fotografii:
Rys. 4. Połączony układ
Po połączeniu układu można przejść do pisania oprogramowania na platformę Arduino. Pełny kod projektu znajduje się poniżej, w sekcji „Do pobrania”.
W funkcji setup znajdują się definicje pinów oraz ustawienie przerwania zewnętrznego. Do tego ostatniego celu służy funkcja attachInterrupt, której argumentami są:
- numer przerwania (różni się od numeru pinu, z którego obsługiwane jest przerwanie. Najłatwiej jest użyć funkcji digitalPinToInterrupt podając jako argument numer pinu)
- funkcja, którą ma wykonać mikrokontroler po zauważeniu przerwania
- na jakie zdarzenie ma reagować procesor (LOW – stan niski na linii, CHANGE – dowolna zmiana poziomu logicznego, RISING – zbocze narastające, FALLING – zbocze opadające)
void setup() { pinMode (2,INPUT); pinMode (7,OUTPUT); attachInterrupt(digitalPinToInterrupt (2), przelaczDiode, CHANGE); //ustawienie przerwania }
W funkcji loop znajduje się tylko opóźnienie – program nic nie robi poza momentami przerwań.
void loop() { delay (200000); }
Funkcja przelaczDiode jest funkcją, która uruchamia się w momencie przerwania. Sprawdza ona stan na linii 2, a potem zgodnie z tym, włącza lub wyłącza diodę. Gdy sensor wyczuwa obecność cieczy – dioda się świeci, gdy nie – dioda gaśnie.
void przelaczDiode (void) { if (digitalRead(2)==0) digitalWrite(7, LOW); else digitalWrite(7, HIGH); }
Działanie przykładu przedstawiono na poniższym materiale wideo: