มินิโปรเจค Arduino ตรวจจับเปลวไฟ หรือเหตุเพลิงไหม้ ด้วย Fire Extinguisher
VIDEO
ประโยชน์และการนำโปรเจคไปพัฒนาต่อ ระบบสัญญาณเตือนไฟไหม้ (Fire Alarm System) คือ ระบบสำหรับแจ้งเตือนเมื่อมีเปลวไฟ หรือเหตุเพลิงไหม้ภายในอาคาร โดยใช้เซนเซอร์หรืออุปกรณ์ตรวจจับชนิดต่างๆ ตามความเหมาะสม เช่น อุปกรณ์ตรวจจับควันไฟ (Smoke Detector) อุปกรณ์ตรวจจับความร้อน (Heat Detector) อุปกรณ์ ตรวจจับเปลวไฟ ( Fire Extinguisher ) เป็นต้น ซึ่งระบบสัญญาณเตือนไฟไหม้นี้จะทำให้ผู้ที่อยู่ในอาคารสามารถรับรู้และแก้ไขได้อย่างทันท่วงที ป้องกันไม่ให้ไฟไหม้นั้นลุกลามจนไม่สามารถควบคุมได้ ซึ่งในการใชงานจริง อาจจะต้องใช้ เซนเซอร์ ทั้ง 3 แบบ ร่วมกันในการตรวจสอบ แล้วไปสั่ง หัวสปริงเกอร์ฉีดน้ำให้ทำงาน แต่ในตัวอย่างโปรเจคจะเลือกใช้ อุปกรณ์ ตรวจจับเปลวไฟ ( Fire Extinguisher ) ในขั้นตอนที่มีเปลวไฟ (Flame Stage) คือเริ่มมีเปลวไฟทำให้มองเห็นว่าเป็นไฟแต่ยังไม่สามารถวัดค่าความร้อนได้ ในการใช้งานโปรเจคนี้ อาจนำไปติดตั้ง สถานที่ ห้ามสูบบุหรี่ เป็นต้น
เป้าหมายและหลักการทำงานของโปรเจค
ให้ (Input) เซ็นเซอร์ ตรวจจับเปลวไฟ ( Fire Extinguisher) ตรวจจับว่ามีเปลวไฟเกิดขึ้นหรือไม่ โดยให้แสดงการตรวจจับแบบดิจิตอล ทั้ง 5 เซ็นเซอร์ แล้วให้แสดงผลที่ จอ LCD บรรทัดที่ 1 คือ สถานะ 1 = "มีเปลวไฟ" และ สถานะ 0 = "ไม่มีเปลวไฟ" การตรวจสอบว่า มีเปลวไฟ หรือไม่? คือ ถ้าเซ็นเซอร์ ตัวใดตัวหนึ่งใน 5 ตัว มีสถานะเป็น 1 ให้ถือว่ามีเปลวไฟ จอ LCD บรรทัดที่ 2 ถ้า "ไม่มี เปลวไฟ" แสดงคำว่า "NORMAL" แต่ถ้า "มี เปลวไฟ" ให้แสดงคำว่า "FIRE ALARM" แล้วไปสั่งงาน (Output) คือ ให้ออด Buzzer แสดงการแจ้งเตือน และเมื่อไม่มีเปลวไฟ ให้ ออด Buzzer หยุดการแจ้งเตือน อุปกรณ์ที่ใช้ในโปรเจค
5. 5 Way Fire Extinguisher Sensor
6. Standard Passive Speaker Buzzer Module
*** การใช้งานแบบไม่ต้องการเชื่อมต่อสาย USB กับ คอมพิวเตอร์ ให้ใช้ Adapter DC 9V 1A Power Supply เป็นแหล่งจ่ายไฟ เสียบเข้ากับ DC Power Jack ของ บอร์ด Arduino *** ขั้นตอนการทำโปรเจค
ต่อใช้งาน จอ LCD กับ Arduino
1.1 ยึดบอร์ด Arduino UNO
1.2 ประกอบ Sensor Shield V 5.0
1.3 เชื่อมต่อสาย LCD
2. เชื่อมต่อสาย Fire Extinguisher Sensor
(จะมีแถวเชื่อมต่อ 2 แถว ให้เลือกเชื่อมต่อแถวด้านล่าง)
3. เชื่อมต่อสาย Buzzer
G <-> -
V <-> +
8 <-> S
4. ภาพรวมการต่อโปรเจค
5. อัพโหลดโค้ด
การติดตั้ง Arduino IDE
VIDEO
5.3 ติดตั้ง ไลบรารี่ LiquidCrystal I2C เพื่อแสดงผลหน้าจอ LCD
ไปที่ เมนู Sketch → Include Library → Manage Libraries…
ค้นหา LiquidCrystal I2C เลือกของ Frank de Brabander แล้ว INSTALL
VIDEO
5.4 เขียนโค้ดดังนี้
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd ( 0x27 , 16 , 2 ) ;
int sensor [5 ] = { 0 , 0 , 0 , 0 , 0 } ;
String my_sensor;
int buzzer = 8 ;
void setup () {
lcd .init () ;
lcd .backlight () ;
pinMode ( 3 , INPUT) ;
pinMode ( 4 , INPUT) ;
pinMode ( 5 , INPUT) ;
pinMode ( 6 , INPUT) ;
pinMode ( 7 , INPUT) ;
pinMode ( buzzer, OUTPUT) ;
}
void loop () {
sensor [0 ] = digitalRead ( 7 ) ;
sensor [1 ] = digitalRead ( 6 ) ;
sensor [2 ] = digitalRead ( 5 ) ;
sensor [3 ] = digitalRead ( 4 ) ;
sensor [4 ] = digitalRead ( 3 ) ;
my_sensor = "S = " + String ( sensor [0 ]) + "," + String ( sensor [1 ]) + "," + String ( sensor [2 ]) + "," + String ( sensor [3 ]) + "," + String ( sensor [4 ]) + "," ;
if (( sensor [0 ] == 0 ) && ( sensor [1 ] == 0 ) && ( sensor [2 ] == 0 ) && ( sensor [3 ] == 0 ) && ( sensor [4 ] == 0 )) {
lcd .setCursor ( 0 , 0 ) ;
lcd .print ( my_sensor) ;
lcd .setCursor ( 0 , 1 ) ;
lcd .print ( "NORMAL " ) ;
} else {
lcd .setCursor ( 0 , 0 ) ;
lcd .print ( my_sensor) ;
lcd .setCursor ( 0 , 1 ) ;
lcd .print ( "FIRE ALARM" ) ;
buzzer_on () ;
}
delay ( 10 ) ;
}
void buzzer_on ()
{
unsigned char i, j;
{
for ( i = 0 ; i < 80 ; i++)
{
digitalWrite ( buzzer, HIGH) ;
delay ( 1 ) ; //delay1ms
digitalWrite ( buzzer, LOW) ;
delay ( 1 ) ; //ms delay
}
for ( i = 0 ; i < 100 ; i++)
{
digitalWrite ( buzzer, HIGH) ;
digitalWrite ( buzzer, LOW) ;
delay ( 2 ) ;
}
}
}
ตรวจสอบ Port ของบอร์ด Arduino โดย คลิกที่ Device Manager
ที่ Ports (COM & LPT) จะพบ Port ของบอร์ด Arduino ในตัวอย่างเป็น Arduino Uno (COM19)
ไปที่ Tools -> Board -> Arduino AVR Boards -> Arduino Uno
เลือก Port โดยไปที่ Tools -> Port -> COM19 (โดย COM19 แต่ละเครื่องจะไม่เหมือนกัน ให้เลือกตามที่ปรากฎ)
คลิกที่ Upload
รอจนกระทั่งขึ้น Done uploading. ที่แถบด้านล่าง แสดงว่าเราอัพโหลดโปรแกรมลงบอร์ดได้สำเร็จแล้ว
สามารถ ปรับความสว่างหน้าจอ LCD
6. อธิบายโค้ด #include <Wire.h> // ให้คอมไพเลอร์นำเฮดเดอร์ไฟล์ (Library Function) ชื่อ Wire.h เข้ามาร่วมในการประมวลผลด้วย #include <LiquidCrystal_I2C.h> // ให้คอมไพเลอร์นำเฮดเดอร์ไฟล์ (Library Function) ชื่อ LiquidCrystal_I2C.h เข้ามาร่วมในการประมวลผลด้วย LiquidCrystal_I2C lcd(0x27, 16, 2); // ตั้งค่า Address ของ จอ LCD เป็น 0x27 และให้แสดงผล แบบ 16 ตัวอักษร 2 บรรทัด int sensor[5] = {0, 0, 0, 0, 0}; // ประกาศตัวแปร 5 เซนเซอร์ แบบอาร์เรย์ String my_sensor ; // ประกาศตัวแปร my_sensor เป็นข้อมูลชนิดข้อความ int buzzer = 8; // ประกาศให้พินดิจิตอล 8 เป็นตัวแปรชื่อ buzzer มีชนิดของข้อมูลคือ int คือ เลขจำนวนเต็ม void setup ( ) { // ฟังก์ชัน setup จะทำงานครั้งแรก เพียงครั้งเดียวเท่านั้น lcd.init(); // เริ่มการทํางาน จอ LCD lcd.backlight(); // ให้จอ LCD แสดงผลเป็นแบบพื้นสีดำ pinMode(3, INPUT); // ให้ พินดิจิตอล 3 เป็นพินโหมด แบบอินพุท pinMode(4, INPUT); // ให้ พินดิจิตอล 4 เป็นพินโหมด แบบอินพุท pinMode(5, INPUT); // ให้ พินดิจิตอล 5 เป็นพินโหมด แบบอินพุท pinMode(6, INPUT); // ให้ พินดิจิตอล 6 เป็นพินโหมด แบบอินพุท pinMode(7, INPUT); // ให้ พินดิจิตอล 4 เป็นพินโหมด แบบอินพุท pinMode(buzzer, OUTPUT); // ให้ buzzer พินดิจิตอล 8 เป็นพินโหมด แบบเอาท์พุท } // สิ้นสุดการทำงานของฟังก์ชัน setup void loop ( ) { // ฟังก์ชัน loop จะทำงานซ้ำ วนลูป ไปเรื่อยๆ sensor[0] = digitalRead(7); // อ่านค่าข้อมูลจากพินดิจิตอล 7 เก็บไว้ที่ตัวแปรอาร์เรย์ sensor อินเด็กซ์ 0 sensor[1] = digitalRead(6); // อ่านค่าข้อมูลจากพินดิจิตอล 6 เก็บไว้ที่ตัวแปรอาร์เรย์ sensor อินเด็กซ์ 1 sensor[2] = digitalRead(5); // อ่านค่าข้อมูลจากพินดิจิตอล 5 เก็บไว้ที่ตัวแปรอาร์เรย์ sensor อินเด็กซ์ 2 sensor[3] = digitalRead(4); // อ่านค่าข้อมูลจากพินดิจิตอล 4 เก็บไว้ที่ตัวแปรอาร์เรย์ sensor อินเด็กซ์ 3 sensor[4] = digitalRead(3); // อ่านค่าข้อมูลจากพินดิจิตอล 3 เก็บไว้ที่ตัวแปรอาร์เรย์ sensor อินเด็กซ์ 4 my_sensor = "S = " + String(sensor[0]) + "," + String(sensor[1]) + "," + String(sensor[2]) + "," + String(sensor[3]) + "," + String(sensor[4]) + ","; // รวมชุดข้อมูลเก็บไว้ที่ ตัวแปร my_sensor if ((sensor[0] == 0) && (sensor[1] == 0) && (sensor[2] == 0) && (sensor[3] == 0) && (sensor[4] == 0)) { // ถ้า เซ็นเซอร์ ตรวจจับว่า ไม่มีเปลวไฟ ทั้ง 5 เซ็นเซอร์ lcd.setCursor(0, 0); // เลื่อนเคเซอร์ไปที่ตัวอักษรที่ 0 บรรทัดที่ 1 lcd.print(my_sensor); // LCD แสดงผล ชุดข้อมูลที่เก็บไว้ในตัวแปร my_sensor lcd.setCursor(0, 1); // เลื่อนเคเซอร์ไปที่ตัวอักษรที่ 0 บรรทัดที่ 2 lcd.print("NORMAL "); // LCD แสดงผลคำว่า NORMAL } else { // ถ้า เซ็นเซอร์ ตรวจจับว่า มี เปลวไฟ ตัวใดตัวหนึ่งใน 5 เซ็นเซอร์ หรือ อื่นๆ lcd.setCursor(0, 0); // เลื่อนเคเซอร์ไปที่ตัวอักษรที่ 0 บรรทัดที่ 1 lcd.print(my_sensor); // LCD แสดงผล ชุดข้อมูลที่เก็บไว้ในตัวแปร my_sensor lcd.setCursor(0, 1); // เลื่อนเคเซอร์ไปที่ตัวอักษรที่ 0 บรรทัดที่ 2 lcd.print("FIRE ALARM"); // LCD แสดงผลคำว่า FIRE ALARM buzzer_on(); // เรียกใช้ ฟังก์ชัน buzzer_on เพื่อกำเหนิดเสียงแจ้งเตือน } delay(10); // หน่วงเวลา 10 มิลลิวินาที } // สิ้นสุดการทำงานของฟังก์ชัน loop แล้วเริ่มทำงานฟังก์ชัน loop ใหม่ซ้ำไปเรื่อยๆ