ระบบป้องกันอัคคีภัย (Fire Protection System)

ผู้เขียนบทความ : นายสิรวิทย์ จิระกาล COE#15

คณะวิศวกรรมศาสตร์ : สาขาวิศวกรรมคอมพิวเตอร์

วิชา : 40-513-201การโปรแกรมคอมพิวเตอร์ขั้นสูง 1/2566

1.ความเป็นมา

อัคคีภัยเป็นภัยอันตรายที่เกิดจากไฟที่ขาดการควบคุมดูแล ทำให้เกิดการติดต่อลุกลามไปตามบริเวณที่มี
เชื้อเพลิงเกิดการลุกไหม้ต่อเนื่อง สภาวะของไฟจะรุนแรงมากขึ้น ถ้าการไหม้ที่มีเชื้อเพลิงหนุนเนื่องหรือมีไอของ
เชื้อเพลิงถูกขับออกมามากความร้อนก็จะมากยิ่งขึ้น สร้างความสูญเสียให้ทั้งชีวิตและทรัพย์สิน ส่วนสาเหตุใหญ่ๆที่
ทำให้เกิดอัคคีภัย มีอยู่ 2 สาเหตุ คือ สาเหตุที่เกิดจากความตั้งใจ และสาเหตุที่เกิดจากความไม่ตั้งใจหรือความ
ประมาท ผลที่เกิดขึ้นจากอัคคีภัยโดยตรงที่ทำให้เกิดการบาดเจ็บและสูญเสียชีวิตอันเนื่องมาจากความร้อน เกิด
ความเสียหายแก่อาคาร บ้านเรือน ข้าวของเครื่องใช้ต่าง ๆ เป็นต้น ซึ่งระบบช่วยเหลือและป้องกันอัคคีภัย V.2 นั้น
พัฒนามาจาก ระบบช่วยเหลือและป้องกันอัคคีภัย V.1 ซึ่งระบบช่วยเหลือและป้องกันอัคคีภัย V.1 นั้น จะมีแค่ห้อง
จำลองสถานการณ์เพียงเดียว แต่ V.2 นั้นจะมี 2 ห้อง เพื่อที่จะแสดงให้เห็นว่าห้องที่มีเพียงควันอย่างเดียว ไม่มี
เปลวไฟ ระบบจะไม่ปล่อยน้ำลงมาในห้องนั้น ระบบช่วยเหลือและป้องกันอัคคีภัย V.2 นั้น ได้แนวคิดและการ
พัฒนาจากการอบรมของมูลนิธิเทคโนโลยีสารสนเทศตามพระราชดำริสมเด็จพระเทพรัตนราชสุดา ฯ สยามบรม
ราชกุมารีโดยมีคณะวิทยากรคอยให้คำแนะนำเกี่ยวกับเรื่องการเขียนโปรแกรมและระบบต่างๆที่เกี่ยวข้องกับ
โครงงาน
ดังนั้นหากเรามีเครื่องที่สามารถควบคุมการลุกลามของไฟ ช่วยให้ลดการสูญเสียทั้งชีวิตและทรัพย์สิน เป็น
การช่วยให้ผู้ที่ประสบภัยสามารถหนีหรือควบคุมไม่ให้ไฟลุกลามไปยังส่วนต่างของบ้านเรือน ผู้จัดทำโครงงานจึงมี
ความสนใจ ในการพัฒนาระบบช่วยเหลือผู้ประสบอัคคีภัย โดยใช้ บอร์ด KidBright ที่สามารถท างานได้ลดอัตรา
การสูญเสีย แล้วยังสามารถนำไปประยุกต์ใช้งานได้จริงและนำไปพัฒนาต่อไป

2.วัตถุประสงค์

  1. เพื่อพัฒนาระบบช่วยเหลือผู้ประสบอัคคีภัย โดยใช้บอร์ด KidBright
  2. เพื่อช่วยลดอัตราการสูญเสียที่อาจจะเกิดขึ้นเมื่อเกิดอัคคีภัย
  3. เพื่อช่วยควบคุมไม่ให้ไฟลุกลาม ลดความรุนแรงของเชื้อไฟ
  4. เพื่อเป็นการศึกษาการทำงานของ บอร์ด KidBright และสามารถนำไปประยุกต์ใช้ได้จริง

3.ขอบเขต

1.ประดิษฐ์ตัวที่สามารถตวจจับเปลวไฟ

2.สามารถปล่อยน้ำลงมาเพื่อดับไฟได้

3.เพื่อรักษาความปลอดภัยแก่ชุมชนหรือผู้ใช้นี้

4.ประโยชน์ที่คาดว่าจะได้รับ

