کنترل تردد و رفت و آمد در محیط چه برای خانه، چه فضای اداری و تجاری از مهمترین پارامترهای قابل اندازه گیری است. در پروژه های IOT توسط سنسورهای مادون قرمز کنترل تردد برای ما قابل انجام خواهد بود. در این پروژه توسط سنسور مادون قرمز تشخیص حرکت PIR عبور و مرور را کنترل کرده و در صورت عبور شخص از مجاورت سنسور پیغام در پلتفرم IOT مبنی بر حضور فرد ارسال خواهد کرد. در ادامه پروژه تردد افراد با PIR501 روش دریافت داده از سنسور و ارسال پیام رشته ای String به پلتفرم اینترنت اشیا را یاد خواهیم گرفت. در ادامه با مرجع تخصصی آموزش پلتفرم Arduino IoT Cloug به زبان فارسی، دیجیی اسپارک همراه باشید.
بخش اول: معرفی Device
در این پروژه از برد وای فای NodeMCU استفاده شده است. برای ارتباط با پلتفرم بایستی در ابتدا نوع دیوایس را بر روی گزینه Third Party انتخاب کرده و سپس از لیست برد ESP8266 را انتخاب کنید. با توجه به اینکه بردهای زیادی از این تراشه استفاده میکنند، دقیقا مدل برد مورد استفاده را انتخاب کنید. در صورتیکه از بردهای دیگری مانند ESP32 و از تولید کننده های دیگر هستید باید اسم برد را در لیست گروه های ESP32, ESP8266 پیدا و انتخاب کنید. اگر برد در لیست نباشد امکان استفاده از آن نیست.
با انتخاب برد که در این قسمت مدل مورد استفاده NodeMCU1.0 است،پس از تایید صفحه ی زیر در بخش Device نمایش داده میشود. وضعیت Status پس از تکمیل اطلاعات در Thing نمایش داده میشود و در صورتیکه در این مرحله برای شما Offline است، ادامه تنطیمات را انجام دهید تا به صورت اتوماتیک Online شود.
بخش دوم: معرفی Thing
در قدم دوم بایستی در منو Thing متغیرهای مورد نیاز برای پروژه تردد افراد با PIR501 را تعریف کنیم. سپس اطلاعات وای فای به همراه Secret Key مخصوص برد NodeMCU را وارد کنید. در این پروژه میخواهیم فقط یک لامپ را توسط دشبورد روشن ON و خاموش OFF کنیم. از قبل بایستی سناریوی برنامه را برای خود مشخص کنیم تا متغیرها را در همان اول برنامه به Sketch معرفی کنیم. در این بخش تنظیمات شبکه را انجام دهید. اطلاعات وای فای مورد استفاده را به همراه Secret Key برد مورد استفاده در برنامه تعریف کنید.
SSID, PASSWORD, Secret Key را در این بخش وارد کنید. Secret Key را قبلا در آموزش مربوط به Thing یاد گرفته ایم. از فایل PDF دانلود شده، قفل را وارد کنید.
بخش سوم: معرفی متغیر Variable
برای استفاده از سنسور تشخیص حرکت در پلتفرم نیاز به تعریف یک متغیر برای وضعیت سنسور تشخیص حرکت PIR داریم. در برنامه نویسی آردوینو برای ورودی بایستی یک وضعیت تعریف کنیم که در هر لحظه وضعیت ورودی فعال است یا غیر فعال. در صورت فعال بودن HIGH یک دستور خاصی را در خروجی اجرا کند. در صورت غیرفعال بودن عمل دیگری در خروجی اجرا شود. برای اینکار بایستی یک متغیر با نام دلخواه برای وضعیت سنسور در ورودی مشخص میکنیم. در صورت نیاز اگر بخواهیم یک رشته پیام برای اعلام وضعیت ورودی در پلتفرم نمایش داده شود، از بخش Thing یک متغیر به برنامه اضافه کنید.
سپس بر روی Save کلیک کنید. متغیر بعدی برای پیام رشته ای است. اگر بخواهیم یک رشته پیام در طول برنامه ارسال و دریافت کنیم،نیاز به تعریف Stirng در برنامه داریم. برای اینکار کافیست از نوع داده String استفاده کنید و یک متغیر به آن نسبت دهید. چون در این بخش میخواهیم یک پیام را برای فعال شدن ورودی و خروجی دریافت کنیم، از متغیر message استفاده میکنیم.
سپس هر دو داده و متفیرها در لیست نمایش داده میشود.
بخش چهارم: ساخت دشبورد Dashboard
در قدم بعدی دشبورد را متناسب با متغیرهایی که تعریف کرده ایم، آماده میکنیم. برای اینکار وارد منو Dashboards شوید. دو متغیر داریم. یک متغیر برای نمایش وضعیت سنسور ورودی تشخیص حرکت است که وضعیت سنسور را به صورت فعال و غیرفعال به ما اعلام میکند. در پلتفرم Arduino IOT Cloud یک Status برای اینکار در دشبورد Dashbaord طراحی شده است. با فراخوانی ویجت استتوس Status میتوانیم به متغیر ورودی تعریف شده pirstate لینک کنیم. ویجت را وارد صفحه کنید.
با کلیک روی این گزینه وارد صفحه تنظیم ویجت شوید.
- یک اسم دلخواه برای Status مشخص کنید.
- به متغیر مورد نظر در اینجا pirstate لینک کنید.
- برای متغیر به دلخواه Lable مشخص کنید.
- سپس تنظیمات را ذخیره کنید.
متغیر دوم پیام رسان است که پیام وضعیت ورودی را در دشبورد پلتفرم نمایش میدهد. برای اینکار از ویجت Messenger استفاده خواهیم کرد.
به همین ترتیب دشبورد آماده است تا برنامه اصلی نوشته شود.
بخش پنجم:نوشتن کد برنامه Sketch
برای نوشتن برنامه تردد افراد با PIR501 سنسور تشخیص حرکت نیاز به تعریف سنسور ورودی و یک خروجی در برنامه برای مشخص شدن وضعیت آن داریم. به این صورت که پس از هر بار تشخیص حرکت یک ال ای دی LED در خروجی تعبیه شده باشد تا با روشن شدن نماد تشخیص حرکت و با خاموش شدن ال ای دی LED نماد عدم تشخیص حرکت را برای ما مشخص کند. به همین صورت بایستی کد برنامه را با دستورات ورودی و خروجی در برنامه مشخص کنیم. در ابتدای Sketch متغیرهایی که در Thing ایحاد کرده ایم، نمایش داده میشود.
String message; bool pirstatus;
سپس برای سنسور PIR و ال ای دی خروجی یک پایه را در نظر میگیریم.
#define led D0 #define pirsensor D3 #define light D4 bool pir;
در نهایت برای سنسور و خروجی شرط نویسی میکنیم، به این صورت که در صورت تشخیص مانع و فعال شدن پایه ورودی، سنسور عمل کرده و خروجی ال ای دی HIGH میشود. همچنین خروجی Status هم فعال شده و در دشبورد نمایش دهد. برای دشبورد یک پیام رسان هم در نظر گرفته شده است که بایستی پیام را چاپ کنید. برای نمایش پیام از داده String استفاده میکنیم. سپس پیام مورد نظر را برای نمایش در دشبورد در این قسمت مینویسیم. همین روش را هم برای غیرفعال شدن تکرار کرده و همه ی مراحل را در یک تابع سفارشی کدنویسی میکنیم.
void pirstatedata() { pir=digitalRead(pirsensor); if(pir==HIGH) { Serial.println("Yeki Omad"); digitalWrite(light, HIGH); message="Yeki Omad"; digitalWrite(led,HIGH); pirstatus=HIGH; delay(1000); } else { Serial.println("Yeki Raft"); digitalWrite(light, LOW); message="Yeki Raft"; digitalWrite(led,LOW); pirstatus=LOW; } }
به همین ترتیب میتوانید یک کد کامل برای سنسور تشخیص حرکت و خروجی ال ای دی در پلتفرم Arduino IOT Cloud بنویسید. کد کامل پروژه تردد افراد با PIR501 و نمایش در پلتفرم Arduino IOT Cloud به صورت زیر است. کد را کپی و به ادیتور آنلاین پلتفرم انتقال دهید.
/* Sketch generated by the Arduino IoT Cloud Thing "Untitled" https://create.arduino.cc/cloud/things/a27b9215-e11f-4242-86ee-fb919ca947d9 Arduino IoT Cloud Variables description The following variables are automatically generated and updated when changes are made to the Thing String message; bool pirstatus; Variables which are marked as READ/WRITE in the Cloud Thing will also have functions which are called when their values are changed from the Dashboard. These functions are generated with the Thing and added at the end of this sketch. */ #include "thingProperties.h" #define led D0 #define pirsensor D3 #define light D4 bool pir; void setup() { // Initialize serial and wait for port to open: Serial.begin(9600); // This delay gives the chance to wait for a Serial Monitor without blocking if none is found delay(1500); pinMode(pirsensor,INPUT); pinMode(light,OUTPUT); digitalWrite(light, LOW); // Defined in thingProperties.h initProperties(); // Connect to Arduino IoT Cloud ArduinoCloud.begin(ArduinoIoTPreferredConnection); /* The following function allows you to obtain more information related to the state of network and IoT Cloud connection and errors the higher number the more granular information you’ll get. The default is 0 (only errors). Maximum is 4 */ setDebugMessageLevel(2); ArduinoCloud.printDebugInfo(); } void loop() { ArduinoCloud.update(); pirstatedata(); delay(2000); } /* Since Light is READ_WRITE variable, onLightChange() is executed every time a new value is received from IoT Cloud. */ /* Since Lightcontrol is READ_WRITE variable, onLightcontrolChange() is executed every time a new value is received from IoT Cloud. */ /* Since Humidity is READ_WRITE variable, onHumidityChange() is executed every time a new value is received from IoT Cloud. */ void onHumidityChange() { // Add your code here to act upon Humidity change } /* Since Test is READ_WRITE variable, onTestChange() is executed every time a new value is received from IoT Cloud. */ void onTestChange() { // Add your code here to act upon Test change } /* Since Pirstatus is READ_WRITE variable, onPirstatusChange() is executed every time a new value is received from IoT Cloud. */ void onPirstatusChange() { // Add your code here to act upon Pirstatus change } /* Since Message is READ_WRITE variable, onMessageChange() is executed every time a new value is received from IoT Cloud. */ void onMessageChange() { // Add your code here to act upon Message change } void pirstatedata() { pir=digitalRead(pirsensor); if(pir==HIGH) { Serial.println("Yeki Omad"); digitalWrite(light, HIGH); message="Yeki Omad"; digitalWrite(led,HIGH); pirstatus=HIGH; delay(1000); } else { Serial.println("Yeki Raft"); digitalWrite(light, LOW); message="Yeki Raft"; digitalWrite(led,LOW); pirstatus=LOW; } }
بخش ششم: آپلود برنامه Upload Sketch
کد نوشته شده است. پلتفرم Arduino IOT Cloud از ادیتور آنلاین برخوردار است. در همان پلتفرم به محیط Arduino IDE دسترسی دارید و میتوانید کد نویسی آنلاین انجام دهید. کتابخانه ها را فراخوانی و نصب کنید. بردهای جدید را نصب کنید. به نمونه برنامه های از قبل نوشته شده دسترسی دارید، به نمونه برنامه های کتابخانه های نصب شده دسترسی دارید. همه چیز برای نوشتن کد در یک پلتفرم آنلاین در اختیار ما قرار گرفته شده است تا بتوانیم یک تجربه ی متفاوت در برنامه نویسی را رقم بزنیم. کد را کپی و به پلتفرم انتقال دهید. آپلود Upload برنامه دقیقا مشابه همان Arduino IDE است. برد را انتخاب کرده و سپس کد را بر روی برد آپلود کنید.
بخش هفتم: عملکرد سنسور تشخیص حرکت
حالا کد بر روی برد آپلود شده است و تمامی تنظیمات پلتفرم انجام شده است. وارد دشبورد Dashboard شوید. در این بخش کنترل پروژه آغاز میشود.
دو متغیر برای پروژه تردد افراد با PIR501 ساخته شده است که به ترتیب بر روی دشبورد فراخوانی شده و به متغیر ها لینک شده است. برای ارتباط با دشبورد در قدم اول بایستی از آپلود شدن کد بر روی برد اطمینان کسب کنید. سپس بایستی اتصالات سخت افزاری پروژه را انجام دهید. برای این پروژه به یک سنسور تشخیص حرکت و یک ال ای دی در خروجی نیاز داریم که با توجه به پایه ایی که در کد برنامه مشخص کرده اید، به برد NodeMCU متصل کنید. در این کد از پایه D3 برای سنسور و پایه D4 برای ال ای دی استفاده شده است.
پس از انجام اتصالات مجدد از منو Dashbaord تغییرات را مشاهده کنید. با هر بار تشخیص سنسور و مانع در مجاورتش ویجت Status از OFF به ON تغییر وضعیت داده و رنگ ویجت از قرمز به سبز تغییر میکند. سپس یک ویجت دیگر برای پیام در دشبورد طراحی شده است که دقیقا همان پیامی که در متن کد نوشته شده است را چاپ میکند. در این کد پس از تشخیص افراد، پیغام Yeki Omad نمایش داده شده و در صورت عدم حضور شخص پیغام Yeki Raft را نمایش میدهد.
بخش هشتم: کنترل توسط اپلیکیشن Arduino IOT Cloud
از دیگر قابلیت های Arduino IOT Cloud برخورداری از اپلیکیشن Application است. در این آموزش نسخه IOS تست شده است. از APP Store عبارت Arduino IOT Cloud را جست وجو کنید. سپس آن را نصب کنید. با همان اکانتی که در نسخه وب لاگین شده اید، به اپلیکیشن دسترسی پیدا کنید. در اپلیکیشن فقط و فقط به محیط دشبورد دسترسی خواهید داشت.
وسایل مورد نیاز
چنانچه در مراحل راه اندازی پلتفرم Arduino IOT Cloud و انجام پروژه تردد افراد با PIR501 با مشکل مواجه شدید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریعترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در کدها و یا مراحل اجرایی وجود دارند میتوانید از همین طریق اطلاع رسانی کنید.