ระบบควบคุมไฟจราจรตามความหนาแน่นอัจฉริยะ Smart Density Based Traffic Light Control System

ผู้เขียนบทความ
นางสาวชารีฮาน กุลนิล #COE16
นายณัชพล บุณยเกียรติ #COE16
นายศุภโชค นิยม #COE16
นายภาณุพงศ์ บัวทอง #COE16
คณะวิศวกรรมศาสตร์ สาขาวิศวกรรมคอมพิวเตอร์
วิชาการโปรแกรมคอมพิวเตอร์ขั้นสูง รหัสวิชา 0451320164

1. ประวัติความเป็นมา

          ในปัจจุบัน อินเทอร์เน็ตได้กลายเป็นปัจจัยสำคัญที่มีบทบาทลึกซึ้งในชีวิตประจำวันของมนุษย์ ครอบคลุมทุกแง่มุมของชีวิต ตั้งแต่การสื่อสาร การทำงาน ไปจนถึงการควบคุมอุปกรณ์ต่างๆ จากระยะไกล การพัฒนาของเทคโนโลยีอินเทอร์เน็ตช่วยให้มนุษย์สามารถเชื่อมต่อและควบคุมสิ่งต่างๆ ได้อย่างมีประสิทธิภาพมากขึ้น ระบบควบคุมไฟจราจรแบบดั้งเดิมยังคงมีข้อจำกัด เนื่องจากใช้การตั้งค่าเวลาแบบคงที่ ซึ่งไม่สามารถปรับให้เข้ากับสภาพการจราจรในขณะนั้นได้ ส่งผลให้เกิดการจราจรติดขัดในบางช่วงเวลา

          ดังนั้น ผู้จัดทำจึงได้พัฒนาระบบควบคุมไฟจราจรตามความหนาแน่นอัจฉริยะ โดยใช้ไมโครคอนโทรลเลอร์ ESP32 ที่สามารถเชื่อมต่อผ่านระบบ Wi-Fi และทำงานร่วมกับแอปพลิเคชัน Blynk เพื่อควบคุมสัญญาณไฟจราจรจากระยะไกล ระบบนี้ใช้เซนเซอร์ในการตรวจจับปริมาณยานพาหนะและปรับเวลาไฟจราจรให้เหมาะสมกับความหนาแน่นในแต่ละทิศทาง การใช้เทคโนโลยี Wi-Fi ช่วยเพิ่มความยืดหยุ่นในการควบคุม โดยไม่ต้องพึ่งพาการตั้งค่าแบบเดิม ทำให้การจัดการจราจรมีประสิทธิภาพมากยิ่งขึ้น

2. วัตถุประสงค์

2.1 เพิ่มประสิทธิภาพการจราจร ลดระยะเวลาในการเดินทาง ลดการปล่อยมลพิษ และเพิ่มความปลอดภัยบนท้องถนน ด้วยการใช้เทคโนโลยีเซ็นเซอร์

3. ขอบเขต

3.1 สามารถแสดงผลควบคุมการทำงานผ่านสมาร์ทโฟนและเว็บไซต์ได้
3.2 สามารถควบคุมระบบไฟจราจรแบบอัตโนมัติได้
3.3 สามารถลดเวลาในการเดินทางได้
3.4 ลดการปล่อยมลพิษ: จากการหยุด-สตาร์ทเครื่องยนต์ที่น้อยลง

4. ประโยชน์ที่คาดว่าจะได้รับ

4.1 เพื่อลดปัญหารถติด
4.2 เพื่อลดปัญหาการปล่อยก๊าซมลพิษ
4.3 เพื่อลดอุบัติเหตุ
4.4 เพิ่มความปลอดภัยบนท้องถนน

5. ความรู้ที่เกี่ยวข้อง

ความรู้ที่เกี่ยวข้องด้านฮาร์ดแวร์ Hardware

