💨 سنسور گاز MQ-2 با آردوینو: تشخیص دود و گاز، گرم شدن، آستانه و آژیر

✍️ تیم ووکوی فارسی ·

آشپزخانه‌ای که بوی گاز گرفته، اتاقی که دود سیگار در آن مانده، یا انباری که باید تهویه شود؛ همه‌ی این‌ها با یک سنسور ارزان قابل تشخیص‌اند: سنسور گاز MQ-2. این سنسور به دود، گاز شهری (متان)، پروپان و بوتان کپسول، هیدروژن و حتی بخار الکل حساس است. در این آموزش می‌بینیم سنسور MQ2 چطور کار می‌کند، چرا داغ می‌شود و چرا باید گرم شود، کدام پایه را به آردوینو بدهیم و یک هشداردهنده‌ی هوشمند می‌سازیم که اول «هوای تمیز» اتاق را یاد می‌گیرد و بعد آژیر می‌زند. این مدار را می‌توانی مثل کاربران ووکوی (Wokwi) اول در شبیه‌ساز بسازی و رایگان امتحان کنی.

⚠️ این پروژه برای یادگیری الکترونیک است و جای دزدگیر گاز استاندارد را نمی‌گیرد. برای تست، هرگز شیر گاز را باز نکن و آتش روشن نکن؛ کمی الکل یا ژل ضدعفونی روی یک تکه پنبه، نزدیک سنسور، برای دیدن تغییر عدد کافی است.

MQ-2 چطور گاز را حس می‌کند؟

قلب سنسور یک لوله‌ی سرامیکی کوچک است که رویش لایه‌ای از اکسید قلع (SnO2) کشیده‌اند و داخلش یک سیم گرم‌کن هست. وقتی لایه داغ است، در هوای تمیز اکسیژن روی سطحش می‌نشیند و جلوی عبور الکترون‌ها را می‌گیرد؛ مقاومت بالاست. وقتی گازی قابل اشتعال یا دود می‌رسد، با آن اکسیژن واکنش می‌دهد، الکترون‌ها آزاد می‌شوند و مقاومت پایین می‌آید. ماژول این مقاومت را با یک مقسم ولتاژ به ولتاژ تبدیل می‌کند، پس گاز بیشتر یعنی ولتاژ و عدد بیشتر روی AO.

گرم‌کن حدود ۱۵۰ میلی‌آمپر از ۵ ولت می‌کشد؛ برای همین سنسور گرم می‌شود و بوی کمی هم در اولین روشن شدن‌ها طبیعی است. این جریان را پین 5V آردوینو با تغذیه‌ی USB تأمین می‌کند، ولی هیچ‌وقت VCC سنسور را به یک پین دیجیتال وصل نکن.

پایه‌های ماژول MQ-2

پایهکارش
VCC۵ ولت (گرم‌کن به ۵ ولت نیاز دارد)
GNDزمین
AOخروجی آنالوگ: هرچه گاز بیشتر، ولتاژ بیشتر
DOخروجی دیجیتال: در بیشتر ماژول‌ها وقتی گاز از آستانه‌ی پیچ بیشتر شود LOW می‌شود و LED روی ماژول روشن می‌شود

DO برای «بله یا نه» خوب است، ولی تنظیمش با پیچ و بدون دیدن عدد سخت است. ما از AO استفاده می‌کنیم تا آستانه را در کد و با عدد واقعی تعیین کنیم.

قطعه‌ها و سیم‌کشی

قطعهپایهآردوینو
MQ-2VCC5V
MQ-2GNDGND
MQ-2AOA0
MQ-2DOوصل نمی‌شود (اختیاری)
LEDآند از راه ۲۲۰ اهم / کاتدپین 9 / GND
بازر+ / −پین 8 / GND

کد کامل: هشدار با یادگرفتن هوای تمیز

