به آموزش آردوینو ( قسمت بیست و ششم – سنسور حرکت PIR ) خوش اومدید.
بازبینی اول : در تاریخ ۱۴۰۰/۰۵/۲۹ انجام شد!
ماژول PIR مدل HC501
نحوه عملکرد سنسور PIR به این صورت است که هیچ اشعه ایی را ساتع نمی کند و تنها از طریق جذب اشعه مادون قرمز کار می کند.
نکته : این ماژول برد ۳ تا ۷ متری دارد.
نحوه کار سنسور PIR به گونه ایی است که حرارتها را تشخیص می دهد اما تنها به حرارت های بدن انسان و حیوان واکنش نشان می دهد. به طور مثال اگر قصد دارید برای بهینه سازی مصرف انرژی در بخش کنترل انرژی ساختمان در راه پله ساختمانتان دوربین مداربسته مجهز به سنسور PIR نصب کنید. کمک می کند که در زمان رفت و آمد از راه پله چراغ ها روشن شوند.
نحوه کار سنسور تشخیص حرکت PIR
به محض اینکه سنسور PIR متوجه تغییری در محیط بشود مثلا یک جسم گرم مثل یک گربه از جلوی سنسور PIR عبور کند ،ابتدا نصف اول سنسور متوجه این تغییر میشود و خروجی الکترود خودش را منفی (یا مثبت) میکند و وقتی اون جسم گرم از قسمت مستطیل دوم سنسور PIR عبور میکنه دقیقا برعکس عمل میکند و خروجی الکترود را مثبت (یا منفی ) میکند.
روی هر ماژول HC-501 دو تا پتانسومتر زرد رنگ وجود دارد:
پتانسیومتر اول Sensivity یا حساسیت:
با چرخاندن این پتانسومتر میتوانیم فاصله تشخیص حرکت ماژول HC-501 بین ۳ تا ۷ متر تغییر بدهیم.
پتانسیومتر دوم Time یا زمان:
با چرخاندن این پتانسومتر مشخص میکنیم که خروجی تا چه زمانی HIGH باقی بماند.این زمان را میتوانیم بین ۳ تا ۳۰۰ ثانیه قرار بدهیم.
هر ماژول HC-501 یک جامپر دارد.این جامپر دو حالت H و L دارد:
حالت H : اگر جامپر را در این حالت قرار بدهید خروجی دیجیتال تا زمانی HIGH باقی میماند که حرکت جسم را تشخیص بدهد.
حالت L : اگر جامپر را در حالت L قرار بدهید خروجی تا زمانی HIGH باقی میماند که شما با پتانسومتر Time برایش مشخص کردید.
آرایش پایه های ماژول HC-521
VCC : برای تغذیه ماژول میتوانید از ولتاژ بین ۴.۵ ولت تا ۱۲ ولت استفاده کنید.ما توی این پروژه از ولتاژ برد آردوینو که V5+ است استفاده میکنیم.
GND : این پایه ماژول به زمین مشترک مدار متصل میکنیم.
OUTPUT : این پایه خروجی دیجیتال ماژول هست که به محض اینکه متوجه حرکت جسمی بشه از حالت LOW به HIGH تغییر وضعیت میدهد.
پیاده سازی عملی پروژه
مانند شکل زیر قطعات را به یکدیگر متصل کنید.
OUTPUT سنسور را به پایه ۱۰ آردوینو و LED ها را به پایه ۲ تا ۸ متصل کنید.
کد های دستوری
پایه های شماره ۲ و ۳ و ۴ و ۵ و ۶ و ۷ و ۸ و ۹ و ۱۳ از برد آردوینو یونو را برای LED ها تعیین میکنیم.
پایه شماره ۱۰ برد آردوینو را برای اتصال به پایه DATA سنسور تشخیص حرکت PIR در نظر گرفتیم.
یک متغیر از نوع int بنام val برای ذخیره کردن وضعیت ماژول تشخیص حرکت تعریف کردیم.
int ledPin = 13;
int ledPins[] = {2,3,4,5,6,7,8,9};
int inputPin = 10;
int pirState = LOW;
int val = 0;
در تابع setup با استفاده حلقه for تمام پایه های LED ها را به عنوان خروجی تعریف میکنیم.
void setup()
{
int index;
for(index = 0; index <= 7; index++)
{
pinMode(ledPins[index],OUTPUT);
}
pinMode(ledPin, OUTPUT);
pinMode(inputPin, INPUT);
Serial.begin(9600);
}
اگر پایه HIGH بود معنیش این است که یک جسمی از جلوی سنسور حرکت کرده و با دستور Serial.println یک پیغام توی سریال مانیتور چاپ میکنیم و بعدش با تابع pingPong یک افکت مثل پینگ پونگ را روی LED ها میفرستیم.
void loop(){
val = digitalRead(inputPin);
if (val == HIGH)
{
digitalWrite(ledPin, HIGH);
Serial.println("Motion detected!");
pingPong();
}
else
{
digitalWrite(ledPin, LOW);
}
}
در تابع pingPong با دو حلقه for ال ای دی ها را در جهت رفت و برگشت روشن میکنیم.
void pingPong()
{
int index;
int delayTime = 100;
for(index = 0; index <= 7; index++)
{
digitalWrite(ledPins[index], HIGH);
delay(delayTime);
digitalWrite(ledPins[index], LOW);
}
for(index = 7; index >= 0; index--)
{
digitalWrite(ledPins[index], HIGH);
delay(delayTime);
digitalWrite(ledPins[index], LOW);
}
}
کد کامل پروژه
int ledPin = 13;
int ledPins[] = {2,3,4,5,6,7,8,9};
int inputPin = 10;
int pirState = LOW;
int val = 0;
void setup()
{
int index;
for(index = 0; index <= 7; index++)
{
pinMode(ledPins[index],OUTPUT);
}
pinMode(ledPin, OUTPUT);
pinMode(inputPin, INPUT);
Serial.begin(9600);
}
void loop(){
val = digitalRead(inputPin);
if (val == HIGH)
{
digitalWrite(ledPin, HIGH);
Serial.println("Motion detected!");
pingPong();
}
else
{
digitalWrite(ledPin, LOW);
}
}
void pingPong()
{
int index;
int delayTime = 100;
for(index = 0; index <= 7; index++)
{
digitalWrite(ledPins[index], HIGH);
delay(delayTime);
digitalWrite(ledPins[index], LOW);
}
for(index = 7; index >= 0; index--)
{
digitalWrite(ledPins[index], HIGH);
delay(delayTime);
digitalWrite(ledPins[index], LOW);
}
}
پایان آموزش آردوینو ( قسمت بیست و ششم – سنسور حرکت PIR )