5.1 ESP 32

  • ESP32 เป็นไมโครคอนโทรลเลอร์ยอดนิยมที่ถูกพัฒนาขึ้นโดยบริษัท Espressif Systems ซึ่งมีคุณสมบัติโดดเด่นในการเชื่อมต่อ Wi-Fi และ Bluetooth ทำให้เหมาะสำหรับการนำไปใช้ในโครงการ Internet of Things (IoT) หรือระบบฝังตัวที่ต้องการเชื่อมต่ออินเทอร์เน็ต
  • CPU ใช้สถาปัตยกรรม Tensilica LX6 จำนวน 2 คอร์ สัญญาณนาฬิกา 240MHz สามารถแยกการทำงานระหว่างโปรแกรมจัดการ WiFi และแอพพลิเคชั่นออกจากกันได้ ทำให้มีสเถียรภาพเพิ่มขึ้นมาก มีแรม 520KB มาในตัว  นอกจากนี้ยังมี GPIO เพิ่มขึ้นมาก และมีช่อง ADC เพิ่มขึ้นเป็น 12 ช่อง จากเดิม ESP8266 มีเพียงช่องเดียว ใช้แรงดันไฟฟ้า 3.3V ในโหมด Sleep ใช้กระแสไฟฟ้าเพียง 2.5uA ผลิตโดยบริษัท Espressif จากประเทศจีน โดยตัวไอซี ESP32
รูปภาพ ESP 32 อ้างอิงจากเว็บไซต์ http://www.arduino-indy.com/product/65/esp-32s

5.2 เซนเซอร์ Ultrasonic Sensor

  • Ultrasonic Sensor หรือ เซนเซอร์วัดระยะทางแบบอัลตร้าโซนิค ทำงานโดยอาศัยหลักการสะท้อนของคลื่นเสียงความถี่สูง (Ultrasonic) ซึ่งเกินกว่าที่หูมนุษย์จะได้ยิน โดยเซนเซอร์จะปล่อยคลื่นเสียงออกไป เมื่อคลื่นเสียงไปกระทบกับวัตถุก็จะสะท้อนกลับมายังเซนเซอร์ จากนั้นเซนเซอร์จะคำนวณหาระยะทางโดยวัดเวลาที่ใช้ในการเดินทางของคลื่นเสียงไปกลับ
    • การสร้างคลื่น Ultrasonic: เซนเซอร์จะแปลงสัญญาณไฟฟ้าเป็นคลื่นเสียงความถี่สูง
    • การรับคลื่นสะท้อน: เมื่อคลื่นเสียงกระทบวัตถุจะสะท้อนกลับมา เซนเซอร์จะรับคลื่นเสียงนี้
    • การคำนวณระยะทาง: จากเวลาที่ใช้ในการเดินทางของคลื่นเสียง เซนเซอร์จะคำนวณหาระยะทางไปยังวัตถุ
    • ปัจจัยที่ส่งผลต่อการวัด: อุณหภูมิ ความชื้น และวัสดุของวัตถุเป้าหมาย สามารถส่งผลต่อความเร็วของคลื่นเสียงและความแม่นยำในการวัด

5.3 โมดูลไฟจราจร LED 3 สี

  • LED Module 3 สีสำหรับไฟจราจร คือโมดูลไฟ LED ที่ออกแบบมาเพื่อแสดงผลสัญญาณไฟจราจร โดยใช้หลอดไฟ LED สามสีหลัก ได้แก่ สีแดง สีเหลือง และสีเขียว ซึ่งเป็นมาตรฐานในการควบคุมการจราจร การใช้งาน LED Module 3 สีเหล่านี้ในระบบไฟจราจรช่วยให้การแสดงสัญญาณไฟมีความสว่างและคมชัด อีกทั้งยังประหยัดพลังงานและมีอายุการใช้งานยาวนานกว่าแสงไฟแบบดั้งเดิม เช่น หลอดไส้หรือหลอดฟลูออเรสเซนต์
รูปภาพโมดูลไฟจราจร 3 สี อ้างอิงจากเว็บไซต์ https://down-th.img.susercontent.com/file/th-11134258-7r98z-lza9foqma7b568

5.4 แอปพลิเคชั่น Blynk

  • Blynk เป็นแพลตฟอร์มที่ช่วยให้ผู้ใช้สามารถควบคุมและตรวจสอบอุปกรณ์ IoT(Internet of Things)จากระยะไกลผ่านแอปพลิเคชันบนสมาร์ทโฟน Blynk ถูกออกแบบมาให้ใช้งานง่าย รองรับการทำงานร่วมกับบอร์ดไมโครคอนโทรลเลอร์หลายรุ่น เช่น Arduino, ESP32, Raspberry Pi และอุปกรณ์อื่นๆ ที่เชื่อมต่อกับอินเทอร์เน็ต
    นอกจากนี้ยังมีอินเตอร์เฟสที่ใช้งานได้ทั้งบน iOS และ Androidซึ่งทำให้ผู้ใช้สามารถควบคุมอุปกรณ์และดูข้อมูลเรียลไทม์ได้อย่างสะดวก
