หน้าเว็บตัวอย่างโครงงาน IoT สำหรับนักศึกษา โดยใช้เซ็นเซอร์ 2 จุดเพื่อตรวจทิศทางการเดินเข้าและออกจากห้อง ระบบจะเพิ่มจำนวนเมื่อมีผู้เข้า ลดจำนวนเมื่อมีผู้ออก และแจ้งเตือนเมื่อจำนวนคนเกินค่าที่กำหนด เหมาะสำหรับห้องเรียน ห้องประชุม หรือห้องปฏิบัติการ
โครงงานนี้พัฒนาระบบนับจำนวนผู้เข้า–ออกห้อง โดยติดตั้งเซ็นเซอร์ 2 จุดบริเวณทางเข้า เช่น IR Sensor หรือ Ultrasonic Sensor เพื่อใช้ลำดับการตรวจจับในการแยกทิศทาง หาก Sensor A ทำงานก่อน Sensor B ให้ถือว่า “เข้า” และเพิ่มจำนวนคน หาก Sensor B ทำงานก่อน Sensor A ให้ถือว่า “ออก” และลดจำนวนคน ระบบสามารถแสดงจำนวนคนปัจจุบันบน OLED/Dashboard และแจ้งเตือนเมื่อจำนวนคนเกินค่าที่กำหนด
ภาพด้านล่างแสดงลำดับการทำงานของระบบนับจำนวนผู้เข้า–ออกห้อง ตั้งแต่การตรวจจับที่เซ็นเซอร์ 2 จุด การวิเคราะห์ทิศทาง การปรับค่าจำนวนคน การแจ้งเตือนเมื่อเกินกำหนด และการแสดงผลบน Dashboard
ภาพนี้แสดงแนวคิดการออกแบบ Prototype สำหรับระบบนับจำนวนผู้เข้า–ออกห้อง โดยใช้ Sensor A และ Sensor B ตรวจจับลำดับการเดินผ่านประตู กล่องควบคุมแสดงจำนวนคนบน OLED พร้อมไฟ LED แสดงสถานะและ Buzzer แจ้งเตือน เมื่อจำนวนคนเกินค่าที่กำหนด รวมถึงส่วนประกอบภายใน เช่น ESP32/Arduino, เซ็นเซอร์, โมดูลจ่ายไฟ และการเชื่อมต่อ Dashboard
ใช้ Sensor A และ Sensor B ติดตั้งบริเวณประตูเพื่ออ่านลำดับการเดินผ่าน หาก A → B ให้นับเป็นการเดินเข้า และหาก B → A ให้นับเป็นการเดินออกจากห้อง
แสดงจำนวนคนปัจจุบัน สถานะห้อง จำนวนเข้า–ออก และค่า Limit บน OLED พร้อมไฟ LED เขียว/เหลือง/แดง และ Buzzer เพื่อแจ้งเตือนเมื่อจำนวนคนเกินกำหนด
ใช้ ESP32/Arduino วิเคราะห์ Direction Logic และส่งข้อมูลจำนวนคนแบบ Real-time ไปยัง Dashboard เพื่อดูสถานะห้องและประวัติการเข้า–ออกย้อนหลัง
ห้องเรียนหรือห้องประชุมบางแห่งต้องจำกัดจำนวนผู้ใช้งาน แต่การนับด้วยคนอาจผิดพลาดและไม่สามารถติดตามแบบ Real-time ได้ ระบบนี้จึงใช้เซ็นเซอร์ 2 จุดเพื่อตรวจทิศทางการเดินเข้า–ออก ทำให้ทราบจำนวนคนปัจจุบัน สถานะความหนาแน่น และแจ้งเตือนเมื่อเกินจำนวนที่กำหนด
ทราบจำนวนคนในห้องแบบ Real-time และลดความแออัด
ใช้ลำดับ Sensor A/B เพื่อแยกว่าเดินเข้าหรือเดินออก
แจ้งเตือนด้วยไฟ เสียง หรือ Dashboard เมื่อจำนวนคนเกิน Limit
ใช้เซ็นเซอร์ 2 จุดตรวจจับการเดินผ่านบริเวณทางเข้า
แยกทิศทางเข้า–ออกจากลำดับการทำงานของเซ็นเซอร์
เพิ่มหรือลดจำนวนคนปัจจุบันให้ถูกต้องและไม่ติดลบ
แสดงสถานะห้องและแจ้งเตือนเมื่อจำนวนคนเกินที่กำหนด
| อุปกรณ์ | หน้าที่ | หมายเหตุ |
|---|---|---|
| IR Sensor 2 ตัว | ตรวจจับการผ่านจุด A และ B | เหมาะสำหรับทางเดินแคบหรือประตูจำลอง |
| Ultrasonic Sensor 2 ตัว | ทางเลือกสำหรับวัดระยะคนผ่าน | เหมาะเมื่อใช้ระยะตรวจจับแบบปรับค่าได้ |
| Arduino UNO / ESP32 | อ่านเซ็นเซอร์ วิเคราะห์ทิศทาง และคำนวณจำนวนคน | ESP32 เหมาะเมื่อต้องการ Wi‑Fi Dashboard |
| OLED/LCD Display | แสดงจำนวนคนและสถานะห้อง | เช่น ว่าง/ปกติ/หนาแน่น/เกินกำหนด |
| LED RGB / Buzzer | แจ้งสถานะและเตือนเมื่อคนเกิน | ไฟเขียว/เหลือง/แดง หรือเสียงเตือน |
| Blynk / ThingSpeak / Web Dashboard | แสดงข้อมูลและบันทึกประวัติ | เหมาะสำหรับทีมที่ใช้ ESP32 |
Sensor A/B ตรวจจับคนผ่านทางเข้า
Arduino/ESP32 วิเคราะห์ทิศทางและนับจำนวน
OLED/LED/Buzzer แจ้งจำนวนและสถานะ
แสดงจำนวนคนและประวัติเข้า–ออกย้อนหลัง
| อุปกรณ์ | ขาอุปกรณ์ | ต่อกับ Arduino/ESP32 | คำอธิบาย |
|---|---|---|---|
| IR Sensor A | OUT | D2 / GPIO25 | ตรวจจับจุดแรกของทางเข้า |
| IR Sensor B | OUT | D3 / GPIO26 | ตรวจจับจุดที่สองของทางเข้า |
| IR Sensor A/B | VCC / GND | 5V หรือ 3.3V / GND | จ่ายไฟให้เซ็นเซอร์ |
| LED RGB | R/G/B | D8/D9/D10 หรือ GPIO16/17/18 | แสดงสถานะว่าง/ปกติ/หนาแน่น/เกินกำหนด |
| Buzzer | Signal | D7 / GPIO27 | แจ้งเตือนเมื่อจำนวนคนเกิน Limit |
| OLED I2C | SDA/SCL | A4/A5 หรือ GPIO21/22 | แสดงจำนวนคนปัจจุบันและสถานะห้อง |
ระบบอ่านสัญญาณจากเซ็นเซอร์ทั้งสองจุดอย่างต่อเนื่องเพื่อตรวจจับการเดินผ่านประตู
เมื่อ Sensor A หรือ B ตรวจพบก่อน ระบบจะจำสถานะเริ่มต้นและรออีกจุดทำงานภายในเวลาที่กำหนด
ถ้า A → B ให้นับเป็น “เข้า” และถ้า B → A ให้นับเป็น “ออก” โดยใช้ Timeout ป้องกันการนับผิด
เพิ่มหรือลดค่าจำนวนคนปัจจุบัน พร้อมป้องกันค่าติดลบและกำหนดจำนวนสูงสุดของห้อง
แสดงจำนวนคนและสถานะห้องบน OLED/Dashboard และแจ้งเตือนหากจำนวนคนเกิน Limit
const int sensorA = 2;
const int sensorB = 3;
const int ledGreen = 8;
const int ledRed = 9;
const int buzzer = 7;
int peopleCount = 0;
int limitCount = 40;
unsigned long firstDetectedTime = 0;
char firstSensor = 'N';
const unsigned long timeoutMs = 1200;
void setup() {
pinMode(sensorA, INPUT);
pinMode(sensorB, INPUT);
pinMode(ledGreen, OUTPUT);
pinMode(ledRed, OUTPUT);
pinMode(buzzer, OUTPUT);
Serial.begin(9600);
}
void loop() {
bool a = digitalRead(sensorA) == LOW; // ปรับตามชนิดเซ็นเซอร์
bool b = digitalRead(sensorB) == LOW;
if (firstSensor == 'N') {
if (a) {
firstSensor = 'A';
firstDetectedTime = millis();
} else if (b) {
firstSensor = 'B';
firstDetectedTime = millis();
}
} else {
if (firstSensor == 'A' && b) {
peopleCount++;
resetDirection();
} else if (firstSensor == 'B' && a) {
if (peopleCount > 0) peopleCount--;
resetDirection();
}
if (millis() - firstDetectedTime > timeoutMs) {
resetDirection();
}
}
if (peopleCount >= limitCount) {
digitalWrite(ledRed, HIGH);
digitalWrite(ledGreen, LOW);
tone(buzzer, 1000, 200);
} else {
digitalWrite(ledGreen, HIGH);
digitalWrite(ledRed, LOW);
}
Serial.print("People Count = ");
Serial.println(peopleCount);
delay(80);
}
void resetDirection() {
firstSensor = 'N';
firstDetectedTime = 0;
}Dashboard ควรแสดงข้อมูลที่จำเป็นต่อการติดตามจำนวนคนในห้อง เช่น จำนวนคนปัจจุบัน จำนวนเข้า–ออก สถานะความหนาแน่น และประวัติย้อนหลัง
| กรณีทดสอบ | วิธีทดสอบ | ผลที่คาดหวัง |
|---|---|---|
| เดินเข้า 1 คน | ให้ Sensor A ทำงานก่อน Sensor B | จำนวนคนเพิ่มขึ้น 1 |
| เดินออก 1 คน | ให้ Sensor B ทำงานก่อน Sensor A | จำนวนคนลดลง 1 และไม่ติดลบ |
| หยุดค้างกลางประตู | ให้ Sensor แรกทำงานแต่ Sensor ที่สองไม่ทำงานภายใน Timeout | ระบบยกเลิกการนับ ไม่เพิ่ม/ลดจำนวน |
| จำนวนคนเกินกำหนด | จำลองให้ Count มากกว่าหรือเท่ากับ Limit | ไฟแดงหรือ Buzzer แจ้งเตือน |
| Dashboard | ดูค่าผ่านมือถือหรือเว็บ | ข้อมูลจำนวนคนและสถานะอัปเดตต่อเนื่อง |
แบ่งงานเป็นรอบสั้น ๆ เพื่อให้ทีมตรวจความคืบหน้าได้ต่อเนื่องและลดความเสี่ยงตอนรวมระบบ
| ช่วงเวลา | กิจกรรม | ผลลัพธ์ที่ต้องได้ |
|---|---|---|
| สัปดาห์ที่ 1 | วิเคราะห์ปัญหา กำหนด Requirement และออกแบบตำแหน่งติดตั้งเซ็นเซอร์ | Requirement, รายการอุปกรณ์, Block Diagram |
| สัปดาห์ที่ 2 | ต่อวงจร Sensor A/B และทดสอบการอ่านค่า | ตารางทดสอบระยะและตำแหน่งติดตั้ง |
| สัปดาห์ที่ 3 | เขียน Logic วิเคราะห์ทิศทาง A→B และ B→A | ระบบนับเข้า–ออกได้ถูกต้องในกรณีพื้นฐาน |
| สัปดาห์ที่ 4 | เพิ่ม Dashboard และระบบแจ้งเตือนเมื่อเกิน Limit | Dashboard แสดงจำนวนคนและสถานะห้อง |
| สัปดาห์ที่ 5 | ทดสอบรวมระบบ ปรับปรุงกล่อง/สายไฟ และเตรียมนำเสนอ | Prototype พร้อมวิดีโอ รายงาน และสไลด์ |
นักศึกษาควรส่งทั้งชิ้นงาน Prototype ไฟล์โค้ด วิดีโอสาธิต และรายงานสรุปผลการทดสอบ เพื่อแสดงให้เห็นว่าระบบทำงานได้จริง
แยกข้อมูลตามวัน เวลา หรือคาบเรียนเพื่อวิเคราะห์การใช้งานห้อง
ส่งแจ้งเตือนเมื่อจำนวนคนเกินกำหนดหรือระบบนับผิดปกติ
ทำกราฟช่วงเวลาที่มีคนเข้าใช้งานสูงสุดและจำนวนเฉลี่ยต่อวัน
เพิ่ม Reset/Calibration และตรวจกรณีคนเดินสวนกันหรือหยุดค้าง
ใช้หน้านี้เป็นแนวทางสำหรับวางแผนโครงงาน เขียนรายงาน ทำสไลด์ และสาธิตผลงานปลายภาคในรายวิชา IoT