본문 바로가기

아두이노/아두이노 공부하기!

4. [Tutorial] 아두이노 LED와 옴의법칙 동작 설명

아두이노의 PIN 설명에 이어서 LED에 대한 설명을 진행하겠다.


위 그림과 같이 "LED"는 다이오드의 일종이다.

다이오드란, 한 쪽 방향으로만 전류가 흐르는 반도체 소자를 말한다.


이러한 다이오드 중 전류를 빛 에너지로 변환 하는 것을 발광 다이오드. 즉, LED(Light Emitting Diode)라 한다.


LED는 외부 충격에 대해 강한 내구성과 긴 수명을 가지고 있으며, 낮은 전압/전류로 밝은 빛을 얻을 수 있다. 이러한 특징으로 LED는 휴대전화부터 조명기구까지 널리 사용되고 있다.


LED는 2개의 전극 단자로 구성되어 있으며, 각 단자는 극성을 가지고 있다. (위에 LED그림을 보면 애노드와 캐소드로 구분한다.)


LED의 사용방법은 전기/전자의 기초 항목인 옴의 법칙을 알면 가능하다.

아래에 옴의 법칙에 관한 설명이 있다. 


옴의 법칙과 아날로그 & 디지털에 대한 설명: http://openstory.tistory.com/5


옴의 법칙은 간단하게 I=V/R, V=IR, R=V/I  총 3가지의 경우로 사용된다. 위 공식 하나면 LED 사용이 가능하다.


그리고 모든 회로설계도 이 옴의법칙을 기준으로 계산하게 된다. 따라서 옴의법칙만 제대로 이해한다면, 회로를 이해하는데에는 큰 문제가 없을 것이다.


그럼, 옴의법칙을 이용하여 LED계산을 해보자.


아두이노 우노는 5V로 동작한다. (공급 전압 5V).

그리고 이를 USB로 공급했을 경우, USB의 5V에 500mA에서 아두이노 Uno에서 필요한 전류만큼 가져가서 동작하게 된다. (예를들어 500mA중에서 80mA만 아두이노가 끌어가서 사용한다.)

그리고 통상 LED는  1.6V ~ 2.0V와 10mA를 소비한다. (정해져 있다.)

그러면 아두이노의 전압 값과 LED의 전압/전류 값이 정해져 있으니 이를 옴의 법칙으로 계산하여 LED에 사용될 저항 값을 얻을 수 있다.  저항(R) = 전압(V) / 전류(I) 로 계산하여 저항 값을 얻으면 된다.

저항 값을 구하는 이유는 LED를 오래 사용하기 위해서는 LED에게 1.6V ~ 2.0V 전압값 , 10mA 전류 값 이상의 값을 전달해주면 안된다.

이 이상의 값을 전달해주면 LED의 수명은 굉장히 짧아진다. 그리고 모든 부품들은 허용치라는 것이 존재한다.

이 허용치 이상을 넘어버리면 고장이 나버리기 때문이다.

이 같은 이유로 LED에 반드시 저항을 부착하여 LED에 올바른 값이 전달될 수 있도록 하는 것이다.



다음과 같이 아두이노 D13에 저항과 다이오드가 연결되어 있다.

왜 330R이 부착되어 있을까??


앞에서 이미 다 설명했듯이, 전류는 LED에 의해 이미 10mA가 흐르고 있다. 그리고 전압은 (아두이노-LED)로 정해져 있으니 이대로 계산해서 저항만 구하면 되는 것이다.

이때, Arduino(5V) , LED (2V) 로 했을 때, LED를 사용하기 위해 필요한 저항값은 (5.0V-2.0V) / 0.01A = 300R이 된다.


근데 왜 330R을 사용할까?? 

근래에는 다양하고 더 정확한 저항도 많이 있기 때문에 300R도 손쉽게 구할 수 있지만, 예전에는 330R, 470R등 저항들이 정해져서 나오기 때문에 300R을 대체하여 330R을 사용하게 된다.


여기까지가 LED의 사용 방법이다. LED가 고장나지 않게 저항을 이용하여 일정 전압/전류를 공급해줄 수 있게 회로를 제작하는 것이다.
이렇게 회로 설계를 하여 사용할 수 있다.



하지만 여기서 끝이 아니다 !!


LED의 사용방법은 알았지만 "이제 어떻게 LED 불을 킬까?"가 남았다.

다시 위 회로를 보자.

아두이노의 D13 PIN에 저항 330R과 LED가 연결되어 GND(0V)로 흐르게 된다.



먼저 결론을 말하자면 !! 아두이노의 D13를 제어하면 LED의 불을 킬 수 있다 !!