เนื้อหาและรูปภาพอ้างอิงจากเว็บไซต์ https://blynk.io

ความรู้ที่เกี่ยวข้องด้านซอฟต์แวร์ Software

5.5 ไลบรารี่ WiFi.h และ WiFiClient.h

#include <WiFi.h>
#include <WiFiClient.h>

ไลบรารี่นี้มีหน้าที่ช่วยในการเชื่อมต่ออุปกรณ์ ESP32 เข้ากับเครือข่าย Wi-Fi เพื่อให้สามารถสื่อสารกับอินเทอร์เน็ตและแอปพลิเคชัน Blynk Cloud ได้

5.6 ไลบรารี่ BlynkSimpleEsp32.h

#include <BlynkSimpleEsp32.h>

char auth[] = "*****************************";
char ssid[] = "****************";
char pass[] = "**************";

...

Blynk.begin(auth, ssid, pass);
Blynk.run();

...

Blynk.virtualWrite(V1, digitalRead(26) == HIGH ? 255 : 0);

ไลบรารีนี้เป็นของ Blynk ซึ่งช่วยให้ควบคุมฮาร์ดแวร์ ESP32 ผ่านคำสั่งจากแอปพลิเคชัน Blynk บนสมาร์ทโฟนหรือแท็บเล็ต

  • ส่วนของการกำหนดค่าการเชื่อมต่อ (auth, ssid, pass) จะใช้สำหรับระบุรหัสของคุณที่สร้างไว้บน Blynk Cloud
  • ฟังก์ชัน Blynk.begin ทำการเชื่อมต่อกับ Blynk Cloud
  • ฟังก์ชัน Blynk.run ทำการประมวลผลคำสั่งต่างๆ จากแอปพลิเคชัน Blynk
  • ฟังก์ชัน Blynk.virtualWrite ใช้สำหรับส่งข้อมูลไปยัง Virtual Pin ที่กำหนดไว้บนแอปพลิเคชัน Blynk

5.7 Class TrafficLight (ควบคุมไฟจราจร)

class TrafficLight {
private:
    int signalPins[3];   // พินของสัญญาณไฟ (แดง, เหลือง, เขียว)
    int redDelay;
    int yellowDelay;

public:
    TrafficLight(int redPin, int yellowPin, int greenPin, int redDelay, int yellowDelay)
        : redDelay(redDelay), yellowDelay(yellowDelay) {
        signalPins[0] = redPin;
        signalPins[1] = yellowPin;
        signalPins[2] = greenPin;

        // ตั้งค่าพินให้เป็น OUTPUT
        for (int i = 0; i < 3; i++) {
            pinMode(signalPins[i], OUTPUT);
        }
    }

    void controlSignal(int vPinRed, int vPinYellow, int vPinGreen) {
        lowAll(); // ปิดสัญญาณไฟทั้งหมด
        digitalWrite(signalPins[0], HIGH); // เปิดไฟแดง
        Blynk.virtualWrite(vPinRed, 255);
        delay(redDelay);

        digitalWrite(signalPins[0], LOW); // ปิดไฟแดง
        Blynk.virtualWrite(vPinRed, 0);

        digitalWrite(signalPins[2], HIGH); // เปิดไฟเขียว
        Blynk.virtualWrite(vPinGreen, 255);
        delay(redDelay);

        digitalWrite(signalPins[2], LOW); // ปิดไฟเขียว
        Blynk.virtualWrite(vPinGreen, 0);

        digitalWrite(signalPins[1], HIGH); // เปิดไฟเหลือง
        Blynk.virtualWrite(vPinYellow, 255);
        delay(yellowDelay);

        digitalWrite(signalPins[1], LOW); // ปิดไฟเหลือง
        Blynk.virtualWrite(vPinYellow, 0);
    }

    void lowAll() {
        digitalWrite(signalPins[0], LOW);
        digitalWrite(signalPins[1], LOW);
        digitalWrite(signalPins[2], LOW);
    }
};
  • TrafficLight เป็นคลาสที่ใช้ควบคุมสัญญาณไฟจราจร โดยมีพินสำหรับไฟแดง, เหลือง, และเขียว (signalPins[])
  • เมื่อสร้าง object ของ TrafficLight ระบบจะตั้งค่าพินให้เป็น OUTPUT
  • ฟังก์ชัน controlSignal() ควบคุมการเปิด-ปิดไฟตามลำดับ: ไฟแดง, ไฟเขียว, และไฟเหลือง และส่งการอัพเดตไปยัง Blynk virtual pins เพื่อแสดงผลผ่านแอป
  • ฟังก์ชัน lowAll() ใช้เพื่อปิดไฟทั้งหมด

