ساخت ربات اطفاء حریق با آردوینو | آموزشگاه آزاد فنی و حرفه ای هادی - هادی روبو
آموزشگاه فنی و حرفه ای آزاد هادی (هادی روبو) – در این پروژه گامبهگام یک ربات اطفاء حریق (Fire Fighting Robot) با استفاده از آردوینو طراحی و ساخته میشود. این ربات بهصورت خودکار آتش را تشخیص داده، به سمت آن حرکت کرده و با پمپ آب، آتش را خاموش میکند.
فهرست مطالب
ربات اطفاء حریق چیست؟
ربات اطفاء حریق یک ماشین خودکار یا کنترلشده از راه دور است که برای تشخیص و خاموشکردن آتش بدون دخالت انسان طراحی شده است. این رباتها معمولاً مجهز به سنسورهای پیشرفته برای تشخیص آتش یا دود هستند و از آب، CO2 یا سایر مواد اطفاءکننده برای کنترل شعله استفاده میکنند. در این پروژه، یک ربات اطفاء حریق ساده با آردوینو میسازیم که با استفاده از سنسورهای شعله، آتش را تشخیص داده و به سمت آن حرکت میکند.
قطعات مورد نیاز
- آردوینو UNO
- سنسور شعله (Flame Sensor) – ۳ عدد
- سروو موتور SG90
- درایور موتور L293D
- پمپ آب مینیاتوری DC
- برد بورد کوچک
- شاسی ربات با دو موتور و دو چرخ
- یک قوطی کوچک (به عنوان مخزن آب)
- سیمهای رابط
قطعات کلیدی و عملکرد
| قطعه | مشخصات | عملکرد | عملکرد |
|---|---|---|---|
| آردوینو UNO | ATmega328P، ۵ ولت، ۱۶ مگاهرتز | کنترلگر اصلی | پردازش لحظهای |
| سنسور شعله (۳ عدد) | مادونقرمز، تشخیص ۷۶۰-۱۱۰۰ نانومتر | تشخیص و مکانیابی آتش | برد تشخیص ۰.۸ تا ۳ متر |
| موتورهای DC | ۶ ولت، ۲۰۰ دور در دقیقه | حرکت ربات | حداکثر سرعت ۰.۵ متر بر ثانیه |
| پمپ آب | ۵ ولت DC، دبی ۱۲۰ لیتر در ساعت | خاموشکردن آتش | برد پاشش ۲ متر |
| سروو موتور | SG90، چرخش ۱۸۰ درجه | کنترل جهت پاشش آب | پوشش ±۹۰ درجه |
طرز ساخت ربات اطفاء حریق
هسته اصلی این پروژه آردوینو است که سیستم تشخیص و اطفاء حریق را کنترل میکند. برای تشخیص آتش از ماژول سنسور شعله استفاده میشود که دارای یک گیرنده مادونقرمز (فتودیود) است. زمانی که آتش میسوزد، مقدار کمی نور مادونقرمز ساطع میکند که توسط گیرنده تشخیص داده میشود. اگر آتش تشخیص داده شود، پایه خروجی (DO) پایین (۰ ولت) و در غیر این صورت بالا (۵ ولت) میشود.

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

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

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

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


همانطور که مشاهده میکنید، باله سروو به کف مخزن چسبانده شده و خود سروو با پیچ و مهره به شاسی متصل شده است. مخزن روی سروو قرار گرفته و پمپ داخل آن آب را از طریق لوله به بیرون پمپاژ میکند. کل مخزن با استفاده از سروو میتواند بچرخد تا جهت پاشش آب کنترل شود.
توضیح کد و عملکرد
پس از آمادهسازی سختافزار، کد آردوینو را آپلود کنید. سنسور شعله در صورت تشخیص آتش، خروجی HIGH و در غیر این صورت LOW میدهد. بنابراین باید مرتباً سنسورها را بررسی کنیم تا ببینیم آیا آتش رخ داده است یا خیر.
اگر آتش تشخیص داده نشود، ربات متوقف میماند:
if (digitalRead(Left_S) == 1 && digitalRead(Right_S) == 1 && digitalRead(Forward_S) == 1) {
digitalWrite(LM1, HIGH);
digitalWrite(LM2, HIGH);
digitalWrite(RM1, HIGH);
digitalWrite(RM2, HIGH);
}
اگر آتش در جلو باشد، ربات به سمت جلو حرکت میکند و متغیر fire = true میشود:
else if (digitalRead(Forward_S) == 0) {
digitalWrite(LM1, HIGH);
digitalWrite(LM2, LOW);
digitalWrite(RM1, HIGH);
digitalWrite(RM2, LOW);
fire = true;
}
پس از اینکه متغیر fire برابر true شد، تابع put_off_fire اجرا میشود تا آتش خاموش شود:
while (fire == true) {
put_off_fire();
}
در تابع put_off_fire، ربات متوقف شده، پمپ آب روشن میشود و سروو موتور برای پخش یکنواخت آب به چپ و راست میچرخد:
void put_off_fire() {
delay(500);
digitalWrite(LM1, HIGH);
digitalWrite(LM2, HIGH);
digitalWrite(RM1, HIGH);
digitalWrite(RM2, HIGH);
digitalWrite(pump, HIGH);
delay(500);
for (pos = 50; pos <= 130; pos += 1) {
myservo.write(pos);
delay(10);
}
for (pos = 130; pos >= 50; pos -= 1) {
myservo.write(pos);
delay(10);
}
digitalWrite(pump, LOW);
myservo.write(90);
fire = false;
}
کد کامل پروژه
/*------ کد ربات اطفاء حریق با آردوینو ------*/
#include <Servo.h>
Servo myservo;
int pos = 0;
boolean fire = false;
/*------- تعریف ورودیها ------*/
#define Left_S 9 // سنسور چپ
#define Right_S 10 // سنسور راست
#define Forward_S 8 // سنسور جلو
/*------- تعریف خروجیها ------*/
#define LM1 2 // موتور چپ
#define LM2 3 // موتور چپ
#define RM1 4 // موتور راست
#define RM2 5 // موتور راست
#define pump 6
void setup() {
pinMode(Left_S, INPUT);
pinMode(Right_S, INPUT);
pinMode(Forward_S, INPUT);
pinMode(LM1, OUTPUT);
pinMode(LM2, OUTPUT);
pinMode(RM1, OUTPUT);
pinMode(RM2, OUTPUT);
pinMode(pump, OUTPUT);
myservo.attach(11);
myservo.write(90);
}
void put_off_fire() {
delay(500);
digitalWrite(LM1, HIGH);
digitalWrite(LM2, HIGH);
digitalWrite(RM1, HIGH);
digitalWrite(RM2, HIGH);
digitalWrite(pump, HIGH);
delay(500);
for (pos = 50; pos <= 130; pos += 1) {
myservo.write(pos);
delay(10);
}
for (pos = 130; pos >= 50; pos -= 1) {
myservo.write(pos);
delay(10);
}
digitalWrite(pump, LOW);
myservo.write(90);
fire = false;
}
void loop() {
myservo.write(90);
if (digitalRead(Left_S) == 1 && digitalRead(Right_S) == 1 && digitalRead(Forward_S) == 1) {
// هیچ آتشی تشخیص داده نشده، ربات متوقف میشود
digitalWrite(LM1, HIGH);
digitalWrite(LM2, HIGH);
digitalWrite(RM1, HIGH);
digitalWrite(RM2, HIGH);
}
else if (digitalRead(Forward_S) == 0) {
// آتش در جلو است، ربات به جلو حرکت میکند
digitalWrite(LM1, HIGH);
digitalWrite(LM2, LOW);
digitalWrite(RM1, HIGH);
digitalWrite(RM2, LOW);
fire = true;
}
else if (digitalRead(Left_S) == 0) {
// آتش در سمت چپ است، ربات به چپ میچرخد
digitalWrite(LM1, HIGH);
digitalWrite(LM2, LOW);
digitalWrite(RM1, HIGH);
digitalWrite(RM2, HIGH);
}
else if (digitalRead(Right_S) == 0) {
// آتش در سمت راست است، ربات به راست میچرخد
digitalWrite(LM1, HIGH);
digitalWrite(LM2, HIGH);
digitalWrite(RM1, HIGH);
digitalWrite(RM2, LOW);
}
delay(300);
while (fire == true) {
put_off_fire();
}
}
مشکلات رایج و راهحلها
اگر ربات اطفاء حریق شما به درستی کار نمیکند، نگران نباشید. در ادامه برخی مشکلات رایج و راهحلهای آنها آورده شده است:
- سنسور شعله آتش را تشخیص نمیدهد: موقعیت سنسور را بررسی کنید و مطمئن شوید که در مسیر شعله قرار دارد. حساسیت سنسور را با پتانسیومتر روی ماژول تنظیم کنید. نور محیط ممکن است باعث تداخل شود، بنابراین سنسور را در شرایط نوری مختلف تست کنید.
- ربات حرکت نمیکند: اتصالات درایور موتور را بررسی کنید. مطمئن شوید که ولتاژ مناسب (معمولاً ۱۲ ولت) به درایور میرسد و منبع تغذیه جریان کافی برای موتورها فراهم میکند.
- پمپ آب کار نمیکند: اتصالات رله و پمپ را بررسی کنید. پمپ باید هنگام فعالسازی، ولتاژ دریافت کند. با مولتیمتر ولتاژ پایانههای پمپ را اندازهگیری کنید.
| نوع خطا | علائم | راهحل | پیشگیری |
|---|---|---|---|
| خطای کامپایل | کد آپلود نمیشود، خطای نحوی | بررسی نقطهویرگولها و تطابق براکتها | استفاده از قالببندی خودکار IDE |
| خطای منطقی | رفتار نادرست ربات | افزودن Serial.print() برای اشکالزدایی | تست هر تابع بهصورت جداگانه |
| مشکل زمانبندی | حرکت نامنظم، سیگنالهای از دست رفته | تنظیم مقادیر delay()، استفاده از millis() | برنامهریزی زمانبندی از ابتدا |
| سرریز حافظه | ریست شدن تصادفی، عملکرد ناپایدار | بهینهسازی کد، کاهش متغیرها | مانیتورینگ حافظه در IDE |
نتیجهگیری و توسعههای آینده
در این پروژه، موفق به ساخت یک ربات اطفاء حریق مبتنی بر آردوینو شدیم که میتواند آتش را تشخیص داده و بهصورت خودکار خاموش کند. با ترکیب سنسورهای شعله، پمپ آب موتوری و سیستم پاشش آب کنترلشده با سروو، ربات بهطور کارآمد آتش را پیدا کرده و خاموش میکند. این طراحی ساده و در عین حال مؤثر، پتانسیل رباتیک را در کاربردهای ایمنی آتشنشانی نشان میدهد. با توسعههای بیشتر مانند سنسورهای پیشرفته و ناوبری مبتنی بر هوش مصنوعی، میتوان این پروژه را برای سناریوهای واقعی اطفاء حریق گسترش داد.
سوالات متداول
ربات اطفاء حریق مبتنی بر آردوینو چگونه کار میکند؟
این ربات با استفاده از سه سنسور شعله که تشعشعات مادونقرمز ناشی از آتش را تشخیص میدهند، کار میکند. آردوینو دادههای سنسورها را پردازش کرده و موقعیت آتش را پیدا میکند. سپس موتورهای DC را برای حرکت به سمت آتش کنترل میکند. پس از رسیدن به موقعیت، سیستم پمپ آب با سروو موتور آب را به سمت آتش پاشش میکند. کل فرآیند خودکار است و به دخالت انسانی نیاز ندارد.
قطعات ضروری برای ربات اطفاء حریق آردوینو چیست؟
قطعات ضروری شامل: میکروکنترلر آردوینو UNO، ۳ سنسور شعله مبتنی بر مادونقرمز، درایور موتور L293D، ۲ موتور DC با شاسی، سروو موتور SG90، پمپ آب ۵ ولت، مخزن آب، سیمهای رابط و برد بورد است. هزینه کل حدود ۲,۵۰۰ تا ۳,۵۰۰ تومان است.
ربات اطفاء حریق آردوینو تا چه فاصلهای آتش را تشخیص میدهد؟
فاصله تشخیص آتش بین ۰.۸ تا ۳ متر است که به اندازه شعله و شرایط نور بستگی دارد. شعلههای کوچک مانند کبریت از ۰.۸ تا ۱.۲ متر و شعلههای بزرگ مانند شمع تا ۳ متر قابل تشخیص هستند. دقت تشخیص در نور مستقیم خورشید یا با منابع آتش بسیار کوچک کاهش مییابد.
زمان پاسخدهی ربات اطفاء حریق آردوینو چقدر است؟
زمان پاسخدهی معمولاً کمتر از ۲ ثانیه بین تشخیص آتش و حرکت ربات است. این شامل زمان پردازش سنسور (۱۰۰-۲۰۰ میلیثانیه)، تصمیمگیری آردوینو (۵۰-۱۰۰ میلیثانیه) و زمان راهاندازی موتور (۲۰۰-۳۰۰ میلیثانیه) است. فعالسازی پاشش آب ۰.۵ تا ۱ ثانیه اضافه میکند. کل زمان بین تشخیص و پاشش آب حدود ۲.۵ تا ۳ ثانیه است.
جمعبندی از آموزشگاه فنی و حرفه ای آزاد هادی (هادی روبو)
تمام مراحل این پروژه در آموزشگاه فنی و حرفه ای آزاد هادی با رویکرد عملی و پروژهمحور تدریس میشود. با ساخت این ربات اطفاء حریق، مباحث کلیدی مانند سنسور شعله، درایور موتور L293D، سروو موتور، برنامهنویسی آردوینو و منطق کنترل خودکار را بهصورت کاربردی فرا خواهید گرفت.
نظرات (0)
پیام بگذارید