برای اجرای پروژه های IoT تحت پلتفرم ها نیاز به استفاده از بردهای IoT است. کمپانی آردوینو Arduino در سری بردهای خانواده Nano 33 برد اینترنت اشیا Arduino NANO 33 IoT را برای اجرای پروژه های تحت وای فای Wifi تولید کرده است. این برد قابلیت اتصال به شبکه وای فای دارد و میتوانید از طریق تراشه ublox قرار گرفته شده در روی برد داده های دریافتی از سنسورها را بر روی پلتفرم ها ارسال و مانیتورینگ کنید. در این پروژه از شیلد ProMake مدل Arduino Nano Kit استفاده خواهیم کرد. شیلد پرومیک قابلیت اتصال برد آردوینو Nano 33 IoT به همراه سه ماژول دارد. در این پروژه هدف اندازه گیری درصد گاز PPM در محیط است که از ماژول تشخیص گازی MQ2 استفاده شده است. در ادامه پروژه نشت گاز با شیلد ProMake با مرجع تخصصی آردوینو به زبان فارسی، دیجی اسپارک همراه باشید.
Arduino Nano Kit کیت آردوینو نانو ProMake
شیلد ProMake با هدف استفاده از بردهای آردوینو سری Nano طراحی شده است. کمپانی آردوینو بردهای آردوینو Nano را در یک ابعاد مشخص تولید کرده است که تفاوت آن ها در قابلیت های داخلی Internal است. تعداد پایه های I/O در تمامی بردهای آردوینو نانو Nano یکسان است و کاربری یکسانی دارند. تفاوت اصلی در ساخت برد است که از چه چیپ و امکاناتی در ساخت برد استفاده شده است. این تمایزها در تراشه اصلی ساخت برد، وجود تراشه وای فای و یا تراشه بلوتوث به همراه سنسورهای داخلی است که برای طراحی به برد اضافه شده است. با توجه به اینکه شیلد پرومیک از تمامی بردهای آردوینو نانو پشتیبانی میکند، از هر بردی از خانواده Nano میتوانید استفاده کنید. بر روی شیلد Arduino Nano Kit از سه ماژول پرومیک پشتیبانی میکند. ماژول های پرومیک قرار گرفته شده بر روی شیلد قابلیت اتصال به ماژول های GSM, Relay, Temperature دارد.
- تطابق با همه ماژولهای استاندارد آردوینو نانو
- پشتیبانی از ۳ ماژول ®ProMake، که به سادگی و بدون هیچ لحیم کاری بر روی کیت قرار می گیرند
- ارتباطات SPI,I2C و آنالوگ برای اولین ماژول
- ارتباطات SPI,I2C برای دومین ماژول
- ارتباطات I2C, سریال و آنالوگ برای سومین ماژول
- دارای چیپ ساعت (RTC) با باتری پشتیبان
- دو عدد RGB LED
- بازر
- کلید فشاری
- کانکتورهای توسعه ای SparkFun QWIIC و Seeed Studio Grove
- کانکتور هدر برای نمایشگر I2C OLED
- تغذیه شیلد توسط پورت تایپ C تامین میشود.
- رابط برای اتصال نمایشگر OLED بر روی شیلد قرار گرفته شده است.
- از رابط Grove برای ارتباط با سایر ماژول ها استفاده شده است.
- دو ال ای دی RGB بر روی برد قرار گرفته شده است.
استفاده از برد Nano 33 و قرار گرفتن روی شیلد ProMake
در پروژه نشت گاز با شیلد ProMake هدف محاسبه درصد گاز در محیط است که توسط برد آردوینو Nano 33 IoT و شیلد پرومیک انجام میشود. در این پروژه داده ی دریافتی از سنسور MQ بر روی پلتفرم اینترنت اشیا Arduino IoT CLOUD در دشبورد نمایش داده میشود. در ابتدا نیاز به یک عدد برد Arduino Nano 33 IoT به همراه ماژول ProMake GAS MQ داریم. همانند تصویر زیر برد آردوینو را بر روی شیلد قرار دهید.
سه عدد رابط برای اتصال ماژول های ProMake بر روی شیلد قرار گرفته شده است. از یکی از آن ها برای اتصال ماژول GAS MQ استفاده کنید. برای اتصال پایه های بر روی ماژول را تطبیق دهید.
در نهایت پروتوتایپ به صورت زیر است. برد آردوینو Nano 33 IoT به همراه ماژول MQ بر روی شیلد نانو قرار گرفته شده است. تغدیه شیلد تایپ C است و برای تامین تغذیه برد آردوینو از کابل Micro usb استفاده کنید.
برنامه نویسی برد Arduino Nano Kit
کدنویسی ماژول گاز را با برد وای فای اینترنت اشیا Arduino Nano 33 IoT اجرا میکنیم. برای اجرای پروژه نشت گاز با شیلد ProMake از پلتفرم Arduino IoT CLOUD استفاده میکنیم. Arduino IoT CLOUD از وب ادیتور برخط آنلاین استفاده میکند و برای کار با این پلتفرم بایستی Arduino Agent برای برقراری ارتباط برد با مرورگر را نصب کنید.
ساخت حساب کاربری در Arduino IoT CLOUD
تمامی این مراحل قبلا در آموزش کار با پلتفرم Arduino IOT Cloud بخش اول: معرفی و ساخت حساب آموزش داده شده است. پلتفرم Arduino IOT Cloud اینترنت اشیا با هدف اجرای پروژه های اینترنت اشیا IOT پدید آمده است. از بردهای آردوینو سری وای فای و بردهای جانبی مانند ESP8266, ESP32 , loRaWAN پشتیبانی میکند. پلتفرم Arduino CLoud توسط کمپانی آردوینو تولید شده است. برنامه نویسی در محیط آنلاین، برخورداری از وب ادیتور آنلاین، برای کدنویسی یک محیط جذاب را فراهم کرده است. در این پلتفرم به محیط برنامه نویسی Arduino IDE دسترسی داریم و همانند نرم افزار تمامی ویژگی ها از جمله نصب کتابخانه، انتخاب بردها، سریال مانیتور در اختیار ما قرار گرفته شده است. بدون نیاز به ارتباط سریال کدنویسی انجام شده و در لحظه آپدیت میشود. محیط همان محیط برنامه نویسی Arduino IDE است و هیچ تغییری ایجاد نشده است. داده ها در دو فضای ابری و IDE نوشته شده و سپس مقادیرها با هم یکسان میشود. برد را به لپتاپ متصل کنید. عبارت Arduino IoT CLOUD را گوگل کنید. برای ایجاد حساب کاربری از طریق Gmail همی میتوانید اقدام کنید.
شناسایی برد Arduino Nano 33 IOT در CLOUD
روش ساخت Devices در پلتفرم Arduino IOT Cloud همان انتخاب میکروکنترلر است. برای شروع ارتباط قدم اول انتخاب برد است. پلتفرم Arduino IOT Cloud از دو مدل میکروکنترلر پشتیبانی میکند که هر کدام به چندین زیر شاخه تقسیم بندی میشوند. بخش اول Arduino Device هستند. بردهای خانواده ESP در این بخش معرفی شده است و با توجه به نوع میکروکنترلری که دارید، میتوانید برد را انتخاب کنید. موس را بر روی علامت ! نگه دارید. تمامی بردهایی که در این بخش پشتیبانی میشوند، نمایش داده خواهد شد. از این لیست برد آردوینو Nano 33 را انتخاب کنید. ادامهی مسیر مطابق تصاویر زیر است. به تصاویر دقت کرده و قدم به قدم مراحل را دنبال کنید.
ایجاد Thing
در پلتفرم اینترنت اشیا Arduino IoT پس از انتخاب دیوایس Device قدم بعدی ورود به صفحه Things است. پس از کلیک بر روی Things صفحه ی زیر نمایش داده میشود. مراحل زیر برای ایجاد Things بایستی دنبال شوند.
- نمایش Variable
- ساخت یک متغیر جدید
- انتخاب سخت افزار از قبل ساخته شده
- تغییرات سخت افزار
- اتصال به شبکه وای فای
قدم اول ساخت یک متغیر برای سخت افزار است. اما کمی عمیق تر نگاه کنیم. برای کدنویسی یک سخت افزار اولین قدم در برنامه مشخص کردن ورودی و خروجی ها یا همان دیوایس های متصل به میکروکنترلر است. مانند انواع سنسورها دما رطوبت، تشخیص رنگ، فشار سنج، رطوبت خاک، شدت نور و سنسورهای گازی و … که هر کدام با یک اسم مشخص و منحصر به فرد در کد برنامه معرفی میشوند. هدف نهایی ما از برنامه نویسی دریافت داده، پردازش داده و دریافت خروجی است. پس داده ها حرف اول را میزنند. تا زمانی که نتوانیم داده ها و نوع داده ها را در برنامه به درستی مشخص و از هم تفکیک کنیم، عملا مابقی اجرای پروژه نشت گاز با شیلد ProMake با مشکل رو به رو خواهد شد. در صفحه ی تنظیم Things اولین بخش Add Variable است. در این بخش بایستی سخت افزارهایی که به میکروکنترلر متصل کرده ایم را به صورت متغیرهای منحصر به فرد همراه با نوع داده مشخص کنیم. داده int, float, bool و… همگی در این بخش قابل انتخاب است. انتخاب اسم برای متغیر هم دلخواه است. با انتخاب متغیرها، برای هر متغیر در سرویس ابری آردوینو به صورت اتوماتیک متغیر ساخته شده و سپس مجدد به صورت اتوماتیک در کد Sketch برنامه نوشته میشود! بله برنامه نویسی در این بخش به صورت آنلاین و اتوماتیک صورت میگیرد. به ازای تعریف هر متغیر در این بخش، در فضای ابری Cloud آردوینو یک متغیر در کد برنامه ساخته شده و یک تابع سفارسی Custom Function به صورت اختصاصی پس از حلقه Loop در برنامه Sketch اضافه میشود. قدرت Arduino IOT Cloud در این بخش است که آن را نسبت به سایر پلتفرم ها متمایز کرده است. برای تست بر روی Add Variable کلیک کنید.
با توجه به اینکه از سنسور گازی استفاده میکنیم، میتوانیم نوع داده دریافتی از سنسور را به صورت اعشاری float در برنامه تعریف کنیم. یک اسم به دلخواه برای سنسور گاز تعریف کرده و مطابق تصویر تنظیمات را انجام دهید تا در لیست Thing ها نمایش داده شود. سپس برای کدنویسی گزینه Sketch را انتخاب کنید.
کد آردوینو دریافت درصد PPM سنسور گاز
از منو Arduino IoT CLOUD گزینه Sketch را انتخاب کنید. سپس کد زیر را کپی و به آن انتقال دهید. حتما از اسمی که بنده در کدها مشخص کردم استفاده کنید. کدنویسی در Arduino IoT Cloud به صورت تابع های سفارشی است. برای هر بخش از برنامه بایستی یک تابع سفارشی در کد اضافه کنید. در بخش Setup اولین پارامتری که اضافه کردیم، داده سنسور گازی با نام gas است که در قسمت ابتدایی برنامه به صورت اتوماتیک اضافه شده است. با اضافه کردن هر متغیر یک تابع سفارشی ( کاستوم ) در برنامه ساخته میشود. بایستی هر تابع سفارشی را به صورت دستی در قسمت Loop وارد کنید. در کد برنامه کامل تمامی موارد لحاظ شده است.
/* Sketch generated by the Arduino IoT Cloud Thing "Untitled 2" https://create.arduino.cc/cloud/things/74905868-c64e-4782-8861-88ba7919ee20 Arduino IoT Cloud Variables description The following variables are automatically generated and updated when changes are made to the Thing float gas; 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 relay 5 #define thershold 2.0 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); // 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(); gassensordata(); // Your code here } /* Since Ratio is READ_WRITE variable, onRatioChange() is executed every time a new value is received from IoT Cloud. */ void onRatioChange() { // Add your code here to act upon Ratio change } /* Since Gas is READ_WRITE variable, onGasChange() is executed every time a new value is received from IoT Cloud. */ void onGasChange() { // Add your code here to act upon Gas change } void gassensordata(){ float sensor_volt; float RS_gas; // دریافت مقدار RS از گاز float ratio; // دریافت نسبت RS/RO int sensorValue = analogRead(A0); sensor_volt=(float)sensorValue/1024*5.0; RS_gas = (5.0-sensor_volt)/sensor_volt; // مقدار RO دریافتی از سنسور خود را به جای عدد ۲٫۸۱ که مربوط به RO سنسور من است قرار دهید. ratio = RS_gas/1.33; // ratio = RS/R0 فرمول Serial.print("sensor_volt = "); Serial.println(sensor_volt); Serial.print("RS_ratio = "); Serial.println(RS_gas); Serial.print("Rs/R0 = "); Serial.println(ratio); Serial.print("\n\n"); delay(1000); gas=ratio; } /* Since Leds is READ_WRITE variable, onLedsChange() is executed every time a new value is received from IoT Cloud. */ void onLedsChange() { // Add your code here to act upon Leds change }
همانند نرم افزار آردوینو کد را پس از انتقال پس از شناسایی اتوماتیک برد و پورت بر روی برد آردوینو آپلود کنید. سپس وارد قسمت Setup شوید. بایستی برد آنلاین شده باشد.
در قسمت Cloud Variables یک Thing با نام gas به همراه Last Value و Last Update نمایش داده شده است. آخرین داده دریافتی از سنسور گاز متصل به شیلد پرومیک Arduino Nano Kit در این بخش قابل مشاهده است. با تغییر درصد و غلظت PPM این عدد در لحظه تغییر خواهد کرد.
نمایش داده PPM GAS در داشبورد Arduino IoT CLOUD
داشبورد Dashboard یک رابط کاربری برای پلتفرم های IOT است که برای کاربران امکان مانیتور،تعامل با دیوایس های متصل شده به پلتفرم، دسترسی به گراف ها و چارت ها و گیج ها و دیگر ابزارها را فراهم میکند. دشبوردها به شما این امکان را میدهد تا وضعیت دیوایس ها و جنبه های مختلف آن را از هر نظر بررسی و مدیریت کنید. از آنجایی که داشبوردهای اینترنت اشیا IOT در بالاترین سطح از پلتفرم قرار گرفته اند، کاربران می توانند به راحتی داشبورد خود را بدون ایجاد اختلال در پردازش داده های دستگاه شخصی سازی کنند.پلتفرم Arduino IOT Cloud یک نقطه قوت در مقایسه با سایر پلتفرم ها دارد و آن برخورداری از یک محیط گرافیکی داشبورد است که در لحظه امکان دسترسی به متغیرهای تعریف شده در Things فراهم است. پس از شناخت دیوایس، انتخاب متغیرها و در نهایت نوشتن برنامه نوبت به فراخوانی متغیرها در دشبورد Dashboard است.
از منو بر روی Dashboards کلیک کنید. با صفحه ی بالا رو به رو خواهید شد. بر روی گزینه Build Dashboard کلیک کنید.
فلش هایی که در تصویر بالا مشخص شده است، هر کدام برای کار خاصی در پلتفرم طراحی شده است. بر روی گزینه ADD کلیک کنید.
داده دریافتی از سنسور گازی MQ در دشبورد محیط Arduino IoT CLOUD به صورت زیر نمایش داده میشود.
وسایل مورد نیاز
کیت توسعه آردوینو نانو پرومیک PROMAKE
برد آردوینو ARDUINO NANO 33 IOT
ماژول درگاه سنسور گاز ProMake GAS MQ
چنانچه در مراحل راه اندازی و انجام این پروژه با مشکل مواجه شدید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریعترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در کدها و یا مراحل اجرایی وجود دارند میتوانید از همین طریق اطلاع رسانی کنید.
سلام خسته نباشید، مثل همیشه این آموزش هم عالی بود.
سلام
کاربر گرامی سپاس از همراهی شما
امیدوارم مفید واقع شده باشد.
سلام لطفا پروژه ی نشت گاز و گزارش شعله رو که بصورت انلاین رو وب سرور نمایش میده و موقعیت مکانی روی نقشه نشون بده و قابلیت تماس رو نیز داشته رو بزارید
ممنون میشم
با سلام
سپاس از همراهی شما، بررسی میکنیم و اگر امکان پذیر باشد اجرا میکنیم. ولی به نظر کدهای این پروژه حافظه زیاد و محاسبه پردازشی دقیقی نیاز دارد.