5.8 Class UltrasonicSensor (เซ็นเซอร์ตรวจจับระยะทาง)

class UltrasonicSensor {
private:
    int triggerPin;
    int echoPin;

public:
    UltrasonicSensor(int triggerPin, int echoPin) : triggerPin(triggerPin), echoPin(echoPin) {
        pinMode(triggerPin, OUTPUT);
        pinMode(echoPin, INPUT);
    }

    int readDistance() {
        digitalWrite(triggerPin, LOW);
        delayMicroseconds(2);
        digitalWrite(triggerPin, HIGH);
        delayMicroseconds(10);
        digitalWrite(triggerPin, LOW);

        long duration = pulseIn(echoPin, HIGH);
        return duration * 0.034 / 2;
    }
};
  • UltrasonicSensor เป็นคลาสที่ใช้สำหรับการวัดระยะทางโดยใช้เซ็นเซอร์ ultrasonic โดยรับค่า triggerPin และ echoPin
  • ฟังก์ชัน readDistance() คำนวณระยะทางจากการวัดเวลาที่ใช้ในการสะท้อนของสัญญาณเสียง แล้วแปลงเป็นระยะทาง (หน่วยเป็นเซนติเมตร)

5.9 ตัวอย่างการทำงานโค้ดทั้งหมดของโปรแกรม

#define BLYNK_TEMPLATE_ID "*******************"
#define BLYNK_TEMPLATE_NAME "Traffic Light Controller"

#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>

char auth[] = "**************************";
char ssid[] = "****************";
char pass[] = "************";

class TrafficLight {
private:
    int signalPins[3];   // พินของสัญญาณไฟ (แดง, เหลือง, เขียว)
    int redDelay;
    int yellowDelay;

public:
    TrafficLight(int redPin, int yellowPin, int greenPin, int redDelay, int yellowDelay)
        : redDelay(redDelay), yellowDelay(yellowDelay) {
        signalPins[0] = redPin;
        signalPins[1] = yellowPin;
        signalPins[2] = greenPin;

        // ตั้งค่าพินให้เป็น OUTPUT
        for (int i = 0; i < 3; i++) {
            pinMode(signalPins[i], OUTPUT);
        }
    }

    void controlSignal(int vPinRed, int vPinYellow, int vPinGreen) {
        lowAll(); // ปิดสัญญาณไฟทั้งหมด
        digitalWrite(signalPins[0], HIGH); // เปิดไฟแดง
        Blynk.virtualWrite(vPinRed, 255);
        delay(redDelay);

        digitalWrite(signalPins[0], LOW); // ปิดไฟแดง
        Blynk.virtualWrite(vPinRed, 0);

        digitalWrite(signalPins[2], HIGH); // เปิดไฟเขียว
        Blynk.virtualWrite(vPinGreen, 255);
        delay(redDelay);

        digitalWrite(signalPins[2], LOW); // ปิดไฟเขียว
        Blynk.virtualWrite(vPinGreen, 0);

        digitalWrite(signalPins[1], HIGH); // เปิดไฟเหลือง
        Blynk.virtualWrite(vPinYellow, 255);
        delay(yellowDelay);

        digitalWrite(signalPins[1], LOW); // ปิดไฟเหลือง
        Blynk.virtualWrite(vPinYellow, 0);
    }

    void lowAll() {
        digitalWrite(signalPins[0], LOW);
        digitalWrite(signalPins[1], LOW);
        digitalWrite(signalPins[2], LOW);
    }
};

class UltrasonicSensor {
private:
    int triggerPin;
    int echoPin;

public:
    UltrasonicSensor(int triggerPin, int echoPin) : triggerPin(triggerPin), echoPin(echoPin) {
        pinMode(triggerPin, OUTPUT);
        pinMode(echoPin, INPUT);
    }

    int readDistance() {
        digitalWrite(triggerPin, LOW);
        delayMicroseconds(2);
        digitalWrite(triggerPin, HIGH);
        delayMicroseconds(10);
        digitalWrite(triggerPin, LOW);

        long duration = pulseIn(echoPin, HIGH);
        return duration * 0.034 / 2;
    }
};

