Podejmując niniejsze wyzwanie w pierwszej kolejności musiałem się zmierzyć z wyborem optymalnej metody, dzięki której owa detekcja byłaby w ogóle możliwa. Rozważałem różne rozwiązania, które lepiej lub gorzej wpisywały się w zdefiniowane wymagania. Istotnym ograniczeniem było w tym przypadku założenie, iż docelowy sensor nie może mieć kontaktu z badaną cieczą co wykluczało już na wstępie najprostsze rozwiązania w rodzaju elektrod zanurzonych w płynie czy też zwykłego pływaka umieszczonego w naczyniu. Dalsze poszukiwania skierowały mnie w stronę zastosowania czujników ultradźwiękowych i pomiaru odległości od lustra wody, jednak w przypadku tak małego zbiornika, jakim jest komora kroplowa, tego typu rozwiązanie nie wchodziło w ogóle w grę.
Pozostało poszukiwać dalej. W tym samym czasie zajmowałem się również implementacją autorskiej obsługi przycisków dotykowych z wykorzystaniem zwykłych portów I/O mikrokontrolera i właśnie wtedy do głowy przyszedł mi prosty mechanizm wykorzystujący opracowane już algorytmy, dzięki któremu możliwy stał się pomiar obecności płynu w naczyniu. Co więcej, mechanizm, o którym mowa, nie tylko pozwalał na detekcję obecności płynu w nadzorowanym naczyniu, lecz zapewniał również możliwość pomiaru ilości tego płynu, czyli stopnia wypełnienia naczynia. Ta metoda detekcji płynu w naczyniu polega na pomiarze pojemności kondensatora złożonego z dwóch elektrod przyklejonych do zewnętrznej ściany zbiornika, która to pojemność zmienia się w zależności od stanu jego napełnienia. Wynika to z faktu, iż zmienia się wtedy przewodnictwo elektryczne dielektryka dzielącego elektrody tak utworzonego kondensatora. Jak wiadomo, pojemność takiego teoretycznego kondensatora złożonego z dwóch elektrod rozdzielonych dielektrykiem zależy od powierzchni elektrod, odległości między nimi, oraz właściwości dielektryka dzielącego wspomniane elektrody.
Budowa
Umieszczając taki modelowy kondensator na zewnętrznej powierzchni naczynia powodujemy, iż pojemność elektryczna tak utworzonego elementu zależy od właściwości dielektryka umieszczonego pomiędzy elektrodami kondensatora, a ta z kolei wynika pośrednio ze stopnia napełnienia naczynia (pomijając warunki środowiskowe, których wpływ możemy ograniczyć stosując kalibrację czujnika). Zasadę działania takiego systemu detekcji płynu w naczyniu pokazano na rysunku 1. Do zewnętrznej powierzchni zbiornika przyklejone zostały dwie elektrody (w niewielkiej odległości rzędu 1 mm) stanowiące badaną pojemność, która to podłączona jest do zwykłych portów I/O mikrokontrolera.
Program
Mikrokontroler w ramach pomiaru wspomnianej pojemności wykonuje dwa kroki: najpierw rozładowuje mierzoną pojemność ściągając port „SENSOR” do logicznego zera, zaś później ładuje wyżej wymienioną pojemność ustalając stan wysoki na wyprowadzeniu „CHARGER”. Czas ładowania mierzonej pojemności próbkowany jest dzięki wyprowadzeniu „SENSOR” i zmienia się w zależności od poziomu płynu, przez co możemy określić pośrednio stan wypełnienia naczynia. Algorytm pomiaru pojemności tak utworzonego kondensatora pokazano na rysunku 2.
Rozwiązanie praktyczne jest banalne a co ciekawe, w zupełności wystarczające. W tym momencie przyznać muszę, iż sam byłem zaskoczony prostotą tegoż rozwiązania i wynikami, jakie otrzymuję. Kod odpowiedzialny za odczyt pojemności kondensatora modelowego pokazano na listingu 1.
#define KEYS_PORT PORTB
#define KEYS_DDR DDRB
#define KEYS_PIN PINB
#define CHARGER_PIN PB0
#define SENSOR_PIN PB1
uint16_t readCapKey(uint8_t pinNr){
uint16_t Loops = 0;
//Port sensora, jako wyjściowy ze stanem 0 - rozładowanie kondensatora
KEYS_DDR |= (1<<pinNr);
_delay_us(1);
//Port sensora, jako wejściowy Hi-Z
KEYS_DDR &= ~(1<<pinNr);
//Port chargera, jako wyjściowy ze stanem 1 - ładowanie kondensatora
KEYS_DDR |= (1<<CHARGER_PIN);
KEYS_PORT |= (1<<CHARGER_PIN);
//Czekamy na naładowanie kondensatora
do{
Loops++;
}while (!(KEYS_PIN & (1<<pinNr)));
//Zatrzymanie ładowania - port chargera, jako Hi-Z
KEYS_PORT &= ~(1<<CHARGER_PIN);
KEYS_DDR &= ~(1<<CHARGER_PIN);
return Loops;
}
Na fotografii tytułowej i fotografii 3 pokazano wygląd prostego systemu testowego dla detekcji poziomu płynu w naczyniu w przypadku minimalnego i maksymalnego poziomu tego płynu.
Optymalizacja
Na rysunku 4 pokazano wykres zależności wartości pojemności mierzonej w funkcji ilości płynu wlanego do naczynia (przed optymalizacją polegającą na niewielkim zwiększeniu powierzchni elektrod).
Dla naszego systemu testowego wykres jest w zasadzie liniowy. Uważny Czytelnik zastanowi się zapewne nad faktem, w jaki sposób możemy zwiększyć czułość badanego urządzenia. Odpowiedź jest nader prosta. Musimy tak zmodyfikować aplikację kondensatora pomiarowego by niewielka zmiana ilości mierzonego płynu dawała największą, możliwą zmianę pojemności elektrycznej. Najprościej osiągnąć to można poprzez zmianę wielkości elektrod jak i zmianę powierzchni styku elektrod a zatem ich kształtu, co pokazano na rysunku 5.
Z przeprowadzonych doświadczeń wynika, że kształt elektrod ma zdecydowany wpływ na pojemność mierzoną a co za tym idzie, na czułość tak utworzonego układu. Tyle w kwestiach praktycznych i programowych. Mam nadzieję, że przekonałem Was, drodzy Czytelnicy, że pomiar dokonywany w ten sposób, nie dość, że jest bardzo prosty to zapewnia oczekiwaną funkcjonalność. Zapraszam do testów…
Robert Wołgajew, EP