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

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

// C++ code
// กำหนดตัวแปร ทั้ง 4 แยก 12 หลอด
int y1green = 1;
int y1red = 2;
int y1yello = 3;
int y2green = 4;
int y2yello = 5;
int y2red = 6;
int y3green = 7;
int y3yello = 8;
int y3red = 9;
int y4green = 10;
int y4yello = 11;
int y4red = 12;

void setup()
{
	pinMode(1, OUTPUT);
	pinMode(2, OUTPUT);
	pinMode(3, OUTPUT);
	pinMode(4, OUTPUT);
	pinMode(5, OUTPUT);
	pinMode(6, OUTPUT);
	pinMode(7, OUTPUT);
	pinMode(8, OUTPUT);
	pinMode(9, OUTPUT);
	pinMode(10, OUTPUT);
	pinMode(11, OUTPUT);
	pinMode(12, OUTPUT);
}

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



void loop()
{
    // ไฟเขียวแยก 1-2 ไฟแดง แยก 3-4  (set1)
  	digitalWrite(y1green, HIGH);
 	digitalWrite(y2green, HIGH);
	digitalWrite(y3red, HIGH);
	digitalWrite(y4red, HIGH);
  	delay(3000);   //รอ 30 วินาที ปิดไฟเขียว กระพริบไฟเหลือง แล้วเปิดไฟแดง
  	digitalWrite(y1green, LOW);
 	digitalWrite(y2green, LOW);
          // กระพริบไฟเหลือง  1-2
	digitalWrite(y1yello, HIGH);  
	digitalWrite(y2yello, HIGH);
	delay(500);
	digitalWrite(y1yello, LOW);  
	digitalWrite(y2yello, LOW);
	delay(500);
	digitalWrite(y1yello, HIGH);  
	digitalWrite(y2yello, HIGH);
	delay(500);
	digitalWrite(y1yello, LOW);  
	digitalWrite(y2yello, LOW);
	delay(500);

       // แล้วเปิดไฟแดง แยก 1-2 ไฟเขียว แยก 3-4  (set2)
	digitalWrite(y1red, HIGH);  
	digitalWrite(y2red, HIGH);
	digitalWrite(y3red, LOW);
	digitalWrite(y4red, LOW);
 	digitalWrite(y3green, HIGH);
	digitalWrite(y4green, HIGH);
	delay(3000);   //รอ 30 วินาที ปิดไฟเขียว กระพริบไฟเหลือง แล้วเปิดไฟแดง
 	digitalWrite(y3green, LOW);
	digitalWrite(y4green, LOW);
       // กระพริบไฟเหลือง  3-4
..
..
..


      // แล้วปิดไฟแดง แยก 1-2
	digitalWrite(   , LOW);  
	digitalWrite(   , LOW);
}

ผลลัพธ์

ส่งผลงาน

ใส่ความเห็น

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