Czujniki PIR (Passive Infra Red – pasywny czujnik podczerwieni) służą do wykrywania ruchu, głównie używane są w różnego rodzaju instalacjach alarmowych, ale nic nie stoi na przeszkodzie by użyć ich do naszych niecnych celów…
Zasada działania takiego czujnika opiera się na wykrywaniu zmian temperatury w otoczeniu, a każda zmiana na wyższą jest traktowana jako ruch. Czujniki PIR są zbudowane z detektora podczerwieni (pyroelement) i soczewki Freshnela .
Typowy czujnik PIR widzimy poniżej:
Oczywiście możemy zakupić sam czujnik lub gotowy moduł np. Paralaxa:
ale możemy też wymontować z dowolnej czujki ruchu, a nawet z popularnych i tanich odświeżaczy powietrza AirVick, dodatkowo zyskujemy soczewkę Freshnela która uskutecznia pomiar ruchu czego nie mamy w przypadku nabycia samego czujnika.
Piny AirWicka od LEWEJ :
- VCC – 3,3 /4V
- GND
- LED GND
- GND
- PIR Out
dalsze piny to funkcje przełącznika …
Zasadę działania wyjaśnia najlepiej poniższy obrazek:
Tymczasem typowy układ podłączenia do xxxDuino wygląda następująco:
A nasz program odczytujący może wyglądać tak:
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 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
int calibrationTime = 30; long unsigned int lowIn; long unsigned int pause = 1000; int threshold = 100; boolean lockLow = true; boolean takeLowTime; int pirPin = 0; // analog pin 0 int ledPin = 12; void setup() { Serial.begin(9600); Serial.print("Kalibracja czujnika "); for (int i = 0; i < calibrationTime; i++) { Serial.print("."); delay(1000); } Serial.println(" zakonczono"); Serial.println("Czujnik AKTYWNY"); delay(50); } void loop() { if (analogRead(0) < threshold) { if (lockLow) { pinMode(ledPin, OUTPUT); digitalWrite(ledPin, LOW); lockLow = false; Serial.println("---"); Serial.print("Wykryto ruch : "); Serial.print(millis()/1000); Serial.println(" sec"); delay(50); } takeLowTime = true; } if (analogRead(0) > threshold) { if (takeLowTime) { lowIn = millis(); takeLowTime = false; / } if (!lockLow && millis() - lowIn > pause) { pinMode(12, INPUT); lockLow = true; Serial.print("Brak ruchu: "); Serial.print((millis() - pause)/1000); Serial.println(" sec"); delay(50); } } } |
Czujnik ten może się też przydać w naszym robociku np. do automatycznego obracania kamerki w kierunku ruchu i podążania robota za obiektem czy też wielu innych…
Miłej zabawy …
Sun można zrobić koto – ścigacza (cat-follower) :)
heheh… zapewne tak ..ale co tam :)