Smoke Alarm Using MQ-2 Sensor ও Arduino UNO | সহজ DIY প্রকল্প TechnicalWayej.Blogspot.Com

Fire / Smoke Alarm using MQ-2 sensor ও Arduino UNO

# 1) প্রয়োজনীয় উপকরণ

* Arduino UNO ×1

* MQ-2 Gas / Smoke Sensor module (AO + DO + VCC + GND) ×1

* Active buzzer (5V) বা passive buzzer + transistor ×1

* LED (Red) + 220Ω resistor ×1

* Breadboard + jumper wires

* 10 kΩ potentiometer (ঐচ্ছিক, থ্রেশহোল্ড এডজাস্ট করার জন্য)

* (ঐচ্ছিক) 5V relay module — যদি মেইন সার্কিট / বড় এলার্ম চালাতে চাও

* USB cable (Arduino power & programming)

* শর্ট কাগজ/ধোঁয়া জেনারেটর/মাচিস (পরীক্ষার জন্য সতর্কভাবে ব্যবহার)

# 2) হ্যার্ডওয়্যার সংযোগ (Wiring)

MQ-2 module সাধারণত 4 পিন: **VCC**, **GND**, **DO (digital out)**, **AO (analog out)**

সংযোগ:

* MQ-2 VCC → Arduino 5V

* MQ-2 GND → Arduino GND

* MQ-2 AO → Arduino A0 (analog input)

* LED (দীর্ঘ পা = +) → Arduino D13 → 220Ω → LED → GND (বা LED এর রোধ সিরিজ)

* Buzzer + (ওয়্যার) → Arduino D8, Buzzer - → GND

* (ঐচ্ছিক) Potentiometer এর মধ্য PIN → A1, বাকি দুই পিন → 5V এবং GND (থ্রেশহোল্ড হিসেবে পাঠ করে ব্যবহার করা যাবে)

* (রিলে ব্যবহার করলে) Relay IN → Arduino D7, Relay VCC → 5V, GND → GND (Relay ব্যবহার করলে অবশ্যই নিরাপত্তা মানা)

> নোট: যদি passive buzzer ব্যবহার করো এবং সাউন্ড কম হয়, একটি NPN transistor (যেমন 2N2222) + base resistor ~1k ব্যবহার করে Arduino পিন দিয়ে বাইরের পাওয়ার সাপ্লাইতে চালানো ভালো।

# 4) ক্যালিব্রেশন ও থ্রেশহোল্ড সেট করা

1. Arduino প্লাগ ইন করে সিরিয়াল মনিটর (9600 baud) চালাও। শৃঙ্খলহীন পরিবেশে ২–৫ মিনিট বসতি করলে MQ-2 এর বেসলাইন পড়বে। প্রথম বার নতুন সেন্সার হলে **প্রি-হিট** দরকার — 24 ঘণ্টাও বলা হয়, কিন্তু অনেক ক্ষেত্রে 5–30 মিনিটও নরমালি কাজ করে; স্থিতিশীলতা নিশ্চিত করতে হলে 24h প্রি-হিট ভালো।

2. ক্লিন এয়ারে `avg` ভ্যালু লক্ষ্য করো (উদাহরণ: 120)।

3. কোন ধোঁয়া/গ্যাস ধরে নেবার জন্য সিরিয়াল মনিটরে ধোঁয়া নিয়ে দেখা — মান কত বাড়ে জানো। উদাহরণ: ক্লিন=120, ধোঁয়া দিলে ভ্যালু 420। তাই থ্রেশহোল্ড হতে পারে `120 + (420-120)/2 = 270` বা নিরাপদে 300।

4. কোডে `threshold` পরিবর্তন করে তোমার পরিবেশে টিউন করো। ভিডিওতে `potentiometer` ব্যবহার করে রিয়েল টাইমে থ্রেশহোল্ড দেখানো উপকারী (A1 থেকে রিড করে threshold সেট করা যায়)।

# 5) পরীক্ষা করার নিরাপদ উপায়

* ছোট কাগজ জ্বালিয়ে ধোঁয়া নাও, কিন্তু খুলে বাইরে পরীক্ষা করো এবং হাতে পানি রাখো।

* লাইটার বা মাচিসের ঢোঁয়াও ব্যবহার করো সাবধানে — আগুন/ঘন ধোঁয়া ব্যবহার করা বিপজ্জনক।

