ประโยชน์และการนำโปรเจคไปพัฒนาต่อ
ระบบสัญญาณเตือนไฟไหม้ (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 หยุดการแจ้งเตือน
อุปกรณ์ที่ใช้ในโปรเจค
6. Keyestudio Passive Buzzer Alarm Module
*** การใช้งานแบบไม่ต้องการเชื่อมต่อสาย USB กับ คอมพิวเตอร์ ให้ใช้ Adapter DC 9V 1A Power Supply เป็นแหล่งจ่ายไฟ เสียบเข้ากับ DC Power Jack ของ บอร์ด Arduino ***
ขั้นตอนการทำโปรเจค
1. ต่อใช้งาน จอ LCD กับ Arduino
1.2 ประกอบ Sensor Shield V 5.0
1.3 เชื่อมต่อสาย LCD
1.4 ดาวน์โหลด Arduino I2C Library สำหรับ LCD
https://github.com/fdebrabander/Arduino-LiquidCrystal-I2C-library
1.5 ติดตั้ง I2C Library สำหรับ LCD
1.5.1 เชื่อมต่อสาย USB ระหว่าง คอมพิวเตอร์ กับ บอร์ด Arduino
1.5.2 เปิดโปรแกรม Arduino IDE
1.5.3 ไปที่ Skecth -> Include Library -> Add .ZIP Library...
1.5.4 ไปที่ ไลบรารี Arduino-LiquidCrystal-I2C-library-master.zip ที่เรา ดาวน์โหลด มา -> Open
1.5.5 ตรวจสอบที่ Skecth -> Include Library จะพบ ไลบรารี Arduino-LiquidCrystal-I2C-library-master เพิ่มเข้ามาใน Arduino IDE ของเรา
1.6 อัพโหลดโค้ด
1.6.1 เขียนโค้ดดังนี้
#include <Wire.h> #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x27, 16, 2); void setup() { lcd.begin(); lcd.backlight(); lcd.print("Hello, world!"); } void loop() { }
1.6.2 ไปที่ Tools > Board เลือกเป็น Arduino/Genuino UNO
1.6.3 ไปที่ Tools > Port แล้วเลือกพอร์ตที่ปรากฏ (กรณีใช้เครื่องคอมพิวเตอร์ที่มี COM Port มากกว่าหนึ่ง ให้เลือกตัวอื่นที่ไม่ใช่ COM1)
ในตัวอย่างเลือกเป็น "COM6"
(ถ้ายังว่าง หรือ เป็น COM1 ให้ตรวจสอบการติดตั้งไดร์เวอร์ การต่อสาย USB ของ Arduino UNO)
1.6.5 หากสามารถอัพโหลดโปรแกรมลงบอร์ดได้สำเร็จ จะแสดงคำว่า Done uploading. ที่แถบด้านล่าง
1.7 ปรับความสว่างหน้าจอ LCD
2. เชื่อมต่อสาย Fire Extinguisher Sensor
3. เชื่อมต่อสาย Keyestudio Buzzer
4. ภาพรวมการต่อโปรเจค
5. อัพโหลดโค้ด
/*
Fire Alarm System with Fire Extinguisher
For more details visit:
https://miniarduino.blogspot.com/2019/05/fire.html
*/
#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.begin();
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);
}
}
}
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.begin(); // เริ่มการทํางาน จอ 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 ใหม่ซ้ำไปเรื่อยๆ
ไม่มีความคิดเห็น:
แสดงความคิดเห็น