آردوینو آردوینو Arduino Uno آموزش آردوینو پروژه های آردوینو

آموزش ساخت چشمی راه پله با آردوینو و سنسور تشخیص حرکت PIR

stairs-motion-sensor-with-arduino-and-pir-hc-sr501-module-digispark
نوشته شده توسط پریسا پوربلورچیان

در اکثر مکان های تجاری، اداری و مسکونی متوجه سنسورهای چشمی شده اید، که با ورود شما به محل چراغ روشن شده و پس از مدت زمان کوتاهی خاموش می‌شود. کافیست کمی حرکت کنید تا مجدد چراغ روشن شود. در این آموزش قصد داریم ساخت چشمی تشخیص حرکت را با آردوینو یاد بگیریم. در ادامه پروژه چشمی راه پله سنسور PIR با مرجع تخصصی آردوینو به زبان فارسی، دیجی اسپارک همراه باشید.

 


عملکرد سنسورهای تشخیص حرکت


تشخیص دهنده های حرکتی دارای یک چشم الکترونیک کوچک در ساختار خود هستند که اشعه اینفرارد را تشخیص میدهند یا به عبارتی امواج گرمایی که از اشیا تابش میکند را دریافت می‌کند. هدف اصلی سنسورهای تشخیص حرکت، ارسال فرمان است حال این فرمان میتواند چراغ باشد، زنگ آلارم و … در برخی از سیستم های امنتی در صورت فعال بودن سنسورهای حرکتی امکان ثبت و ضبط وقایع فراهم است. سنسورهای حرکتی حالت Stand Guard هستند و در مقابل حضور انسان، باز شدن درب و حتی پنجره ها واکنش نشان میدهند. الیته در این مورد میتوان بر اساس زاویه دید هر سنسور، جهت استفاده در مکان های مختلف انتخاب دقیق تری داشت. به عنوان مثال میتوانید سنسور حرکتی را در ورودی درب قرار داده و پس از تشخیص فرد در محل از طریق ایمیل، تلگرام و حتی اسمس به شما اطلاع دهد. یکی از مهم ترین دلیل استفاده از سنسورهای حرکتی صرفه جویی در مصرف انرژی است و تنها در زمانی که نیاز به آن داریم، فعال است.

 


انواع سنسورهای حرکتی


سنسورهای حرکتی دارای چند مدل مختلف است:

  • مادون قرمز پسیو یا غیرفعال Passive Infrared
  • آلتراوسونیک Ultrasonic
  • لرزشی Vibration
  • مایکرویو Microwave

در این آموزش ما از سنسور مادون قرمز پسیو یا همان PIR استفاده می‌کنیم که دارای مدل های مختلفی است. مانند HR501, HR502, PIR602 و …. مدل های دیگر که از طریق لینک زیر میتوانید بررسی و انتخاب کنید.

خرید سنسور مادون قرمز

 


برد آردوینو Arduino


میکروکنترلرها به دلیل طراحی منحصر به فرد در ساختار و پشتیبانی از پروتکل های I2C, SPI و … در دنیای الکترونیک بسیار محبوب و کاربردی هستند. دسترسی به پایه های I/O, GPIO در یک برد در کنار هم، تفاوت در ظاهر و تولید در ابعاد های کوچک نقش پررنگی در ساخت گجت های الکترونیکی ایفا کرده است. برد آردوینو میکروکنترلری با قابلیت دسترسی به پورت های دیجیتال و آنالوگ و پروتکل‌های I2C و SPI است. در این آموزش از آردوینو Arduino مدل UNO استفاده شده است. برد آردوینو Arduino دارای تراشه Atmega328P است و با در اختیار داشتن پایه‌های کنترلی آنالوگ و دیجیتال I/O میتوان با سنسورهای مختلف ارتباط برقرار کرد. با در نظر گرفتن پروتکل ارتباطی، آن‌ها را راه اندازی و کدنویسی کرد. محیط برنامه نویسی IDE Arduino است که نباز به دانش برنامه نویسی C++ خواهد داشت. با انتقال کد به محیط برنامه نویسی و کامپایل کد پروژه آماده اجرا خواهد بود. مراحل نصب نرم افزار آردوینو Arduino در آموزش زیر نوشته و منتشر شده است. در صورتیکه تا به حال با برد آردوینو کار نکرده اید، ابتدا آموزش زیر را مطالعه و سپس مراحل بعدی را اجرا کنید. آموزش کار با برد آردوینو Arduino و نصب نرم افزار Arduino IDE همچنین به صورت مستقیم میتوانید نرم افزار آردوینو را از طریق لینک زیر دانلود کنید. مراحل نصب نرم افزار دقیقا مشابه دیگر نرم افزارهای کامپیوتری است. لینک دانلود نرم افزار آردوینو

 


