아두이노

본문 바로가기
사이트 내 전체검색


아두이노
아두이노

1. 버튼으로 LED 켜고 끄기

페이지 정보

작성자 관리자 댓글 0건 조회 4,079회 작성일 18-09-18 16:03

본문

1. 버튼으로 LED 켜고 끄기

 

1. 부품소개 


1) LED


"LED"는 다이오드의 일종입니다. 다이오드란, 한 쪽 방향으로만 전류가 흐르는 반도체 소자를 말합니다. 이러한 다이오드 중 전류를 빛 에너지로 변환 하는 것을 발광 다이오드. 즉, LED(Light Emitting Diode)라 합니다.

그림입니다.
원본 그림의 이름: CLP000018900004.bmp
원본 그림의 크기: 가로 656pixel, 세로 332pixel


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

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


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


옴의 법칙은 간단하게 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에 올바른 값이 전달될 수 있도록 하는 것입니다.


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


보통 300R 대신에 330R을 사용하기도 합니다.


이러한 저항을 이용하여 LED가 고장나지 않게 일정 전압/전류를 공급해줄 수 있게 회로를 제작하는 것입니다.


2) 푸시버튼


그림입니다.
원본 그림의 이름: CLP0000189028ce.bmp
원본 그림의 크기: 가로 526pixel, 세로 284pixel


서로 마주 보고 있는 부분이 같은 단자입니다.

버튼을 누르면 (A-D) 부분에서 (B-C) 부분으로 전류가 흐릅니다.

입력 단자에 연결 시 버튼이 눌려지면 1, 안 눌려지면 0의 값을 표현합니다.



3) 풀다운 저항


높은 저항을 사용해서 회로에 흐르는 미세한 전류를 방지하는 저항입니다.

미세한 전류로 인한 기계의 오작동을 막아주며, 예제에서 푸쉬버튼과 연결된 저항입니다.



2. 풀업과 풀다운


풀업 에서는 스위치를 눌렀을때, 스위치가 ON 되었을때 스위치에 0V가 걸리고 0의 값을 가지게 되고 스위치를 누르지 않았을때, 스위치가 OFF 되어있을때 스위치에 5V가 걸리게 되어 1의 값을 가지게 된다.

풀다운 에서는 스위치를 눌렀을때, 스위치가 ON 되었을때 스위치는 1의 값을 가지게 되고 스위치를 누르지 않았을때, 스위치가 OFF 되어 있을 때 스위치에 5V가 걸리게 되어 1의 값을 가지게 된다.


그림입니다.
원본 그림의 이름: CLP000018900003.bmp
원본 그림의 크기: 가로 799pixel, 세로 106pixel


1) 풀업 회로도


저항을 스위치와 Vcc사이에 연결해주면 됩니다. 이렇게 연결이 되면 버튼을 눌렀을때 DigitalRead 함수는 LOW를 리턴합니다. LED에도 항상 저항을 달아주어야 하고, (+) (-) 구분을 잘 해 주어야 합니다. 그리고 LED는 12번, 버튼은 6번 핀에 연결하였습니다.


그림입니다.
원본 그림의 이름: CLP000018900006.bmp
원본 그림의 크기: 가로 522pixel, 세로 582pixel


소스 코딩:

그림입니다.
원본 그림의 이름: CLP000018900005.bmp
원본 그림의 크기: 가로 424pixel, 세로 459pixel


실행하면, LED가 켜져있고, 버튼을 누르면 LED가 꺼졌다가, 다시 버튼을 누르면 LED가 켜졌다를 반복합니다.



2) 풀다운 회로도


풀업 회로도에서 저항을 GND와 버튼 사이에 연결해준다. 이렇게 연결이 되면 DigitalRead 함수는 버튼을 눌렀을때 HIGH 값을 리턴한다.


그림입니다.
원본 그림의 이름: CLP000018900007.bmp
원본 그림의 크기: 가로 442pixel, 세로 660pixel


소스코딩 :


그림입니다.
원본 그림의 이름: CLP000018900008.bmp
원본 그림의 크기: 가로 422pixel, 세로 471pixel


실행하면, LED가 꺼져있다가, 버튼을 누르면 LED가 켜졌다가, 다시 버튼을 누르면 꺼져다를 반복합니다.


버튼을 한번 누를때마다 켜고 꺼지고를 반복하기 위해 flag 변수를 두어서 구현하였습니다.
버튼이 눌려졌을때 flag가 0이면 LED를 켜고 flag를 1로 만들고, 버튼이 눌려졌을때 flag가 1이면 LED를 끄고 flag를 0으로 만듭니다.
마지막 while문은 버튼이 눌러져있는동안 LED가 깜빡깜빡거리지 않도록 while문안에 묶여있게 하려고 넣은것입니다.
사실 while문을 안넣어도 동작은 동일하게 보입니다.
그러나 while문이 없을때 버튼을 꾹 누르고 있으면 미세하게 LED가 깜빡거리는 것이 보입니다.
넣어주지 않는다면 값이 과도하게 많이 들어가게 될 수 도 있습니다.

댓글목록

등록된 댓글이 없습니다.


개인정보취급방침 서비스이용약관 모바일 버전으로 보기 상단으로

TEL. 063-469-4551 FAX. 063-469-4560 전북 군산시 대학로 558
군산대학교 컴퓨터정보공학과

Copyright © www.leelab.co.kr. All rights reserved.