1.ได้ฝึกทักษะการคิดวิเคราะห์
2.การเขียน code ด้วย Kidbright
3.ได้ช่วยลดอัตราการเกิดอัคคีภัย
4.ได้เป็นแนวทางในการศึกษาของผู้ที่สนใจ
5.ได้เป็นแนวคิดในการต่อยอดและพัฒนานวัตกรรมและโครงงานใหม่

5.ความรู้ที่เกี่ยวข้อง

เพื่อให้ผู้ใช้งานได้มีความรู้ความเข้าใจถึงหลักการ ป้องกันอัคคีภัย ระบบแจ้งเหตุเพลิงไหม้ และระบบควบคุมควันไฟ ทฤษฎีและการออกแบบระบบดับเพลิงอัตโนมัติ มาตรฐานการป้องกันอัคคีภัย การตรวจสอบ การทดสอบของระบบดังกล่าว เพื่อจะนำไปพัฒนาและปรับปรุงวิธีการดำเนินงาน การบำรุงรักษาระบบป้องกันอัคคีภัย และเข้าใจในระบบอัคคีภัยที่ติดตั้งอย่างถูกต้อง สามารถป้องกันปัญหาอัคคีภัยได้อย่างมีประสิทธิภาพ

Code

include

include

const int sensorPin1 = 5;
const int sensorPin2 = 21;
const int sensorPin3 = 19;

const int relayPin = 15;
const int buzzerPin = 13;

int sensorState1 = 0;
int sensorState2 = 0;
int sensorState3 = 0;

const char* ssid = "Nichakan_2.4G";
const char* password = "0882339034";
const char* lineToken = "ibZhnakXwP36NlTlPkqHIG8FmithxQXTzxS4VXbXN3E"; // ใส่ Access Token ของคุณที่นี่

void setup() {
pinMode(sensorPin1, INPUT);
pinMode(sensorPin2, INPUT);
pinMode(sensorPin3, INPUT);

pinMode(relayPin, OUTPUT);
pinMode(buzzerPin, OUTPUT);
digitalWrite(buzzerPin, HIGH);
digitalWrite(relayPin, HIGH);

WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting to WiFi…");
}
Serial.println("Connected to WiFi");
}

void loop() {
sensorState1 = digitalRead(sensorPin1);
sensorState2 = digitalRead(sensorPin2);
sensorState3 = digitalRead(sensorPin3);

if (sensorState1 == LOW || sensorState2 == LOW || sensorState3 == LOW) {
digitalWrite(relayPin, HIGH);
digitalWrite(buzzerPin, LOW);

// ส่งข้อความผ่าน LINE Notify
sendLineNotification("ชิบหายไฟไหม้"); // เรียกใช้ฟังก์ชั่นส่งข้อความ

delay(100);
digitalWrite(buzzerPin, HIGH);
delay(100);

} else {
digitalWrite(relayPin, LOW);
}
delay(10);
}

void sendLineNotification(String message) {
HTTPClient http;
http.begin("https://notify-api.line.me/api/notify");
http.addHeader("Authorization", "Bearer " + String(lineToken));
http.addHeader("Content-Type", "application/x-www-form-urlencoded");
int httpCode = http.POST("message=" + message);
http.end();
}

Link youtube

5.1.อุปกรณ์ที่ใช้ในโครงงาน

1.mq5 ใช้ตรวจจับก๊าซต่างๆ เมื่อมีก๊าซอะไรเข้ามาsensorจะทำงานทันที

2.mq2 ใช้ตรวจจับก๊าซLPGและควันไฟ เมื่อมีควันเข้ามาsensorจะทำงานทันที

3.IR ตรวจจับไฟ เมื่อมีไฟเข้ามาsensorจะทำงานทันที

4.Relay เมื่อได้รับค่าจากsensorทั้ง3ตัวหรือตัวใดตัวนึง Relay จะทำงานทันที

5.ปั้มน้ำ เมื่อrelay ทำงานมันจะควบคุมให้ปั้มน้ำปล่อยน้ำออกมาทันที

5.2 โค้ด OOP

โค้ดที่คุณกำลังแสดงเป็นส่วนหนึ่งของการสร้างคลาส (Class) ในภาษา C++. คลาสที่ถูกตั้งชื่อว่า “SensorController” มีสมาชิกทั้งหมดดังนี้:

  1. Private Members (สมาชิกที่เป็นส่วนตัว):
    • sensorPin1, sensorPin2, sensorPin3: คือตัวแปรคงที่ (const) ที่เก็บค่าของหมายเลขขา (Pin) ของเซนเซอร์ 1, 2, และ 3 ตามลำดับ.
    • relayPin: คือตัวแปรคงที่ที่เก็บค่าของหมายเลขขา (Pin) ของรีเลย์.
    • buzzerPin: คือตัวแปรคงที่ที่เก็บค่าของหมายเลขขา (Pin) ของบัสเซอร์.
    • sensorState1, sensorState2, sensorState3: คือตัวแปรที่ใช้เก็บสถานะของเซนเซอร์ 1, 2, และ 3.
  2. Public Members (สมาชิกที่เปิดเผย):
    • ยังไม่มีสมาชิกที่เปิดเผยสาธารณะในตัวอย่างนี้.

