ผู้เขียนบทความ : นายสิรวิทย์ จิระกาล COE#15
คณะวิศวกรรมศาสตร์ : สาขาวิศวกรรมคอมพิวเตอร์
วิชา : 40-513-201การโปรแกรมคอมพิวเตอร์ขั้นสูง 1/2566
1.ความเป็นมา
อัคคีภัยเป็นภัยอันตรายที่เกิดจากไฟที่ขาดการควบคุมดูแล ทำให้เกิดการติดต่อลุกลามไปตามบริเวณที่มี
เชื้อเพลิงเกิดการลุกไหม้ต่อเนื่อง สภาวะของไฟจะรุนแรงมากขึ้น ถ้าการไหม้ที่มีเชื้อเพลิงหนุนเนื่องหรือมีไอของ
เชื้อเพลิงถูกขับออกมามากความร้อนก็จะมากยิ่งขึ้น สร้างความสูญเสียให้ทั้งชีวิตและทรัพย์สิน ส่วนสาเหตุใหญ่ๆที่
ทำให้เกิดอัคคีภัย มีอยู่ 2 สาเหตุ คือ สาเหตุที่เกิดจากความตั้งใจ และสาเหตุที่เกิดจากความไม่ตั้งใจหรือความ
ประมาท ผลที่เกิดขึ้นจากอัคคีภัยโดยตรงที่ทำให้เกิดการบาดเจ็บและสูญเสียชีวิตอันเนื่องมาจากความร้อน เกิด
ความเสียหายแก่อาคาร บ้านเรือน ข้าวของเครื่องใช้ต่าง ๆ เป็นต้น ซึ่งระบบช่วยเหลือและป้องกันอัคคีภัย V.2 นั้น
พัฒนามาจาก ระบบช่วยเหลือและป้องกันอัคคีภัย V.1 ซึ่งระบบช่วยเหลือและป้องกันอัคคีภัย V.1 นั้น จะมีแค่ห้อง
จำลองสถานการณ์เพียงเดียว แต่ V.2 นั้นจะมี 2 ห้อง เพื่อที่จะแสดงให้เห็นว่าห้องที่มีเพียงควันอย่างเดียว ไม่มี
เปลวไฟ ระบบจะไม่ปล่อยน้ำลงมาในห้องนั้น ระบบช่วยเหลือและป้องกันอัคคีภัย V.2 นั้น ได้แนวคิดและการ
พัฒนาจากการอบรมของมูลนิธิเทคโนโลยีสารสนเทศตามพระราชดำริสมเด็จพระเทพรัตนราชสุดา ฯ สยามบรม
ราชกุมารีโดยมีคณะวิทยากรคอยให้คำแนะนำเกี่ยวกับเรื่องการเขียนโปรแกรมและระบบต่างๆที่เกี่ยวข้องกับ
โครงงาน
ดังนั้นหากเรามีเครื่องที่สามารถควบคุมการลุกลามของไฟ ช่วยให้ลดการสูญเสียทั้งชีวิตและทรัพย์สิน เป็น
การช่วยให้ผู้ที่ประสบภัยสามารถหนีหรือควบคุมไม่ให้ไฟลุกลามไปยังส่วนต่างของบ้านเรือน ผู้จัดทำโครงงานจึงมี
ความสนใจ ในการพัฒนาระบบช่วยเหลือผู้ประสบอัคคีภัย โดยใช้ บอร์ด KidBright ที่สามารถท างานได้ลดอัตรา
การสูญเสีย แล้วยังสามารถนำไปประยุกต์ใช้งานได้จริงและนำไปพัฒนาต่อไป
2.วัตถุประสงค์
- เพื่อพัฒนาระบบช่วยเหลือผู้ประสบอัคคีภัย โดยใช้บอร์ด KidBright
- เพื่อช่วยลดอัตราการสูญเสียที่อาจจะเกิดขึ้นเมื่อเกิดอัคคีภัย
- เพื่อช่วยควบคุมไม่ให้ไฟลุกลาม ลดความรุนแรงของเชื้อไฟ
- เพื่อเป็นการศึกษาการทำงานของ บอร์ด 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” มีสมาชิกทั้งหมดดังนี้:
- Private Members (สมาชิกที่เป็นส่วนตัว):
sensorPin1
,sensorPin2
,sensorPin3
: คือตัวแปรคงที่ (const) ที่เก็บค่าของหมายเลขขา (Pin) ของเซนเซอร์ 1, 2, และ 3 ตามลำดับ.relayPin
: คือตัวแปรคงที่ที่เก็บค่าของหมายเลขขา (Pin) ของรีเลย์.buzzerPin
: คือตัวแปรคงที่ที่เก็บค่าของหมายเลขขา (Pin) ของบัสเซอร์.sensorState1
,sensorState2
,sensorState3
: คือตัวแปรที่ใช้เก็บสถานะของเซนเซอร์ 1, 2, และ 3.
- Public Members (สมาชิกที่เปิดเผย):
- ยังไม่มีสมาชิกที่เปิดเผยสาธารณะในตัวอย่างนี้.
โดยทั่วไป, การใช้คลาสมีลักษณะการจัดการและประมวลผลข้อมูลต่าง ๆ ที่เกี่ยวข้องกันไว้ในรูปแบบของคลาสเพื่อทำให้โค้ดมีโครงสร้างที่เป็นระเบียบและสามารถนำไปใช้ซ้ำได้. ในที่นี้, คลาส SensorController
อาจถูกออกแบบเพื่อควบคุมเซนเซอร์ที่ต่อกับ Arduino, รีเลย์, และบัสเซอร์ต่าง ๆ และสามารถเพิ่มฟังก์ชันหรือเมธอดสาธารณะเพื่อทำงานตามความต้องการ.
- การตั้งค่าพอร์ต (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), ซึ่งอาจหมายถึงการปิดรีเลย์ (ขึ้นกับวงจรของรีเลย์).
- การเชื่อมต่อ 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.
- อ่านสถานะของเซนเซอร์:
sensorState1 = digitalRead(sensorPin1);
: อ่านสถานะของเซนเซอร์ที่ต่อกับพอร์ตsensorPin1
และเก็บค่าไว้ในsensorState1
.sensorState2 = digitalRead(sensorPin2);
: อ่านสถานะของเซนเซอร์ที่ต่อกับพอร์ตsensorPin2
และเก็บค่าไว้ในsensorState2
.sensorState3 = digitalRead(sensorPin3);
: อ่านสถานะของเซนเซอร์ที่ต่อกับพอร์ตsensorPin3
และเก็บค่าไว้ในsensorState3
.
- ตรวจสอบสถานะของเซนเซอร์:
if (sensorState1 == LOW || sensorState2 == LOW || sensorState3 == LOW) { ... }
: ตรวจสอบว่ามีอย่างน้อยหนึ่งเซนเซอร์ที่ตรวจจับสถานะ LOW (ต่ำ) หรือไม่. ถ้าเงื่อนไขเป็นจริง, ก็จะทำการปิดรีเลย์ (relay) และเปิดบัสเซอร์ (buzzer) พร้อมทั้งส่งข้อความผ่าน LINE Notify ด้วยฟังก์ชันsendLineNotification
.
- การควบคุมรีเลย์และบัสเซอร์:
digitalWrite(relayPin, HIGH);
: ตั้งค่ารีเลย์ให้เป็นสถานะ HIGH (1), ซึ่งอาจหมายถึงการปิดรีเลย์ (ขึ้นกับวงจรของรีเลย์).digitalWrite(buzzerPin, LOW);
: ตั้งค่าบัสเซอร์ให้เป็นสถานะ LOW (0), ซึ่งอาจหมายถึงการเปิดบัสเซอร์ (ขึ้นกับวงจรของบัสเซอร์).delay(100);
: หน่วงเวลา 100 มิลลิวินาที.digitalWrite(buzzerPin, HIGH);
: ตั้งค่าบัสเซอร์ให้เป็นสถานะ HIGH (1), ซึ่งอาจหมายถึงการปิดบัสเซอร์.delay(100);
: หน่วงเวลา 100 มิลลิวินาที.
- กรณีที่เซนเซอร์ทั้งหมดเป็นสถานะ HIGH (สูง):
else { digitalWrite(relayPin, LOW); }
: ถ้าไม่มีเซนเซอร์ไหนที่ตรวจจับสถานะ LOW, ก็จะทำการเปิดรีเลย์ (relay) โดยตั้งค่าให้เป็นสถานะ LOW (0).
- การหน่วงเวลา:
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)