چگونه سنسور گاز MQ9 را کالیبره کرده و با آردوینو استفاده کنیم؟

فهرست مطالب

مقدمه

در این آموزش قصد داریم نحوه عملکرد سنسور MQ9 و طریقه استفاده از آن به کمک یک بورد آردوینو را به شما آموزش دهیم.

آنچه در این آموزش می آموزید:

سنسور گاز چیست و چگونه کار می کند؟

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

سنسورهای گاز سری MQ

سری MQ رایج ترین سنسورهای گاز موجود هستند، این سری مدل های مختلف برای تشخیص گاز های مختلف دارد که برخی از آنها در زیر اشاره شده است:
Sensor Name Detectable gas
MQ2 Methane , Butane , LPG , Smoke
MQ3 Alcohol , Methanol , Smoke
MQ8 Hydrogen
MQ9 Carbon monoxide , Flammable gases
MQ131 Ozone
MQ135 Air quality
MQ216 Natural gas , Coal gas
MQ137 Ammonia
MQ4 Methane , CNG gas
نحوه کار با این سنسورها تقریبا یکسان است، و در اینجا با نحوه کار با MQ9 آشنا می شویم.
سنسور MQ9 یک سنسور حساس به منواکسید کربن و گازهای قابل اشتعال است که می تواند غلظت مونواکسید کربن را از 10 تا 1000 ppm و غلظت گازهای قابل اشتعال را از 100 تا 10000 ppm تشخیص دهد این سنسور دارای یک هیتر داخلی است که با اعمال ولتاژ 5v شروع به گرم شدن می کند؛ پس نگران گرم شدن سنسور خود نباشید! با تغییر غلظت گازهای قابل تشخیص این سنسور مقاومت داخلی آن تغییر می کند. می توانید با یک مدار ساده این مقدار را خوانده و به ppm تبدیل کنید. ماژول های موجود در بازار مدار مورد نیاز را پیاده سازی کرده اند و نیاز به اضافه کردن قطعه دیگری ندارید. این سنسور کاربردهای مختلفی از جمله تشخیص نشتی گاز داخلی و صنعتی و تشخیص دهنده گاز قابل حمل، دارد.

نحوه استفاده از سنسور MQ9 با آردینو

این سنسور برای انتقال داده درست به دو گام اولیه نیاز دارد:
  1. MQ9 به 24 تا 48 ساعت preheat نیاز دارد، این به آن معناست که تغذیه سنسور خود را متصل کرده و سنسور را برای زمان preheat رها کنید تا آماده انتقال صحیح اطلاعات شود.
  2. در ابتدای کار باید سنسور خود را کالیبره کنید که در قسمت بعدی به آن اشاره کرده ایم.

سیم بندی

این ماژول 4 پایه دارد، Vcc را به 5 ولت، GND را به GND متصل کنید. پایه AO مقداری انالوگ با توجه به غلظت گاز برمی گرداند و پایه DO براساس میزان حساسیت تنظیم شده برای سنسور نسبت به یک غلظت مشخص، درصورت عبور میزان غلظت گاز از آن مقدار خروجی HIGH می دهد. میزان این حساسیت را می توانید با پتانسیومتر موجود روی ماژول تغییر دهید.
نکات
  1. این سنسور را در معرض آب و یخ زدگی قرار ندهید.
  2. اعمال ولتاژ بالاتر از حد مجاز(5 ولت) یا اعمال ولتاژ به پایه های اشتباه باعث آسیب دیدن سنسور می شود.
  3. قرار گیری طولانی مدت در غلظت های خیلی بالای گاز ممکن است برروی سنسور اثر منفی بگذارد.
  4. تکان دادن و یا در معرض لرزش هایی مانند لرزش التراسونیک قرار دادن سنسور، ممکن است باعث کاهش دقت آن شود.

چگونه سنسور MQ9 را کالیبره کنیم؟

در اولین استفاده لازم است شما سنسور را کالیبره کنید. این سنسور بر مبنای یک نسبت مقاومتی غلظت گاز را محاسبه می کند. این نسبت مقاومتی شامل یک R0 و یک Rs می باشد که R0 مقدار مقاومت سنسور در غلظت 1000ppm از LPG می باشد و Rs مقدار مقاومت داخلی سنسور است که با شدت گاز تغییر می کند. در یک هوای پاک، پس از preheat کد زیر را برروی آردوینو ریخته و مدتی صبر کنید (چیزی حدود 15 دقیقه) تا مقدار R0 ثابت شود و سپس این مقدار را جایی یادداشت کنید.
/* 
 
MQ9 Calibration 
 
modified on 19 Feb 2019 
by Saeed Hosseini 
Home
*/ void setup() { Serial.begin(9600); } void loop() { float sensor_volt; float RS_air; // Rs in clean air float R0; // R0 in 1000 ppm LPG float sensorValue; //Average 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; // Depend on RL on yor module R0 = RS_air/9.9; // According to MQ9 datasheet table Serial.print("sensor_volt = "); Serial.print(sensor_volt); Serial.println("V"); Serial.print("R0 = "); Serial.println(R0); delay(1000); }
همانطور که در کد بالا مشاهده می کنید، در گام اول برای داشتن دیتای پایدار از 100 مقدار اندازه گیری شده توسط سنسور میانگین میگیریم. سپس ولتاژ سنسور را محاسبه می کنیم و بعد از آن با توجه به مقاومت RL روی ماژول(برای ما 5k) میزان Rs را محاسبه می کنیم و در نهایت با توجه به جدول موجود در دیتاشیت ماژول مقدار R0 را می یابیم.

کد

توجه
مقدار R0 در کد زیر را با مقدار بدست آمده در مرحله کالیبراسیون جایگزین کنید.
/* 
 
  MQ9 
 
  modified on 19 Feb 2019 
  by Saeed Hosseini 
  
Home
*/ const int LED = 2; const int DO = 8; void setup() { Serial.begin(9600); pinMode(LED, OUTPUT); pinMode(DO, INPUT); } void loop() { int alarm = 0; float sensor_volt; float RS_gas; float ratio; //-Replace the name "R0" with the value of R0 in the demo of First Test -/ float R0 = 0.91; int sensorValue = analogRead(A0); sensor_volt = ((float)sensorValue / 1024) * 5.0; RS_gas = (5.0 - sensor_volt) / sensor_volt; // Depend on RL on yor module ratio = RS_gas / R0; // 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"); alarm = digitalRead(DO); if (alarm == 1) digitalWrite(LED, HIGH); else if (alarm == 0) digitalWrite(LED, LOW); delay(1000); }

یک گام جلوتر

  • سعی کنید با توجه به جدول مقدار گاز را برحسب ppm بیان کنید.
  • سعی کنید یک هشدار دهنده هوشمند نشتی گاز CO بسازید.

سنسور گاز MQ9 بخرید

از این مطلب خوشتان آمد؟

آخرین مطالت و آموزش ها را در ایمیلتان دریافت کنید:

مطالب بیشتر

Comments (20)

  • John Reply

    Best tutorial about using the gas sensor in the whole internet.
    Keep up the good work!

    آوریل 15, 2019 at 11:18 ق.ظ
    • mohammad Reply

      Thank you for your kind comment. We always try to do our best.

      آوریل 15, 2019 at 7:41 ب.ظ
  • مهدی Reply

    سلام
    خیلی مطلب عالی و کاملی رو گذاشتین، میشه گفت توی اینترنت تکه
    در یک مورد کمی گیج شدم ممنون میشم راهنماییم کنید:
    شما گفتید “R0 مقدار مقاومت سنسور در غلظت 1000ppm از LPG می باشد و Rs مقدار مقاومت داخلی سنسور است که با شدت گاز تغییر می کند. در یک هوای پاک، پس از preheat کد زیر را برروی آردوینو ریخته و مدتی صبر کنید (چیزی حدود 15 دقیقه) تا مقدار R0 ثابت شود و سپس این مقدار را جایی یادداشت کنید.”
    این مقدار R0 یجا گفتید در 1000 ppm از LPG بعد برای گرفتن میزان R0 نوشتید در هوای پاک و چیزی از 1000ppm LPG نگفتید، این مورد بخاطر در دسترس نبودن میزان 1000ppm LPG هستش یا کلا نیازی نیست؟ در کل اگر شخصی این گاز LPG رو با میزان 1000ppm داشته باشه همین آزمایش رو باید انجام بده اما بجای هوای پاک از گاز lpg استفاده کنه؟

    فوریه 20, 2020 at 12:12 ب.ظ
    • سعید حسینی Reply

      با سلام، ممنون از نظرتون
      اگر در اختیار دارید بله

      فوریه 29, 2020 at 9:18 ق.ظ
  • بهنام Reply

    سلام این متودی که نوشتید برای سنسور MQ131 هم کاربرد دارد؟ و این که اگر از سنسور MQ131 استفاده شود چه تغییری در کد ایجاد میشود ؟

    فوریه 17, 2021 at 11:39 ق.ظ
    • مهران ملکی Reply

      سلام.
      بله نحوه کار سنسورهای سری MQ مشابه همدیگه ست و اگر بخواهید از سنسور MQ131 استفاده کنید باید: مقادیر R0 و Rl را مطابق با دیتاشیت سنسور و شرایط خود تعیین کنید. همچنین نمودار آورده شده در انتهای آموزش را با نمودار خاص سنسور مورد استفاده خود که در دیتاشیت موجود تعویض کنید.

      فوریه 17, 2021 at 6:27 ب.ظ
  • کاوه Reply

    سلام، مقدار RL موجود بر روی ماژولی که من از شما خریداری کردم 1K هست نه 5K، از طرفی بر اساس دیتاشیت سنسورهای MQ9 مقادیر نمودارها با توجه به RL برابر 10K تهیه شده اند. به نظر شما چطور می شه صرفا با تغییر در کد و یا تغییر در مقادیر نمودارها به مقدار PPM صحیح رسید؟ میخوام مجبور به لحیم کاری روی بورد نشم.

    دسامبر 27, 2021 at 11:52 ق.ظ
    • مهران ملکی Reply

      سلام
      در کد مربوط به کالیبراسیون، خط 30، مربوط به محاسبه RS هست که وابسته به مقدار RL هست. می‌تونید این خط رو با توجه به مقدار RL ماژول خودتون که 1KOhm هست با ;RS_air = (1.0-sensor_volt)/sensor_volt جایگزین کنید. بقیه مراحل کار مشابه آموزش هست.

      دسامبر 28, 2021 at 9:13 ق.ظ
      • کاوه Reply

        سلام مجدد جناب ملکی عزیز
        آقا من فکر میکنم در کد مورد نظر اساسا اون عدد 5 در فرمول، میزان Vcc هست که 5 ولت هست نه RL، بهتره ادامه بحث رو در انجمن پیگیری کنم، به نظر من بجز بحث RL که حتما باید سخت افزاری حل بشه بحث محاسبه مقدار ppm هر گاز هم برای علاقمندان مطرحه که جاش اینجا نیست.

        ژانویه 9, 2022 at 11:10 ق.ظ
        • مهران ملکی Reply

          بله. میتونید سوالتون رو در انجمن مطرح کنید.

          ژانویه 9, 2022 at 4:14 ب.ظ
  • مجید Reply

    سلام. ینی همیشه قبل از استفاده از سنسور نیازمند 24 ساعت است که هیترش گرم بشه یا همون دفعه اول؟

    ژانویه 26, 2022 at 9:42 ب.ظ
    • مهران ملکی Reply

      سلام.
      نه فقط برای بار اول و انجام کالیبراسیون سنسور لازم هست که اینا کار انجام بشه.

      ژانویه 29, 2022 at 11:10 ق.ظ
  • سیدرضاقوی بازو Reply

    1-سلام خسته نباشید ببخشید شما گفتید که زمان 24تا48ساعته فقط برای دفعه اول نیاز هست .خب من میخوام این سنسور رادر یک دستگاه بگذارم .
    و هرفردی که میخواهد ازان دستگاه میخواهد استفاده کند مکانش نیز قاعدتا تغیر میکند دراون صورت دوباره به اون تایم 24تا48ساعته نیاز داره یا اون کالیبراسونی که مقدار r0رو بذست می اورد؟ممنونم ازتون.
    2-سوال دوم این هست که مثلن نوشتید این سنسور توانایی تشخیص گازهای lpg . co. ch4رادارد یعنی با این سنور میشه مقدار ppmهای هرکدوم از این گازهارو باهم حساب کرد؟

    آوریل 7, 2022 at 5:31 ب.ظ
    • مهران ملکی Reply

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

      آوریل 9, 2022 at 11:10 ق.ظ
  • عباس قوامی Reply

    با عرض سلام و خسته نباشید و درود فراوان
    با تشکر از مطلاب خیلی خوبی که گذاشتین باید بگم که کد شما در یکجا مشکل داره و در یکجای دیگه در قسمت توضیحات اشتباهی مطلبی رو نوشتین
    این اگر اصلاح بشه کار فوق العادتون عالی میشه
    دوستان هم به این دو نکته که عرض میکنم توجه کنن :

    1 : در قسمت کد کالیبراسیون ، قسمت میانگیری کردن از مقدار آنالوگ اینپوت چون جنس متغییری که اون مقدار داخل حلقه for رو در خودش ذخیره میکنه از جنس float هست ، مقدارش از ماکزیمم حالتش overflow میکنه و از بازه مقدار عدد مجاز متغیر float خارج هست چرا ؟ چون مقدار A0 مقداریست بین 0 تا 1024 در نتیجه شما حد وسط رو در نظر بگیرید 500 ، وقتی که 100 بار 500 + 500 میشه با یه ضرب ساده 100*500 عدد به دست اومده 50,000 میشه در صورتی که ماکزیمم عدد متغیر float تا عدد 65,535 هستش پس اگر با تغییر مقدار A0 به کمی بیش از عدد 500 ، به راحتی این متغییر overflow میشه

    2 : RS_gas = (5.0 – sensor_volt) / sensor_volt; // Depend on RL on yor module برای این خط از کد توی توضیحات نوشته شده : بعد از آن با توجه به مقاومت RL روی ماژول(برای ما 5k)
    باید عرض کنم اون عدد 5.0 نوشته شده هیچ ربطی به مقدار مقاومت RL نداره و اینکه مقدار مقاومت RL ماژول های mq9 اکثرا 1 کیلو هستش و این فرمول :
    RS_gas = (5.0 – sensor_volt) / sensor_volt;
    ساده شده یک فرمول ریاضیه برای بدست اوردن مقدار مقاومت mq9 زمانی که RL یک کیلو اهمی با ماژول سری شده و درست هستش
    اما توی توضیحات به اشتباه نوشته شده مقاومت RL پنج کیلو !! که آدم رو با 5 توی فرمول به اشتباه میندازه
    این فرمول از قانون تقسیم مقاومتی به دست اومده
    هرگاه ما دوتا مقاومت سری داشته باشیم
    یکی از اون مقاومت ها معلوم و دیگری مجهول باشه
    با متصل کردن این مقاومت ها به یک ولتاژی و اندازه گیری افت ولتاژ بین آن ها میتوان مقاومت مجهول رو بدست اورد که این فرمول ساده شده همین حرفیه که زدم
    با تشکر

    دسامبر 12, 2022 at 2:54 ب.ظ
  • Ali Narimani Reply

    سلام
    در قسمت کالیبراسیون به نظرتون نیازی نیست با هر بار میانگین گرفتن مقدار sensorValue را صفر کنیم
    مثلا خط 19 را با float sensorValue = 0; جایگزین کنیم

    فوریه 24, 2023 at 8:46 ق.ظ
  • Ali Narimani Reply

    داخل سایت https://electropeak.com هم که فکر کنم مال خودتون باشه یه نفر هم همینو گفته بود
    There is an error in the code!

    Change this:

    float sensorValue;

    with:

    float sensorValue = 0;

    And everything will be fine!

    فوریه 24, 2023 at 8:55 ق.ظ
  • محمد Reply

    سلام وقت بخیر
    بنده فقط نیاز به پایه دیجیتال آن را دارم که با استفاده از میکرو شیر برقی گاز را قطع کند ایا من از همان پایه دیجیتال استفاده کنم و دیگر نیاز به کالیبره نیست؟

    آوریل 12, 2023 at 3:37 ب.ظ
    • محمد دمیرچی Reply

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

      آوریل 15, 2023 at 11:53 ق.ظ
  • محمد رضا Reply

    سلام کالیبراسیون برای سنسور MQ_4 چگونه است؟

    آوریل 10, 2024 at 3:01 ب.ظ

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

نشانی ایمیل شما منتشر نخواهد شد.