โดยทั่วไป, การใช้คลาสมีลักษณะการจัดการและประมวลผลข้อมูลต่าง ๆ ที่เกี่ยวข้องกันไว้ในรูปแบบของคลาสเพื่อทำให้โค้ดมีโครงสร้างที่เป็นระเบียบและสามารถนำไปใช้ซ้ำได้. ในที่นี้, คลาส SensorController อาจถูกออกแบบเพื่อควบคุมเซนเซอร์ที่ต่อกับ Arduino, รีเลย์, และบัสเซอร์ต่าง ๆ และสามารถเพิ่มฟังก์ชันหรือเมธอดสาธารณะเพื่อทำงานตามความต้องการ.

  1. การตั้งค่าพอร์ต (Pin):
    • pinMode(sensorPin1, INPUT);: กำหนดให้พอร์ตที่เชื่อมกับเซนเซอร์ 1 (sensorPin1) เป็นโหมดอินพุต (INPUT) เพื่อให้ Arduino สามารถอ่านสถานะของเซนเซอร์ได้.
    • pinMode(sensorPin2, INPUT);: กำหนดให้พอร์ตที่เชื่อมกับเซนเซอร์ 2 (sensorPin2) เป็นโหมดอินพุต (INPUT).
    • pinMode(sensorPin3, INPUT);: กำหนดให้พอร์ตที่เชื่อมกับเซนเซอร์ 3 (sensorPin3) เป็นโหมดอินพุต (INPUT).
    • pinMode(relayPin, OUTPUT);: กำหนดให้พอร์ตที่เชื่อมกับรีเลย์ (relayPin) เป็นโหมดเอาท์พุต (OUTPUT) เพื่อให้ Arduino สามารถส่งสัญญาณไปที่รีเลย์.
    • pinMode(buzzerPin, OUTPUT);: กำหนดให้พอร์ตที่เชื่อมกับบัสเซอร์ (buzzerPin) เป็นโหมดเอาท์พุต (OUTPUT) เพื่อให้ Arduino สามารถควบคุมบัสเซอร์ได้.
    • digitalWrite(buzzerPin, HIGH);: ตั้งค่าสถานะเริ่มต้นของบัสเซอร์เป็น HIGH (1), ซึ่งอาจจะหมายถึงให้บัสเซอร์ปิดทำงาน (ขึ้นกับวงจรของบัสเซอร์).
    • digitalWrite(relayPin, HIGH);: ตั้งค่าสถานะเริ่มต้นของรีเลย์เป็น HIGH (1), ซึ่งอาจหมายถึงการปิดรีเลย์ (ขึ้นกับวงจรของรีเลย์).
  2. การเชื่อมต่อ WiFi:
    • WiFi.begin(ssid, password);: เริ่มต้นการเชื่อมต่อ WiFi โดยใช้ชื่อ (SSID) และรหัสผ่าน (password) ที่กำหนดไว้.
    • while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.println("Connecting to WiFi…"); }: วนลูปจนกว่า Arduino จะเชื่อมต่อ WiFi สำเร็จ ในแต่ละรอบลูป, มีการหน่วงเวลา 1 วินาทีและแสดงข้อความ “Connecting to WiFi…” บน Serial Monitor.
    • Serial.println("Connected to WiFi");: เมื่อเชื่อมต่อ WiFi สำเร็จ, จะแสดงข้อความ “Connected to WiFi” บน Serial Monitor.
  1. อ่านสถานะของเซนเซอร์:
    • sensorState1 = digitalRead(sensorPin1);: อ่านสถานะของเซนเซอร์ที่ต่อกับพอร์ต sensorPin1 และเก็บค่าไว้ใน sensorState1.
    • sensorState2 = digitalRead(sensorPin2);: อ่านสถานะของเซนเซอร์ที่ต่อกับพอร์ต sensorPin2 และเก็บค่าไว้ใน sensorState2.
    • sensorState3 = digitalRead(sensorPin3);: อ่านสถานะของเซนเซอร์ที่ต่อกับพอร์ต sensorPin3 และเก็บค่าไว้ใน sensorState3.
  2. ตรวจสอบสถานะของเซนเซอร์:
    • if (sensorState1 == LOW || sensorState2 == LOW || sensorState3 == LOW) { ... }: ตรวจสอบว่ามีอย่างน้อยหนึ่งเซนเซอร์ที่ตรวจจับสถานะ LOW (ต่ำ) หรือไม่. ถ้าเงื่อนไขเป็นจริง, ก็จะทำการปิดรีเลย์ (relay) และเปิดบัสเซอร์ (buzzer) พร้อมทั้งส่งข้อความผ่าน LINE Notify ด้วยฟังก์ชัน sendLineNotification.
  3. การควบคุมรีเลย์และบัสเซอร์:
    • digitalWrite(relayPin, HIGH);: ตั้งค่ารีเลย์ให้เป็นสถานะ HIGH (1), ซึ่งอาจหมายถึงการปิดรีเลย์ (ขึ้นกับวงจรของรีเลย์).
    • digitalWrite(buzzerPin, LOW);: ตั้งค่าบัสเซอร์ให้เป็นสถานะ LOW (0), ซึ่งอาจหมายถึงการเปิดบัสเซอร์ (ขึ้นกับวงจรของบัสเซอร์).
    • delay(100);: หน่วงเวลา 100 มิลลิวินาที.
    • digitalWrite(buzzerPin, HIGH);: ตั้งค่าบัสเซอร์ให้เป็นสถานะ HIGH (1), ซึ่งอาจหมายถึงการปิดบัสเซอร์.
    • delay(100);: หน่วงเวลา 100 มิลลิวินาที.
  4. กรณีที่เซนเซอร์ทั้งหมดเป็นสถานะ HIGH (สูง):
    • else { digitalWrite(relayPin, LOW); }: ถ้าไม่มีเซนเซอร์ไหนที่ตรวจจับสถานะ LOW, ก็จะทำการเปิดรีเลย์ (relay) โดยตั้งค่าให้เป็นสถานะ LOW (0).
  5. การหน่วงเวลา:
    • delay(10);: หน่วงเวลา 10 มิลลิวินาที เพื่อป้องกันการทำงานของลูปมีความเร็วมากเกินไป.

