티스토리 뷰

아두이노 신호등

안녕하세요. 오늘은 아이들과 동네에 있는 마트를 다녀오면서 5개의 신호등을 지나왔습니다. 아이들이 신호등을 보면서 아두이노로 신호등을 만들어보면 어떻겠냐고 하더군요. 그래서 '좋은 생각이다' 라고 칭찬해주고 집에 오자마자 새로운 프로젝트를 시작하였습니다.

목차

    1. 아두이노 신호등 회로구성

    우선 신호등의 색이 빨강, 주황, 녹색으로 구성되어 있어 색에 맞는 LED를 준비하고 아래와 같이 회로를 구성하였습니다. 각 LED +핀을 2,3,4번에 연결하고 -핀은 그라운드에 연결하였습니다. 

    아두이노 신호등 회로구성

    여기서 왜 +,- 핀이 연결되어야 하는지 기본적인 원리를 설명해 보겠습니다. 흔히 우리가 말하는 '전기'를 LED에 흘려주기 위해 연결하는 것입니다.모든 물질은 원자라는 작은 입자로 이루어져 있고 원자는 또 다시 원자핵과 전자로 이루어져 있죠. 외부의 충격에 의해 전기력이 약한 전자(-전하)의 이동으로 인해 전기가 발생하는 거구요. 이 전자의 흐름과 반대 방향으로 전류가 흐르게 됩니다. 이것이 바로 전기입니다.

    전자의 흐름과 반대 방향으로 전류
    이미지 출처<구글>

    2. 소스코드 변경

    기존 프로젝트에서 LED개수가 2개더 추가되어 출력핀 2개(3,4번)를 추가로 할당하였습니다.

    int GREEN_LED = 2;// 녹색 LED를 아두이노 우노 보드 2번 핀에 연결
    int YELLOW_LED = 3;// 노란색 LED를 아두이노 우노 보드 3번 핀에 연결
    int RED_LED = 4; // 빨강색 LED를 아두이노 우노 보드 4번 핀에 연결

    // 리셋을 누르거나 보드에 전원을 공급하면 setup 함수는 한 번만 실행됩니다.
    void setup() {

    // 세가지 LED핀을 출력으로 설정.
    pinMode(GREEN_LED, OUTPUT);
    pinMode(YELLOW_LED, OUTPUT);
    pinMode(RED_LED, OUTPUT);

    }
    // loop 함수는 무한대로 반복
    void loop() {

    digitalWrite(GREEN_LED, HIGH); // 녹색 LED 핀을 high로 (LED on)
    delay(5000); // 5000ms(5s)기다림

    digitalWrite(GREEN_LED, LOW); // 녹색 LED 핀을 low로 (LED off)
    digitalWrite(YELLOW_LED, HIGH); // 노란색 LED 핀을 high로 (LED on)
    delay(2000); // 2000ms(2s)기다림

    digitalWrite(YELLOW_LED, LOW); // 노란색 LED 핀을 low로 (LED off)
    digitalWrite(RED_LED, HIGH); // 빨간 LED 핀을 high로 (LED on)
    delay(5000); // 2000ms(2s)기다림

    digitalWrite(RED_LED, LOW); // 빨간 LED 핀을 low로 (LED off)
    }

    진짜 신호등이 동작하는 것처럼 보이기 위해 녹색등이 일정시간 켜지고 난뒤 노란등으로 바뀔 때 delay 없이 주황색 등으로 바뀌고 시간 delay는 2000ms(2초)로 설정해 봤습니다. 주황색 등에서 빨간색 등으로 바뀔때도 delay 없이 바로 바뀌도록 설정하였습니다. 데모 비디오를 보시면 진짜 신호등의 느낌이 나는 것을 확인하실수 있습니다.

    3. 데모

    아이들이 장난감 자동차로 신호등에 맞춰 움직이는 놀이를 하면서 너무 즐거워하네요. 다음 포스팅에서는 다른 주제로 찾아뵙겠습니다.