راه اندازی ماژول سنسور حرکت مادون قرمز HC-SR501
سنسورهای PIR یا Passive Infra-Red برای تشخیص حرکت بر مبنای نور مادون قرمز ناشی از گرمای موجود در محیط کاربرد دارند. از همین رو استفاده از این سنسور ها در سیستم های امنیتی برای تشخیص حرکت انسان و یا ورود های غیر مجاز بسیار رایج می باشد. راه اندازی اولیه و کالیبره شدن این سنسورها چیزی در حدود 10 تا 60 ثانیه به طول می انجامد و در طی این مدت برای تنظیم دقیق نباید در شعاع دید آنها حرکتی انجام پذیرد.
سنسور حرکت مادون قرمز پیروالکتریک HC-SR501 یک ماژول موثر، ارزان قیمت و قابل تنظیم برای تشخیص حرکت در محیط می باشد ، اندازه کوچک و طراحی فیزیکی این ماژول به شما این امکان را می دهد به راحتی از آن در پروژه خود استفاده نمایید.
خروجی این سنسور تشخیص حركت می تواند مستقیما به یکی از پایه های میکروکنترل متصل گردد و در صورت تشخیص هر نوع حرکتی توسط سنسور مقداراین پین یک می گردد. دو پتانسیومتر موجود بر روی برد این امکان را به شما می دهد تا بتوانید حساسیت و زمان انتظار برای ایجاد تاخیر پس از تشخیص یک حرکت را تنظیم نمایید.
- سیستم های امنیتی و ساخت دزدگیر
- روشن نمودن چراغ های منازل، پارکینگ، ساختمان و … به صورت هوشمند و بر اساس تشخیص حرکت
- کنترل و اتوماسیون صنعتی
- سیستم های هشدار
- درب های اتوماتیک
- نور پردازی هوشمند
مشخصات فنی
- ابعاد : تقریبا 3.2cmx2.4cm x1.8cm
- سنسور مادون قرمز با مدار کنترل
- با قابلیت تنظیم حساسیت و زمان انتظار
- محدوده ولتاژ کاری : DC 4.5V- 20V
- جریان drain : <60uA
- محدوده تشخیص : 3–7 متر (قابل تنظیم)
- زاویه تشخیص: 120 درجه
- زمان انتظار برای تشخیص حرکت بعدی: 0.3 تا 18 ثانیه قابل تنظیم
- محدوده تشخیص : <100°
- زمان تاخیر : 5-200S
- دمای کاری : -20-+80°C
- وزن : تقریبا 6 گرم
اتصال به آردوینو
در این مثال نحوه ی اتصال سنسور به آردوینو نشان داده شده است.
int pirPin = 8; int val; void setup() { Serial.begin(9600); } void loop() { val = digitalRead(pirPin); //read state of the PIR if (val == LOW) { Serial.println("No motion"); //if the value read is low, there was no motion } else { Serial.println("Motion!"); //if the value read was high, there was motion } delay(1000); }
در مثال بعدی با نزدیک شدن سوژه به سنسور، چراغ LED هشدار خواهد داد.
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); }
اتصال به برد رسپبری پای
سنسور HC-SR501 مطابق تصویر زیر به رسپبری پای متصل می شود.
در تصویر بالا، پایه های Vcc و Output و Ground به ترتیب به پین های 2 (5V) و 26 (GPIO) و 6 (GND) روی رسپبری پای متصل خواهند شد.
import RPi.GPIO as GPIO #Import GPIO library import time #Import time library GPIO.setmode(GPIO.BOARD) #Set GPIO pin numbering pir = 26 #Associate pin 26 to pir GPIO.setup(pir, GPIO.IN) #Set pin as GPIO in print "Waiting for sensor to settle" time.sleep(2) #Waiting 2 seconds for the sensor to initiate print "Detecting motion" while True: if GPIO.input(pir): #Check whether pir is HIGH print "Motion Detected!" time.sleep(2) #D1- Delay to avoid multiple detection time.sleep(0.1) #While loop delay should be less than detection(hardware) delay
با اجرای برنامه ی فوق باید چیزی شبیه به تصویر زیر به عنوان خروجی مشاهده کنید.
در این مثال نیز سنسور به رسپبری پای متصل شده و با نزدیک شدن سوژه، چراغ LED روشن خواهد شد.
import sys sys.path.append('/home/pi/Adafruit-Raspberry-Pi-Python-Code/Adafruit_CharLCD') from Adafruit_CharLCD import Adafruit_CharLCD lcd=Adafruit_CharLCD() # instantiate LCD Display lcd.clear() from time import sleep import RPi.GPIO as GPIO GPIO.setmode(GPIO.BCM) # set up BCM GPIO numbering # Set up input pin GPIO.setup(21, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) # Set up LED output GPIO.setup(20, GPIO.OUT) # Callback function to run when motion detected def motionSensor(channel): lcd.clear() GPIO.output(20, GPIO.LOW) if GPIO.input(21): # True = Rising global counter counter += 1 lcd.message('Motion Detected\n{0}'.format(counter)) GPIO.output(20, GPIO.HIGH) # add event listener on pin 21 GPIO.add_event_detect(21, GPIO.BOTH, callback=motionSensor, bouncetime=300) counter = 0 try: while True: sleep(1) # wait 1 second finally: # run on exit GPIO.cleanup() # clean up print "All cleaned up."