6.ผลการทดลอง

เมื่อsensorตัวใดตัวนึงได้รับค่ามาโดยการรับไฟหรือควันต่างๆ อันนี้ผมจะยกตัวอย่างเป็นไฟแช็ค

ต่อมาเมื่อได้รับค่าต่างๆมาแล้วมันก็จะแจ้งเตือนผ่านโทรศัพท์ของเราโดยไปในแอปLine

แล้วต่อมาปั้มน้ำจะเริ่มทำงานทันที

โดยการปล่อยน้ำทางสายยางที่ผมได้ต่อไว้

นี้ก็จะเป็นการรักษาความปลอดภัยได้ระดับนึงแล้ว เพราะว่าผมได้ทดสอบจริงโดยการเผากระดาษแล้วให้sensorจับค่ามันสามารถใช้งานได้จริง

7.สรุป

เมื่อมีการเกิดเพลิงไหม้ในสถานที่ต่างๆหรืออาคารบ้านเรือน โครงงานที่ผมทำสามารถรักษาความปลอดภัยได้ดีเลย โดยการใช้sensorทั้งหมด3ตัว โดยมีตัวแรกคือ mq5 mq2 และ ir จับเปลวไฟ โยมีการแจ้งเตือนผ่านแอฟพลิเคชั่นLine อีกด้วยเนื่องจากเราได้รู้ว่าเกิดเพลิงไหม้ขึ้นมั้ยในเวลานั้น ต่อมาก็สั่งให้relay ทำงานโดยควบคุมปั้มน้ำให้ปล่อยน้ำออกมาได้ทันเวลาเมื่อมีเหตุเพลิงไหม้เกิดขึ้น

8.ข้อมูลอ้างอิง

[1] การป้องกันอัคคีภัย. (2557). [ออนLine]. เข้าถึงได้จาก http://www.mpet.police7.go.th/index.php/ 2014-10-17-10-14-34/15-2014-10-17-17-36-18. (วันที่ค้นข้อมูล : 31 ตุลาคม 2566)

 [2]  สาเหตุและผลกระทบจากอัคคีภัย. ศูนย์ป้องกันและจัดการภัยพิบัติ. [ออนไลน์]. เข้าถึงได้จาก http://dpm.nida.ac.th/main/index.php/articles/fire/item/168-สาเหตุและผลกระทบจาก อัคคีภัย. (วันที่ค้นข้อมูล : 31 ตุลาคม 2566)

You may also like...

ใส่ความเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *