ماژول های تشخیص حرکت مدل های زیادی دارند که بر پایه تکنولوژی های مختلفی کار می کنند . به طور مثال ماژول های مایکرووی بر پایه انتشار امواج مایکرووی و تشخیص اختلال در سیگنال دریافتی ، حرکت در محیط را تشخیص می دهند . یکی از کاربردی ترین ماژول های حرکتی ، ماژول های PIR می باشند . در این ماژول از یک گیرنده IR با حساسیت بالا استفاده شده است که توانای سنس گرمای بدن موجودات زنده را دارند . در واقع IR منتشر شده از سطح بدن موجودات زنده ( به دلیل بالا بودن دمای بدن ) را دریافت کرده و سپس سیگنال خروجی را تغییر می دهند . یکی از انواع ماژول های PIR مدل SR501 است . این ماژول قادر است تا حداکثر شعاع 3 متر ، حرکت افراد را تشخیص دهد . می توان از این ماژول در کنار دوربین های مدار بسته استفاده نمود تا تنها در مواقعی که افراد در شعاع دید دوربین قرار دارند ویدو ضبط شود . یا می توانید از آن در ساخت سیستم های امنیتی ساختمان ها استفاده کنید .
در تصویر زیر پین های این ماژول نشان داده شده است :
همان طور که در تصویر فوق نشان داده شده است خروجی این ماژول یک سیگنال منطقی با دو سطح 0 و 3.3 ولت می باشد . همچنین دارای دو پتانسیومتر جهت تعیین تاخیر و حساسیت ماژول است .
راه اندازی ماژول SR501 :
راه اندازی و به کار گیری این ماژول بسیار ساده است .می توانید تغذیه ماژول را به ولتاژی بین 3 تا 5 ولت متصل کنید . در این حالت با حرکت هر جانداری در مقابل لنز ماژول ، خروجی ماژول از 0 به 3.3 ولت تغییر وضعیت می دهد و پس از سپری شدن مدت زمان 0.8 تا 18 ثانیه ( بسته مقدار تنظیم شده توسط پتانسیومتر ) خروجی در حالت 3.3 ولت باقی خواهد ماند . در مدار زیر از آردوینو برای نمایش سیگنال خروجی ماژول استفاده شده است :
int ledPin = 13; // choose the pin for the LED int inputPin = 8; // 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) { Serial.println("Motion detected!"); // print on output change pirState = HIGH; } } else { digitalWrite(ledPin, LOW); // turn LED OFF if (pirState == HIGH) { Serial.println("Motion ended!"); // print on output change pirState = LOW; } } }