ผู้เขียนบทความ 096 นางสาวชนัณธิดา หนูปอง #CoE.15
คณะวิศวกรรมศาสตร์ สาขาวิศวกรรมคอมพิวเตอร์
วิชา : 04-513-201 การโปรแกรมคอมพิวเตอร์ขั้นสูง 1/2566
1. ความเป็นมา
ปัจจุบันได้พบปัญหาการเกิดไฟไหม้ ซึ่งไฟเป็นปัญหาที่พบบ่อยและมักเกิดจากความประมาทและการมองข้ามสิ่งเล็กน้อยเช่นความประมาทในการใช้เชื้อเพลิงทั้งน้ำมันและแก๊สหรือโดยเหตุจากธรรมชาติบ่อยครั้งสาเหตุเพลิงไหม้สร้างความสูญเสียอย่างมากจากแก๊สหุงต้มซึ่งเป็นสาเหตุอันดับต้นของการเกิดเพลิงไหม้เนื่องจากสภาพการใช้งานนานหรือขาดการดูแลรักษาซึ่งจะทำให้เกิดความเสียหายแก่สิ่งของที่มีค่าภายในบ้านได้ดังนั้นผู้จัดทำมีความประสงค์ที่จะสร้างระบบรักษาความปลอดภัยจากเพลิงไหม้ด้วยเซ็นเซอร์ตรวจจับควันเพื่อช่วยเพิ่มความปลอดภัยให้แก่ชีวิตและทรัพย์สินภายในบ้านโดยการตรวจจับปริมาณควันไฟที่จะเกิดขึ้นภายในบ้านด้วยวงจรอิเล็กทรอนิกส์และไมโครคอนโทรลเลอร์แจ้งเหตุเมื่อเกิดภัยจึงได้นำเอาอุปกรณ์ตรวจจับควันที่สามารถตรวจจับกลุ่มของควันไฟได้และให้สามารถแจ้งเตือนผ่านแอพพลิเคชั่นในโทรศัพท์มือถือของผู้ใช้ทั้งยังมีระบบส่งเสียงสัญญาณเตือนภัยภายในบ้านและนอกจากนี้เมื่อมีปริมาณควันที่เป็นอันตรายระบบจะสั่งการให้ปั๊มน้ำทำงานและให้มีการพ่นน้ำทันที
2. วัตถุประสงค์
2.1 เพื่อศึกษาและเข้าใจการเขียนภาษา python เพื่อตรวจจับปริมาณควันและเตือนภัย
2.2 เพื่อนำความรู้การเขียนโปรแกรมภาษา python ไปประยุกต์ได้จริง
2.3 เพื่อนำการเขียนโปรแกรมภาษา python ไปใช้ตรวจจับปริมาณควันและเตือนภัย
3. ขอบเขต
3.1 สามารถรับค่าของเซ็นเซอร์ผ่าน Line และแจ้งเตือนปริมาณควันที่เป็นอันตราย
3.2 สามารถแจ้งเตือนเมื่อมีปริมาณควันที่เป็นอันตรายด้วย Buzzer Module
3.3 สามารถควบคุมปั๊มน้ำให้ทำงานได้เมื่อมีปริมาณควันที่เป็นอันตราย
4. ผลที่คาดว่าจะได้รับ
4.1 ได้ศึกษาและเข้าใจการเขียนโปรแกรมภาษา python เพื่อตรวจจับปริมาณควันและเตือนภัย
4.2 สามารถนำความรู้การเขียนโปรแกรมภาษา python ไปประยุกต์ใช้ได้จริง
4.3 สามารถเขียนโปรแกรมภาษา python เพื่อตรวจจับปริมาณควันและเตือนภัยได้
5. ความรู้ที่เกี่ยวข้อง
5.1 ESP32 ESP-32S ESP-WROOM-32 Wifi+Bluetooth Development Board (38 Pins)
โมดูล Wifi ESP-32 รุ่น ESP-WROOM-32 โมดูล Wifi + Bluetooth 4.2 + Touch/Temp Sensorทำงานแบบ Dual Core ที่ความเร็ว 240Mhz มี SRAM 512K หน่วยความจำ Flash สำหรับอัพโหลดโปรแกรมขนาด 16M มีขา GPIO 38 ขา ความละเอียดในการอ่านค่า ADC 12Bit สามารถเขียนโปรแกรม ผ่าน Arduino IDE เหมือนเขียน Arduino ได้ ใช้ USB UART Controller CP2102.
โมดูลรวม USB TTL และ ESP-32 ไว้ในตัวแล้วคล้ายกับ NodeMCU จึงไม่ต้องบัดกรีหรือต่อวงจรเพิ่ม ติดตั้งบอร์ดใน Arduino IDE แล้วเสียบสาย USB โปรแกรมได้เลย
5.2 เซ็นเซอร์ตรวจจับควัน แก๊ส MQ2-Gas Sensor
เซนเซอร์ MQ2-Gas คือ โมดูลที่เหมาะสำหรับใช้ในการตรวจจับแก๊สจำพวก LPG, Propane, Hydrogen, Methane, Butane, Smoke สามารถตรวจจับระดับความเข้มของแก๊สได้ในช่วงระหว่าง 300-10000 ppm MQ-2 ทำจากแร่ที่มีความไวต่อแก๊สสูง คือ SnO2 ซึ่งมีค่าการนำไฟฟ้าต่ำเมื่อมีก๊าซที่ติดไฟได้ตามปริมาณที่เข้มข้นพอ วงจรบนแผงโมดูลจะทำหน้าที่ขยายสัญญาณไฟฟ้าอันน้อยนิดให้ส่งออกมายัง Output เพื่อให้เรารับรู้ได้
5.3 Buzzer Module
Buzzer Module 3.3 – 5V ทำงานเเบบ Active LOW level trigger โมดูลบัซเซอร์ส่งเสียงเเจ้งเตือน สำหรับ Arduino,Nodemcu ใช้ไฟเลี้ยง 3.3 – 5V สามารถสร้างเสียงเตือนได้อย่างง่าย ๆ เพียงแค่จ่ายไฟ เข้าไปที่ ขา I/O โมดูลนี้มีทรานซิสเตอร์เบอร์ 9012 ช่วยขยายสัญญาณจึงมีความดังเป็นพิเศษ
5.4 Relay Module 5V 1 Channel โมดูลรีเลย์ 1 แชลแนล
โมดูลรีเลย์ที่ใช้สำหรับควบคุมการเปิด-ปิดอุปกรณ์ด้วยสัญญาณไฟฟ้า โดยมีความจุเป็น 1 ช่อง รีเลย์สามารถรับโหลดได้สูงสุด 250V/10A โดยมีการต่อกับแหล่งจ่ายไฟด้วยแรงดัน 5V และมีสัญญาณ Active HIGH ซึ่งหมายถึงเมื่อสัญญาณเข้ามาเป็นระดับสูง รีเลย์จะทำงานเปิดอุปกรณ์ ส่วนเมื่อสัญญาณเป็นระดับต่ำ รีเลย์จะทำงานปิดอุปกรณ์ สามารถนำไปใช้กับบอร์ด Arduino หรืออุปกรณ์อิเล็กทรอนิกส์อื่น ๆ ได้ตามต้องการ เช่น ใช้สำหรับควบคุมการเปิด-ปิดไฟฟ้าหรืออุปกรณ์อื่น ๆ ที่ต้องการควบคุมด้วยสัญญาณไฟฟ้าผ่านบอร์ด Arduino หรือไม่ก็ใช้กับโปรเจ็กต์อิเล็กทรอนิกส์ต่าง ๆ ตามความต้องการ
5.5 Water pump
water pump หลักการทำงานคือ สร้างแรงดันในน้ำเพื่อส่งน้ำจากจุดหนึ่งไปยังจุดอื่น ๆ โดยใช้พลังงานที่ให้โดยแหล่งพลังงานขับเคลื่อน ซึ่งอาจมาจากไฟฟ้าหรือพลังงานอื่น ๆ ตามรุ่นและการใช้งาน
5.6 หลอดไฟตู้คอนโทรล Pilot Lamp LED 22mm DC 12V
ไพลอตแลมป์ (Pilot Lamp) ไฟแสดงสถานะ ถือได้ว่าเป็นอุปกรณ์ที่พบเจอได้ทั่วไป ซึ่งเกือบจะทุกตู้คอนโทรลหรือตู้ไฟฟ้าจะต้องมีอุปกรณ์นี้ เพื่อบอกสถานะการการทำงานต่างๆ เช่น แสดงการทำงานปกติ, การหยุดทำงาน, การเกิด Alarm, การเกิด Overload, การเปิด-ปิดระบบ, ไฟแสดงเฟสระบบไฟฟ้า และอื่นๆ
5.7 สวิตช์แบบกดติดกดดับ
แบบกดติดกดดับหรือแบบ push on / push off เป็นปุ่มกดที่เมื่อกดเปิด – ปิดลงไปแล้ว ตัวสวิตช์จะค้างในตำแหน่งนั้นทันที จะกลับสู่ตำแหน่งเดิมได้ ต่อเมื่อกดลงไปในอีกทางหนึ่งอีกครั้ง นิยมใช้กับเครื่องใช้ไฟฟ้า หรือ เครื่องจักร ที่มีฟังก์ชันการทำงานไม่ซับซ้อน เช่น Start/stop สายพานลำเลียง เป็นต้น
5.8 Step Down
วงจรลดแรงดันไฟฟ้า DC Step-Down (Buck Converter) รับไฟตั้งแต่ 4.5-30V เลือกปรับลดได้ตั้งแต่ 0.8V ถึง 30V กระแสใช้งานปรกติ 3A กระแสใช้งานสูงสุด 5A วงจรสามารถตั้งค่าไฟขาออกตามต้องการได้ ด้วยการปรับค่า R-Trimport หลังจากตั้งค่าแล้ว วงจรจะทำการปรับแรงดันไฟฟ้าขาออกให้คงที่อัตโนมัติแม้แรงดันขาเข้าจะแปรผันก็ตาม
5.9 Switching Power Supply
Power Supply จริงๆ ก็คือแหล่งจ่ายพลังงานไฟฟ้าให้กับตัวอุปกรณ์หรือ Device ที่เราใช้งาน ซึ่งก็มีหลากหลายประเภท มีแบบที่เป็น linear Power Supply ก็คือพวก Tranfromer กับ Non-linear Power Supply หรือ Switching Power Supply โดยเฉพาะ Switching Power Supply ที่เราจะมาแนะนำนี้ เป็นอุปกรณ์ที่จ่ายพลังงานไฟฟ้าให้กับอุปกรณ์ไฟฟ้าต่างๆ โดยจะทำหน้าที่แปลงแรงดันไฟฟ้ากระแสสลับ (AC) เป็นแรงดันไฟฟ้ากระแสตรง (DC) เนื่องจากอุปกรณ์ไฟฟ้าต่างๆ ต้องการแรงดันไฟฟ้ากระแสตรงเพื่อให้ฟังก์ชันในอุปกรณ์ทำงานได้ (ส่งแรงดันไฟฟ้าไปยัง Capacitor หรือ Chips ของอุปกรณ์นั้น)
5.10 Blynk App
Blynk App คือ แอปพลิเคชันสำเร็จรูปที่ใช้สำหรับงานที่เกี่ยวกับอินเทอร์เน็ตของสรรพสิ่ง (Internet of Things, IoT) ที่ทำให้เราสามารถเชื่อมต่ออุปกรณ์ต่าง ๆ เข้ากับอินเทอร์เน็ตในลักษณะการเชื่อมต่อเครื่องแม่ข่าย (Server) ไปยังอุปกรณ์ลูกข่าย (Client) เช่น Arduino,ESP-8266, ESP-32, NodeMCU และ Raspberry Pi ซึ่งแอปพลิเคชัน Blynk สามารถใช้งานได้ฟรีและใช้งานได้ทั้งบนระบบปฏิบัติการ IOS และ Android มีรายการอุปกรณ์ต่าง ๆ ที่สามารถเชื่อมต่อ แสดงผล และ/หรือ ควบคุมด้วย Blynk App ได้
5.11 LINE Notify
LINE Notify เป็นบริการของ LINE ที่ทำให้เราสามารถส่งข้อความหาผู้ที่ขอใช้ หรือกลุ่มที่ผู้ขอใช้เป็นสมาชิก ซึ่งเราสามารถส่งข้อความ สติกเกอร์ หรือรูปภาพ เข้าไปที่โทรศัพท์ผ่านโปรแกรม Line ได้ โดยใช้ฟังก์ชั่น Line Notify ของ Line ที่ให้บริการเราติดต่อส่งข้อความผ่านทาง API HTTP POST
5.12 โปรแกรมเขียน code python oop
ประโยชน์ของ OOP คือ ออกแบบทุกอย่างเป็น Class และ Object ก็เหมือนแยกแต่ละปัญหาเป็น Module ที่สามารถแก้ไขได้โดยที่ไม่กระทบกับส่วนอื่นมาก แถมยังทำให้สามารถ Reuse Code ได้อย่างมีประสิทธิภาพมากขึ้นผ่าน Concept ที่เรียกว่า Inheritance และเพิ่มความยืดหยุ่นในการ Reuse Code ด้วย Concept ที่เรียกว่า Polymorphism สั้น ๆ คือ ทำให้สามารถเขียนโปรแกรม ที่ดูแลได้ง่ายขึ้น
โค้ดนี้เป็นตัวอย่างของการใช้ ESP32 เพื่อสร้าง Smoke Detector ที่สามารถตรวจจับควันและทำการแจ้งเตือนผ่าน LINE Notify รวมทั้งส่งข้อมูลไปยังแพลตฟอร์ม Blynk ด้วยการใช้ Wi-Fi connection
1. การเรียกใช้ไลบารี่
#include <Wire.h>
#include <BlynkSimpleEsp32.h>
#include <TridentTD_LineNotify.h>
2. SmokeDetector Class คลาสนี้ถูกสร้างขึ้นเพื่อจัดการกับฟังก์ชันต่าง ๆ ของ Smoke Detector ได้แก่การตรวจสอบค่าเซนเซอร์ (smoke sensor) และค่าสถานะของสวิตช์ (switch) และการทำงานต่าง ๆ ของ Relay และ Buzzer.
class SmokeDetector {
public:
SmokeDetector(int swPin, int smokePin, int relayPin, int buzzerPin)
: swPin(swPin), smokePin(smokePin), relayPin(relayPin), buzzerPin(buzzerPin) {}
3. Setup Function ในฟังก์ชัน `setup()` จะทำการเชื่อมต่อ Wi-Fi, LINE Notify, และ Blynk โดยใช้ข้อมูลที่กำหนดไว้ เมื่อเริ่มต้นการทำงาน, มีการกำหนดพอร์ตและการตั้งค่าเบื้องต้นของสวิตช์, smoke sensor, relay และ buzzer.
void setup() {
Serial.begin(115200);
Serial.println(LINE.getVersion());
WiFi.begin(SSID, PASSWORD);
Serial.printf("WiFi connecting to %s\n", SSID);
while (WiFi.status() != WL_CONNECTED) {
}
Serial.printf("\nWiFi connected\nIP : ");
Serial.println(WiFi.localIP());
// Set Line Token
LINE.setToken(LINE_TOKEN);
pinMode(swPin, INPUT);
pinMode(smokePin, INPUT);
pinMode(buzzerPin, OUTPUT);
pinMode(relayPin, OUTPUT);
digitalWrite(buzzerPin, LOW);
Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);
}
4. Loop Function ในฟังก์ชัน `loop()` จะทำการตรวจสอบค่าของสวิตช์และ smoke sensor และทำการเรียกใช้ฟังก์ชัน `activateAlarm()` เพื่อกระทำการแจ้งเตือนและควบคุมสถานะของ Relay และ Buzzer ตามเงื่อนไขที่กำหนด. นอกจากนี้ยังทำการส่งข้อมูล smoke sensor และสถานะของสวิตช์ไปยังแพลตฟอร์ม Blynk.
void loop() {
int SWe = digitalRead(swPin);
int smoke = analogRead(smokePin);
if (SWe == 0) {
if (smoke < 600) {
activateAlarm(0);
}
if (smoke > 600) {
activateAlarm(1);
}
}
if (SWe == 1) {
activateAlarm(1);
}
Blynk.virtualWrite(V0, smoke);
Blynk.virtualWrite(V2, SWe);
Serial.println(smoke);
}
5. ActivateAlarm Function ฟังก์ชัน `activateAlarm()` จะรับค่า alarmType เพื่อกำหนดสถานะของ Relay และ Buzzer ตามเงื่อนไขที่กำหนด และทำการแจ้งเตือนผ่าน LINE Notify ในกรณีที่เป็นการเตือน (alarmType == 1).
void activateAlarm(int alarmType) {
int relayState = (alarmType == 0) ? 0 : 1;
int buzzerState = (alarmType == 0) ? 1 : 0;
digitalWrite(relayPin, relayState);
digitalWrite(buzzerPin, buzzerState);
if (alarmType == 1) {
LINE.notify("WARNING");
}
Blynk.virtualWrite(V1, relayState);
Blynk.virtualWrite(V3, buzzerState);
}
6. Global Constants and Objects มีการกำหนดค่าคงที่และการสร้าง SmokeDetector object ที่ใช้กำหนดพินของสวิตช์, smoke sensor, relay, และ buzzer ซึ่งสามารถให้ค่าต่าง ๆ ได้ตามที่ท่านต้องการ.
const char *SSID = "Chananthida";
const char *PASSWORD = "01234567890";
const char *LINE_TOKEN = "HxaV5H1xBoDLzueMDlroJxUZgPslrl5aPu1ZKs9cTUH";
const char *BLYNK_AUTH_TOKEN = "2Ypy7WSTFeNp56vaw62RZwDSgB5CinGR";
SmokeDetector smokeDetector(17, A0, 23, 15);
โดยทั้งหมดนี้ทำให้ Smoke Detector สามารถตรวจจับควัน, แจ้งเตือนผ่าน LINE Notify, และส่งข้อมูลไปยังแพลตฟอร์ม Blynk ได้ในเวลาเดียวกัน.
6. ผลการดำเนินงาน
ผังการทำงานของระบบ
การทำงานของระบบ
1. วิธีทดลองการรับค่าจากเซนเซอร์ตรวจจับควันและแสดงผลบนแอพพลิเคชั่น (Blynk) โดยทดลองการรับค่าปริมาณควันจากเซนเซอร์นั้นจะเป็นการทดลองเผากระดาษ จากนั้นแสดงค่าของเซนเซอร์และสถานะการทำงานของอุปกรณ์ต่างๆบนแอพพลิเคชั่นบันทึกลงในตาราง
2. วิธีทดลองการแสดงสถานะการทำงานของระบบรักษาความปลอดภัยจากเพลิงไหม้ จะเป็นการทดลองตามข้อที่ 1 จากนั้นนำการแสดงสถานการณ์การทำงานของปั๊มน้ำและไฟ LED ผ่านรีเลย์และสถานการณ์การทำงานของบัซเซอร์บันทึกลงในตาราง
3 วิธีทดลองการทำงานของแอพพลิเคชั่น (LINE) จะเป็นการทดลองตามข้อที่ 6.1 จากนั้นนำการแสดงสถานะการทำงานของแอพพลิเคชั่น(LINE)
ตารางบันทึกผลการทดลอง
- ตารางบันทึกการรับค่าจากเซนเซอร์ตรวจจับควันและแสดงผลบนแอพพลิเคชั่น
2. ตารางบันทึกการแสดงสถานะการทำงานของระบบรักษาความปลอดภัยจากเพลิงไหม้
7. สรุปผลและข้อเสนอแนะ
7.1 สรุปผล
จากผลการทดลองระบบรักษาความปลอดภัยจากเพลิงไหม้ด้วยเซนเซอร์ตรวจจับควันสามารถสรุปได้ดังต่อไปนี้
7.1.1 เซนเซอร์สามารถรับค่าปริมาณควันได้
7.1.2 รีเลย์สามารถทำได้ตามเงื่อนไขที่กำหนด
7.1.3 สวิตช์เปลี่ยนโหมดสามารถควบคุมการเปลี่ยนโหมดระหว่างอัตโนมัติและโหมดแมนนวลได้ตามที่กำหนดไว้
7.1.4 แอพพลิเคชั่นสามารถแสดงค่าของเซนเซอร์,สถานะทำงานของสวิตช์ รีเลย์และบัซเซอร์ได้อย่างรวดเร็ว
7.1.5 หลังจากทำการทดลองจะพบว่าระบบรักษาความปลอดภัยจากเพลิงไหม้ด้วยเซนเซอร์ตรวจจับควันสามารถทำงานได้อย่างมีประสิทธิภาพ
7.2 ข้อเสนอแนะ
7.2.1 ประยุกต์และทดลองเพื่อตรวจจับปริมาณก๊าซอื่นๆที่เป็นภัยอันตราย
8. อ้างอิง
[1]. Cui Yancheng; Wang Liheng. Design and Implementation of Fire Monitoring and Warning User Terminal System. [ออนไลน์] 2563. [สืบค้นเมื่อวันที่ 19 กรกฎาคม 2566] จาก. https://ieeexplore.ieee.org/document/9930268
[2]. นายเจษฎา สมใจ; นางสาวโนรอาซีกิมณ์ นาพี; นางสาวสูรีตา บือราเฮง.เซนเซอร์ตรวจจับควันmq-2 เอกสารที่เกี่ยวข้อง [ออนไลน์] 2560. [สืบค้นเมื่อวันที่ 25 ตุลาคม 2566]. จาก.https://www.princess-it-foundation.org/project/wp-content/uploads/tsr59/s08.pdf