// MQ-2 gas / smoke sensor on an Arduino Uno: warm-up, baseline, alarm.
const int GAS_PIN = A0;          // AO of the module
const int LED_PIN = 9;
const int BUZZER_PIN = 8;
const unsigned long WARMUP_MS = 60000;   // the heater needs time after power-on
const int MARGIN_ON  = 150;      // alarm when this much above clean air
const int MARGIN_OFF = 100;      // calm again only below this

int baseline = 0;
bool alarmOn = false;

void setup() {
  Serial.begin(9600);
  pinMode(LED_PIN, OUTPUT);
  pinMode(BUZZER_PIN, OUTPUT);

  Serial.println("Heating the sensor...");
  while (millis() < WARMUP_MS) {
    digitalWrite(LED_PIN, (millis() / 500) % 2);   // slow blink while warming
  }
  digitalWrite(LED_PIN, LOW);

  long sum = 0;                   // average of clean air = baseline
  for (int i = 0; i < 20; i++) {
    sum += analogRead(GAS_PIN);
    delay(50);
  }
  baseline = sum / 20;
  Serial.print("Clean-air baseline: ");
  Serial.println(baseline);
}

void loop() {
  int gas = analogRead(GAS_PIN);

  if (!alarmOn && gas > baseline + MARGIN_ON)  alarmOn = true;
  if (alarmOn && gas < baseline + MARGIN_OFF)  alarmOn = false;

  if (alarmOn) {
    digitalWrite(LED_PIN, HIGH);
    tone(BUZZER_PIN, 2000, 150);   // two-tone siren
    delay(150);
    tone(BUZZER_PIN, 1400, 150);
    delay(150);
  } else {
    digitalWrite(LED_PIN, LOW);
    noTone(BUZZER_PIN);
    delay(200);
  }

  Serial.print("gas:");
  Serial.print(gas);
  Serial.print(" limit:");
  Serial.println(baseline + MARGIN_ON);
}

توضیح کد

💡 MQ-2 به‌تنهایی نمی‌گوید «کدام گاز» یا «چند ppm». تبدیل عدد به ppm محاسبه‌ی Rs/R0 و منحنی برگه‌ی مشخصات را لازم دارد و تازه آن هم تقریبی است. برای هشدار، همین «چقدر بالاتر از هوای تمیز» کافی و قابل اعتمادتر است.

پروژه‌ی کوچک: هشدار دوسطحی با فن تهویه

یک سیستم واقعی‌تر سه حالت دارد: سبز یعنی هوا تمیز است، زرد یعنی هشدار و فن تهویه روشن شود، قرمز یعنی خطر و آژیر. سه LED روی پین‌های 11، 10 و 9، بازر روی 8 و یک رله برای فن روی پین 7 می‌گذاریم. این بار برای سادگی آستانه‌ها ثابت‌اند؛ عددهایشان را از نمودار سنسور خودت بردار.

// Mini project: two-level gas alarm with an exhaust fan on a relay.
const int GAS_PIN = A0;
const int GREEN_LED = 11;
const int YELLOW_LED = 10;
const int RED_LED = 9;
const int BUZZER_PIN = 8;
const int FAN_RELAY = 7;
const int WARN_LEVEL = 300;     // set both from your own clean-air readings
const int DANGER_LEVEL = 450;

void setup() {
  Serial.begin(9600);
  pinMode(GREEN_LED, OUTPUT);
  pinMode(YELLOW_LED, OUTPUT);
  pinMode(RED_LED, OUTPUT);
  pinMode(BUZZER_PIN, OUTPUT);
  pinMode(FAN_RELAY, OUTPUT);
}

void loop() {
  int gas = analogRead(GAS_PIN);
  int level = 0;                         // 0 = ok, 1 = warning, 2 = danger
  if (gas > WARN_LEVEL) level = 1;
  if (gas > DANGER_LEVEL) level = 2;

  digitalWrite(GREEN_LED, level == 0 ? HIGH : LOW);
  digitalWrite(YELLOW_LED, level == 1 ? HIGH : LOW);
  digitalWrite(RED_LED, level == 2 ? HIGH : LOW);
  digitalWrite(FAN_RELAY, level >= 1 ? HIGH : LOW);   // fan on from "warning"

  if (level == 2) tone(BUZZER_PIN, 2500);
  else noTone(BUZZER_PIN);

  Serial.print("gas:");
  Serial.println(gas);
  delay(300);
}

فن از سطح «هشدار» روشن می‌شود تا قبل از رسیدن به خطر، هوا را عوض کند. اگر بخواهی این را با سنسور شعله و دما به یک سیستم اعلام حریق کامل تبدیل کنی، سیستم اعلام حریق با آردوینو دقیقاً همین را می‌سازد. برای وصل کردن فن واقعی به رله هم آموزش ماژول رله را بخوان.

اجرا در شبیه‌ساز، رایگان

سنسور گاز MQ-2 در تینکرکد فارسی جزو قطعه‌های رایگان است. نسخه‌ی شبیه‌ساز سه پایه دارد: VCC، GND و OUT که همان خروجی آنالوگ AO است؛ OUT را به A0 بده و بقیه‌ی مدار را مثل جدول بالا بچین. در مود ساده (بدون کد) هم وقتی سنسور را انتخاب کنی، اسلایدر «غلظت گاز» را داری و می‌توانی با یک بازر و باتری ببینی سنسور چطور واکنش می‌دهد. اگر هنوز با خواندن سنسورهای آنالوگ راحت نیستی، سنسور چیست؟ و راهنمای سنسورهای آردوینو شروع خوبی‌اند. اگر چیزی کار نکرد، دیباگ قدم‌به‌قدم در شبیه‌ساز کمک می‌کند خط به خط ببینی متغیرها چه می‌شوند.

اشکال‌های رایج

سنسورهای دیگر را در بخش سنسورها و ماژول‌ها ببین؛ مثلاً DHT22 برای دما و رطوبت که کنار MQ-2 یک ایستگاه کیفیت هوا می‌سازد.

مدار سنسور گاز را در شبیه‌ساز بچین 💨

سؤال‌های رایج

چرا سنسور MQ-2 داغ می‌شود؟

داخل آن یک گرم‌کن کوچک هست که لایه‌ی حساس را تا چند صد درجه داغ نگه می‌دارد؛ بدون این گرما سنسور اصلاً به گاز واکنش نشان نمی‌دهد. پس گرم شدنش طبیعی است، ولی به آن دست نزن.

سنسور MQ-2 چقدر طول می‌کشد تا آماده شود؟

بعد از هر بار روشن شدن حدود یک تا چند دقیقه طول می‌کشد تا عددش ثابت شود. سنسور نو هم بهتر است بار اول چند ساعت (طبق برگه‌ی مشخصات تا ۲۴ ساعت) روشن بماند تا کاملاً جا بیفتد.

آیا می‌شود از MQ-2 به‌جای دزدگیر گاز خانه استفاده کرد؟

نه. این پروژه برای یادگیری است. MQ-2 کالیبره‌ی استاندارد ندارد و جای دتکتور گاز و دود استاندارد و تأییدشده را نمی‌گیرد.

مقاله‌های مرتبط

🔢

کیپد ۴×۴ با آردوینو: طرز کار ماتریسی، کتابخانه‌ی Keypad و قفل رمزدار با سروو

🔢

نمایشگر سون‌سگمنت ۴ رقمی TM1637 با آردوینو: عدد، دونقطه و تایمر معکوس

⏰

ماژول ساعت DS3231 با آردوینو: ساعت و تاریخی که با قطع برق هم گم نمی‌شود

🔧

کد آردوینو کار نمی‌کند؟ ۱۵ علت رایج، از سیم‌کشی تا تغذیه، با راه‌حل هر کدام

همه‌ی آموزش‌های سنسورها و ماژول‌ها ← · همه‌ی مقاله‌ها