// กำหนดค่า TrafficLight และ UltrasonicSensor
TrafficLight signal1(26, 25, 33, 5000, 2000);
TrafficLight signal2(19, 18, 5, 5000, 2000);
TrafficLight signal3(32, 3, 1, 5000, 2000);
TrafficLight signal4(17, 16, 15, 5000, 2000);

UltrasonicSensor sensor1(13, 12);
UltrasonicSensor sensor2(27, 14);
UltrasonicSensor sensor3(22, 23);
UltrasonicSensor sensor4(2, 0);

int t = 5; // ค่าที่ใช้ในการตรวจจับ (threshold distance)
bool ultrasonicEnabled = true;
bool manualControl = false;

void setup() {
    Serial.begin(115200);
    Blynk.begin(auth, ssid, pass);
}

void loop() {
    Blynk.run();

    if (ultrasonicEnabled && !manualControl) {
        int S1 = sensor1.readDistance();
        int S2 = sensor2.readDistance();
        int S3 = sensor3.readDistance();
        int S4 = sensor4.readDistance();

        if (S1 < t) {
            signal1.controlSignal(V1, V2, V3);
        } else if (S2 < t) {
            signal2.controlSignal(V4, V5, V6);
        } else if (S3 < t) {
            signal3.controlSignal(V7, V8, V9);
        } else if (S4 < t) {
            signal4.controlSignal(V10, V11, V12);
        }
    }

    updateBlynk();
    delay(1000);
}

void updateBlynk() {
    Blynk.virtualWrite(V1, digitalRead(26) == HIGH ? 255 : 0);
    Blynk.virtualWrite(V2, digitalRead(25) == HIGH ? 255 : 0);
    Blynk.virtualWrite(V3, digitalRead(33) == HIGH ? 255 : 0);
    Blynk.virtualWrite(V4, digitalRead(19) == HIGH ? 255 : 0);
    Blynk.virtualWrite(V5, digitalRead(18) == HIGH ? 255 : 0);
    Blynk.virtualWrite(V6, digitalRead(5) == HIGH ? 255 : 0);
    Blynk.virtualWrite(V7, digitalRead(32) == HIGH ? 255 : 0);
    Blynk.virtualWrite(V8, digitalRead(3) == HIGH ? 255 : 0);
    Blynk.virtualWrite(V9, digitalRead(1) == HIGH ? 255 : 0);
    Blynk.virtualWrite(V10, digitalRead(17) == HIGH ? 255 : 0);
    Blynk.virtualWrite(V11, digitalRead(16) == HIGH ? 255 : 0);
    Blynk.virtualWrite(V12, digitalRead(15) == HIGH ? 255 : 0);
}

BLYNK_WRITE(V20) {
    manualControl = true;
    if (param.asInt()) {
        signal1.controlSignal(V1, V2, V3);
    }
}

BLYNK_WRITE(V21) {
    manualControl = true;
    if (param.asInt()) {
        signal2.controlSignal(V4, V5, V6);
    }
}

BLYNK_WRITE(V22) {
    manualControl = true;
    if (param.asInt()) {
        signal3.controlSignal(V7, V8, V9);
    }
}

BLYNK_WRITE(V23) {
    manualControl = true;
    if (param.asInt()) {
        signal4.controlSignal(V10, V11, V12);
    }
}

BLYNK_WRITE(V30) {
    ultrasonicEnabled = param.asInt();
    manualControl = !ultrasonicEnabled;
}

6. วิธีการดำเนินงาน

ผังการทำงาน (Flowchart) ของระบบควบคุมไฟจราจรตามความหนาแน่นอัจฉริยะ

ซึ่งการทำงานของระบบ จะแบ่งออกเป็น 2 การควบคุม ประกอบด้วย การควบคุมอัตโนมัติด้วยเซนเซอร์ และการควบคุมด้วยระบบแมนนวลผ่านการกดปุ่ม

การออกแบบ System ของระบบ

ภาพรวมของระบบประกอบด้วยอุปกรณ์          

– ESP-32S NODEMCU-32

– HC-SR04 Ultrasonic Sensor เซนเซอร์วัดระยะ

– LED Module 3 traffic light โมดูลไฟจราจร LED 3 สี

7. การทดลอง

การทดลองแต่ละส่วน

การทดลองของระบบควบคุมไฟจราจรตามความหนาแน่นอัจฉริยะ จะถูกแบ่งเป็นส่วนต่าง ๆ 2 ส่วน คือ

