ชื่อโปรเจกต์: ระบบคุมประตูอัตโนมัติฉบับเว้นระยะห่างสังคม (Social Distancing with Automatic Door Control System)
เอาล่ะพวกเรา ฟังพี่นะ ไอ้เจ้าโรค COVID-19 เนี่ยมันร้ายกาจมาก เป็นโรคติดต่อที่เกิดจากเชื้อไวรัส SARS-Cov-2 ซึ่งตอนนี้มันซัดคนไปหลายล้านทั่วโลกแล้ว อาการแต่ละคนก็ไม่เหมือนกัน บางคนก็ชิลล์ๆ หายเองได้ แต่บางคนถึงขั้นเข้าโรงพยาบาลหรือไปหาสวรรค์เลยก็มี แถมระยะฟักตัวมันตั้ง 5-6 วัน หรือลามไปถึง 2 สัปดาห์ ช่วงนี้แหละตัวดี! เพราะเราอาจจะไม่มีอาการแต่ดันไปแพร่เชื้อให้คนอื่นได้แบบไม่รู้ตัว ถ้าเราไม่ป้องกันให้ดี งานหยาบแน่นอนน้องเอ๊ย!
ตอนนี้ไวรัสมันระบาดไปทั่วโลก บางที่ก็ดีขึ้นแล้ว แต่บางที่ยัง Lockdown หรือเจอระลอกสองกันอยู่เลย
แล้วไวรัสมันแพร่ายังไงล่ะ?
ตามข้อมูลของ WHO เขาบอกว่าเชื้อเนี่ยมันมากับ "ละอองฝอย" เวลาคนป่วยไอ จาม หรือหายใจออกมา ซึ่งละอองพวกนี้มันหนักนะน้อง มันไม่ได้ลอยเคว้งในอากาศนานๆ แต่มันจะตกลงบนพื้นผิวข้างล่างอย่างไว
เราจะติดโรคได้ก็ต่อเมื่อไปสูดเอาไอ้ละอองเนี่ยเข้าไปตอนอยู่ใกล้คนป่วย หรือเผลอไปจับพื้นผิวที่มีเชื้อแล้วมาขยี้ตา แคะจมูก หรือป้ายปากตัวเองนั่นแหละ
วิธีคุมการระบาดทำไงดี?
จากที่พี่ร่ายมาข้างบน น้องคงเห็นแล้วว่ามี 2 ปัจจัยหลัก คือ "การอยู่ใกล้คนป่วย" กับ "การสัมผัสพื้นผิวที่มีเชื้อ"
ถ้าเราอยากหยุดมัน เราก็ต้องแก้ที่ 2 จุดนี้แหละ
การเว้นระยะห่างสำคัญมาก เพราะเราไม่รู้ว่าใครพกเชื้อมาบ้าง พี่บอกแล้วไงว่าบางคนแพร่เชื้อได้ทั้งที่ยังไม่มีอาการ ดังนั้น "Social Distancing" คือคำตอบ! ส่วนเรื่องการสัมผัสพื้นผิว เราก็ต้องล้างมือให้สะอาดอย่างน้อย 20 วินาที WHO แนะนำให้ใช้สบู่เลย เพราะมันหาซื้อง่าย ราคาถูก และฆ่าไวรัสได้อยู่หมัดกว่าพวกเจลล้างมือบางตัวอีก
บางทีเราล้างมือเสร็จ ดันไปหมุนก๊อกปิดมือเปล่าๆ เชื้อก็ติดมาอีก เพื่อไม่ให้พลาด เราก็ใช้ก๊อกน้ำอัตโนมัติ (Touchless Faucet) ไปเลยสิวัยรุ่น!
Social Distancing คืออะไร?
สรุปสั้นๆ แบบฉบับ Johns Hopkins Medicine คือการตั้งใจเพิ่มระยะห่างระหว่างบุคคลเพื่อเลี่ยงการแพร่เชื้อ การยืนห่างกันอย่างน้อย 6 ฟุต (1.8 เมตร) จะช่วยลดโอกาสติด COVID-19 ได้เยอะเลย
เราต้องทำแบบนี้ในที่สาธารณะหรือตอนยืนต่อคิว การที่หลายประเทศสั่ง Lockdown ก็คือการทำ Social Distancing แบบขั้นสุดนั่นแหละ เพื่อไม่ให้ระบบสาธารณสุขแบกรับภาระหนักเกินไป
แต่ก็นะ... บางทีที่คนเยอะๆ มันก็เว้นระยะลำบาก WHO เลยบอกว่าถ้าเลี่ยงไม่ได้จริงๆ ก็ต้องใส่ Mask ปิดจมูกปิดปากให้มิดชิด แต่จุดที่พี่เห็นคนพลาดบ่อยสุดคือ "ตอนเข้าคิว" พี่เลยปิ๊งไอเดียโปรเจกต์นี้ขึ้นมาไงล่ะ!
เป้าหมายของโปรเจกต์นี้




ในโปรเจกต์นี้ พี่ขอเสนอระบบควบคุมประตูอัตโนมัติที่บังคับให้คนต้องเว้นระยะห่าง ตัวนี้เป็น Prototype นะ แต่เอาไปใช้งานจริงได้เลย ช่วยลดการระบาดในที่สาธารณะได้ดีมาก และที่สำคัญนะน้อง... ต้นทุนค่าอุปกรณ์ Prototype นี้ (ไม่รวมบอร์ด Microcontroller) แค่ประมาณ 300 กว่าบาท ($10) เอง! โคตรคุ้ม!
หลักการคือ คนต้องไปยืนในตำแหน่งที่กำหนด ซึ่งห่างกันอย่างน้อย 1 เมตร (จะตั้งให้ห่างกว่านี้ก็ได้นะ แล้วแต่เรา)
ถ้าใครยืนผิดที่ ระบบจะแจ้งเตือนทันที พี่ใช้ LCD Display Module คอยโชว์จำนวนคนในคิวและช่องที่ถูกจอง (Occupied Slots) ถ้าช่องไหนไม่มีคนยืน เลขช่องนั้นก็จะไม่ขึ้นบนหน้าจอ เราสามารถใส่ระบบ Alarm เพิ่มเข้าไปได้ด้วยนะ ถ้าใครยืนมั่วซั่วก็ให้เสียงดังเตือนไปเลย จะได้รู้ตัวแล้วหันมาดูจอ LCD
ก่อนจะเข้าคิวหรือเข้าตึก พี่แนะนำให้จัดระบบล้างมืออัตโนมัติพ่วงไปด้วยนะ งานนี้จะหล่อเท่มาก
ส่วนเรื่องประตู พี่ใช้ระบบ Automatic Door Control เพื่อที่คนจะได้ไม่ต้องไปจับมือจับประตูให้เสี่ยงเชื้อโรค ในตัว Prototype พี่ใช้ Servo Motor จำลองการเปิด-ปิด แต่ถ้าใช้งานจริง น้องเปลี่ยนไปใช้ Solid State Relay Module ไปขับมอเตอร์ประตูสไลด์ตามห้างหรือโรงพยาบาลได้เลย จัดไปวัยรุ่น!
โปรเจกต์นี้ทำงานยังไง
ตัว Prototype นี้พี่ออกแบบไว้ 5 ช่อง (Slots) คือเข้าคิวได้พร้อมกัน 5 คน ระยะห่างแต่ละช่องจำลองไว้ที่ 1 เมตร
พี่ใช้ Laser Diodes 5 ตัว ยิงใส่ Photoresistors (LDR) โดยตั้งให้ Laser ยิงเข้าหน้า LDR ตรงๆ ตลอดเวลาที่เปิดเครื่อง
พอมีคนมายืนในตำแหน่งที่ถูกต้อง เขาจะไปบังลำแสง Laser พอแสงโดนบังปุ๊บ ระบบจะรู้ทันทีว่าช่องนี้ "ไม่ว่าง" แล้วเลขช่องก็จะไปโผล่บน LCD แต่ถ้าคนนั้นเดินหนีไป แสง Laser ก็จะกลับมาตกกระทบ LDR เหมือนเดิม ระบบก็จะเคลียร์ช่องนั้นให้ว่างเอง อัตโนมัติสุดๆ!
อธิบาย Code (ตั้งใจดูนะน้อง)
ถ้าน้องอ่านตรงนี้ดีๆ จะเข้าใจ Code ได้ไม่ยากเลย โปรเจกต์นี้ต้องใช้ Library 3 ตัว คือ LiquidCrystal_I2C, [Servo](https://s.shopee.co.th/7fUgFAWSki), และ Wire โดยที่ Servo กับ Wire ปกติจะมีติดมากับ Arduino IDE อยู่แล้ว แต่ LiquidCrystal_I2C ต้องไปโหลดมาลงเองนะ จัดการให้เรียบร้อยล่ะ
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Servo.h>
นอกจากนี้ น้องต้องใช้ I2C Scanner เพื่อหา Address ของจอ LCD เราด้วยนะ (ส่วนใหญ่จะเป็น 0x27)
มาสร้าง Array สองตัวชื่อ [LDR](https://s.shopee.co.th/1BHCUqb0Tt) กับ Laser (หรือ LED) เพื่อเก็บเลข Pins ที่เราต่อไว้ แล้วประกาศวัตถุ [lcd](https://s.shopee.co.th/6AfsSPcAnb) โดยใส่ค่า Address, จำนวนหลัก (Columns) และจำนวนแถว (Rows) ลงไป จากนั้นก็กำหนด trig กับ echo สำหรับ Sensor วัดระยะ แล้วก็สร้าง Servo 2 ตัว ชื่อ Barrier (กั้นข้างนอก) กับ Door (ประตูข้างใน)
สร้าง Variable ชื่อ count ไว้คอยนับคน และ distance ไว้เก็บค่าระยะทาง ส่วน duration ให้ใช้ Data Type เป็น long นะน้อง เดี๋ยวเลขมันล้น
int LDR[]={A0,A1,A2,A3,A4};
int LED[]={25,27,29,31,33}; // นี่คือขาที่ต่อ Laser นะ
LiquidCrystal_I2C lcd(0x27, 16, 2);
#define trig 5
#define echo 4
long duration;
int distance;
Servo Barrier;
Servo Door;
int count;
int sensor = 6;
int state;
ใน void setup() เราก็เซต pinMode() ให้เรียบร้อย ขา Laser กับ Trig เป็น OUTPUT ส่วนพวก LDR, Echo และ Sensor อื่นๆ เป็น INPUT อย่าลืมสั่ง attach() ให้ Servo ของเราอยู่ที่ขา D9 กับ D10 และเซต write(0) เพื่อให้มันเริ่มที่ 0 องศาเสมอ
void setup() {
lcd.begin();
lcd.setCursor(4,0);
lcd.print("Welcome!");
for (int i=0; i<5; i++){
pinMode(LDR[i], INPUT);
pinMode(LED[i], OUTPUT);
}
pinMode(trig, OUTPUT);
pinMode(echo, INPUT);
pinMode(sensor, INPUT);
Barrier.attach(9);
Door.attach(10);
Serial.begin(9600);
Barrier.write(0);
Door.write(0);
}
ใน void loop() เราจะอ่านค่าจาก LDR (ค่า LDR แต่ละตัวอาจไม่เท่ากัน น้องต้องลองเช็คค่าตอนโดนแสงกับไม่โดนแสงดูนะ ห้ามลืม!)
ส่วนการใช้ Ultrasonic Sensor เราจะส่งสัญญาณ trig ไป 10 microseconds แล้วใช้ฟังก์ชัน pulseIn อ่านค่าเวลาที่สะท้อนกลับมาเก็บใน duration
สูตรคำนวณระยะทางคือ เอาเวลาหาร 2 แล้วคูณด้วยความเร็วเสียง (ประมาณ 331.3 m/s) เพื่อเปลี่ยนเป็นเซนติเมตร เราต้องหารด้วย 10,000 อีกทีตามหน่วยที่แปลงมา
digitalWrite(trig, LOW);
delayMicroseconds(5);
digitalWrite(trig, HIGH);
delayMicroseconds(10);
digitalWrite(trig, LOW);
duration = pulseIn(echo, HIGH);
distance = (duration/2) * (331.3/10000);
ถ้าเช็คแล้วระยะ (Distance) อยู่ในช่วง 0-10 cm แสดงว่ามีคนเดินผ่านเข้าประตู ให้บวก count เพิ่มไป 1 แล้วสั่ง Servo หมุน 100 องศา ค้างไว้ 5 วินาทีแล้วค่อยปิด แต่ถ้าคนครบ 5 คนแล้ว (count == 5) ประตูต้องไม่เปิดนะน้อง เดี๋ยวคนล้น!
ส่วนขาออก พี่ใช้ IR Sensor ถ้ามันตรวจเจอวัตถุในระยะ 2 cm (ส่งค่า LOW ออกมา) ก็ให้ลด count ลง 1 แล้วเปิดประตู (Servo หมุน 70 องศา) ให้คนออกไป
หน้าจอ LCD จะคอยโชว์ตลอดว่าตอนนี้มีคนกี่คน และใครยืนช่องไหนบ้าง ถ้าคนมี 1 คนแต่ไม่มีช่องไหนโดนบังเลย แสดงว่าไอ้หมอนั่นยืนมั่วแล้ว! ระบบจะฟ้องทันทีบนหน้าจอครับผม
รายละเอียดทางเทคนิคเพิ่มเติม (เผื่อเอาไปโชว์เทพ)
ระบบอัตโนมัติเพื่อความปลอดภัยสาธารณะ
ระบบนี้ช่วยจัดการจำนวนคนและการเว้นระยะห่างในอาคารแบบ Real-time:
- Bi-Directional Passenger Counting: ใช้ HC-SR04 ultrasonic sensors สองตัววางดักที่ประตู ระบบจะรู้ว่าคนเดินเข้าหรือออกจากการที่ Sensor ตัวไหนโดนบังก่อน-หลัง แล้วไปตัดยอด "Occupancy" ใน RAM ของ Arduino แบบแม่นๆ
- Automated Entry Blocking: ถ้าคนเต็มตามที่ตั้งไว้ Arduino จะสั่ง high-torque servo lock ล็อกประตูทันที พร้อมขึ้นไฟ RGB หรือข้อความ "Wait" ให้รอก่อน หล่อเท่เลยงานนี้
การแสดงผลและการตรวจสอบ
- Real-Time LED Dashboard: แสดงจำนวนคนปัจจุบันเทียบกับขีดจำกัดสูงสุดผ่านหน้าจอ 16x2 I2C LCD ที่อ่านง่าย เข้าใจชัดเจนทั้งเจ้าหน้าที่และผู้ใช้บริการ
สู้งานนะน้อง! ติดตรงไหนทักมาถามพี่ได้ แต่อย่าทำ Board ช็อตนะเว้ย!