โปรเจค Arduino เครื่องนับคนเข้า-ออก (Bi-Directional Counter) ด้วย IR Sensor
อยากสร้างระบบนับจำนวนคนเข้า-ออกแบบอัตโนมัติไหม? โปรเจคนี้ใช้เพียง Arduino และเซ็นเซอร์ IR 2 ตัว
ก็สามารถสร้างระบบนับจำนวนแบบเรียลไทม์ พร้อมแสดงผลบนหน้าจอ LCD ได้ง่าย ๆ
เหมาะมากสำหรับผู้เริ่มต้น
อุปกรณ์ที่ใช้ (Devices & Components)
- Arduino Uno R3 https://shopee.co.th/product/243007968/5725582932
- จอ LCD 16×2 แบบ I2C https://shopee.co.th/product/243007968/6125582015
- Breadboard https://shopee.co.th/product/243007968/4725583371
- สาย Jumper https://shopee.co.th/product/243007968/7525582748 , https://shopee.co.th/product/243007968/7225582763
- IR Sensor จำนวน 2 ตัว https://shopee.co.th/product/243007968/4425584427
หลักการทำงานของระบบ
ระบบนับคนเข้า-ออกทำงานโดยใช้เซ็นเซอร์ IR จำนวน 2 ตัว วางไว้ที่ทางเข้า/ออก
เพื่อใช้ตรวจจับ “ทิศทางการเคลื่อนที่”
- ถ้าเซ็นเซอร์ตัวที่ 1 → ตัวที่ 2 → เพิ่มจำนวนเข้า (IN)
- ถ้าเซ็นเซอร์ตัวที่ 2 → ตัวที่ 1 → เพิ่มจำนวนออก (OUT)
ระบบจะคำนวณจำนวนคนปัจจุบัน และแสดงผลบนหน้าจอ LCD
โดยไม่ต้องใช้ AI หรือกล้องซับซ้อน
โครงสร้างระบบ (System Architecture)
- IR Sensor → ตรวจจับการเคลื่อนไหว
- Arduino → ประมวลผลทิศทาง
- LCD → แสดงผลจำนวนคน
การใช้เซ็นเซอร์ 2 ตัวมีความสำคัญมาก เพราะช่วยให้รู้ “ทิศทาง”
ซึ่งเซ็นเซอร์ตัวเดียวไม่สามารถทำได้
การต่อวงจร (Circuit)
- IR Sensor 1 → ขา D2
- IR Sensor 2 → ขา D3
- LCD I2C → SDA / SCL
- จ่ายไฟ 12V ผ่าน Barrel Jack

หลักการเขียนโปรแกรม
โค้ดจะทำงานโดย:
- ตรวจสอบว่าเซ็นเซอร์ตัวไหนถูกกระตุ้นก่อน
- ตรวจสอบเซ็นเซอร์ตัวถัดไปภายในช่วงเวลา (Timeout)
- ตัดสินใจว่าเป็น “เข้า” หรือ “ออก”
- อัปเดตค่าและแสดงผลบน LCD
โค้ดโปรแกรม Arduino
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
const int irPin1 = 2;
const int irPin2 = 3;
int in_count = 0;
int out_count = 0;
int current_count = 0;
const unsigned long timeout = 50;
void setup() {
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("IN: 0 OUT: 0");
lcd.setCursor(0, 1);
lcd.print("Current: 0");
pinMode(irPin1, INPUT_PULLUP);
pinMode(irPin2, INPUT_PULLUP);
}
void loop() {
if (digitalRead(irPin1) == LOW) {
unsigned long startTime = millis();
while ((millis() - startTime) < timeout) {
if (digitalRead(irPin2) == LOW) {
++in_count;
updateDisplay();
break;
}
}
while (!digitalRead(irPin1) || !digitalRead(irPin2));
}
else if (digitalRead(irPin2) == LOW) {
unsigned long startTime = millis();
while ((millis() - startTime) < timeout) {
if (digitalRead(irPin1) == LOW) {
if (out_count < in_count) {
++out_count;
updateDisplay();
break;
}
}
}
while (!digitalRead(irPin1) || !digitalRead(irPin2));
}
}
void updateDisplay() {
lcd.setCursor(4, 0);
lcd.print(" ");
lcd.setCursor(4, 0);
lcd.print(in_count);
lcd.setCursor(13, 0);
lcd.print(" ");
lcd.setCursor(13, 0);
lcd.print(out_count);
current_count = in_count - out_count;
lcd.setCursor(9, 1);
lcd.print(" ");
lcd.setCursor(9, 1);
lcd.print(current_count);
}
การทดสอบระบบ
- เดินผ่านเซ็นเซอร์ตามลำดับ → ตรวจสอบค่า IN
- เดินออก → ตรวจสอบค่า OUT
- ดูค่าปัจจุบันบน LCD
สรุป
โปรเจคนี้เป็นตัวอย่างที่ดีในการเรียนรู้ระบบตรวจจับทิศทาง
โดยใช้เซ็นเซอร์ IR และ Arduino
สามารถนำไปต่อยอดได้ เช่น:
- ระบบนับคนในห้าง
- นับรถในลานจอด
- ระบบ Smart Building
โปรเจคง่าย ๆ แต่ใช้งานจริงได้ และต่อยอดเป็นระบบใหญ่ได้สบาย