Сензор за движение PIR, инфрачервен, засича обекти – източници на инфрачервена светлина 7μm – 14μm. Подходящ е за отчитане на човешко движение, защото хората излъчват инфрачервен сигнал от 8μm до 14μm. Има голям ъгъл на засичане 120 градуса и обхват до 6 метра. Когато има движение в обхвата на сензора, на порта OUT се генерира за няколко секунди цифров сигнал с високо ниво – единица (3,3V). Захранва се с напрежение 5V – 12V и консумира под 1mA ток. След подаване на захранване към модула е необходимо да се изчака няколко секунди докато сензорът сработи нормално.
Характеристики:
- Размери: 37мм х 26мм х 25мм
- Захранване: 5V – 12V
- Консумация на ток: до 1 mA
- Изходен сигнал: единица (3,3V) – засечено движение, нула – няма движение
- При засечено движение изходът остава активен за няколко секунди
- Ъгъл на засичане: приблизително 120°
- Обхват: приблизително до 6м
- Напрежение на порта OUT при засечено движение: 3,3V
- Максимален изходен ток на порта OUT: до 100mA, НЕ може да се използва за директно захранване на консуматори, като LED ленти, комутатори, мотори и т.н.
Важно:
- PIR сензорите са много чувствителни и се използват предимно в алармени системи. Препоръчително е, при експериментиране, модулът да не се монтира в непосредствена близост до микроконтролерна платка, да е неподвижен и да не се придържа с ръце, за да се избегне задействане на изхода при липса на движение.
- Порта OUT може да осигури изходен ток до 100mA, НЕ може да се използва за директно захранване на консуматори, като LED ленти, комутатори, мотори и т.н.
- Препоръчително е модулът да не се захранва с напрежение по-ниско от 4,5V. При захранване с по-ниско напрежение, например 3,3V, сензорът няма да работи нормално и ще се активира непрекъснато!
Пример с Ардуино:
int ledPin = 13; // choose the pin for the LED
int inputPin = 2; // choose the input pin (for PIR sensor)
int pirState = LOW;// we start, assuming no motion detected
int val = 0; // variable for reading the pin status
void setup() {
pinMode(ledPin, OUTPUT); // declare LED as output
pinMode(inputPin, INPUT); // declare sensor as input
Serial.begin(9600);
}
void loop(){
val = digitalRead(inputPin);// read input value
if (val == HIGH) { // check if the input is HIGH
digitalWrite(ledPin, HIGH);// turn LED ON
if (pirState == LOW) {
// we have just turned on
Serial.println("Motion detected!");
// We only want to print on the output change, not state
pirState = HIGH;
}
} else {
digitalWrite(ledPin, LOW); // turn LED OFF
if (pirState == HIGH){
// we have just turned of
Serial.println("Motion ended!");
// We only want to print on the output change, not state
pirState = LOW;
}
}
}