ระบบไฟจราจรอัจฉริยะตามความหนาแน่นรถยนต์ (Density-Based Traffic Signal System)
ตอนนี้ระบบไฟจราจรส่วนใหญ่ยังทำงานแบบ ตามเวลา (Time-based) หรือตั้งเวลาไว้ตายตัว นี่แหละตัวดีที่ทำให้รถติดเรื้อรัง โดยเฉพาะตอนที่เลนหนึ่งมีรถเยอะเป็นขบวน ส่วนอีกเลนโล่งเตียน ระบบเก่ามันก็ยังจะให้ไฟเขียวกับเลนที่โล่งอยู่ดีตามเวลาที่ตั้งไว้ เสียโอกาสเคลียร์รถจากฝั่งที่หนาแน่นสุดๆ ไปเลย
บทความนี้พี่จะพาน้องไปดูการเปลี่ยนจากระบบ Manual หรือ Fixed Timer ไปสู่ ระบบอัตโนมัติ ที่มีสมองตัดสินใจได้ ใช้พื้นฐานของ Embedded Systems มาบริหารจัดการ

แนวคิดและหลักการทำงานของระบบ
หัวใจของโปรเจคนี้คือการออกแบบระบบไฟจราจรแบบไดนามิก ที่สามารถปรับระยะเวลาไฟเขียวได้อัตโนมัติ ตามการวัดความหนาแน่นของรถยนต์ในแต่ละเลนแบบเรียลไทม์ ถ้าเลนไหนมีรถสะสมเยอะ ระบบจะคำนวณและเพิ่มเวลา Green Time ให้ยาวกว่าปกติ เพื่อเคลียร์ปริมาณรถให้สอดคล้องกับสถานการณ์จริง
กระบวนการนี้พึ่งพาเซ็นเซอร์ตรวจจับวัตถุ เช่น PIR (Passive Infrared) หรือ เซ็นเซอร์วัดระยะอินฟราเรด (IR Proximity Sensors) ซึ่งจะถูกติดตั้งไว้หลายจุดตามระยะทางข้างถนน เพื่อแบ่งระดับความหนาแน่น เมื่อเซ็นเซอร์ตรวจจับการสะท้อนของรังสีอินฟราเรดจากตัวรถได้ ข้อมูลจะถูกส่งไปยังไมโครคอนโทรลเลอร์ Arduino เป็นสัญญาณดิจิทัล (High/Low) เพื่อประมวลผลจัดลำดับความสำคัญ
มาดูอุปกรณ์และหลักวิศวกรรมกันแบบเจาะลึก (Technical Deep Dive)
การสร้างระบบจราจรอัจฉริยะต้องอาศัยการทำงานประสานกันระหว่างฮาร์ดแวร์และโปรแกรมมิ่งลอจิกที่ซับซ้อน แบบนี้เลยน้อง:
1. หน่วยตรวจจับ (Sensing Unit)
เราใช้เซ็นเซอร์ตรวจจับการเคลื่อนไหวหรือเซ็นเซอร์วัดระยะ (Proximity Sensors) ติดตั้งเป็นชุดเรียงกันตามถนน เซ็นเซอร์จะปล่อยสัญญาณ IR ออกไปและรอการสะท้อนกลับ ถ้ามีรถมาบัง สัญญาณจะสะท้อนกลับมา ทำให้เซ็นเซอร์ส่งสถานะ "ตรวจจับได้" ไปให้ Arduino
- ความหนาแน่นต่ำ: เซ็นเซอร์ตัวแรกตรวจจับรถได้
- ความหนาแน่นสูง: เซ็นเซอร์ตัวที่สองหรือสาม (ที่อยู่ไกลออกไป) ตรวจจับรถได้พร้อมกัน
2. หน่วยควบคุมหลัก (สมองของระบบ)
Arduino Uno/Nano ทำหน้าที่เป็นศูนย์กลางประมวลผล รับอินพุตจากเซ็นเซอร์ทั้งหมดที่ติดตั้งไว้แต่ละทางแยก (Flanks) จากนั้นใช้ ลอจิกแบบมีเงื่อนไข (Conditional Logic) มาคิดว่าควรให้ไฟเขียวแก่เลนไหนก่อน และให้นานแค่ไหน (เช่น 15 วินาทีสำหรับรถเบา, 45 วินาทีสำหรับรถหนาแน่น)
3. หน่วยสัญญาณไฟจราจร (Signaling Unit)
ใช้ชุด LED สีแดง เหลือง เขียว จำลองสถานะไฟจราจรจริงๆ ต่อผ่านตัวต้านทาน (Resistor) 220 โอห์มเพื่อจำกัดกระแส ป้องกัน LED ไหม้จ้า
วิเคราะห์ลอจิกซอฟต์แวร์ (Control Logic & State Machines)
การควบคุมสี่แยกที่ซับซ้อนแบบนี้ ใช้แค่คำสั่ง delay() เฉยๆ ไม่ได้เด็ดขาด เพราะระบบจะ "ติดแหง็ก" รอ ไม่สามารถรับอินพุตจากเซ็นเซอร์อื่นได้ทันเวลา วิศวะเลยนิยมใช้โครงสร้าง Multi-State Logic หรือ State Machines แทน:
- สถานะที่ 1 (NS เขียว / EW แดง): ฝั่งเหนือ-ใต้เปิดเขียว ตรวจสอบความหนาแน่นเพื่อกำหนดเวลา
- สถานะที่ 2 (NS เหลือง / EW แดง): ช่วงเปลี่ยนผ่านเพื่อความปลอดภัย (Clearance Interval)
- สถานะที่ 3 (EW เขียว / NS แดง): ฝั่งตะวันออก-ตะวันตกเปิดเขียว ปรับเวลาตามเซ็นเซอร์ฝั่งนั้น
- สถานะที่ 4 (EW เหลือง / NS แดง): เตรียมเปลี่ยนกลับไปสถานะแรก
การใช้ฟังก์ชัน millis() แทน delay() ทำให้ Arduino ตรวจสอบสถานะเซ็นเซอร์ได้ตลอดเวลา (Non-blocking code) แม้ตอนไฟเขียวกำลังเปิดอยู่ ซึ่งเพิ่มความยืดหยุ่นให้ระบบ เช่น ถ้ารถในช่องทางที่ไฟเขียวหมดก่อนเวลาที่กำหนด ระบบก็สามารถเปลี่ยนเป็นไฟเหลือง แล้วสลับไปอีกฝั่งได้ทันที เพื่อประสิทธิภาพสูงสุด
สรุปและแนวทางการพัฒนาต่อ
โปรเจกต์ ไฟจราจรปรับตามความหนาแน่น (Density-based Dynamic Traffic Signal) นี้ ช่วยแก้ปัญหาจุดคอขวดได้จริง ลดการควบคุมไฟจราจรด้วยคน และลดการปล่อย CO2 จาการติดแหง็กรอไฟแดงแบบไร้ประสิทธิภาพ
ท้าทายขึ้นอีกระดับ: ถ้าอยากพัฒนาให้เทพกว่านี้ ลองเพิ่ม ระบบทางม้าลาย (Pedestrian Crossing System) ด้วยการติดปุ่มกดสำหรับคนข้าม ซึ่งต้องใช้ลอจิก Interrupts เพื่อให้ระบบหยุดรถได้อย่างปลอดภัยก่อนให้คนข้าม หรือจะ Integrate เทคโนโลยี Image Processing ผ่านกล้อง AI กับ Arduino เพื่อวิเคราะห์ประเภทรถ (เช่น รถฉุกเฉิน/รถพยาบาล) แล้วให้สิทธิ์ผ่านก่อน (Priority Preemption) ก็จัดไปได้เหมือนกัน งานนี้ห้ามช็อตนะตัวนี้!