7.1 การทดลอง ระบบควบคุมไฟจราจรตามความหนาแน่นอัจฉริยะ

         การทดลองการจำลองของสภาพแวดล้อมของรถที่จะสัญจรไปมาในแต่ละแยกไฟแดงโดยตัวไฟจะแสดงผลเป็น 3 สีแดง , เหลือง , เขียวหากมีการเปลี่ยนสีจะทำการเปลี่ยนเป็นไฟสีเขียวระยะเวลา10วินาทีจากนั้นจะเปลี่ยนเป็นไฟเหลือง 5 วินาทีจากนั้นจะเปลี่ยนเป็นไฟแดงและจะแสดงผลการทำงานผ่าน Blynk เมื่อมีการเปลี่ยนสีของไฟจราจรเพื่อแสดงผลให้ผู้ควบคุมทราบการทำงานในตอนนี้

7.2 การทดลอง ระบบควบคุมไฟจราจรด้วยตัวเองผ่านปุ่มกด

การทดลองการจำลองการกดปุ่มให้ในแต่ละแยกทำงานโดยจะมีทั้งหมด 5 ปุ่มในการทำงานปุ่มที่ 1จะทำการเปิดปิดการทำงานของเซ็นเวอร์และในส่วนของปุ่มอีก 2 ปุ่มจะเป็นการกดปุ่มเพื่อทำงานในแต่ละแยกให้ทำงานโดยเมื่อกดปุ่มจะทำให้ไฟจราจรนั้นเปลี่ยนเป็นสีเขียวเป็นเวลา 10 วินาทีจากนั้นจะเปลี่ยนเป็นไฟเหลือง 5 วินาทีและหลังจากนั้นจะทำการเปลี่ยนเป็นไฟแดงรอตัวระบบก็จะทำการแสดงผลการทำงานผ่าน Blynk และควบคุมปุ่มกดการทำงานผ่าน Blynk

8. สรุปผลการทดลอง

จากการศึกษานั้นพบว่าเมื่อมีรถมาในแต่ละแยกไฟจราจรก็จะทำงานตามลำดับสำคัญหรือตามลำดับงานที่เขียนไว้ในโปรแกรมโดยหากมีรถมาในแยกที่ 1 แต่แยกอื่นๆไม่มีรถระบบก็จะปล่อยรถออกจากแยกที่ 1 หากตัวระบบตรวจจับว่าในแต่ละแยกไม่มีรถเลยก็จะทำการดับไฟลงไปในแยกล่าสุดนั้นๆหากมีรถมา 2 แยกพร้อมกันตัวโปรแกรมจะทำการปล่อยรถจากตามลำดับที่เขียนโปรแกรมไว้ในส่วนการกดปุ่มนั้นจะต้องทำการกดปุ่มปิดเซนเซอร์ก่อนจึงจะสามารถทำการกดปุ่มการทำงานไฟจราจรได้การควบคุมด้วยตัวเองจะต้องกดปุ่มด้วยตัวเองตามแยกที่ต้องการให้ไฟเขียวถ้าหากไม่ได้กดเปลี่ยนไปแยกอื่นตัวระบบก็จะทำการหยุดการทำงานในแยกล่าสุดลง  ดังนั้น ระบบควบคุมไฟจราจรตามความหนาแน่นอัจฉริยะนั้นพบว่าการแสดงผลผ่าน Blynk นั้นอาจมีการดีเลย์บ้างในส่วนการทำงานนั้นก็สามารถลดระยะเวลาในการรอสัญญาณไฟ: ระบบสามารถปรับเวลาการทำงานของสัญญาณไฟให้สอดคล้องกับปริมาณรถในแต่ละช่องทาง ทำให้รถสามารถเคลื่อนตัวได้ต่อเนื่องมากขึ้น ลดระยะเวลาที่ต้องรอสัญญาณไฟและตัวระบบยังได้มีการใช้แบบแมนนวลเพื่อให้กดปุ่มสามารถควบคุมการทำงานได้

9. แหล่งอ้างอิง

วิดีโอแสดงผลการทำงานของระบบควบคุมไฟจราจรตามความหนาแน่นอัจฉริยะ

วิดีโอระบบควบคุมไฟจราจรตามความหนาแน่นอัจฉริยะ

นำเสนอเนื้อหาโดย นางสาวชารีฮาน กุลนิล และนายศุภโชค นิยม

นำเสนออุปกรณ์โดย นายภาณุพงศ์ บัวทอง

ถ่ายวิดีโอโดย นายณัชพล บุณยเกียรติ

และตัดต่อโดย นายศุภโชค นิยม

You may also like...

ใส่ความเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *