مقدمه
در این آموزش نحوه استفاده از سنسور PIR را برای تشخیص حرکت می آموزید. در پایان این آموزش خواهید آموخت:
- سنسور حرکتی PIR چگونه کار می کند؟
- نحوه استفاده از سنسور PIR با آردوینو
- نحوه استفاده از سنسور PIR با رزبری پای
سنسور حرکت PIR چگونه کار می کند؟
سنسورهای پسیو مادون قرمز توانایی تشخیص حرکت اشیایی که نور مادون قرمز ساطع می کنند(مانند بدن انسان) را دارند، از این رو استفاده از این سنسورها برای تشخیص حرکت انسان یا در تشخیص حضور در سیستم های امنیتی، بسیار رایج است. راه اندازی و کالیبراسیون این سنسورها چیزی حدود 10 تا 60 ثانیه زمان می برد.
ماژول HC-SR501 یک سنسور کارآمد، ارزان و قابل تنظیم، برای تشخیص حرکت در محیط است. اندازه کوچک و طراحی فیزیکی این ماژول، اجازه استفاده راحت از آن را در پروژه های مختلف، به شما می دهد.
خروجی سنسور PIR می تواند مستقیما به یکی از پایه های دیجیتال آردوینو (یا هر میکروکنترلر دیگری) متصل شود. اگر حرکتی تشخیص داده شود، مقدار این پایه “1” می گردد. دو پتانسیومتر پشت برد به شما اجازه می دهد که مقدار حساسیت و زمان تاخیر بعد از حرکت را تغییر دهید.
شما می توانید از این ماژول در سیستم های امنیتی، روشنایی هوشمند، اتوماسیون و … استفاده کنید.
ماژول های PIR مختلفی در بازار وجود دارند که اساس کار همه آنها یکسان است و همگی حداقل دارای سه پایه GND، Vcc و Digital Out هستند. در برخی از این ماژول ها یک لنز توپکی شکل برروی سنسور قرار دارد که زاویه دید سنسور را بهبود می بخشد.
راه اندازی سنسور PIR با آردوینو
سیم بندی
شما میتوانید خروجی سنسور PIR را به هر پایه دیجیتال متصل کنید.
در پشت این ماژول یک جامپر وجود دارد اگر جامپر را در موقعیت L قرار دهیم هنگام تشخیص حرکت خروجی سنسور تغییر می کند(toggle می شود)، اگر جامپر در وضعیت H باشد خروجی تا موقع تشخیص حرکت High می ماند، که به این وضعیت non-retriggering می گویند.
قرار دادن جامپر در وضعیت H باعث می شود در صورت تشخیص حرکت خروجی سنسور HIGH شود و بعد از پایان حرکت LOW گردد، این سنسور، تایمر را هر بار که حرکت تشخیص داده شد، خاموش می کند. این حالت بعنوان مثال در تشخیص حضور در اتاق و کنترل نور آن، جایی که نمی خواهید چراغ ها چشمک بزنند، کاربرد دارد. به این وضعیت Retriggering (یا Repeatable trigger)می گویند.
در پشت ماژول 2 پتانسیومتر نیز مشاهده می شود که با تغییر پتانسیومتر SENSITIVITY می توانیم میزان حساسیت سنسور را کم یا زیاد کنیم(چرخش ساعتگرد معادل افزایش حساسیت) و با تغییر پتانسیومتر TIME مدت زمان High بودن خروجی بعد از تشخیص حرکت تغییر می کند.
کد
اگر برای اولین بار است که روی برد آردینو برنامه می ریزید، مراحل زیر را دنبال کنید:
- به آدرس www.arduino.cc/en/Main/Software رفته و نرم افزار IDE را متناسب با سیستم عامل خود دانلود و نصب کنید.
- نرم افزار Arduino IDE را اجرا کنید.نوع آردوینو خود را از پنجره ی Tools و قسمت Board انتخاب کنید.
- پورتی که (COM) آردوینو به آن متصل است را در پنجره ی Tools انتخاب کنید.
- دکمه ی Upload (شکلی که شبیه فلش است) را بزنید تا کد شما روی آردوینو آپلود شود.
- شما با موفقیت کد خود را روی آردوینو ریختید.
/*
PIR HCSR501
modified on 5 Feb 2019
by Saeed Hosseini @ ElectroPeak
Home
*/
int ledPin = 13; // LED
int pirPin = 2; // PIR Out pin
int pirStat = 0; // PIR status
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(pirPin, INPUT);
Serial.begin(9600);
}
void loop(){
pirStat = digitalRead(pirPin);
if (pirStat == HIGH) { // if motion detected
digitalWrite(ledPin, HIGH); // turn LED ON
Serial.println("Hey I got you!!!");
}
else {
digitalWrite(ledPin, LOW); // turn LED OFF if we have no motion
}
}
برای کالیبراسیون مناسب، برای 15 ثانیه لازم است هیچ حرکتی جلوی سنسور اتفاق نیفتد(تا زمانی که پایه 13 (LED روی برد)خاموش شود)، بعد از این زمان سنسور با تصویربرداری از محدوده دید خود می تواند حرکات را تشخیص دهد. هنگام تشخیص حرکت، خروجی سنسور HIGH می شود و در غیر اینصورت خروجی آن LOW می گردد.
راه اندازی سنسور PIR با رزبری پای
سیم بندی
کد
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."
Comments (5)
ببخشید من یه اردوینو نانو دارم و طبق تصویر قطعات را به هم وصل کردم و برنامه رو روش اپلود کردم ولی نشد و نمی دونم چرا هر سنسوری رو بهش وصل می کنم و برنامشو روش اپلود می کنم بازم کار نمی کنه.شما می دونید مشکل از کجاست؟
امکان دارد آردوینو شما دچار مشکل شده است
برای تست میتواند ار برنامه firmata استفاده نمایید
ممنون از راهنمایی شما با تشکر
اگه میشه در مورد خود این برنامه firmata و روش نصبش توضیح بدید با تشکر
سلام
از لینک زیر نرم افزار firmata را بر اساس سیستم عاملتون دانلود کنید و آن را اجرا کنید.
http://firmata.org/wiki/Main_Page
برد آردوینو را به سیستم متصل کنید. در نرم افزار Arduino IDE از قسمت File/Examples/Firmata برنامه StandardFirmata را باز کنید و آن را به روی برد آردوینو آپلود کنید. سپس در نرم افزار firmata دانلود شده می توانید پایه های آردوینو را مستقیما کنترل کرده و تست کنید.
برای اطلاعات بیشتر می توانید از لینک داده شده استفاده کنید.