실시간 데이터 기반 스마트 신호등 제어 시스템
프로젝트 개요
교통 체증은 운전자들을 괴롭히는 주요 원인 중 하나이며, 상황은 갈수록 악화되고 있습니다. 지능형 신호등으로 이 문제를 해결할 수 있다면 어떨까요? 본 프로젝트는 운전자가 교차로에 녹색 신호로 통과할 수 있도록 적정 주행 속도를 안내하고, 적색 신호 대기 시 녹색 신호까지 남은 시간을 알려주는 신호등 정보 시스템(Traffic Light Information System)을 구현합니다.
시스템 작동 원리
신호등은 현재 녹색/적색 신호 유지 시간, 다음 녹색 신호까지의 시간 등의 데이터를 온라인 MySQL 데이터베이스로 전송합니다. 스마트폰의 GPS 또는 전용 애플리케이션이 이 데이터를 수신하여, 제한 속도를 초과하지 않는 선에서 녹색 신호 통과를 위한 최적 속도를 계산해 표시합니다. 불가피하게 적색 신호에서 대기해야 할 경우, 녹색 신호 전환까지 남은 시간을 카운트다운 형태로 제공합니다.
구체적 시나리오
제한 속도 70km/h 구간을 주행 중입니다. 앞쪽 신호등이 적색이며 30초 후 녹색으로 바뀝니다. 신호등까지 거리가 500m라면, 시스템은 60km/h로 주행할 것을 권장합니다. 이렇게 하면 정확히 녹색 신호에 맞춰 교차로를 통과할 수 있습니다.
하드웨어 구성
| 부품 | 수량 | 비고 |
| Arduino Yun | 1 | 메인 컨트롤러 (Linux 탑재) |
| Arduino UNO | 1 | 송신 측 거리 측정용 |
| 초음파 센서 HC-SR04 | 1 | 차량-신호등 간 거리 측정 |
| DS3231 RTC 모듈 | 1 | 실시간 클록 |
| LED (적/황/녹) | 각 1개 | 신호등 시뮬레이션 |
| 330Ω 저항 | 3 | LED 전류 제한 |
| 433MHz RF 송수신 모듈 | 1세트 | 아두이노 간 무선 통신 |
| Android 기기 | 1 | 앱 실행용 |
| SD 카드 | 1 | PHP 스크립트 저장용 |
| 점퍼 와이어 | 1세트 | 배선용 |
소프트웨어 및 온라인 서비스
- Arduino IDE - 펌웨어 개발
- Android Studio - 안드로이드 앱 개발
- MySQL 데이터베이스 호스팅 (예: freemysqlhosting.net) - 신호등/거리 데이터 저장
구현 상세
송신 측 (Arduino UNO + HC-SR04 + 433MHz TX)
초음파 센서로 차량과 신호등 간 거리를 실시간 측정하여 433MHz RF 모듈로 수신 측에 전송합니다. VirtualWire 라이브러리와 HCSR04 라이브러리를 사용합니다.
수신 측 (Arduino Yun + 433MHz RX + RTC + LED)
Arduino Yun이 RF로 거리 데이터를 수신하고, RTC(DS3231)로 현재 시각을 관리하며 신호등 상태(녹색/적색 전환 시점)를 계산합니다. 계산된 Unix 타임스탬프와 거리 데이터를 SD 카드에 저장된 PHP 스크립트를 통해 MySQL 데이터베이스로 업로드합니다. 신호등 LED는 계산된 스케줄에 따라 제어됩니다.
안드로이드 애플리케이션
Android Studio로 개발된 앱은 PHP API(EchoJSON.php)를 통해 데이터베이스에서 신호등 스케줄과 거리 데이터를 JSON 형태로 조회합니다. 현재 시각과 비교하여 다음 녹색 신호까지의 시간, 적색 신호 남은 시간, 권장 속도를 계산하여 화면에 표시합니다.
ESP8266 대체 구현 (저비용 옵션)
비싼 Arduino Yun 대신 ESP8266(NodeMCU 등)을 사용하여 구현할 수 있는 추가 지침이 제공됩니다. 000webhosting 무료 호스팅을 이용한 데이터베이스 구축, PHP 스크립트 업로드, ESP8266 아두이노 코어 설정, 주기적 데이터 전송 코드(ESP8266PostDemo.ino) 등이 포함되어 있습니다.
주요 소스 코드
- Arduino 송신 코드 (초음파 거리 측정 + RF 전송)
- Arduino 수신 코드 (RF 수신 + 신호등 제어 + MySQL 업로드)
- MySQL_UpdateTrafficLData.php (신호등 스케줄 DB 업데이트)
- MySQL_UpdateDistance.php (거리 데이터 DB 업데이트)
- EchoJSON.php (앱용 JSON 데이터 제공)
- MainActivity.java (안드로이드 메인 로직: 속도 계산, UI 업데이트)
- AndroidManifest.xml, strings.xml, activity_main.xml
회로도
송신 측: HC-SR04(Trig: D5, Echo: D6), 433MHz TX(D3)
수신 측: 433MHz RX(D9), 신호등 LED(적:D5, 황:D6, 녹:D7), DS3231(I2C: SDA/SCL)