아두이노를 활용한 LED 제어

발행일 : 2018-12-01 16:29  

  • 오늘은 아두이노 프로젝트를 위해 본격적으로 시작하는 단계입니다. 지난 글에서 예고 했듯이 LED를 연결하여 1초씩 점등과 소등을 반복하는 프로그래밍을 소개하려고 합니다. 
    원하는 결과를 얻기 위해 크게 두 가지 작업을 해야합니다. 첫 번째는 하드웨어 구현입니다. 필요한 재료를 준비하고 브레드보드를 사용하여 아두이노 보드와 전자소자를 연결하는 작업입니다. 두 번째는 내가 원하는 제어가 가능하도록 프로그램을 작성해야 합니다. 
    이번 시간에 필요한 준비물은 아두이노 보드(Uno), 브레드보드, LED 1개, 220 저항 1개, 수-수 케이블 2가닥, 컴퓨터와 아두이노를 연결하는 전원선 입니다. 여기서 케이블은 아두이노 보드와 브레드보드 핀에 쉽게 연결이 가능한 케이블로 그림과 같이 철심이 밖으로 보이는 케이블이 수 케이블입니다. 반대로 철심이 없고 작은 구멍으로 된 것은 암 케이블 입니다. 
  • 재료가 준비되면 하드웨어를 구현해야 합니다. 이 때 전기적으로 문제가 없도록 연결하는 것이 가장 중요한 점입니다. 
  • LED의 긴 다리가 아두이노의 13번 핀과 연결하도록 하고 짧은 다리와 같은 라인에 저항의 한 다리를 연결합니다. 그리고 저항의 나머지 다리는 접지(Gnd)와 연결되도록 구성합니다. 여기서 LED의 긴 다리에 아두이노의 5V 핀이 아닌 13번 핀을 연결한 이유는 뭘까요? 5V 핀에 연결하면 LED는 정상적으로 점등됩니다. 그러나 이번 시간에는 LED를 1초씩 점등, 소등을 반복하는 제어를 하기 위해 13번 핀에 연결하였습니다. 

    회로가 정상적으로 구현되었다면 이제 프로그래밍을 할 차례입니다. 아두이노 IDE를 실행시켜 다음과 같이 입력합니다. 

    void setup() {
      // put your setup code here, to run once:
      pinMode(13, OUTPUT);  //13번 핀을 출력용으로 사용
    }

    void loop() {
      // put your main code here, to run repeatedly:
      digitalWrite(13, HIGH); //13번 핀에 HIGH 신호 인가
      delay(1000);            //1초 동안 회로 멈춤
      digitalWrite(13, LOW);  //13번 핀에 LOW 신호 인가
      delay(1000);
    }

    아두이노 IDE를 실행시키면 기본적으로 두 개의 함수가 있습니다. setup, loop 함수인데 setup은 프로그램이 실행될 때 한 번만 실행이 되기 때문에 일반적으로 세팅과 관련된 내용을 작성합니다. loop 함수는 계속 반복 실행되는 함수입니다. 이 함수 안에 우리가 원하는 제어를 할 수 있도록 프로그램을 작성하면 됩니다. 
    위 코드에서 //는 '주석'이라고 하고 코드에 대한 설명을 의미합니다. 프로그램 실행에는 영향을 미치지 않고 다른 사람들이 코드를 쉽게 이해할 수 있도록 설명을 추가한 것입니다. 

    setup 함수 안에는 13번 핀에 대한 설정을 하였습니다. pinMode함수 안에는 해당 핀 번호와 입력 또는 출력을 작성해야 합니다. 즉, PinMode(핀 번호, INPUT 또는 OUTPUT); 형태로 작성합니다. 
    핀은 입력(INPUT) 또는 출력(OUTPUT)으로 사용할 수 있는데 핀을 통해 외부로부터 데이터 등을 읽어올때는 해당 핀을 INPUT으로 사용해야 하고 핀을 통해 외부로 신호를 보낼때는 OUTPUT으로 사용해야 합니다. 여기서는13번 핀에서 LED로 신호를 보내는 용으로 사용할 것이기 때문에 OUTPUT으로 설정했습니다. 

    loop 함수 안에는 1초씩 LED를 점등, 소등할 수 있도록 프로그램을 작성하면 됩니다.  신호에는 digital과 analog 신호가 있고 해당 신호를 Write와 Read를 할 수 있습니다. 다시 말하면 4가지 형태의 함수를 사용할 수 있습니다. digitalWrite, digitalRead, analogWrite, analogRead 입니다. 아두이노에서 digital 신호는 이산적인 값으로 0, 1의 값을 가지고 analog 신호는 연속적인 값으로 0 ~ 255의 값을 가집니다. Write는 신호를 보낸다는 의미이고 Read는 신호를 읽어온다는 의미를 가집니다. 

    digitalWrite(13, HIGH); 는 13번에서 HIGH(5V) 신호를 보내겠다는 의미입니다.  
    delay(1000); 는 1초 동안 회로를 멈춘다는 의미입니다. delay 함수 안에는 단위가 밀리초(ms)이기 때문에 1000은 1초를 의미합니다. 두 개의 코드를 다시 정리하면 13번 핀으로 5V를 1초 동안 제공하시오 라는 의미를 가집니다. 이 때 LED는 1초 동안 점등이 됩니다. 

    반대로 LED를 소등하려면 어떻게 해야할까요? 전류를 흘려보내지 않으면 됩니다. 다시 말하면 LOW(0V)를 제공하는 겁니다. 
    digitalWrite(13, LOW);
    delay(1000);
    두 개의 코드는 1초 동안 0V 신호를 제공하는 것을 의미하므로 LED는 1초 동안 소등하게 됩니다. 

    위와 같이 구현한 후 업로드를 누르면 프로그램이 이상이 없으면 아두이노로 업로딩하게 되고 1초 동안 LED는 점등, 소등을 반복하게 됩니다. delay 함수안의 숫자를 100, 2000으로 했을 때 결과가 어떻게 나오는지 직접 해보시면 더욱 이해가 빠를 것입니다. 프로그램 결과는 아래 동영상을 살펴보시면 됩니다. 

    혹시 직접 하시다가 안되는 부분이 있거나 이해가 되지 않으시면 댓글을 남겨주시면 제가 답변을 드리도록 하겠습니다. 선생님은 이제 아두이노의 첫 걸음을 시작하였습니다. 앞으로 더욱 재미있고 흥미있는 경험을 안겨줄거라고 생각합니다. 즐거운 주말 보내세요^^

댓글(0)

이모티콘