Kursy • Poradniki • Inspirujące DIY • Forum
Microswitch w roli czujnika
Microswitch, czujnik krańcowy lub po prostu przycisk; określenia te odnoszą się do prostego czujnika, który składa się przynajmniej z 2 blaszek stanowiących bazę oraz jednej, która pod wpływem działającej siły mechanicznej styka lub rozwiera wyprowadzenia.
Schematycznie microswitch można przedstawić następująco:
Takie przyciski najłatwiej skojarzyć z klawiaturą w telefonie, komputerze, zamkiem cyfrowym lub z myszką, którą najpewniej masz pod ręką. W ogólności microswitche są tam, gdzie do układu cyfrowego należy wprowadzić jakieś informacje.
W jaki więc sposób użyć tego drobnego czujnika w robotyce? Często ludzie tworząc wynalazki sięgają do wzorców z przyrody (tzw. biomimetyzm). W tym przypadku podobne „czujniki” istniały dawno przed wynalezieniem microswitcha, a są nimi zwierzęce wąsy (wibrysy - receptory czuciowe wrażliwe na dotyk). Podobnie można wyposażyć robota w wąsy, które pod wpływem nacisku zwierałyby styki, dostarczając informacji o zderzeniu się robota z przeszkodą, jak na poniższej ilustracji:
Innym zastosowaniem (bardzo popularnym) jest umieszczenie czujników krańcowych w każdym z odnóży robota kroczącego. Robot może rozróżnić czy stopa (efektor) aktualnie znajduje się na podłożu czy wisi w powietrzu. Dzięki takim informacjom robot podejmuje decyzje, czy należy dalej sięgać w dół, a jeżeli nie jest to możliwe (odnóże robota osiągnęło tzw. punkt nieosobliwości) to znaczy, że w terenie jest jakaś wyrwa i trzeba ją obejść.
Mechanika takiej stopy wygląda w następujący sposób:
Podłączenie
Przełączniki są łatwe w obsłudze, od strony technicznej wymagają jedynie rezystorów oraz jednego kondensatora. Przykładowa realizacja czujnika na bazie microswitcha przedstawiona jest na poniższym schemacie wykonanym w programie EAGLE, którego kurs został wcześniej opublikowany.
Ktoś mógłby zapytać do czego jest rezystor połączony z przyciskiem. Jego użycie nie jest przypadkowe, a nawet konieczne. W stanie nieaktywnym, gdyby przełącznik był rozwarty, wejście mikrokontrolera zbierałoby szumy i stan na nim byłby przypadkowy.
Rezystor sprawia, że gdy microswitch jest rozwarty występuje na wejściu stan wysoki, a gdy zostaje zwarty, stan przechodzi w niski (połączenie Pull-up).
Poniżej zamieszczam program w języku C, który realizuje obsługę przycisku. Po wciśnięciu microswitcha (podpiętego do PB0 bez rezystora, gdyż zastosowano programowy Pull-up), stan na pinie przechodzi na niski, co zostaje sprawdzone w nieskończonej pętli.Gdy warunek zostaje spełniony zapalana jest dioda (podpięta do PB1 anodą, a katodą przez rezystor do masy), w przeciwnym razie dioda zostaje wygaszona.
#include <avr/io.h>
DDRB &= ~(1<<PB0); //Przycisk jako wejście
PORTB |= (1<<PB0); //Wewnętrzny pull-up
DDRB |= (1<<PB1); //LED jako wyjście
PORTB &= ~(1<<PB1); //LED wyłączona
while(1) {
if (!(PINB & (1<<PB0))) {
PORTB |= (1<<PB1); //LED włączona
} else {
PORTB &= ~(1<<PB1); //LED wyłączona
}
}
Załączam także program napisany w Bascom'ie.
$regfile = "m8def.dat"
$crystal = 1000000
PRZYCISK Alias Portb.0
LED Alias Portb.1
Config PRZYCISK = Input
Config LED = Output
Set PRZYCISK
Reset LED
Do
If PINB.0 = 0 Then
Set LED
End If
If PINB.0 = 1 Then
Reset LED
End If
Loop
End
Drgania styków i ich eliminacja
Microswitche i krańcówki są elementem mechanicznym, zatem warunki fizyczne silnie na nie oddziałują np.: śniedź, zużycie mechaniczne, wilgoć, sprężystość metalu, odkształcenia. Wszystko to sprawia, że podczas zmian stanu przełącznika powstają niechciane zakłócenia (drgania styków), które zamiast ładnego przebiegu prostokątnego tworzą przebieg widoczny poniżej:
W praktyce efekt ten zaobserwować najlepiej na prostym przykładzie. Wyobraź sobie program, który ma zliczać wciśnięcia przycisku (czujnika). Każde wciśnięcie, ma zwiększyć wartość zmiennej licznikowej o 1. Jeśli układ nie będzie zabezpieczony przed drganiami styków, po jednokrotnym "kliknięciu" przyciskiem zmienna zostanie zwiększona, nie raz, a kilka. Dlaczego? Spójrz na powyższy wykres. Mikrokontroler sprawdza stan swoich wejść baaaardzo szybko. Bez problemu będzie mógł policzyć zakłócenia jako osobne wciśnięcia przycisku.
Jest to efekt niepożądany, możliwa jest jego eliminacja w dwojaki sposób:
- sprzętowa,
- programowa.
Sprzętowa eliminacja polega na wstawieniu pomiędzy nóżki krańcówki rezystora około 100 Ohm oraz kondensator o pojemności około 100nF. Zakłócenia powstałe podczas drgania styków charakteryzują się dużą częstotliwością, co wymaga użycia kondensatora o niewielkiej pojemności. Na schemacie poniżej przedstawiono sprzętową eliminację drgań styków:
Powyższy schemat jest jedną z możliwych implementacji filtru RC.
Programowa eliminacja drgań polega na sprawdzeniu stanu wejścia i odczekaniu, krótkiego czasu (20- 80ms) aż drgania ustaną. Realizację w dowolnym języku należy wykonać zgodnie z poniższym algorytmem:
if (WcisnietoPrzycisk) {
_delay_ms(20); //Czekamy 20ms
if (WcisnietoPrzycisk) {
//Wciśnięto przycisk
//Wykonujemy właściwą akcję
} else {
//Fałszywy alarm, drgania styków
}
}
Podsumowanie
Nawet proste i tanie elementy mogą być wykorzystane w roli czujników. Podłączenie dwóch krańcówek z odpowiednimi "wąsami" wystarczy, do stworzenia prostego robota, który będzie omijał przeszkody. Nie można zapomnieć, że microswitche są też idealnym interfejsem do komunikacji z robotem (wybór ustawień, start, stop). Co najważniejsze, w obu przypadkach trzeba być świadomym występowania drgań styków, ponieważ mogą one prowadzić do nieprzewidywalnych zachowań.
Przykładowy robot z dwiema krańcówkami w roli czujników (kliknij, aby przeczytać opis):
To nie koniec, sprawdź również
Przeczytaj powiązane artykuły oraz aktualnie popularne wpisy lub losuj inny artykuł »
czujniki, krańcowka, microswitch
Trwa ładowanie komentarzy...