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

پروژه تشخیص گاز شهری با آردوینو و سنسور MQ5 نمایش روی OLED

gas-detector-with-mq5-and-arduino-oled-digispark
نوشته شده توسط پریسا پوربلورچیان

با توجه به شرایط این روزهایی کرونایی و دورکاری از طریق منزل بیش تر وقت خود را در خانه می‌گذرانیم. یکی از اساسی ترین پارامتری که در کنترل خانه به آن نیاز داریم، درصد مقدار گاز شهری در فضا است. البته در صورتیکه سنسور گاز در ساختمان نداشته باشیم 🙂 در پروژه تشخیص گاز شهری با آردوینو مقدار درصد گاز شهری توسط MQ5 تشخیص و در نمایشگر OLED نمایش داده می‌شود. در ادامه با مرجع تخصصی اینترنت اشیا به زبان فارسی، دیجی اسپارک همراه باشید.

پروژه تشخیص گاز شهری با آردوینو - دیجی اسپارک

 


سنسور گاز MQ5


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

متان (CH4): متان گازی قابل اشتعال و فراگیر است که در بسیاری از محیط‌ها و منابع انرژی وجود دارد، از جمله گاز طبیعی و فاضلاب.

الکل‌ها: شامل الکل‌هایی مانند الکل اتیلیک (الکل متیلی) و الکل ایزوپروپیلیک (الکل ایزوبوتیلیک) می‌شود. این الکل‌ها برای مصارف مختلفی استفاده می‌شوند، از جمله در صنعت الکل، لوازم آرایشی و بهداشتی، و موارد دیگر.

بوتان (C4H10): بوتان یک گاز قابل اشتعال است که به طور معمول در انواع گازهای قابل شعله‌وری مانند گاز مایع و گاز شهری وجود دارد.

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

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

 

جدول زیر از دیتاشیت سنسور ضمیمه شده است که برای محاسبه ولتاز و انتخاب ولتاژ و جریان صحیح بسیار کاربردی است.

جدول عملکرد سنسور گاز MQ5 تشخیص گاز شهری - دیجی اسپارک

 

سنسور گاز MQ5 تشخیص گاز شهری - دیجی اسپارک

 


کد آردوینو محاسبه ولتاژ سنسور گاز


در پروژه تشخیص گاز شهری با آردوینو سنسور به پایه A0 متصل است که در برد Nodemcu فقط یک پایه آنالوگ داریم. در صورت اضافه کردن سنسور بایستی از مبدل سنسور دیجیتال به آنالوگ ADS1115 استفاده کنید. در این کد ولتاژ خوانده شده از سنسور نمایش داده شده که بایستی مقدار آستانه threshold را محاسبه و از کد دریافت کنیم. کد زیر را کپی و به نرم افزار IDE Arduino انتقال دهید.

void setup() {
    Serial.begin(9600);
}
 
void loop() {
    float sensor_volt;
    float sensorValue;
 
    sensorValue = analogRead(A0);
    sensor_volt = sensorValue/1024*5.0;
 
    Serial.print("sensor_volt = ");
    Serial.print(sensor_volt);
    Serial.println("V");
    delay(1000);
}

 

در این کد در ابتدا بادریت سنسور را بر روی ۹۶۰۰ تنظیم و در کد برنامه در بخش Void Setup وارد کنید. در حلقه برنامه مقادیر ورودی از سنسور بر واحد اعشاری float دریافت و خوانده شده و در یک متغیر که به دلخواه با نام دلخواه sensorvolt ساخته شده است، ذخیره می‌کنیم. مقادیر ولتاژ از پایه A0 سنسور توسط دستور analogRead(A0) خوانده شده و سپس در متغیری به نام Sensorvalue ذخیره می‌شود. سپس مقادیر ذخیره شده در متغیر Sensorvalue در بازه آنالوگ تقسیم بر ۱۰۲۴*۵ شده و مقادیر نهایی در متغیر Sensor volt ذخیره می‌شود. سپس مقادیر را توسط دستورات سریال مانیتور در سریال مانیتور نمایش میدهیم. این مقادیر کاملا بر شرایط محیطی وابسته است. با تغییر دما و رطوبت عدد خروجی تغییر خواهد کرد. برای پایداری در محیط کافیست سنسور در فضا مدتی فعال شده تا خروجی ثابتی نمایش دهد.

