در این پروژه از سایت اِمیک, با نحوه کار و راه اندازی سنسور PIR با استفاده از برد آردوینو UNO آشنا خواهید شد. این سنسور در بهینه سازی انرژی در ساختمانها، دزد گیرها و موارد دیگر کاربرد دارد. قبلا این سنسور را با استفاده از میکروکنترلر AVR نیز راه اندازی کرده بودیم که می تونید این پست را در اینجا مشاهده کنید.
سنسور PIR به هر جسم متحرکی که داری حرارت باشد واکنش نشان می دهد, این جسم متحرک می تواند انسان یا حیوان باشد. حتی شما می توانید برای تست این پروژه یک لیوان آب جوش را در بالای این سنسور حرکت داده و شاهد روشن و خاموش شدن LED به کار رفته در این پروژه باشید.
به جای LED می توانید از یک بازر(Buzzer) استفاده کنید, در صورت استفاده از بازر به جای روشن و خاموش شدن LED در صورت حرکت جسم متحرک, صدای بوق را خواهید شنید.
برخی از کاربردهای سنسور PIR :
- سیستم های امنیتی و ساخت دزدگیر
- روشن نمودن چراغ های منازل ، پارگینگ ، ساختمان و… به صورت هوشمند و بر اساس تشخیص حرکت
- کنترل و اتوماسیون صنعتی
- سیستم های هشدار دهنده
- درب های اتوماتیک
- نور پردازی هوشمند
- و …
معمولا بجای استفاده از سنسور PIR از ماژول ان استفاده می شود که این ماژول کار را برای راه اندازی سنسور PIR بسیار راحت می کند. در تصویر بالا ماژول سنسور PIR را مشاهده می کنید, که ما هم در این پروژه از ماژول ان استفاده خواهیم کرد. در ادامه با این ماژول بیشتر اشنا خواهید شد.
در پشت ماژول سنسور PIR یک جامپر قرار دارد، که دارای دو وضعیت L و H می باشد. در وضعیت L با تست سنسور متوجه خواهید شد که اگر دستتان را به طور پیوسته در جلوی سنسور به حرکت در آورید، خروجی به طور پیوسته High (یک منطقی) نخواهد بود و هر یک یا دو ثانیه LOW و High خواهد شد. که به این حالت اصطلاحا “non-retriggering” می گویند.
در وضعیت H با ایجاد حرکت پیوسته در جلوی سنسور، خروجی نیز به طور پیوسته High خواهد ماند. که به این حالت اصطلاحا “retriggering” می گویند.
تنظیم حساسیت، فاصله قابل تشخیص توسط ماژول را تنظیم می کند که عددی حدودا بین 3 الی 7 متر خواهد بود.
تنظیم زمان، زمان High بودن خروجی پس از تشخیص حرکت را بین 5 الی 300 ثانیه تنظیم می کند.
شماتیک پروژه راه اندازی سنسور PIR با آردوینو UNO :
اتصال ماژول PIR به برد اردوینو بسیار ساده می باشد. با توجه به اینکه خروجی این ماژول به صورت دیجیتال است (یا صفر منطقی است یا یک منطقی)، لذا تنها کاری که لازم است انجام دهیم این است که همواره بررسی کنیم پین خروجی ماژول در چه وضعیتی قرار دارد. در ادامه شماتیک این پروژه را مشاهده می کنید:
عملکرد این پروژه به این صورت است که برد اردوینو همواره خروجی ماژول را چک کرده و در صورتی که خروجی ماژول یک منطقی یا High شود, LED متصل به پین 0 از برد اردوینو روشن می شود و همچنین روی LCD کاراکتری عبارت “Motion detected” نمایش داده می شود.
در صورتی که سنسور حرکتی را تشخیص ندهد خروجی ان صفر یا Low خواهد بود که در این حالت LED خاموش و روی LCD کاراکتری متن “motionless” نمایش داده می شود.
پتانسیومتر RV1 برای تنظیم کنتراست LCD کاراکتری می باشد, در صورتی که پتانسیومتر نداشتید می تونید پین 3 ال سی دی کاراکتری را به زمین (منفی تغذیه) متصل کنید.
برنامه :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
//////// WWW.EMIC.IR //////// #include <LiquidCrystal.h> /* lcd معرفي کتابخانه */ /*متصل شود LCD تابع زیر مشخص می کند که کدام پین های اردوینو به*/ LiquidCrystal lcd(13, 12, 11, 10, 9, 8, 7); void setup() { pinMode(A0, INPUT); /*اردوینو A0 ورودی کردن پین*/ pinMode(0, OUTPUT); /*خروجی کردن پین 0 اردوینو*/ lcd.begin(16, 2); /*(LCD بررسي اتصال) LCD پيکره بندي */ } void loop() { int PIR ; /*int از نوع PIR تعريف متغير با نام*/ PIR = digitalRead(A0); /*اردوینو می کنیم A0 را برابر پین PIR متغیر*/ digitalWrite(0, PIR); /*قرار داده ایم PIR پین 0 از برد اردوینو را برابر با متغیر*/ lcd.clear(); /* LCD پاک کردن */ lcd.setCursor(0, 0); /* رفتن به ستون 0 و سطر 0 */ if (PIR == 1) /*(می شود if می شود (یا به عبارت دیگر در صورتی که سنسور حرکتی را حس کرد برنامه وارد شرط if برابر 1 منطقی شد وارد شرط PIR در صورتی که متغیر*/ { lcd.print("Motion detected"); /*روی ال سی دی Motion detected نوشتن عبارت*/ } else { lcd.print("motionless"); /*را روی ال سی دی نمایش می دهد motionless برابر 1 نبود متن PIR در صورتی که متغیر*/ } delay(300); /*ايجاد تاخير به مدت 300 ميلي ثانيه */ } |
توضیحات قسمت های مهم برنامه نوشته شده, اگر سوالی داشتید می تونید در قسمت نظرات مطرح کنید.
کلیپ تست عملی پروژه :
پسورد فایل زیپ : www.emic.ir
نظر یادتون نره…
سلام مجدد….شما می دونین که چطور باید فهمید اردوینو ما خوب است یا خراب؟
سلام, یه برنامه ساده مثل چشمک زن باهاش انجام بدید اگر درست کار کرد خوب بردتون سالمه
ببخشید من یه اردوینو نانو دارم و طبق تصویر قطعات را به هم وصل کردم و برنامه رو روش اپلود کردم ولی نشد و نمی دونم چرا هر سنسوری رو بهش وصل می کنم و برنامشو روش اپلود می کنم بازم کار نمی کنه.شما می دونید مشکل از کجاست؟
من تا حالا با برد اردوینو نانو کار نکردم و نمیدونم پایه های اون به چه صورت هست ولی شما باید بررسی کنید که پایه هایی که در پروژه بالا استفاده شدن در برد نانو وجود داشته باشند. در واقع شما باید با توجه به نوع بردی که استفاده می کنید در صورت نیاز برنامه را تغییر دهید.
سلام ممنون از آموزشتون
خروجی ماژول آنالوگ هست ک به A0 وصل کردین ؟!
سلام, خیر دیجیتال هست پین A0 اردوینو می تواند ورودی دیجیتال هم باشد
سلام خسته نباشید،فایل اردویینو رو با پسوند هگز باید ذخیره کنیم برای استفاده در پروتئوس؟به من اخطار مده و میگه فرمتش اشتباهه
ممنون میشم اگه راهنماییم کنین
سلام, برای شبیه سازی در پروتئوس بله باید از فایل هگز استفاده کنید. وقتی که در محیط اردوینو روی Verify کلیک می کنید, فایل هگز برنامه تولید می شود و از قسمت پیام های پایین صفحه (همون کادر مشکی انتهای برنامه) می تونید ادرس محل ذخیره فایل هگز را پیدا کنید و برای شبیه سازی استفاده کنید.
سلام وقتتون بخیر..یه سوالی داشتم .میخوام با سنسور حرکتی پانزده تا ال ای دی رو روشن کنم . ولی میخوام معکوس عمل کنه یعنی وقتی که حرکتی رو سنس کرد ال ای دی ها خاموش بشن..اولش اینکه با اردوینو این امکان وجود داره یا نه..و اگر شد ایا یک برد اردوینو میتونه پانزده تا چراغ رو ساپورت بکنه یا نه…/..ممنون میشم راهنمایی کنین.
سلام, بله می تونید با برد اردوینو انجام بدید. به راحتی با استفاده از یک ترانزیستور در حالت سوئیچینگ که به پین مورد نظرتون در برد اردوینو متصل است می تونید ledها را روشن کنید
سلام
فقط یه چیز دیگه که اون ۳۰۰ میلی ثانیه مال چیه ال سی دی یا مدت زمان فعال بودنِ خروجی سنسور یا یه چیز دیگه
من به دنبال تنظیم کردن زمان فعال شدن ال ای دی هستم که رله وصل کنم بهش و آژیر رو به صدا در بیارم؛ چون اون پتانسیومتر های روی خود ماژول زمان کمی داره و برای من جوابگو نیست
میشه یه خط برنامه دیگه روش تنظیم کرد تا زمان رو با میکرو تنظیم کنم؟؟
ممنون میشم به ایمیلم ارسال کنید با تشکر از سایت شفافتون 😉راهنمایی کنید…
حتما
یاعلی
سلام, delay برای جلوگیری از چشمک زدن متن روی lcd هست. شما می تونید در برنامه تعریف کنید که بعد از تشخیص حرکت یک پین از میکرو که متصل به یک رله هست را یک کند تا اژیر شما فعال شود. و برای خاموش شدن ان هم می تونید یک زمان مشخص تعریف کنید یا اینکه بصورت دستی با فشار دادن کلید خودتون اژیر را قطع کنید.
با سلام
امیک،،راهنمایی شیک…
شما یه سایتی رو برا من بگیر بیارین که این قدر واضح و شفاف همه چیز رو بگه!!
شماتیک نقشه رو داده؛
توضیح کامل رو داده؛
کد رو بدون قرار دادن توی پی دی اف و یه سری چیزای دیگه که باعث سر درگُمی کاربر بشه، نوشته،
حتی معنیه کد رو نوشته؛ بابا از این دیگه بهتر…؟
تازه ب ای مبتدیان هم خوبه که اول از راه آسون وارد الکترونیک و آردوینو بشن نه این باباشون سوخته شه تا یه چیزی یاد بگیرن…
از امیک ممنون…
یاعلی