ผู้เขียนบทความ : เตชินท์ แก้วศรี #15
คณะวิศวกรรมศาสตร์ : สาขาวิศวกรรมคอมพิวเตอร์
วิชา : 04-513-201 การโปรแกรมคอมพิวเตอร์ชั้นสูง 1/2566
1.ความเป็นมา
ในปัจุบันการระบาดของเชื้อโคโรนาไวรัสสายพันธุ์ใหม่ (2019-nCov) หรือ Coronavirus (COVID19) เมื่อปลายปี ค.ศ. 2019 เป็นวิกฤตที่นานาประเทศให้ความสนใจอย่างใกล้ชิด ด้านสาธารณสุข ระหว่างประเทศ ในวันที่ 30 มกราคม 2563 โดยนอกจากความเสียหายต่อชีวิตแล้ว วิกฤตการณ์นี้ยังส่งผลไปถึงด้านสังคมและเศรษฐกิจของมนุษย์อีก
การป้องกันและการรักษาสุขอนามัยคือ รักษาระยะห่าง จากผู้อื่น อย่างน้อย 2 เมตร เลี่ยงการไปในพื้นที่หนาแน่นหรือ แออัด หากมีอาการที่แสดงถึงโรคติดเชื้อโคโรนา ไวรัส 2019 ควรปรึกษาแพทย์ทันทีและคอยติดตาม ข่าวสารจากแหล่งข้อมูลที่น่าเชื่อถือ
ประเทศไทยเป็นหนึ่งในประเทศที่มีความเสี่ยงสูงและได้รับผลกระทบจากการแพร่กระจายของเชื้อไวรัส ดังนั้น การมีความรู้และความเข้าใจต่อการระบาดของเชื้อไวรัสโคโรนาสายพันธุ์ใหม่ที่ถูกต้องจึงมีความสำคัญ ในการสร้าง ความตระหนักรู้เพื่อลดโอกาสเสี่ยงที่จะติดเชื้อ และเพื่อป้องกันไม่ให้เกิดความตื่นตระหนักจนเกินไป
จากการศึกษาปัญหาด้านโรควิด 19 พบว่า เราสามารถสร้างอุปกรณ์อิเล็กทรอนิกส์ เพื่อช่วยในการแจ้งเตือน การป้องกันและตรวจโรคโควิดผ่าน ระบบตรวจสอบสุขภาพบน ระบบ IoT เพื่อวัดอุณหภูมิและแจ้งเตือน เพื่อแก้ปัญหา จึงประดิษฐ์ ระบบวัดตรวจสอบอุณหภูมิร่างกายและวัตถุแบบไร้การสัมผัส Smart Infrared
2.วัตถุประสงค์
1.เพื่อวัดอุณหภูมิตรวจจับไข้และแจ้งเตือนผู้คนที่ผ่านเข้ามาในบริเวณที่ตรวจจับไว้
2.เพื่อแจ้งเตือนผ่านเสียงเมื่อมีคนที่มีอุณหภูมิสูงกว่าที่กำหนดผ่านเข้ามา
3.เพื่อออกแบบและสร้างนวัตกรรมช่วยรักษาความปลอดภัยจากโรคโควิด 19
3. ขอบเขต
1.ใช้ ESP32 เพื่อรับค่าอุณภูมิจากเซนเซอร์อินฟาเรด MLX90614
2.ใช้จอ I2C LCD แสดงค่าอุณหภูมิออกมาเมื่อทำการวัดอุณหภูมิทันที
3.ใช้ ESP32 เพื่อส่งแจ้งเตือนออนไลน์ ผ่านLine Notify เมื่อตวรจพบอุณภูมิ มากกว่า 37C
4.ใช้ active buzzer ส่งเสียง บี้ป แจ้งเตือนทันที เมื่อตวรจพบอุณภูมิ มากกว่า 37C
5.ใช้เซนเซอร์อินฟาเรด E18-D80NK ตรวจจับวัตถุที่เข้ามาใกล้ เพื่อทำการสั่งให้เซนเซอร์ MLX90614 อ่านค่าอุณภูมิ
4. ประโยชน์ที่คาดว่าจะได้รับ
1.สามารถวัดอุณหภูมิคนที่เข้ามาในพื้นที่ได้
2.แจ้งเตือนทันทีเมื่อมีคนที่มีอุณหภูมิสูงผิดปกติเข้ามา
3.ส่งข้อมูลผ่านเข้าไปใน Line เพื่อแจ้งเตือนเมื่อพบคนที่มีอุณหภูมิผิดปกติ
4.แสดงค่าอุณหภูมิผ่านจอ LCD เมื่อทำการวัดอุณหภูมิทันที
5.ความรู้ที่เกี่ยวข้อง
1.การเขียน C++ OOP
OOP หรือ Object-Oriented Programming (OOP) คือ กระบวนการเขียนโปรแกรมเชิงวัตถุที่ยึดตามหลักแนวคิดของ “แม่แบบ (Class)” และ “วัตถุ (Object)” ให้เรามองว่า Class คือ พิมพ์เขียว (blueprint) ส่วน Object คือ การนำพิมพ์เขียวนี้ไปสืบทอดใช้งาน
2.ESP32 เป็น Micro Controller ที่รองรับการเชื่อมต่อ WiFi , Bluetooth – BLE ในตัว ภาษาที่ใช้ในการพัฒนาโปรแกรมคือ ภาษา C หรือ Python ภาษา Python ต้องทำการอัพเกรดเฟิร์มแวร์ให้รองรับ Python การพัฒนาโปรแกรมขึ้นอยู่กับผู้ที่พัฒนา โปรแกรม IDE ที่ใช้พัฒนาคือ Arduino IDE หรือ Visual Studio สำหรับ Visual Studio จำเป็นต้องติดตั้ง Plugin Espressif IDF หรือ PlatformIO IDE และต้อง Enable (Arduino)
ในการทำงานครั้งนี้จะเน้นการดำเนินการด้วย Arduino IDE 2
3.Active Buzzer คือโมดูลลำโพงเสียงเตือน ใช้ได้กับหลายบอร์ด เช่น Arduino ESP8266 ESP32 เป็นต้น สามารถใช้งานได้ง่าย มีให้เลือกหลากหลายแบบ เลือกโทนเสียงที่ต้องการได้
4.การใช้เซนเซอร์ MLX90614 เป็นเซ็นเซอร์วัดอุณหภูมิแบบไร้การสัมผัส โดยใช้หลักการแปลงแสงอินฟาเรดที่ส่งออกจากตัววัตถุซึ่งจะมีสีแตกต่างกัน ให้เป็นค่าอุณหภูมิ โมดูลวัดอุณหภูมิแบบอินฟาเรดไร้การสัมผัส ใช้ชิฟ MLX90614ESF สำหรับ Arduino ไฟเลี้ยง 3V-5V เชื่อมต่อแบบ I2C สามารถวัดอุณหภูมิที่เป้าหมายแบบไร้การสัมผัสที่ -70 ถึง 380 องศาเซลเซียส และยังสามารถวัดอุณหภูมิของสิ่งแวดล้อมได้ที่ -40 ถึง 125 องศาเซลเซียส ความละเอียดของอุณหภูมิที่วัดได้ 0.02 องศาเซลเซียส
5.การใช้เซนเซอร์ E18-D80NK คือเซนเซอร์ตรวจจับวัตถุโดยใช้ Infrared เอาท์พุตเป็นแบบ Digital (NPN) สามารถกำหนดระยะตรวจจับได้ 3 ถึง 80 cm ประยุกต์ใช้งานได้หลากหลายเช่นตรวจจับคนเดินผ่าน หรือตรวจจับสิ่งของ
ในการติดตั้งใช้งานครั้งแรก จะต้องปรับระยะการทำงานที่ต้องการก่อน โดยการหมุนปรับค่าVR หลังเซนเซอร์ หาระยะที่จะใช้งาน เมื่อได้ระยะที่ต้องการแล้วก็สามรถนำไปใช้งานได้
6.LineNotify เป็นการแจ้งเตือนผ่านแชทLineส่วนตัว สามารถกำหนดข้อความที่ต้องการให้แจ้งเตือนได้อิสระ โดยจะต้องใช้Token ที่ Generate มาจากเว็ปไซต์ notify-bot.line.me/my/ เพื่อนำไปใส่ในโค้ด และใช้คำสั่งLINE.notify เพื่อส่งแจ้งเตือนเป็นข้อความได้
7. Library และ Plugin เสริมที่เกี่ยวข้อง
TridentTD_LineNotify ใช้สำหรับการทำงานของ LineNotify
https://github.com/TridentTD/TridentTD_LineNotify
Adafruit_MLX90614 ใช้สำหรับการทำงานของ เซนเซอร์ตรวจจับอุณภูมิ
https://github.com/adafruit/Adafruit-MLX90614-Library
LiquidCrystal_I2C ใช้สำหรับการทำงานของหน้าจอแสดงผลอุณภูมิแบบLCD i2C
https://github.com/johnrickman/LiquidCrystal_I2C
ESP32 ใช้สำหรับทำให้ Arduino IDE สื่อสารกับ ESP32ได้
https://github.com/espressif/arduino-esp32
6.ผลการดำเนินงาน
Diagram : การทำงานของระบบ
การทำงานของระบบ
ขั้นตอนที่ 1 การศึกษาการทำงานและการรองรับ : เมื่อทำการเปิดสวิตช์ หน้าจอ Lcd ก็จะแสดงคำว่า Ready และ come on baby หมายความว่าเครื่องพร้อมใช้งานแล้ว
ขั้นตอนที่ 2 การทดสอบการใช้งาน : นำฝ่ามือเข้าใกล้เซนเซอร์อินฟราเรดตัวเซนเซอร์ ir sensor กับ GY-906 MLX90614 จากนั้น ir sensor จะทำการตรวจจับวัตถุและสั่งให้ เซนเซอร์วัดอุณหภูมิแบบอินฟราเรด หรือ GY-906 MLX90614 ทำงานเพื่อวัดค่า 1 รอบและจะหยุดทำงานเพื่อไม่ให้เซนเซอร์วัดอุณหภูมิแบบอินฟราเรด หรือ GY-906 MLX90614 ทำงานวัดอุณหภูมิตลอดเวลา และเมื่อวัดเสร็จค่าอุณหภูมิที่ได้ก็จะแสดงผ่านจอ Lcd 1602 บรรทัด บน จะเป็น ค่าอุณหภูมิวัตถุที่ตรวจจับได้ ส่วนบรรทัดที่ ล่าง จะเป็น ค่าอุณหภูมิโดยรอบหรืออุณหภูมิสิ่งแวดล้อม หลังจากที่ระบบทำการวัดอุณหภูมิและแสดงค่าผ่านจอแอลซีดีเรียบร้อยแล้ว ระบบก็จะทำการส่งข้อความไปยังแอปพลิเคชัน Line
ขั้นตอนที่ 3 การทดลอง : การทดสอบการวัดอุณหภูมิแบบไร้สัมผัส มีการทำงานของระบบได้อย่างมีประสิทธิภาพ และ สามารถนำไปใช้งานได้ตามปกติ เนื่องจากมีการแสดงค่าอุณหภูมิอย่างละเอียด และมีการแจ้งเตือนผ่านไลน์
Code OOP
#include <WiFi.h>
#include <WiFiClient.h>
#include <Wire.h>
#include "LiquidCrystal_I2C.h"
#include <Adafruit_MLX90614.h>
#include <TridentTD_LineNotify.h>
class TemperatureMonitor {
private:
const int IR_SENSOR_PIN = 34;
const int BUZZER_PIN = 27;
const char* LINE_TOKEN = "2dUkMOqfO3bRakAaaboV26tnaPHiHNxaKwm2WbtF9Dx";
char ssid[20] = "preecha_46"; // WiFi name
char pass[20] = "11111111"; // WiFi password
LiquidCrystal_I2C lcd;
Adafruit_MLX90614 mlx;
public:
TemperatureMonitor()
: lcd(0x27, 16, 2) {
// Constructor: Initialize hardware components and libraries
}
void setup() {
pinMode(IR_SENSOR_PIN, INPUT);
Wire.begin();
lcd.init();
LINE.setToken(LINE_TOKEN);
WiFi.begin(ssid, pass);
mlx.begin();
lcd.backlight();
lcd.setCursor(4, 0);
lcd.print("*Ready*");
lcd.setCursor(0, 1);
lcd.print("**come on baby**");
pinMode(BUZZER_PIN, OUTPUT);
}
void loop() {
int irSensorValue = digitalRead(IR_SENSOR_PIN);
if (irSensorValue == HIGH) {
float objectTempC = mlx.readObjectTempC();
float ambientTempC = mlx.readAmbientTempC();
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Object T:");
lcd.print(objectTempC);
lcd.setCursor(0, 1);
lcd.print("Ambient T:");
lcd.print(ambientTempC);
if (objectTempC > 37.00) {
LINE.notify("High Temperature Detected");
for (int i = 0; i < 10; i++) {
tone(BUZZER_PIN, 1000);
delay(500);
noTone(BUZZER_PIN);
delay(300);
}
} else {
noTone(BUZZER_PIN);
}
delay(1000);
}
}
};
TemperatureMonitor tempMonitor;
void setup() {
tempMonitor.setup();
}
void loop() {
tempMonitor.loop();
}
โค้ดในส่วนของ Main Code
TemperatureMonitor tempMonitor;
void setup() {
tempMonitor.setup();
}
void loop() {
tempMonitor.loop();
}
โค้ดในส่วนของ Variable
int sensorValue; // ประกาศตัวแปรชนิด int เพื่อเก็บค่าจากเซ็นเซอร์
float temperature; // ประกาศตัวแปรชนิด float เพื่อเก็บอุณหภูมิ
void setup() {
// การกำหนดค่าเริ่มต้นให้กับตัวแปร
sensorValue = 0;
temperature = 0.0;
// ...
}
void loop() {
// การใช้ตัวแปรในการดำเนินการ
sensorValue = analogRead(A0); // อ่านค่าจากขา A0 และเก็บในตัวแปร sensorValue
temperature = sensorValue * 0.48876; // คำนวณอุณหภูมิจากค่า sensorValue
// ...
}
บันทึกผลการทดลองของการใช้เครื่องใช้ไฟฟ้าเพื่อวัดค่า อุณหภูมิ
บันทึกผลการทดลองของการวัดอุณหภูมิ
ทดสอบ | ผลทดสอบ | เปอร์เซ็นความถูกต้อง |
10 | 10 | 100% |
บันทึกผลการทดลองการส่งเสียงของ Active Buzzer
ทดสอบ | ผลทดสอบ | เปอร์เซ็นความถูกต้อง |
10 | 10 | 100% |
บันทึกผลการทดลองการแจ้งเตือนผ่านไลน์
ทดสอบ | ผลทดสอบ | เปอร์เซ็นความถูกต้อง |
10 | 10 | 100% |
ขั้นตอนที่ 4 สรุปผลการทดลอง
การทดลองในส่วนต่างๆของอุปกรณ์ การวัดอุณหภูมิ ซึ่งได้เปอร์เซ็นความถูกต้องอยู่ที่ 100% ส่วนต่อไปคือการทดลองการส่งเสียงของActive Buzzerเมื่อทำการวัดอุณหภูมิ ซึ่งได้เปอร์เซ็นความถูกต้องอยู่ที่ 100% และส่วนสุดท้ายคือการแจ้งเตือนผ่านแอปพลิเคชัน Line ซึ่งได้เปอร์เซ็นความถูกต้องอยู่ที่ 100% เฉลี่ยในแต่ละคน ได้รับเปอร์เซ็นความถูกต้องไม่ต่ำว่า 100%
ปัญหาที่พบในการทดลอง
1.ตัว ir sensor วัตถุได้ไม่ถึง100% อาจมีผิดพลาด เช่น ยื่นฝ่ามือเพื่อทำการวัดแต่ ir sensor ไม่จับวัตถุ แก้ไขไม่อยากโดยทำการยื่นฝ่ามือเข้าไปอีกรอบ
7.สรุปผลการทดลอง
การทดลองในส่วนต่างๆของอุปกรณ์ การวัดอุณหภูมิ ซึ่งได้เปอร์เซ็นความถูกต้องอยู่ที่ 100% ส่วนต่อไปคือการทดลองการส่งเสียงของActive Buzzerเมื่อทำการวัดอุณหภูมิ ซึ่งได้เปอร์เซ็นความถูกต้องอยู่ที่ 100% และส่วนสุดท้ายคือการแจ้งเตือนผ่านแอปพลิเคชัน Line ซึ่งได้เปอร์เซ็นความถูกต้องอยู่ที่ 100% เฉลี่ยในแต่ละคน ได้รับเปอร์เซ็นความถูกต้องไม่ต่ำว่า 100%
ข้อเสนอแนะ / การนำไปต่อยอด
1.สามารถนำไปใช้งานในบ้านหรือที่พักที่มีผู้สูงอายุหรืองานประชุมต่างๆที่มีผู้คนอยู่ใกล้ชิดกัน เพื่อให้ทราบถึงอุณหภูมิร่างกายและไม่ให้แพร่เชื้อต่อผู้อื่นได้
2.เปลี่ยนจากการเสียบปลั๊กเป็นการใช้ไฟจากถ่านไฟ 5v จะทำให้พกพาได้สะดวกเมื่อต้องการวัดก็สามารถใช้งานได้เลย
8.ข้อมูลอ้างอิง
[1] กรมควบคุมโรค กระทรวงสาธารณสุข[ออนไลน์] 2563. [สืบค้นวันที่ 25 ตุลาคม 2566]. จาก https://ddc.moph.go.th/viralpneumonia/int_protection.php
[2] Cybertice. สอนการใช้งานและการทำงานของโมดูลวัดอุณหภูมิแบบอินฟราเรด. [ออนไลน์] 2563.
[สืบค้นวันที่ 25 ตุลาคม 2566]. จาก https://tinyurl.com/mwpw63sf
[3] Ken RobotSiam. การใช้งาน IR Infrared Obstacle Avoidance Sensor Module. [ออนไลน์] 2559. [สืบค้นวันที่ 30 มีนาคม 2563]. จาก https://robotsiam.blogspot.com/2016/10/ir-infrared-obstacle-avoidance-sensor.html
[4] Cybertice. สอนการใช้งานและการทำงานของโมดูลวัดตรวจจับวัตถุแบบอินฟราเรดต่อกับ Buzzer. [ออนไลน์] 2560. [สืบค้นวันที่ 25 ตุลาคม 2566]. จาก https://tinyurl.com/r795b9hu
[5] บริษัท เอไอซีเอส จำกัด. สอนใช้งานโมดูลเซ็นเซอร์ตรวจจับวัตถุ IR Infrared กับ Arduino UNO. [ออนไลน์] 2565. [สืบค้นวันที่ 30 มีนาคม 2563]. จาก https://www.ai-corporation.net/2022/02/07/ir-infrared-with-arduino-uno/