* 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);
}
0 Comments