[PROJEKT] Czujnik ruchu PIR z wykorzystaniem modHC-SR501

Moduł modHC-SR501 jest czujnikiem zawierającym sensor pasywny podczerwieni (PIR), wraz z soczewką Fresnela oraz układem BIS0001 interpretującym sygnały z fotoelementu. Na zewnątrz modułu wyprowadzone jest złącze 3-pinowe, przez które układ jest zasilany oraz podaje stan logiczny odpowiadający wykryciu ruchu obiektu. Dwa potencjometry służą do regulacji czułości oraz czasu opóźnienia przed następnym załączeniem przy wykryciu ruchu, zaś przy pomocy zworki na płytce można przełączyć tryb wyzwalania.

 

 

 

Układ ten podłączony jest do płytki testowej ZL2AVR v.2 zawierającej mikrokontroler Atmel ATMEGA8A. W projekcie został także użyty moduł KamodRPi PwrRelay, z którego wykorzystano jeden przekaźnik do załączania obciążenia (np. lampki biurkowej).

Moduł modHC-SR501 po wykryciu ruchu wystawia stan logiczny „1” na złącze OUT. Układ ten zasilany jest z napięcia 5 V, zaś dzięki wbudowanemu stabilizatorowi pracuje na napięciu 3.3 V (takie też napięcie odpowiada stanowi logicznej jedynki). Sygnał logiczny z czujnika ruchu jest doprowadzony do linia D.2 mikrokontrolera, który obsługuje w przerwaniu pojawienie się zbocza narastającego na tej linii, a także odczytuje wartość napięcia na ślizgaczu potencjometru (linia C.0) i steruje pracą diody, dołączonej do linii D.1.

Moduł PwrRelay jest podłączony do linii D.3 i przy pojawieniu się na tym pinie stanu wysokiego następuje załączenie przekaźnika. Z modułu jest także wyprowadzone złącze służące do dołączenia obciążenia – może pracować zarówno w stanie NO, jak i NC, załączając lub odłączając odbiornik po wykryciu ruchu. Jako przykładowe obciążenie zastosowano lampkę biurkową z zasilaczem 230 VAC / 12 VAC. Moduł z przekaźnikiem jest włączony pomiędzy zasilacz i lampkę.

Program sterujący napisany został w języku Bascom AVR. Na początku są deklarowane parametry pracy mikrokontrolera, w tym częstotliwość taktująca, konfiguracja wejść/wyjść, parametry pracy przetwornika ADC oraz ustawienie i uruchomienie przerwań. Odpowiedzialny za to fragment programu został przedstawiony na listingu 1.

Listing 1. Konfiguracja podstawowych parametrów pracy

W dalszej części programu wykonywane są czynności w pętli Do…Loop. Przy pomocy przetwornika ADC mierzona jest wartość napięcia z potencjometru, podana jako wartość 10-bitowa, która po podzieleniu przez 4 uzyskuje wartości z przedziału 0…255. Służy ona do ustalania czasu działania przekaźnika – po wykryciu ruchu przekaźnik jest załączany, zaś w pętli głównej liczony jest czas (w przybliżeniu 1 sekunda na wykonanie pętli). Jeśli czas ten przekroczy wartość ze zmiennej Wartosc, nastąpi wyłączenie przekaźnika.

Wystąpienie przerwania ustawia wartość Alarm = 1 – ta zostaje każdorazowo sprawdzona w pętli głównej i jeśli zostanie wykryta, wykonywane jest kasowanie licznika czasu i zerowanie wartości alarmu. Dzięki temu przekaźnik pozostanie włączony tak długo, jak wykrywany będzie ruch oraz zliczony czas będzie mniejszy od wartości ustawionej potencjometrem. Pętlę Do…Loop przedstawiono na listingu 2.

Listing 2. Pętla główna programu

Obsługa zbocza narastającego, pojawiającego się w momencie wykrycia ruchu na linii D.2 mikrokontrolera jest wykonywana w przerwaniu zewnętrznym INT0 – procedura obsługi tego przerwania jest pokazana na listingu 3. Wyłączona zostaje obsługa przerwania, by uniknąć błędów w działaniu wskutek, np. zakłóceń, które mogłyby spowodować pozostanie w przerwaniu przez zbyt długi czas. Następnie ustawiona zostaje wartość Alarm = 1, która sprawdzana jest w pętli głównej i przekazuje informację o wykryciu ruchu. Równocześnie, za pomocy instrukcji Pulseout, generowany jest krótki błysk diody świecącej, by zasygnalizować, że wykryto ruch i licznik czasu zostanie wyzerowany. Załączony zostaje przekaźnik w module PwrRelay, zaś po krótkiej zwłoce kasowany jest rejestr flagi przerwania (w którym mogła pojawić się wartość od momentu wyłączenia przerwań, np. wskutek zakłócenia – bez skasowania rejestru flagi przerwanie mogłoby się powtórzyć w momencie odblokowania INT0). Po odblokowaniu przerwania następuje powrót do pętli głównej.

 

Listing 3. Przerwanie zewnętrzne INT0

Przerwanie:

Pełny kod programu:

Do pobrania

O autorze