W dzisiejszym wpisie zaprezentuje, jak zbudować prosty układ oparty o czujnik ruchu PIR HC-SR501 i Arduino, który będzie wykrywał i sygnalizował ruch w pomieszczeniu. Wspomniany układ wykorzystamy do sterownika inteligentnego domu, który będzie pobierał dane z czujnika i zapisywał je do bazy danych. W przypadku wykrycia ruchu Arduino będzie uruchamiało skrypt PHP, który będzie zapisywał w bazie danych datę i czas wykrycia ruchu a następnie wysyłał sms/email do użytkownika z informacją o zdarzeniu.
Czujnik typu PIR pozwala na wykrywanie ruchu, wykorzystywany do wykrywania obecności człowieka w pomieszczeniach w systemach alarmowych i oświetleniowych. Sensor zasilany jest napięciem z zakresu 4,5 V do 20 V, posiada zasięg do 7 m. Cyfrowe wyjście umożliwia połączenie czujnika z dowolnym zestawem uruchomieniowym np. Arduino, STM32Discovery lub minikomputerem Raspberry Pi. Wykrycie obiektu, w polu widzenia czujnika, sygnalizowane jest stanem wysokim pojawiającym się na wyprowadzeniu OUT.
Dzięki potencjometrom użytkownik może regulować:
T1 – czas trwania stanu wysokiego po wykryciu obiektu
T2 – długość przerwy w pomiarach po zakończeniu występowania stanu wysokiego
Do złożenia układu (testowego) niezbędne będą następujące elementy:
- Arduino Uno Rev3
- Czujnik ruchu PIR HC-SR501 (od 6zł)
- dioda LED, rezystor
- kable połączeniowe
- Buzzer z generatorem 5V (niekoniecznie)
Zasada działania:
Arduino sprawdza stan pinu cyfrowego (11) ustawionego w trybie (input). Po pojawieniu się stanu wysokiego (1) na czujniku, Arduino sprawdza warunek: „czy pin cyfrowy (11) przyjmuje wartość 1” jeżeli tak – zapala diodę LED oraz wysyła sygnał do buzzera. W przeciwnym wypadku dioda się nie świeci.
W następnym wpisie zaprezentuje, jak za pomocą Arduino i zbudowanego układu wysłać dane do bazy danych i w przejrzysty sposób wyświetlić je na stronie www.
Sposób podłączenia:


Kod źródłowy:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
int czujnik =11; int val = 0; void setup() { pinMode(10, OUTPUT); pinMode(6, OUTPUT); pinMode(11, INPUT); Serial.begin(9600); } void loop() { digitalRead(czujnik); val=digitalRead(czujnik); Serial.println(val); if (digitalRead(czujnik)==1){ digitalWrite(10, HIGH); digitalWrite(6, HIGH); } else { digitalWrite(10, LOW); digitalWrite(6, LOW); } delay(300); } |