Workshop2 สี่แยกไฟแดง อัตโนมัติ Arduino+LED

หลักคิด/ทฤษฎีความรู้

สี่แยกไฟแดง สร้างขึ้นมาเพื่ออำนวยความสะดวกในการขับรถข้ามแยกให้เกิดความปลอดภัย โดยสี่แยก มีการติดตั้งไฟแดงไว้ทุกแยก รวม 4 ชุด

ในการปล่อยรถ จะมีวิธีการปล่อยหลาบแบบ แล้วแต่ผู้ออกแบบว่าจะปล่อยแบบใด เช่น

  • ปล่อยทีละแยก แยกละ 30 วินาที
  • ปล่อยทีละสาย คือแยกตรงข้ามพร้อมกัน
  • ปล่อยทีละสาย คือแยกตรงข้ามพร้อมกัน แล้วปล่อยแล้วขวาต่างหาก
  • กำหนดการปล่อยรถโดยตำรวจจราจร (การทำด้วยมือ)

ในที่นี้ จะให้นักเรียนฝึก การปล่อยรถทีละสาย หรือปล่อยแยกตรงข้ามพร้อมกัน โดยจะมีขั้นตอนการทำงานคือ

  1. เปิดไฟเขียวเส้นแรก ( แยก 1-2) ไฟแดง เส้น 2 (แยก 3-4) เป็นเวลา 30 วินาที
  2. ปิดไฟเขียวเส้นแรก ( แยก 1-2) เปิดไฟกระพริบสีเหลือง 2 ครั้ง ( แยก 1-2)
  3. เปิดไฟแดงเส้นแรก ( แยก 1-2) ไฟเขียว เส้น 2 (แยก 3-4) เป็นเวลา 30 วินาที
  4. ปิดไฟเขียวเส้น2 (แยก 3-4) เปิดไฟกระพริบสีเหลือง 2 ครั้ง(แยก 3-4)
  5. วนกลับไปที่ข้อ 1

ขั้นแรก ต่อวงจรกันก่อน

ขั้นต่อมา เขียน Code

ส่วนแรก กำหนดตัวแปร และตั้งค่า

int y1g = 13;
int y1y = 12;
int y1r = 11;
int y2g = 10;
int y2y = 9;
int y2r = 8;
int y3g = 7;
int y3y = 6;
int y3r = 5;
int y4g = 4;
int y4y = 3;
int y4r = 2;


void setup()
{
  pinMode(y1g, OUTPUT);
  pinMode(y1y, OUTPUT);
  pinMode(y1r, OUTPUT);
  pinMode(y2g, OUTPUT);
  pinMode(y2y, OUTPUT);
  pinMode(y2r, OUTPUT);
  pinMode(y3g, OUTPUT);
  pinMode(y3y, OUTPUT);
  pinMode(y3r, OUTPUT);
  pinMode(y4g, OUTPUT);
  pinMode(y4y, OUTPUT);
  pinMode(y4g, OUTPUT);
}

ส่วนต่อมา กำหนดโปรแกรม

void loop()
{
  //รอบแรก ไฟเขียว แยก 1-2

  //แยก 1 เขียว
  digitalWrite(y1g, HIGH);
  digitalWrite(y1y, LOW);
  digitalWrite(y1r, LOW);
  //แยก 2 เขียว
  digitalWrite(y2g, HIGH);
  digitalWrite(y2y, LOW);
  digitalWrite(y2r, LOW);
  //แยก 3 แดง
  digitalWrite(y3g, LOW);
  digitalWrite(y3y, LOW);
  digitalWrite(y3r, HIGH);
  //แยก 4 แดง
  digitalWrite(y4g, LOW);
  digitalWrite(y4y, LOW);
  digitalWrite(y4r, HIGH);
    delay(3000); // Wait for 1000 millisecond(s)


//ไฟกระพริบ แยก 1-2
  //กระพริบ แยก 1-2 เปิด
  digitalWrite(y1g, LOW);
  digitalWrite(y1y, HIGH);
  digitalWrite(y2g, LOW);
  digitalWrite(y2y, HIGH);
  delay(1000); // Wait for 1000 millisecond(s)
   //กระพริบ แยก 1-2 ปิด
  digitalWrite(y1y, LOW);
  digitalWrite(y2y, LOW);
  delay(1000); // Wait for 1000 millisecond(s)
   //กระพริบ แยก 1-2
  digitalWrite(y1y, HIGH);
  digitalWrite(y2y, HIGH);
    delay(1000); // Wait for 1000 millisecond(s)
    //กระพริบ แยก 1-2
  digitalWrite(y1y, LOW);
  digitalWrite(y2y, LOW);
    delay(1000); // Wait for 1000 millisecond(s)
  //เหลืออะไรอีกน้อ
  //ไฟแดง แยก 1-2  ไฟเขียวแยก 3-4

  //ไฟกระพริบ แยก 3-4

}

ผลลัพธ์

ส่งผลงาน

ใส่ความเห็น

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