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

آموزش تشخیص آلودگی هوا با سنسور MQ135 برد آردوینو Arduino

Gas-Detector-ardoino
نوشته شده توسط علیرضا قربانی

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

 


سنسور گازی MQ135


سنسورهای گاز سری MQ از هیتر داخلی کوچک به همراه سنسور الکتروشیمیایی بهره می‌گیرند. سنسورهای MQ نسبت به طیف گسترده ای از گازها حساس‌اند. سنسور تشخیص کیفیت هوا MQ135 یکی از سنسورهایی گاز heater- driven سری MQ که دارای مقاومت متغیر داخلی وابسته به میزان دود، CO2 ,NH3،NOx  موجود در هوا می‌باشد. مقدار خروجی این سنسور آنالوگ می‌باشد که به وسیله‌ی یک مبدل آنالوگ به دیحیتال می‌توان مقدار آلودگی هوا را اندازه‌گیری نمود. این سنسور می‌تواند آلودگی هوا را تا ۱۰۰۰۰ppm اندازه‌گیری نمود. سنسور گاز MQ135 یک سنسور گاز شیمیایی است که برای تشخیص و اندازه‌گیری تعدادی از گازهای مختلف در محیط استفاده می‌شود. این سنسور از گرماکننده و مقاومت حساس به گاز تشکیل شده است که تغییر مقاومت آن با تغییر ترکیب هوا و نوع گازهای موجود در محیط اطراف تغییر می‌کند. .مهم‌ترین ویژگی این سنسور تشخیص دود، انواع گازهای سمی، مثل دی‌اکسید کربن (CO2)، آمونیاک (NH3)، مونوکسید کربن (CO)، بنزن، الکل و بخارات آلی است. به عنوان مثال، این سنسور در سیستم‌های تهویه مطبوع و سیستم‌های اعلان حریق به‌کار می‌رود. همچنین در پروژه‌های اندازه‌گیری کیفیت هوا و مانیتورینگ محیط زیست نیز مورد استفاده قرار می‌گیرد.

برخی از مشخصات فنی این سنسور به شرح زیر است:

  • ولتاژ کاری: ۵ ولت DC
  • جریان مصرفی: کمتر از ۱۵۰ میلی‌آمپر
  • خروجی آنالوگ: ولتاژ بین ۰ تا ۵ ولت که با تغییر غلظت گاز، مقدار آن تغییر می‌کند.
  • زمان پاسخ‌دهی: کمتر از ۱۰ ثانیه
  • عمر مفید: بین ۲ تا ۵ سال (بستگی به شرایط کاری دارد)

 

 

 

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

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

 


اجزای سنسور MQ135


همانطور که در شکل زیر مشاهده می‌کنید سنسور گاز الکل MQ135 از۶ پین تشکبل شده است.

سنسور گاز الکل MQ3

دو پین A و دو پین B دو صفحه‌ای را تشکیل می‌‌دهند که با برخورد مولکول‌های گاز الکل به این دوصفحه رسانایی آن‌ها تغییر می‌کند. دو پین H از طریق یک هیتر به یکدیگر متصل هستند و با اعمال ولتاژ عملیات گرم کردن فضای بین دو صفحه A و B را حهت آماده‌سازی محیط دو صفحه برای ایجادحساسیت مناسب سنسور را انجام میدهد. در ابتدای اتصال این سنسور به ۵ ولت DC ، ولتاژ خروجی از ۵ ولت شروع به کم شدن می کند و نهایتا بعد از یک تایم حدود یک ساعت به یک سطح ولتاژ نسبتا ثابت می رسد( حدودا ۰٫۷۳ ولت) . زیرا در ابتدای اتصال فضای بین دو صفحه اصلی سنسور سرد است و هدایت الکتریکی آن بسیار پایین می‌باشد و با گذشت زمان هیتر کم کم گرم شده و مقاومت افرایش پیدا می‌کند و ولتاژ خروجی نیز متقابلا کاهش پپدا می‌کند.

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

 


اتصال سنسور گاز MQ135 به آردوینو


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

اتصال سنسور MQ135 به آردینو

 


کد و نصب کتابخانه سنسور MQ135


برای کد نویسی MQ135 ما از کتابخانه MQ135master استفاده کرده‌ایم که شما باید آن را از لینک زیر دانلود نمایید سپس طبق آموزش زیر آن را به کتابخانه‌های نرم‌افزار آردوینو اضافه کنید. دانلود کتابخانه MQ135  آموزش نصب کتابخانه در آردوینو پس از نصب کتابخانه باید آن را درون برنامه خود و فراخوانی کنیم و از کلاس MQ135 یک شی بسازیم و به ورودی آن پین آنالوگی که به سنسور متصل است را بدهیم. پس طبق شماتیک قرار گرفته اینگونه عمل می‌کنیم:

#include <MQ135.h>
int sensorPin=A0;
MQ135 gasSensor = MQ135(A0);

void setup()
{
}

void loop()
{
}

 

برای کالیبره کردن سنسور MQ135 می‌بایست ابتدا سنسور را بین ۱۲ الی ۲۴ ساعت در دمای حدود ۲۰ درجه سانتی گراد قرار دهیم و میانگین CO2 اطراف را اندازه گیری کنیم. برای بدست آوردن مقدار CO2 برای کالیبره کردن از تابع زیر استفاده می‌کنیم.

float rzero = gasSensor.getRZero();

 

بعد از بدست آوردن مقدار rzero باید وارد فولدر کتابخانه MQ135 شویم و سپس فایل MQ135.h را باز کنیم و در آن در کد

#define RZERO 76.63

مقدار razero را با مقدار ۷۶٫۶۸ جایگیزین کنیم.  اکنون کالیبراسیون انجام شده است  ، حال برای پی بردن به مقدار آلودگی هوا باید کد زیر را بر روی آردوینو خود کامپایل کنید و نتیجه را بر سریال مانیتور نرم‌افزار مشاهده کنید.

#include <MQ135.h>
MQ135 gasSensor = MQ135(A0);

void setup() {

Serial.begin(9600);


}

void loop()
{
float ppm = gasSensor.getPPM();
Serial.println(rzero);
Serial.print("ppm");


Serial.println(ppm);
delay( 500);
}

 


سخت افزار مورد نیاز


برد آردوینو UNO

سنسور تشخیص گاز MQ135

بورد راه انداز سنسور تشخیص گازهای MQ

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

 

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

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

علیرضا قربانی

علیرضا قربانی هستم دانشجوی مهندسی پزشکی. چیزهای خیلی زیادی رو در دنیا دوست دارم. یک گیک هستم و یشه گفت یک هکر. نه به معنی دزدی پسورد و ایمیل مردم. به معنی عشق به دونستن و عشق به تحقیق درباره خیلی از چیزهایی که می بینم و می‌شنوم. اگر بخوام علاقه‌مندی‌ درجه یکم رو نام ببرم میتونم بگم برنامه نویسی و بعد از اون امبدد سیستم ها.

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

۵۰ دیدگاه

  • سلام
    با تشکر از آموزشهای خوبتان
    من برای یک پروزه نیاز دارم که گازهای
    CO , HC , O2 , CO2 را دیتکت و آنالیز کنم
    لطفا راهنمایی کنید که برای این کار و توسط فقط یک برد اوردینو یونو . دقیقا از کدام سنسور ها برای کدام گاز باید استفاده کنم ( لطفا مناسبترین سنسور را از لحاظ قیمت اعلام بفرمایید )
    همچنین آیا میتوان به طور همزمان این گازها سنس کرد ؟

    • سلام
      لطفا سوال خود را واضح تر بیان کنید. در آموزش کاملا به بررسی سنسور MQ135 پرداخته شده است. برای اتصال هم میتوانید از برد سنسور گاز برای اتصال سنسور با بردهای میکروکنترلر استفاده نمایید.

  • عرض سلام و احترام خدمت شما دوست عزیز.
    کتابخانه mq135 رو از کجا میتونم دانلود کنم؟ لطفا راهنمایی بفرمایید. متشکرم.

  • سلام
    آموزش های جالبی بودن
    ممنون
    بنده برای اجرای یک طرح، نیاز ب این دارم ک اگه غلظت گاز از حد مجاز (قابل تعریف توسط خودم) بیشتر بود، دستگاه عملی رو انجام بده، مثلا برای مقدار X ppm چراغ نارنجی و برای غلظت Y ppm چراغ قرمز رو روشن کنه.
    آیا با سنسور MQ135 و برد آردوینو Arduino همچین امکانی وجود داره؟! (و اگه آره، لطفاً کمی در مورد برنامه نویسی و احتمالاً قطعات اضافی مورد نیاز توضیح بدین.)
    پیشاپیش از همکاری شما سپاسگزارم.

    • سلام
      با ترکیب ماژول mq و آردوینو با نرم افزار Node-RED و یا پایتون میتوانید شرط گذاری کنید. پیشنهاد میشود از آموزش های ترکیبی نودرد و آردوینو استفاده کنید و ایده بگیرید.

  • سلام. با سپاس فراوون از مطالب ارزشمند شما. اگر بجای یک سنسور بخواهیم از تعداد بیشتری سنسور استفاده کنیم بعد از فراخوانی کتابخانه پایه ها را چگونه باید تعریف کنیم؟ ثابت ها؟ متغیرها؟

    • با سلام
      ضمن تشکر از توجه شما، میتوانید پایه جدید را در کدها تعریف کنید و سپس موارد دریافتی را آدرس دهی می‌کنید. در کل برای اجرا نیاز به دانش برنامه نویسی C++ دارید.

  • سلام قربان در بعضی آموزش ها چهار پورت سنسور به آردینو متصل شده یعنی یک دیجیتال هم متصل شده است میخواستم بدونم اون چطوره؟ و نحوه ی اتصال به برد آرینو لئوناردو هم همینگونست؟

    • با سلام
      ضمن تشکر از توجه شما، ماژول سنسور گاز دارای دو خروجی است، یکی دیجیتال و دیگری آنالوگ، که بسته به برد استفاده شده، می‌توان از یکی پین‌ها استفاده کرد. اینکه می‌فرمایید هر دو تا پایه را متصل کرده است؛ بستگی به پروژه دارد ولی به صورت پیش فرض نیازی به اتصال هر دو پایه نمیباشد. لازم به ذکر است که اگر کدهای مربوطه را ارسال کنید، میتوان تحلیل دقیقی در این خصوص ارایه داد.
      برای اتصال به برد لئوناردو ممکن است نیاز به تغییر پین‌های تعریف شده در کدها داشته باشید.

      • تشکر از پاسخ شما ، آقای مهندس شما چه سنسور آنالوگی برای تشخیص دی اکسید کربن و مونوکسید کربن پیشهاد میکنید که ۳ پایه باشه یا فقط خروجی ولتاژ داشته باشه که بتونم به میکرو نصب کنم

  • مرسی از توضیحاتتون ،،،،من یه سوال دارم ، اگه بخوام برنامه ای بنویسم که سنسور اول ۲۴ ساعت کار کنه و بعد مقدار رو جایگذاری کنه باید چه قسمتی بهش اضافه کنم ؟اینو هم اضافه کنم که با فرض اینکه از کتابخونه نخوایم استفاده کنیم و اونو توی برنامه گذاشته باشیم

    • سلام
      در این خصوص در ایتدا باید DELAY در کد برنامه تعریف کنید و زمان مورد نظر را تنظیم کنید.
      در خصوص سوال دوم این مورد را پیشنهاد نمیکنم.

  • سلام
    از سنسور mq135 استفاده میکنم و میخواهم مقدار رو روی lcd نشون بدم
    ولی وقتی کد ها رو اجرا میکنم lcd هیچی نشون نمیده
    البته کدها اجرا میشن و سریال پرینت دارم و در صورتی که کدهای mq135 رو پاک کنم lcd هم نوشته نشون میده!!
    لطفا راهنمایی کنید که چه کاری باید انجام بدم؟

  • عرض ادب و احترام
    خیلی ممنون بابت مطلب بسیار مفید و کاربردی
    یک سوال داشتم ، برای اتصال mq02 همین کتابخانه mq135 مورد قبوله یا باید برای mq02 کتابخانه دیگه ی استفاده بشه

  • سلام
    من یک سوال کلی در رابطه با سنسورهای MQ داشتم.
    با اینکه هر کدوم از سنسورهای MQ مختص تشخیص یک سری گاز هستند ولی چرا به گازهای دیگه هم (غیر از گازهایی که در دیتاشیت ذکرشده) واکنش نشون میدن؟ برای مثال MQ2 و MQ7 برای تشخیص گاز LPG نیستند ولی با این وجود بهش واکنش نشون میدن. همینطور سایر سنسورها
    یعنی میتونم بگم تمام سنسورهای MQ رو تست کردم و همشون بدون استثنا به گاز LPG، متان، دود، گاز طبیعی و CO2 حساس بودن. در عمل هیچ تفاوت خاصی باهم نداشتن و خب این باعث بروز خطا در نتیجه میشه و با دیتاشیتشون مغایرت داره. چرا اینطور هست؟ آیا راهی هست برای این مسئله؟

    • سلام
      از توجه شما ممنونم.
      سنسورهای سری MQ مصرف عمومی دارد و دقت و حساسیت بالایی در اندازه گیری ندارد. همچنین گاز LPG از ترکیب دو گاز تشکیل شده و دارای ناخالصی است که ممکن است اکثریت سنسورها نسبت به آن حساسیت نشان دهند. همچنین دقت کنید شرایط محیطی دما بی تاثیر نبوده و به دلیل وجود داشتن مولکول H2O در هوا ممکن است سبب حساسیت سنسور شده و نسبت به آن واکنش نشان دهد.
      یکی از روش های پیشنهادی جهت حل مشکل در آموزش گلدان هوشمتد اشاره شده است که پس از انتشار می‌توانید از آن استفاده کنید.

    • سلام
      این آموزش با برد آردوینو نوشته شده است و برای Nodemcu باید کتابخانه آن و دستورات ماکرو را فراخوانی کرد و پایه دیتا سنسور را پایه ADC یا یکی از پایه دیجیتال متصل کرد. همچنین کدها تغییر خواهد کرد که از طریق کامنت امکان توضیح کامل آن وجود ندارد.

  • سلام
    ممنون از اموزش خوبتون.
    میخواستم بدونم این سنسور در ۵۰۰میلی لیتر هوا با چه خطایی مقدار نیتروژن را نشان می دهد؟

  • سلام مهندس ضمن تشکر از مطلب خوبتون من ی سوال دارم با استفاده از این سنسور ومازول وای فای ESP8266 میخوام اطلاعات سنسور بگیره و به ماژول وای فای ارسال کنه لطفا در خصوص کد نویسی و نحوه اتصال این دوماژول بهم و اتصال به اردینو توضیح بدین.

  • اگه بخوام زمانی که مقدار به زیاد شد یک چراغ قرمز و زمانی که هوای عادی بود چراغ سبز و زمانی که متوسط بود چراغ زرد روشن بشه باید چکار کنم

    • با سلام
      برای ایجاد یک سیستم تشخیص آلودگی با استفاده از سنسور MQ135 و آردوینو که یک چراغ قرمز را در صورت آلودگی بیش از حد، یک چراغ سبز در صورت هوای عادی، و یک چراغ زرد در صورت متوسط آلودگی روشن کند، می‌توانید مراحل زیر را دنبال کنید:
      ۱- اتصال سنسور MQ135 به آردوینو:
      اتصال پایه A0 سنسور به پایه تحتانی آردوینو.
      اتصال پایه D0 سنسور به پایه دلخواه آردوینو (برای استفاده از خروجی دیجیتال).
      اتصال پایه VCC سنسور به پایه ۵V آردوینو.
      اتصال پایه GND سنسور به پایه GND آردوینو.

      ۲- نوشتن کد آردوینو:
      برنامه‌ای بنویسید که مقدار خوانده‌شده از سنسور را بخواند.
      بر اساس مقدار آلودگی، یکی از چراغ‌های قرمز، سبز یا زرد را روشن کند.
      می‌توانید از دستورات if و else if برای اعمال شرایط استفاده کنید.
      مقدارهای آستانه را بر اساس نیاز خود تنظیم کنید.

      ۳- قرار دادن LED ها:
      قرار دهید یک LED قرمز به پایه ۲، یک LED سبز به پایه ۳ و یک LED زرد به پایه ۴ آردوینو.

      ۴- تست و ارتباط با برد Arduino:
      برنامه را به برد آردوینو خود آپلود کرده و مطمئن شوید که اتصالات صحیح است.
      مقادیر آستانه را در کد تنظیم کنید تا به نتایج مطلوب برسید.

      ۵- تنظیمات پیشرفته (اختیاری):
      می‌توانید مقادیر آستانه را به صورت پویا تغییر دهید یا حتی از سایر حسگرها برای بهترین تشخیص استفاده کنید.
      با انجام این مراحل، سیستم شما به طور خودکار چراغ مناسب را بر اساس میزان آلودگی هوا روشن خواهد کرد.

      const int analogPin = A0;
      const int redLED = 2;
      const int greenLED = 3;
      const int yellowLED = 4;

      void setup() {
      pinMode(analogPin, INPUT);
      pinMode(redLED, OUTPUT);
      pinMode(greenLED, OUTPUT);
      pinMode(yellowLED, OUTPUT);
      }

      void loop() {
      int sensorValue = analogRead(analogPin);

      if (sensorValue > 800) {
      digitalWrite(redLED, HIGH);
      digitalWrite(greenLED, LOW);
      digitalWrite(yellowLED, LOW);
      } else if (sensorValue > 400) {
      digitalWrite(redLED, LOW);
      digitalWrite(greenLED, LOW);
      digitalWrite(yellowLED, HIGH);
      } else {
      digitalWrite(redLED, LOW);
      digitalWrite(greenLED, HIGH);
      digitalWrite(yellowLED, LOW);
      }

      delay(1000); // انتظار ۱ ثانیه و سپس تکرار
      }

      شاد و پیروز باشید.