* পরিবর্তে ধোঁয়া তৈরি করতে ইলেকট্রনিক ধোঁয়া/সিগারেট ভেপ (সতর্কভাবে) বা কুকিং ধোঁয়া ব্যবহার করা যেতে পারে, কিন্তু সবসময় নিরাপত্তা (ফায়ার এক্সটিংগুইশার/পানি) সাথে রাখো।

# 6) সাধারণ সমস্যা ও সমাধান (Troubleshooting)

* **সেন্সর রিডিং খুব আরম্ভে ভিন্ন:** MQ সিরিজ সেন্সর প্রি-হিট দরকার; কয়েক ঘন্টা দিন বা কমপক্ষে 20–30 মিনিট।

* **মিথ্যা এলার্ম (False alarm):** থ্রেশহোল্ড বেশি কম রাখা থাকলে; কিচেনের ধোঁয়া বা স্টোভের কাছাকাছি রাখলে মিথ্যা এলার্ম হতে পারে। পরিবেশ অনুযায়ী থ্রেশহোল্ড বাড়াও।

* **রিডিং স্থিতিশীল না:** পাওয়ার সাপ্লাই ফ্লাকচার বা সিগন্যাল লাইন লম্বা হলে নোইস আসতে পারে — ভাল পাওয়ার ও ছোট ওয়্যার ব্যবহার করো।

* **বাজার/রিলে কাজ করছে না:** Relay module কে external 5V দিয়ে চালানো ঠিক আছে কিনা দেখো; রিলে ইনপুট হয়তো LOW-ট্রিগার করা লাগে—module spec চেক করো।

* **Passive buzzer থেকে সাউন্ড কম:** ট্রানজিস্টর দিয়ে ড্রাইভ করো বা active buzzer ব্যবহার করো।


// // Fire / Smoke Alarm with MQ-2 (Arduino UNO)
// AO read on A0, LED on D13, Buzzer on D8
// Adjust threshold if needed

const int mq2Pin = A0;      // MQ-2 analog output
const int ledPin = 13;      // onboard LED or external LED
const int buzzerPin = 8;    // active buzzer

// initial threshold (tune this for your sensor and environment)
int threshold = 300;  // 0-1023 range; increase to be less sensitive

// smoothing variables
const int samples = 10;
int readings[samples];
int readIndex = 0;
long total = 0;
int average = 0;

unsigned long alarmCooldown = 5000; // prevent continuous spam: 5 seconds between alarms
unsigned long lastAlarmTime = 0;

void setup() {
  Serial.begin(9600);
  pinMode(ledPin, OUTPUT);
  pinMode(buzzerPin, OUTPUT);
  digitalWrite(ledPin, LOW);
  digitalWrite(buzzerPin, LOW);

  // initialize readings array
  for (int i = 0; i < samples; i++) {
    readings[i] = analogRead(mq2Pin);
    delay(50);
  }

  Serial.println("MQ-2 Fire/Smoke Alarm starting...");
  Serial.print("Initial avg reading: ");
  Serial.println(getSmoothedReading());
}

int getSmoothedReading() {
  // simple moving average
  return average;
}

void loop() {
  // --- read and smooth ---
  total = total - readings[readIndex];
  int sensorValue = analogRead(mq2Pin);
  readings[readIndex] = sensorValue;
  total = total + readings[readIndex];
  readIndex = readIndex + 1;
  if (readIndex >= samples) readIndex = 0;
  average = total / samples;

  // optional: print values
  Serial.print("MQ2 raw: ");
  Serial.print(sensorValue);
  Serial.print("  avg: ");
  Serial.println(average);

  // check threshold
  if (average >= threshold) {
    unsigned long now = millis();
    if (now - lastAlarmTime > alarmCooldown) {
      triggerAlarm();
      lastAlarmTime = now;
    }
  } else {
    // normal: turn off alarm
    digitalWrite(ledPin, LOW);
    digitalWrite(buzzerPin, LOW);
  }

  delay(200); // loop delay
}

void triggerAlarm() {
  Serial.println("!!! ALARM: Smoke/Fire detected !!!");
  // blink LED + buzzer pattern
  for (int i = 0; i < 6; i++) {
    digitalWrite(ledPin, HIGH);
    digitalWrite(buzzerPin, HIGH);
    delay(200);
    digitalWrite(ledPin, LOW);
    digitalWrite(buzzerPin, LOW);
    delay(200);
  }
}

int led = 13;

void setup() {
  pinMode(led, OUTPUT);
}

void loop() {
  digitalWrite(led, HIGH);
  delay(1000);
  digitalWrite(led, LOW);
  delay(1000);
}
  
circuit diagram

Post a Comment

0 Comments