← Back to Basic Projects
Basic · Project #03

🚦 Smart Traffic Light System

Simulate a real intersection with timed red-yellow-green cycles and an optional pedestrian button.

📋 Overview

Traffic lights are a perfect real-world model for learning state machines. Each light (Red, Yellow, Green) represents a state, and transitions happen on a timer — or when a button is pressed.

What you'll learn: Multiple digital outputs, timing sequences, button input with debouncing, and basic state machine logic.

Estimated time: 45–60 minutes. Difficulty: ⭐⭐ Easy.

🧩 Components Needed

ComponentSpecificationQtyNotes
Arduino Uno R3ATmega328P, 5V1
Red LED5mm, 2V 20mA1
Yellow LED5mm, 2V 20mA1
Green LED5mm, 2V 20mA1
Resistors220Ω3One per LED
Push ButtonMomentary SPST1Pedestrian button
Resistor10kΩ pull-down1For button
Breadboard + WiresStandard1

📖 Step-by-Step Tutorial

1

Place the LEDs

Insert Red, Yellow, and Green LEDs into the breadboard vertically with spacing between each.
2

Add Resistors

Wire a 220Ω resistor from each LED cathode (short leg) to GND rail.
3

Connect to Arduino

Red → Pin 8, Yellow → Pin 9, Green → Pin 10.
4

Add Button

Connect button between pin 2 and 5V. Add 10kΩ pull-down resistor from pin 2 to GND.
5

Upload and Test

Upload the code. Normal cycle runs automatically. Press button to trigger pedestrian signal (green held, then red).
💡
The pedestrian button uses a pull-down resistor to keep the pin at LOW by default. Without it, the pin floats and gives random readings.

💻 Arduino Code

traffic_light.ino
// Smart Traffic Light — Volt X
const int RED = 8, YELLOW = 9, GREEN = 10;
const int BUTTON = 2;

void setup() {
  pinMode(RED, OUTPUT);
  pinMode(YELLOW, OUTPUT);
  pinMode(GREEN, OUTPUT);
  pinMode(BUTTON, INPUT);
}

void setLight(int r, int y, int g) {
  digitalWrite(RED, r);
  digitalWrite(YELLOW, y);
  digitalWrite(GREEN, g);
}

void loop() {
  // Green phase
  setLight(LOW, LOW, HIGH);
  for (int i = 0; i < 50; i++) {
    if (digitalRead(BUTTON) == HIGH) break;
    delay(100);
  }

  // Yellow phase
  setLight(LOW, HIGH, LOW);
  delay(2000);

  // Red phase
  setLight(HIGH, LOW, LOW);
  delay(5000);
}