float sensor_volt;
    float sensorValue;
 
    sensorValue = analogRead(A0);
    sensor_volt = sensorValue/1024*5.0;
 
    Serial.print("sensor_volt = ");
    Serial.print(sensor_volt);
    Serial.println("V");
    delay(1000);

 

ولتاژ کاری سنسور تشخیص گاز MQ5 - دیجی اسپارک

 


محاسبه مقاومت RO


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

void setup() {
    Serial.begin(9600);
}
 
void loop() {
    float sensor_volt;

    // دریافت مقادیر از مقاومت RS در فضای آزاد 
    float RS_air; 

    // دریافت مقادیر از RO در H2
    float R0;  

    // ساخت متغیر برای ذخیره مقادیر دریافتی از سنسور در Sensor value
    float sensorValue;


// دریافت میانگین دیتای دریافتی از سنسور در ۱۰۰ مرتبه
 
       
    for(int x = 0 ; x < 100 ; x++)
    {
        sensorValue = sensorValue + analogRead(A0);
    }
    sensorValue = sensorValue/100.0;

    
 
    sensor_volt = sensorValue/1024*5.0;
    
    RS_air = (5.0-sensor_volt)/sensor_volt; //محاسبه مقاومت RS
    R0 = RS_air/6.5; //نسبت RS/RO بر طبق دیتاشیت در هوای تمیز ۶٫۵ است.
 
    Serial.print("sensor_volt = ");
    Serial.print(sensor_volt);
    Serial.println("V");
 
    Serial.print("R0 = ");
    Serial.println(R0);
    delay(1000);
}

 

در هر خط از برنامه تحلیل فارسی نوشته شده است. کد را کپی و به نرم افزار آردوینو IDE Arduino منتقل کنید. در ابتدا همانند کد قبل ولتاژ پایه A0 از سنسور را در متغیر Sensor Volt دریافت و ذخیره می‌کنیم. سپس یک متغیر برای مقاومت RS و یک متغیر برای مقاومت RO با داده float تعریف می‌کنیم. در نهایت با فرمول های نوشته شده در کد مقدار RS و RO را محاسبه می‌کنیم.

 RS_air = (5.0-sensor_volt)/sensor_volt; //محاسبه مقاومت RS
    R0 = RS_air/6.5; //نسبت RS/RO بر طبق دیتاشیت در هوای تمیز ۶٫۵ است.

 

سپس کد را کامپایل کرده و سریال مانیتور را باز کنید. در سریال مانیتور با بادریت ۹۶۰۰ مقادیر ولتاژ روی پایه A0 سنسور و مقدار RO نمایش داده می‌شود.

دریافت مقادیر RO سنسور گاز MQ5 در آردوینو - دیجی اسپارک

 

عدد ثابت شده برای مقاومت RO در محیط اتاقی که در حال حاضر هستم به ۲٫۸۱ رسیده است. این عدد را دریافت و در جایی یادداشت کنید. در کد بعدی به آن نیاز داریم.

 


محاسبه نسبت RS/RO = Ratio


در نهایت برای محاسبه نسبت RS/RO در پروژه تشخیص گاز شهری با آردوینو با سنسور گازی MQ از فرمول زیر در کد برنامه استفاده می‌کنیم.

ratio = RS_gas/R0;

به جای RO مقدار دریافتی در کد قبلی را جایگزین کنید. کد اصلی برنامه به صورت زیر است.

 

محدودیت در دسترسی کامل به این مجموعه آموزش

 

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

 

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

 

 


استفاده از نمایشگر OLED


در این پروژه از نمایشگر OLED با درایور SSD1306 استفاده می‌کنیم. نمایشگر OLED با توجه به اینکه نسبت به سایر نمایشگرها کوچیکتر و با ابعاد ۰٫۹۶ اینچ است، اما روزلوشن ۱۲۸*۶۴ دارد و کتابخانه ی منحصر به فردی جداگانه برای آن توسعه یافته است. برای نمایش محتوا در OLED از کتابخانه SSD1306 استفاده می‌کنیم. روش نصب کتابخانه در آموزش راه اندازی OLED توضیح داده شده است.

 

نصب کتابخانه Adafuit ssd1306

 

نصب کتابخانه Adafruit_GFX

 


تحلیل کد OLED


برای نمایش متن در نمایشگر OLED از دستور زیر استفاده کنید.

display.println("theladypi");// متن مورد نظر

 

برای انتخاب مکان نما برای نمایش محتوا در نمایشگر oled از دستور زیر استفاده کنید.

display.setCursor(0,0);

 

برای انتخاب سایز نمایش محتوا از دستور زیر استفاده کنید.

display.setTextSize(2);

 


کد آردوینو نشتی گاز


کد آردوینو برنامه در ادامه ضمیمه شده است، آن را کپی و به نرم افزار آردوینو Arduino انتقال دهید.

 

محدودیت در دسترسی کامل به این مجموعه آموزش

 

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

 


اتصالات سنسور گاز MQ


برای استفاده از نمایشگر OLED به رابط I2C نیاز داریم. همچنین سنسور گاز دارای ورودی آنالوگ است و ratio اندازه گیری شده توسط پایه های آنالوگ صورت گرفته است. برای اتصال نمایشگر OLED به آردوینو همانند زیر اجرا کنید.

  • پایه VCC را به ۳٫۳ ولت اتصال دهید.
  • پایه GND را به GND اتصال دهید.
  • پایه SDA را به پایه A4 اتصالا دهید.
  • پایه SCL را به پایه A5 اتصال دهید.

 

برای اتصال ماژول MQ5 به آردوینو همانند زیر اجرا کنید.

  • پایه آنالوگ A را به پایه A0 آنالوگ اتصال دهید.
  • پایه VCC را به پایه ۵ ولت آردوینو اتصال دهید.
  • پایه GND را به پایه GND اتصال دهید.

 


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


 برد آردوینو 

نمایشگر OLED

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

برد بورد و کابل

 


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


با اجرای این پروژه با نشتی گاز شهری در محیط های بسته میتوانید غلظت گاز محیط را بر حسب PPM اندازه گیری و دریافت کنید. بسیاری از کاربران بدون در نظر گرفتن فرمول های ریاضی برای اندازه گیری نسبت مقاومت و نسبت آن اقدام به راه اندازی این کالا می‌کنند. در این صورت عدد به دست آمده همان ولتاژ پایه ی آنالوگ بر روی سنسور است و کاملا اشتباه خواهد بود. برای اندازه گیری پارامتر دقیق سنسور نیاز به محاسبه نسبت RS/RO = Ratio داریم که کامل روند اجرا و کدنویسی آموزش داده شده است. دیتای دریافتی از سنسور محاسبه شده و سپس بر روی نمایشگر OLED نمایش داده می‌شود. 

 

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

 

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

 

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

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

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

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

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

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

۱۶ دیدگاه

  • آموزش کاربردی بود ممنون

    و اما سوال : دلیل اینکه داده های دریافتی از ماژول رو در ۱۰۲۳ ضرب و بعد در ۵ تقسیم میکنیم چی هست ؟

    • سپاس از همراهی شما
      برای محاسبه ی ولتاژ روی پایه از فرمول adc استفاده می‌کنیم. بدین صورت که مقادیر Value دریافتی از پایه آنالوگ را بر ۱۰۲۴ که رنج adc است، تقسیم کرده و سپس در ۵ ولت یعنی بیشتری بازه ی ولتاژ ضرب می‌کنیم.

    • برای تکمیل توضیحات بالا خدمتتون عرض کنم چون adc کنترلر AVR ده بیتی میباشد و ۲ به توان ۱۰ عدد ۱۰۲۴ میشود

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

    • با سلام
      هر کدام از سری سنسورهای MQ مناسب سنجش یک تا ۳ نوع گاز است که بایستی از دیتاشیت کالاها بررسی شود.

  • سلام وقتتون بخیر ممنون بابت آموزش خوبتون ، میشه تو این مدار از mq4 استفاده کرد ؟ آِیا کدها تغییر میکنن؟

    • با سلام
      بایستی از جدول گازی مخصوص MQ4 غلظت را دریافت و در کد جایگزین کنید.