여기서 아두이노의 D13는 이전 시간에 설명한 GPIO이다.

GPIO는 다시 설명하자면, "PIN에 INPUT/OUTPUT을 설정"하는 것이다.


그래서 LED를 동작시키기 위해서는 GPIO를 이용하여 D13를 OUTPUT으로 설정한다.

그리고 D13핀에 1(5V)를 출력하면, 아두이노의 5V가 저항을 거쳐 LED를 거쳐 GND(0V)로 들어가게 된다.


그러면 LED의 불이 켜진다 !!


여기서 1(5V)를 출력하고 0(0V)를 출력하는 것은 사용자가 코딩해야하는 몫이다. (뒤에 코드 설명에서 알 수 있을 것이다.)


근데, 왜 출력일까?????

LED가 출력인 이유는 LED는 아두이노가 값을 주는 것에 따라 동작하는 소자이기 때문이다.

좀 더 정확하게 표현하자면, 5V를 인가하는 것이다. 아두이노를 이용하여 5V를 인가하니깐 5V가 저항을 거쳐 LED를 거쳐 0V로 빠져나간다.

5V를 인가해주는 것을 아두이노를 이용하는 것이다.


그러니깐 LED는 무조건 OUTPUT이다.


이제 위 방법을 활용하여 실제로 어떻게 동작하는지 예제를 통해 이해해보도록 하자.


1. 아두이노를 실행하고 예제 -> Basics -> Blink 를 실행시킨다.


2. 그러면 위와 같은 예제 코드가 실행된다.

3. 위 예제를 를 눌러서 연결된 아두이노에 펌웨어를 업로드 해보자.

4. 정상적으로 펌웨어가 업로드 되었다면, 위 사진처럼 빨간색 테두리 부분의 LED가 점등(깜빡깜빡)하는 것을 볼 수 있다.

5. 아두이노 우노 or 메가 보드는 "D13"이라고 적혀있는 LED에 불이 들어올 것이다 !

6. 위 보드는 WizArduino (Cortex-M0 base) 보드이다. (WIZnet에서 제작한 아두이노 클론보드)


7. 이제 코드의 설명을 진행하겠다.

8. 먼저 아두이노는 크게 Setup()과 loop()로 동작한다. 자세한 설명은 위 그림을 참조바란다.


  


9. 8번의 설명을 토대로 코드 분석을 진행하겠다. (여기에 아까 보았던 회로를 다시 가져왔다.)

10. 회로를 보면 D13에 LED가 연결되어 있는 것을 확인할 수 있다.

11. 그리고 왼쪽의 코드를 보면 13이라는 숫자가 보일텐데, 이게 D13번을 사용하겠다는 의미가 되겠다.

12. 좀 더 정확히 설명하자면 아래와 같이 다시 표현될 수 있다.


-------------------------------------------------------------------------------------------

void setup() { // 전원 인가 시 가장 처음에 한 번만 실행

pinMode(13, OUTPUT); // D13 핀을 GPIO로 설정하여 OUTPUT으로 세팅

}


void loop() { // 실제 응용 동작, 반복 실행한다.

digitalWrite(13, HIGH);   // D13 핀에 1을 출력한다.(5V)

delay(1000);              // 1초 기다린다. delay(1) 이면 1ms 이다. (0.001초)

digitalWrite(13, LOW);    // D13 핀에 0을 출력한다.(0V)

delay(1000);              // 1초 기다린다. delay(1) 이면 1ms 이다. (0.001초)

}

-------------------------------------------------------------------------------------------


13. 코드와 설명을 함께 보면 이해가 쉬울 것이다.

14. pinMode와 digitalWrite는 아두이노에서 제공하는 함수다. 자세한 것은 아래 링크를 따라가면 알 수있다.

15. https://www.arduino.cc/en/Reference/HomePage

16. pinMode는 GPIO세팅으로 제어할 핀에 INPUT과 OUTPUT을 설정한다.

17. digitalWrite는 제어할 핀에 1 또는 0을 출력한다.

18. 여기서 digital이라는 명칭이 붙은 이유는 디지털 신호이기 때문이다. 디지털 신호는 1 과 0으로만 표현할 수 있다.

19. 첨언으로 //라고 표기한 것은 주석처리이다. 이는 컴파일하고 업로드할 때 이 부분은 무시한다는 의미다.


여기까지가 GPIO 및 LED의 설명이 되겠다.

최대한 쉽게 설명하고자 했는데, 그래도 이해가 안된다면 처음부터 다시 읽어보자.

그래도 이해가 안되면 댓글을 달면 된다 !


다음은 스위치에 대한 설명으로 넘어가도록 하겠다.