سنسور PIR تشخیص حرکت


سنسورهای مادون قرمز جهت تشخیص امواج مادون قرمز ساطع شده از اجسام طراحی شده است و از دو قسمت Pyroelectric Sensor و  Fresnel lens تشکیل شده است. پایروالکترونیک در از دو مستطیل در ساختارش ساخته شده که به امواج مادون قرمز اجازه ورود می‌دهد و در پشت آن دو الکترود حسگر مادون قرمز قرار دارد. سنسور تشخیص حرکت HR501 دارای مصرف انرژی بسیار کم، قیمت مناسب و زاویه دید پهن است. ولتاژ کاری سنسور  ولت است. ساختار ماژول PIR به صورت زیر است:

 

سنسور از سه پایه OUT, VCC, GND تشکیل شده است. از رگولاتور داخلی ۳٫۳ ولت DC و دیود محافظ در ساختارش استفاده شده و دارای دو مولتی ترن است.

  • Sensitivity: جهت تنظیم حساسیت سنسور که چرخش در جهت ساعتگرد رنج حساسیت را  افزایش داده و چرخش در جهت پادساعتگرد کاهش میدهد.
  • Time Delay:  امکان تغییر زمان تاخیر که جرخش در جهت ساعتگرد افزایش و چرخش در جهت پادساعتگرد کاهش می‌یابد.

 


اتصالات سنسور PIR


اتصال سنسور تشخیص حرکت PIR به برد های آردوینو و یا سری ESP8266 به صورت زیر است.

 


کد آردوینو سنسور PIR


جهت اجرای برنامه به نرم افزار آردوین نیاز داریم. مراحل نصب نرم افزار آردوینو در لینک زیر آموزش داده شده است. در صورتیکه نمیدانید ابتدا لینک را مطالعه کرده و سپس یک تب جدید در نرم افزار باز کرده و کد را انتقال دهید.

آموزش کار با برد آردوینو Arduino و نصب نرم افزار Arduino IDE

int relayPin = 3; 
int pirSensorPin = 2; 
int pirState = true; 
int val = 0; 
int minimummSecsLowForInactive = 5000; 

long unsigned int timeLow;
boolean takeLowTime;
 

int calibrationTime = 30;
 
void setup() {
pinMode(relayPin, OUTPUT);
pinMode(pirSensorPin, INPUT); 
 
Serial.begin(9600);
 

Serial.print("calibrating pir sensor ");
for(int i = 0; i < calibrationTime; i++){
Serial.print(".");
delay(100);
}
Serial.println(" done!!!");
Serial.println("sensor active");
delay(50);
}
 
void loop(){
  
val = digitalRead(pirSensorPin);
if (val == HIGH) { 
  
digitalWrite(relayPin, LOW); 
if (pirState) {

pirState = false;
Serial.println("Motion detected!");

delay(100);
}
takeLowTime = true;
} 

else {
digitalWrite(relayPin, HIGH); 
 
if (takeLowTime){
timeLow = millis();
takeLowTime = false;
}
 
if(!pirState && millis() - timeLow > minimummSecsLowForInactive){
pirState = true;
Serial.println("Motion ended!");
delay(50);
}}}

 در این مرحله اتصالات را انجام داده و جهت کامپایل برنامه بر روی برد آردوینو ابتدا Verify و سپس Upload را انتخاب کنید. با کامپایل برنامه سریال مانیتور را از گوشه سمت راست نرم افزار انتخاب کنید.

 در ابتدا سنسور کالیبره شده و پیام فعال شدن سنسور PIR نمایش داده می‌شود. سپس با قرار گرفتن دست در مجاورت سنسور، تشخیص حرکت صورت گرفته و پیغام Motion Detected نمایش داده می‌شود. جهت اتصال لامپ، آلارم و یا هر خروجی دیگری جهت اطلاع از عملکرد سنسور، از یک رله استفاده می‌کنیم. رله نقش خروجی داشته و قابلیت اتصال لامپ، زنگ و یا هر وسیله دیگری را دارد و به عنوان هشدار در مدار عمل خواهد کرد.

 


روش استفاده از رله


رله نوعی کلید الکترونیکی عملگر است که به دو حالت خاموش و روشن میتوانید آنرا تغییر وضعیت دهید. توسط رله می‌توانید جریان را عبور و یا قطع کنید. تمامی ماژول های رله در تعداد پایه‌های خروجی برابر است و مدل‌های مختلفی مانند رله تک کانال، رله دو کانال، چهار کانال و هشت کانال در بازار موجود است. مشخصا اتصال پایه‌های سنسور به پایه‌های ورودی رله بسیار ساده است. پایه‌هایی که با IN مشخص شده است مستقیم به پایه‌های برد میکروکنترلر متصل می‌شود. در برد آردوینو UNO, Meg2560 از پایه های دیجیتال برای اتصال به IN رله میتوان استفاده کرد. در برد Nodemcu و Wemos از GPIO ها مانند D1, D2 میتوان استفاده کرد.

به همین ترتیب می‌توانید اتصالات ورودی را انجام داده و تغذیه ۵ ولت و GND را از برد میکروکنترلر از جمله آردوینو، Nodemcu, Wemos تامین کنید. هر رله دارای سه پایه NO, COM و NC است.

  • پایه COM: پایه مشترک Common است.
  • پایه NC به معنای نرمالی کلوز یا همان پیش فرض بسته است و زمانی استفاده می‌شود که بخواهید رله به صورت پیش فرض بسته باشد. به این صورت که جریان در مدار وجود دارد و در صورت ارسال سیگنال از آردوینو مدار باز شده و جریان را متوقف می‌کند.
  • پایه NO به معنای نرمالی اوپن یا همان پیش فرض باز است و به این معنی که رله همیشه باز است و مدار باز بوده و پس از ارسال سیگنال از آردوینو مدار بسته خواهد شد.

 

 


تحلیل کد آردوینو Arduino


در ابتدا برای هر ورودی و خروجی در برنامه پایه ای را انتخاب و به آن نسبت می‌دهیم.

int relayPin = 3; 
int pirSensorPin = 2; 
int pirState = true; 
int val = 0; 
int minimummSecsLowForInactive = 5000; 

long unsigned int timeLow;
boolean takeLowTime;
 

int calibrationTime = 30;

در مرحله بعد تعریف پایه ها و نقش آن ها در برنامه و مدت زمان کالیبره شدن سنسور را تعیین می‌کنیم:

void setup() {
pinMode(relayPin, OUTPUT);
pinMode(pirSensorPin, INPUT); 
 
Serial.begin(9600);
 

Serial.print("calibrating pir sensor ");
for(int i = 0; i < calibrationTime; i++){
Serial.print(".");
delay(100);
}
Serial.println(" done!!!");
Serial.println("sensor active");
delay(50);
}

در مرحله آخر نوبت به فعال سازی سنسور و فرمان به خروجی می‌رسد. یک حلقه در برنامه تعریف شده و سپس با فعال شدن سنسور رله HIGH شده و پس از چند ثانیه رله غیرفعال LOW می‌شود.

void loop(){
  
val = digitalRead(pirSensorPin);
if (val == HIGH) { 
  
digitalWrite(relayPin, LOW); 
if (pirState) {

pirState = false;
Serial.println("Motion detected!");

delay(100);
}
takeLowTime = true;
} 

else {
digitalWrite(relayPin, HIGH); 
 
if (takeLowTime){
timeLow = millis();
takeLowTime = false;
}
 
if(!pirState && millis() - timeLow > minimummSecsLowForInactive){
pirState = true;
Serial.println("Motion ended!");
delay(50);
}}}

 


ساخت چشمی با برد ESP8266


بردهای سری ESP8266 به دلیل برخورداری از تراشه وای فای در پروژه ها نقش مهمی در انتقال و دریافت دیتا ایفا می‌کنند. در این آموزش به کمک برد آردوینو یک مدار چشمی طراحی کردیم. در صورتیکه بخواهیم پروژه با بردهای ESP8266 مانند برد Wemos d1 mini,  برد Nodemcu اجرا شود، روند اجرای پروژه کاملا یکسان است. تنها نکته ی مهم انتخاب پایه های GPIO برای ورودی و خروجی است. به عنوان مثال در این پروژه سنسور تشخیص حرکت نقش ورودی input داشته و رله نقش خروجی Outpu دارد. حال در بردهای سری ESP8266 پایه ها از D0 تا D8 تعریف می‌شود:

 

با مشخص کردن پایه های GPIO، میتوانید در تعریف پایه های برنامه در کد آردوینو از D0 تا D8 استفاده کنید. به عنوان مثال پایه دیتا سنسور PIR را به D1 متصل کرده و پایه دیتا رله را به D2 متصل کنید. روند کدنویسی فقط در تعریف پایه ها متفاوت است که به صورت زیر خواهد بود:

int relayPin = D2; 
int pirSensorPin = D1;

 

 


کد آردوینو ESP8266


بر اساس نوع برد انتخابی، از منو Tools نوع برد را انتخاب کنید. Wemos d1 mini  و یا Nodemcu سپس بادریت را مشخص کرده و با اعمال تغییرات در کد جدید برنامه را آپلود کنید. کد برنامه بر پایه برد ویموس و یا Nodemcu در ادامه ضمیمه شده است. کد را کپی و به نرم افزار آردوینو انتقال دهید.

int relayPin = D2; 
int pirSensorPin = D1; 
int pirState = true; 
int val = 0; 
int minimummSecsLowForInactive = 5000; 

long unsigned int timeLow;
boolean takeLowTime;
 

int calibrationTime = 30;
 
void setup() {
pinMode(relayPin, OUTPUT);
pinMode(pirSensorPin, INPUT); 
 
Serial.begin(9600);
 

Serial.print("calibrating pir sensor ");
for(int i = 0; i < calibrationTime; i++){
Serial.print(".");
delay(100);
}
Serial.println(" done!!!");
Serial.println("sensor active");
delay(50);
}
 
void loop(){
  
val = digitalRead(pirSensorPin);
if (val == HIGH) { 
  
digitalWrite(relayPin, LOW); 
if (pirState) {

pirState = false;
Serial.println("Motion detected!");

delay(100);
}
takeLowTime = true;
} 

else {
digitalWrite(relayPin, HIGH); 
 
if (takeLowTime){
timeLow = millis();
takeLowTime = false;
}
 
if(!pirState && millis() - timeLow > minimummSecsLowForInactive){
pirState = true;
Serial.println("Motion ended!");
delay(50);
}}}

 

 


وسایل مورد نیاز


سنسور تشخیص حرکت PIR

برد آردوینو Arduino

رله Relay

کابل فلت

 

 


جمع بندی لیدی پای


با استفاده از بردهای آردوینو و یا سری بردهای ESP8266 مثل Nodemcu, Wemos D1 mini و یک سنسور مادون قرمز پسیو با استفاده از این کد آردوینو میتوانید یک مدار چشمی تشخیص حرکت بسارید و در محل کار، منزل و راه پله ها به راحتی قابل استفاده است. در انتخاب نوع سنسور PIR عواملی مثل زاویه دید سنسور، ولتاژ کاری، پشتیبانی از میکروکنترلرها، امکان تنظیم حساسیت و یا زمان تاخیر بسیار مهم و وابسته است. مدت زمان فعال بودن رله در کد آردوینو قابل تنظیم است و با توجه به زمان مورد نظر خود میتوانید آن را تغییر دهید.

 


دیگر آموزش‌های مرتبط با سنسور PIR


معرفی سنسور PIR چگونگی کار و آموزش راه اندازی با برد آردوینو

طراحی و پیاده سازی سنسور راه پله هوشمند بدون آردوینو و برنامه نویسی

طراحی و پیاده سازی سیستم هشدار قطعی برق آسانسور در زمان حضور انسان

پروژه‌ی سیستم تشخیص حرکت انسان با میکروپایتون و رزبری پای پیکو

آموزش ساخت دوربین مخفی امنیتی با برد ESP32-Cam و سنسور PIR

طراحی و پیاده سازی سیستم خوش آمدگویی به کمک آردوینو و DFPLAYER

 

چنانچه در مراحل راه اندازی و انجام این پروژه با مشکل مواجه شدید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریع‌ترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در کدها و یا مراحل اجرایی وجود دارند می‌توانید از همین طریق اطلاع رسانی کنید.

 

در پایان نظرات و پیشنهادات خود را با ما درمیان بگذارید و با اشتراک گذاری این آموزش در شبکه های اجتماعی , از وبسایت دیجی اسپارک حمایت کنید.

 

 

درباره نویسنده

پریسا پوربلورچیان

تولید کننده محتوا / کارشناس IOT

زندگی یعنی پژوهش و فهمیدن چیزی جدید

تلاشم بر این است تجربیاتم در زمینه IOT‌ را به بهترین شکل با شما در میان بگذارم.

تبادل نظر و رفع عیب با ثبت دیدگاه

۱۶ دیدگاه

  • عرض ادب و احترام
    ببخشید در قسمتی که Void loop نوشته شده حین کامپایل این ارور داده میشه :

    a function-definition is not allowed here before ‘{‘ token

    ممنون میشم راهنمایی بفرمایید

    • با سلام
      انتخاب این مورد دلخواه است و از آداپتور ۹ / ۱۲ ولت و یا برق شهری میتوانید استفاده کنید.

  • سلام خسته نباشید میخواستم بدونم میشه جای رله از فرستنده رادیوی استفاده کرد؟ البته امتحان کردم ولی متاسفانه جواب نداد برای من نکته خاصی داره که باید انجام بشه تا جواب بده

  • سلام
    هنگامی که چشمی تشخیص حرکت میدهد در خروجی ۳٫۳v خواهیم داشت. چیزی که نیاز من هست اینکه این ولتاژ را به ۱۲V افزایش بدهم. به همین منظور ماژول افزاینده ولتاژ با تراشه XL6009 مبدل Dc to Dc Converter Booster را خریداری کردم اما بعد از اتصال می بینم که افزایش اتفاق نمی افتد. لطفا” راهنمایی بفرمائید آیا من ماژول افزاینده اشتباه استفاده کرده ام ؟ یا نکته دیگری هست و راهکار برای رسیدن به هدف چیست.

    بسیار متشکرم

    • با سلام
      روشی که اقدام کرده اید، کاملا اشتباه است. ولتاژ کاری سنسور ۳٫۳ تا ۵ ولت است و قابل تغییر نیست.
      در آموزش روش استفاده از رله و اتصال هر خروجی به رله توضیح داده شده است. مطالعه کنید.

  • سلام هنگامی که چشمی تشخیص حرکت میدهد در خروجی ۳٫۳v خواهیم داشت. چیزی که نیاز من هست اینکه این ولتاژ را افزایش بدهم به گونه ای که بتواند یک آژیر بلندگو دزدگیر بیرونی ( دزدگیر های معمولی کلاسیک ) را به صدا درآورد. راهنمایی می فرمائید چطور این کار امکان پذیر است با چه تجهیزات اضافه و اتصالاتی.

    متشکرم

    • با سلام
      دو مولتی ترن یکی برای تنظیم شدت حساسیت و دیگری برای تنظیم زمان تاخیر بر روی ماژول قرار گرفته شده است. بایستی تنظیم کنید. همچنین این سنسور به نور، گرما، نویز دریافتی از مودم هم بسیار حساس است.

  • سلام .ممنون که دانسته هاتون رو با ما به اشتراک میگذارید.یه انتقادی داشتم،حیف این مطالب آموزنده .جملات بهم ریختن کاش این مشکل را حل می کردین.