سنسور PIR چیست؟ — نحوه کار و مدار عملی
در آموزشهای قبلی مجله فرادرس با سنسور و برخی از انواع آن مانند سنسور دما، موقعیت، فشار، فاصلهسنج و مجاورتی آشنا شدیم. در این آموزش، مطالبی را درباره سنسور PIR بیان میکنیم.
سنسور PIR چیست؟
همه اجسام زنده که دمای بدن آنها بیش از صفر درجه سانتیگراد است، گرما را به شکل اشعه فروسرخ از بدن خود منتشر میکنند که به آن «تابش گرمایی» (Thermal Radiation) نیز گفته میشود.
چشم انسان نمیتواند این انرژی تابشی را مشاهده کند. چنین سیگنالهایی را میتوان با استفاده از سنسور PIR که برای چنین اهدافی طراحی شده است، تشخیص داد. در «سنسور فروسرخ غیرفعال» (Passive Infrared Sensor) یا PIR، کلمه غیرفعال نشان میدهد که سنسور PIR هیچ انرژی را برای تشخیص اجسام تولید یا تابش نمیکند.
سنسورهای PIR گرما را اندازه نمیگیرند (تشخیص نمیدهند)، بلکه تابش فروسرخ ساطع شده یا منعکس شده از اجسام را تشخیص میدهند. این سنسورها ارزان و کممصرف هستند و استفاده از آنها آسان است و معمولاً در خانهها، کاربردهای پزشکی، کارخانهها و... به کار میروند.
سنسور PIR چگونه کار میکند؟
سنسور PIR اساساً از یک سنسور «پیروالکتریک» (Pyroelectric) ساخته شده که میتواند سطح تابش فروسرخ را تشخیص دهد.
شکل زیر قطعه PIR را نشان میدهد که یک قوطی فلزی گرد با یک کریستال مستطیل شکل در مرکز است.
هر جسمی مقداری پرتو سطح پایین میتاباند و اجسام گرمتر نیز پرتو بیشتری از خود ساطع میکنند. سنسور در دو شکاف تقسیم شده است که به گونهای سیمکشی میشوند تا یکدیگر را خنثی کنند.
اگر یک نیمه تابش فروسرخ را بیشتر یا کمتر از دیگری مشاهده کند، خروجی کم (LOW) یا زیاد (HIGH) میشود. سیگنالهای ورودی از هر دو ترمینال عنصر PIR با استفاده از مدار تقویتکننده تقویت میشوند و با استفاده از مدار مقایسهکننده مقایسه میشوند. قطعه PIR با لنز (عدسی) پوشانده شده تا دامنه عملکرد افزایش یابد. جسم در دو حالت میتواند بررسی شود: عدم وجود شخص و وجود شخص.
سنسور PIR از قطعه RE200B برای تشخیص فروسرخ استفاده میکند. هر دو اسلات (شکاف) این سنسور به تقویتکننده تفاضلی متصل هستند. هنگامی که شخصی وجود ندارد، هر دو شکاف مقدار یکسانی فروسرخ را تشخیص میدهند. بنابراین، هیچ سیگنال خطایی بین ورودیهای تفاضلی وجود ندارد و خروجی مدار مقایسهکننده صفر است.
اما اگر هر جسمِ گرمی از مقابل سنسور عبور کند، با یک شکاف از سنسور PIR تلاقی خواهد داشت. این امر باعث تغییر تفاضلی مثبت بین دو شکاف میشود. این تغییر توسط قسمت A در شکل زیر نشان داده شده است. وقتی جسم گرم از ناحیه سنجش خارج میشود، سنسور تغییرات تفاضلی منفی ایجاد میکند. این تغییر توسط قسمت B در شکل نشان داده شده است. هر دو این تغییرات در پالس، بیانگر تشخیص جسم گرم است که سیگنالهای فروسرخ را میتاباند.
پایههای ماژول سنسور PIR
شکل زیر یک ماژول سنسور PIR را نشان میدهد.
- پایه ۱ (GND): این پایه به زمین وصل میشود.
- پایه ۲ (خروجی): این پایه با تشخیص حرکت خروجی ۳٫۵ ولتی میدهد.
- پایه ۳ (Vcc): این پایه ولتاژ تغذیه (۵ ولت) سنسور PIR و مدار داخلی را تأمین میکند.
این سنسور PIR دو حالت عملکردی دارد: تریگر تکی و تریگر تکراری.
- حالت تریگر تکی:
برای انتخاب حالت تریگر تکی، جامپر سنسور PIR باید روی LOW تنظیم شود. در حالت تریگر تکی، وقتی حرکت تشخیص داده شود، خروجی HIGH میشود. پس از تأخیر معین (tsel) حتی اگر جسم در حال حرکت باشد، خروجی LOW خواهد شد. خروجی برای مدتی LOW است و اگر جسم در حرکت باقی بماند، دوباره HIGH میشود. این تأخیر معین (tsel) توسط کاربر و با استفاده از پتانسیومتر اعمال میشود. این پتانسیومتر در ماژول سنسور PIR قرار دارد. به این ترتیب، اگر جسم در حرکت مداوم باشد، سنسور PIR پالسهای HIGH/LOW خواهد داشت.
- حالت تریگر تکراری:
برای انتخاب حالت تریگر تکراری، جامپر سنسور PIR باید روی HIGH تنظیم شود. در این حالت، خروجی با تشخیص حرکت HIGH میشود. خروجی سنسور PIR تا زمانی که جسم در حرکت نباشد، HIGH است. وقتی جسم حرکت را متوقف میکند یا از زاویه دید سنسور ناپدید میشود، PIR به اندازه تأخیر زمانی مشخص (Tsel) حالت HIGH خود را ادامه میدهد. با تنظیم پتانسیومتر میتوانیم این تأخیر (tsel) را اعمال کنیم. این پتانسیومتر در ماژول سنسور PIR قرار دارد. به این ترتیب، اگر جسم در حرکت مداوم باشد، سنسور PIR پالس HIGH میدهد.
تغییر حساسیت و زمان تأخیر در ماژول سنسور PIR
در برد سنسورهای حرکت PIR دو پتانسیومتر به کار رفته است: پتانسیومتر تنظیم حساسیت و پتانسیومتر تنظیم زمان تأخیر. میتوان سنسور PIR را به میزان لازم حساس یا غیرحساس کرد. حداکثر حساسیت تا 6 متر قابل دستیابی است. پتانسیومترِ تنظیم زمان تأخیر برای تنظیم زمان نشان داده شده در نمودارهای زمانبندی بالا استفاده میشود. حرکت در جهت عقربههای ساعت حساسیت PIR را بیشتر میکند.
سنسور PIR با عدسی فرنل
شکل زیر آشکارساز PIR را با لنز (عدسی) فرنل نشان میدهد.
هنگام ساخت سنسور PIR در نظر گرفتن دو نکته مهم است: هزینه کم و حساسیت بالا که با استفاده از درپوش عدسی میتوان به هر دو این موارد دست یافت. عدسیها دامنه عملکرد را افزایش میدهند، حساسیت را زیاد میکنند و الگوی حس را به راحتی تغییر میدهند.
تست سنسور PIR
شکل زیر مدار سادهای را نشان میدهد که با استفاده از آن میتوان سنسور PIR را تست کرد.
همانطور که در تصویر متحرک زیر میبینیم، هر زمان که PIR حرکت را تشخیص دهد، LED روشن میشود و در غیر این صورت خاموش میماند.
محدوده کاری سنسورهای PIR به شرح زیر است:
- سنسور PIR داخلی: فواصل تشخیص از 25 سانتیمتر تا 20 متر است.
- سنسور PIR داخلی پردهای: فاصله تشخیص از 25 سانتیمتر تا 20 متر است.
- سنسور PIR خارجی (فضای باز): فاصله تشخیص از 10 متر تا 150 متر است.
- سنسور PIR خارجی پردهای: فاصله از 10 متر تا 150 متر
مدار سنسور PIR با PIC18F4550
میخواهیم مدار کوچکی طراحی کنیم که در آن LED با تشخیص حرکت روشن شود.
برای این کار، از سنسور حرکت PIR با PIC18F4550 استفاده میکنیم. همانطور که در شکل مدار نشان داده شده است، پایه خروجی سنسور حرکت PIR به پایه PORTA.0 متصل است. اگر این پایه HIGH شود، حرکت شناسایی شده و LED روشن میشود. با توجه به حالت عملکرد، اگر این پین LOW باشد، به این معنی است که یا حرکت وجود ندارد یا دوره تریگر به پایان میرسد و LED را خاموش میکند. در اینجا ماژول را در حالت تریگر تکرارپذیر پیکربندی میکنیم.
توجه کنید که بعد از روشن کردن مدار، ماژول برای عملکرد مناسب به حدود 30 تا 50 ثانیه برای گرم شدن نیاز دارد.
برنامه مورد استفاده برای PIC18F4550 به صورت زیر است:
1/*
2 * PIR Motion sensor interface with PIC18F4550
3 * http://www.electronicwings.com
4 */
5
6
7#include <pic18f4550.h>
8#include "Configuration_Header_File.h"
9
10#define Motion_detection PORTAbits.RA0 /* Read PIR sensor's data on this pin */
11#define PORT_Dir TRISAbits.RA0 /* define for setting direction */
12#define LED LATD0 /* connect LED to the PORT pin */
13#define LED_Dir TRISDbits.RD0 /* define for setting direction */
14
15void MSdelay(unsigned int val);
16
17void main(void)
18{
19 ADCON1=0x0F; /* this makes all pins as a digital I/O pins */
20 PORT_Dir = 1; /* set as input port */
21 LED_Dir = 0; /* set as output port */
22 LED = 0; /* initially turned OFF LED */
23 OSCCON = 0x72;
24 while(1)
25 {
26 while(Motion_detection)
27 LED = 1; /* LED turn ON if any Human motion is detected */
28
29 LED = 0; /* LED turn OFF */
30 }
31}
32void MSdelay(unsigned int val)
33{
34 unsigned int i,j;
35 for(i=0;i<val;i++)
36 for(j=0;j<165;j++); /*This count Provide delay of 1 ms for 8MHz Frequency */
37 }
پوشه مربوط به این پروژه را از این لینک (+) دانلود کنید.
مدار سنسور PIR با AVR ATmega16/ATmega32
در اینجا، میخواهیم حرکت را با استفاده از یک سنسور PIR که با AVR ATmega16/32 ارتباط دارد، تشخیص دهیم. وقتی حرکت شناسایی شد (یعنی پین خروجی HIGH شود)، LED روشن میشود.
برنامه مورد استفاده برای AVR ATmega32 به صورت زیر است:
1/*
2 PIR Motion Sensor Interface with AVR ATmega32
3 http://www.electronicwings.com
4 */
5
6#define F_CPU 8000000UL
7#include <avr/io.h>
8#define LED_OUTPUT PORTB
9#define PIR_Input PINC
10
11int main(void)
12{
13 DDRC = 0x00; /* Set the PIR port as input port */
14 DDRB = 0xff; /* Set the LED port as output port */
15
16 while(1)
17 {
18 LED_OUTPUT = PIR_Input;
19 }
20}
پوشه مربوط به این پروژه را از این لینک (+) دانلود کنید.
مدار سنسور PIR با 8051
میخواهیم یک مدار کوچک طراحی کنیم که در آن LED با شناسایی حرکت روشن شود. برای این کار، سنسور حرکت PIR را در کنار میکروکنترلر 8051 به کار میگیریم. همانطور که در نمودار مدار نشان داده شده است، پایه خروجی سنسور حرکت PIR به پایه PORT0.0 متصل است. برای به دست آوردن سطح مناسب (0 و 5) در پایه ورودی 8051 که برای خواندن سنسور PIR استفاده میشود، ترانزیستور به کار میرود. وقتی از ترانزیستور استفاده شود، پین P0.0 در حالت LOW قرار میگیرد و نشان میدهد حرکت شناسایی شده و LED روشن میشود. با توجه به نحوه عملکرد، اگر High روی این پین تشخیص داده شود، به این معنی است که یا حرکت وجود ندارد یا دوره تریگر تمام شده و LED را خاموش میکند. در اینجا ماژول را در حالت تریگر تکرارپذیر پیکربندی میکنیم.
توجه کنید که ماژول بعد از روشن کردن، برای عملکرد مناسب به حدود 30-50 ثانیه برای گرم شدن نیاز دارد.
برنامه مورد استفاده برای میکروکنترلر 8051 به صورت زیر است:
1/*
2 * PIR Motion sensor interface with 8051
3 * http://www.electronicwings.com
4 */
5
6
7#include <reg51.h>
8
9sbit Motion_detection=P0^0; /* Read PIR sensor's data on this pin */
10sbit LED=P1^0; /* Connect LED to the PORT1.0 pin */
11
12
13void MSdelay(unsigned int val);
14
15void main(void)
16{
17 P1=0; /* Initially LED turned OFF*/
18 MSdelay(3000); /* Power-on delay for PIR */
19 while(1)
20 {
21 if(Motion_detection==1) /* Check for human motion */
22 LED = 0; /* LED turn OFF for No motion */
23 else
24 LED = 1; /* LED turn ON if motion is detected */
25 }
26}
27void MSdelay(unsigned int val)
28{
29 unsigned int i,j;
30 for(i=0;i<=val;i++)
31 for(j=0;j<112;j++); /* Delay of 1 ms for 11.0592MHz Frequency */
32}
پوشه مربوط به این پروژه را میتوانید از این لینک (+) دانلود کنید.
مدار سنسور PIR با Arduino UNO
شکل زیر، مدار تشخیص حرکت اجسام زنده با استفاده از سنسور PIR و آردوینو را نشان میدهد.
با تشخیص حرکت، عبارت "Object detected" روی نمایشگر سریال آردوینو چاپ میشود و وقتی حرکتی وجود ندارد، عبارت "No object in sight" روی نمایشگر نشان داده میشود.
برنامه مورد استفاده برای Arduino UNO به صورت زیر است:
1const int PIR_SENSOR_OUTPUT_PIN = 4; /* PIR sensor O/P pin */
2int warm_up;
3
4void setup() {
5 pinMode(PIR_SENSOR_OUTPUT_PIN, INPUT);
6 Serial.begin(9600); /* Define baud rate for serial communication */
7 delay(20000); /* Power On Warm Up Delay */
8}
9
10void loop() {
11 int sensor_output;
12 sensor_output = digitalRead(PIR_SENSOR_OUTPUT_PIN);
13 if( sensor_output == LOW )
14 {
15 if( warm_up == 1 )
16 {
17 Serial.print("Warming Up\n\n");
18 warm_up = 0;
19 delay(2000);
20 }
21 Serial.print("No object in sight\n\n");
22 delay(1000);
23 }
24 else
25 {
26 Serial.print("Object detected\n\n");
27 warm_up = 1;
28 delay(1000);
29 }
30}
پوشه مربوط به این پروژه را میتوانید از این لینک (+) دانلود کنید.
اگر از وقفه استفاده کنیم، مدار به صورت زیر خواهد بود.
برنامه مورد استفاده برای Arduino UNO با در نظر گرفتن وقفه به صورت زیر است:
1const int PIR_SENSOR_OUTPUT_PIN = 2; /* PIR sensor O/P pin */
2
3void setup() {
4 pinMode(PIR_SENSOR_OUTPUT_PIN, INPUT_PULLUP);
5 attachInterrupt(digitalPinToInterrupt(2), pir, FALLING); /* Interrupt on rising edge on pin 2 */
6 Serial.begin(9600); /* Define baud rate for serial communication */
7 delay(20000); /* Power On Warm Up Delay */
8}
9
10void loop() {
11}
12
13void pir(){
14 Serial.println("Object Detected");
15}
پوشه مربوط به این پروژه را میتوانید از این لینک (+) دانلود کنید.
مدار سنسور PIR با MSP-EXP430G2 TI Launchpad
مدار سنسور PIR با MSP-EXP430G2 TI Launchpad به صورت زیر است.
با تشخیص حرکت، جسم شناسایی شده روی نمایشگر سریال چاپ میشود. وقتی هیچ حرکتی وجود نداشته باشد، هیچ چیزی روی مانیتور سریال Energia نمایش داده نمیشود. برد MSP-EXP430G2 TI Launchpad دارای یک رم 512 بایت است که مخصوصاً هنگام استفاده از کتابخانههای مختلف به راحتی پر میشود. مواردی وجود دارد که باید بافر سریال آنقدر بزرگ باشد تا بتواند دادههای مورد نظر را در خود داشته باشد. باید اندازه بافر را برای کتابخانه سریال تغییر دهیم. در حین انجام چنین کارهایی، باید اطمینان حاصل کنیم که کد بیش از 70 درصد رم را استفاده نمیکند. مواقعی وجود دارد که ممکن است میزان استفاده از RAM از 70 درصد بیشتر شود و کدها کاملاً خوب کار کنند و همچنین مواردی نیز دیده شده که کد حتی در صورت استفاده از 65 درصد رم نیز کار نکند. در چنین مواردی، ممکن است کمی سعی و خطا با اندازه بافر و/یا متغیرها لازم باشد.
برنامه مورد استفاده برای MSP-EXP430G2 TI Launchpad به صورت زیر است:
1const int PIR_SENSOR_OUTPUT_PIN = 8; /* PIR sensor O/P pin */
2int warm_up;
3
4void setup() {
5 pinMode(PIR_SENSOR_OUTPUT_PIN, INPUT);
6 Serial.begin(9600); /* Define baud rate for serial communication */
7 delay(20000); /* Power On Warm Up Delay */
8}
9
10void loop() {
11 int sensor_output;
12 sensor_output = digitalRead(PIR_SENSOR_OUTPUT_PIN);
13 if( sensor_output == LOW )
14 {
15 if( warm_up == 1 )
16 {
17 Serial.print("Warming Up\n\n");
18 warm_up = 0;
19 delay(2000);
20 }
21 Serial.print("No object in sight\n\n");
22 delay(1000);
23 }
24 else
25 {
26 Serial.print("Object detected\n\n");
27 warm_up = 1;
28 delay(1000);
29 }
30}
پوشه مربوط به این پروژه را میتوانید از این لینک (+) دانلود کنید.
سنسور PIR با NodeMCU
میخواهیم سنسور PIR را با کمک NodeMCU به کار گیریم. هنگامی که حرکت تشخیص داده میشود، خروجی PIR روی HIGH قرار میگیرید که توسط NodeMCU خوانده میشود. بنابراین، وقتی حرکت توسط حسگر PIR تشخیص داده شود، LED را روشن خواهیم کرد. LED به پایه D4 متصل است.
در اینجا اسکچ Arduino و همچنین اسکریپت Lua برای NodeMCU را مینویسیم.
اسکریپت Lua برای سنسور به صورت زیر است:
1PIRpin = 1
2LEDpin = 4
3
4gpio.mode(PIRpin, gpio.INPUT)
5gpio.mode(LEDpin, gpio.OUTPUT)
6
7while true do
8 gpio.write(LEDpin, gpio.read(PIRpin))
9 tmr.delay(10000)
10end
برنامه اسکچ آردوینو نیز به شکل زیر نوشته میشود:
1int LED = D4;
2intPIR_Input = D1;
3
4void setup(){
5 pinMode(PIR_Input,INPUT);
6 pinMode(LED,OUTPUT);
7}
8
9void loop() {
10 digitalWrite(LED, digitalRead(PIR_Input));
11 delay(10);
12}
پوشه مربوط به این پروژه را میتوانید از این لینک (+) دانلود کنید.
معرفی فیلم آموزش برد آردوینو (Arduino) با انجام پروژه های عملی
برای آشنایی بیشتر با آردوینو پیشنهاد میکنیم به فیلم آموزش برد آردوینو (Arduino) با انجام پروژه های عملی «فرادرس» مراجعه کنید که مدت زمان آن ۱۹ ساعت و ۱۰ دقیقه است.
در درس اول این آموزش که در ۹ درس تدوین شده، معرفی اجمالی با برد آردوینو (Arduino) بیان شده است. در درس دوم، واحد ارتباط سریال در آردوینو مورد بحث قرار گرفته است. موضوع درس سوم واحد PWM و ADC در آردوینو است.
واحد وقفه و SPI در آردوینو نیز در درسهای چهارم و پنجم معرفی شدهاند. به واحد TWI و I2C در آردوینو نیز در درس ششم پرداخته شده است. حافظه EEPROM نیز موضوع درس هفتم است. آرایهها و رشتهها در آردوینو از مباحث مهمی هستند که در درس هشتم گنجانده شدهاند و در نایت، برنامهنویسی پیشرفته برد آردوینو در درس نهم آموزش داده شده است.
- برای مشاهده فیلم آموزش برد آردوینو (Arduino) با انجام پروژه های عملی + اینجا کلیک کنید.
معرفی فیلم آموزش الکترونیک ۱ فرادرس
برای آشنایی با الکترونیک، پیشنهاد میکنیم به فیلم آموزش الکترونیک 1 مراجعه کنید که توسط فرادرس تهیه شده است. این آموزش در ۱۱ ساعت و ۲۷ دقیقه و در قالب ۶ درس تدوین شده است. در درس اول، درباره فیزیک الکترونیک بحث شده است. دیود و مدارهای دیودی موضوع مهم درس دوم است. مباحث ترانزیستور پیوندی دوقطبی و ترانزیستورهای اثر میدان، به ترتیب، در درسهای سوم و چهارم معرفی شدهاند. در درس پنجم تقویتکنندههای ترانزیستوری چندطبقه مورد بحث قرار گرفته و در نهایت در درس ششم آنالیز و طراحی مدارات آنالوگ با استفاده از نرم افزار OrCAD ارائه شده است.
- برای مشاهده فیلم آموزش الکترونیک ۱ + اینجا کلیک کنید.
معرفی فیلم آموزش الکترونیک 2 فرادرس
آموزش الکترونیک 2 فرادرس در ۸ ساعت و ۱۱ دقیقه و در ۷ درس تهیه شده است. درس اول این آموزش درباره پاسخ فرکانسی تقویتکنندههای ترانزیستوری است. در درس دوم منابع جریان و بارهای فعال معرفی شدهاند. تقویتکنندههای تفاضلی، تقویتکنندههای توان، تقویتکنندههای فیدبک و تقویتکنندههای عملیاتی، به ترتیب، موضوع درسهای سوم تا ششم هستند. در نهایت، در درس هفتم تنظیمکنندههای ولتاژ معرفی شدهاند.
- برای مشاهده فیلم آموزش الکترونیک 2 + اینجا کلیک کنید.
معرفی فیلم آموزش الکترونیک 3 فرادرس
آموزش درس الکترونیک ٣ در ادامه درس الکترونیک ١ و ٢ در ۱۵ ساعت و ۷ دقیقه و در قالب چهار درس ارائه شده است. در درس اول، پاسخ فرکانسی تقویتکنندههای ترانزیستوری به طور کامل آموزش داده شده است. پایداری و جبران فرکانسی تقویتکنندههای فیدبک موضوع درس دوم است. در درس سوم، تقویتکنندههای عملیاتی به طور کامل مورد بحث قرار گرفتهاند و در نهایت، در درس چهارم، اسیلاتورها به طور مفصل شرح داده شدهاند.
- برای مشاهده فیلم آموزش الکترونیک 3 + اینجا کلیک کنید.
بسیار عالی و جامع بود تشکر
سلام من میخوام خود سنسور به تنهایی بدون هیچ قطعه برای تست با یک ال ایدی ببندم آیا امکانش هست ؟اگره اره ممنون میشم راهنمایی کنید
سلام
وقتتون بخیر
آیا این سنسور ها میتوانند اجسامی با سرعت حدودی
500 متر بر ثانیه را تشخیص دهند؟
با چه مقدار تاخیر؟
می توان تاخیر را به صفر ثانیه رساند؟
من هم به ریشه های فارسی و مونتاژ الکترونیک علاقمندم کاش بجای سنسور مدار معادل دیودی میذاشتین که این سنسور نباشه با کدام قطعه میشه جایگزین کرد
سلام خوبین ؟ آیا میشه بدون ماژول هم این سنسور را بکار گرفت ؟ من میخوام فقط خود این سنسور را در مداری قرار دهم که سنسور در ماژول آماده نباشد..
سلام حامد عزیز.
بله، میتوانید این کار را انجام دهید.
شاد و پیروز باشید.
سلام
باعرض ارادت وتشکر
یه سنسور pir را به روشی که گفتید تست کردم جامبر در هردوحالت هم که باشه مرتب خاموش وروشن میشه وهیچ ربطی با حرکت جلو سنسور نداره
سنسور مشگل داره ؟
عالی👍 جامع ترین مطالبی بود که از این سنسور یک جا دیده بودم👌
سلام.
احتمالاً سنسور مشکل دارد یا اختلالی در برنامه میکروکنترلر وجود دارد.
سالم و موفق باشید.