-
아두이노 레시피 : 버튼(Switch)2 - 기본편아두이노 레시피 2025. 2. 27. 18:52
# Recipe 20. 버튼 정복하기 시리즈 : 풀다운 저항
어제랑 같은 거 아니냐고요?? 네 맞아요..ㅎ
photo by www.raywenderlich.com
안녕하세요~ 아두이노 셰프입니다! 어제부터 스위치에 대해 알아보고 있는데요. 스위치를 제대로 사용하기 위해서는 풀업저항을 연결해야 한다는 것을 배웠습니다. 업 Up이 있다면 다운 Down도 있겠죠..ㅋ 오늘은 반대로 풀다운에 대해서 간단히 짚고 넘어갈게요. 재탕하는 거 아니냐고요....?
(아 들켰다...)실제 다양한 전자회로에서 스위치를 사용할 때는 풀다운이 아닌 풀업저항을 이용하는데요. 오늘 풀다운에 대해서 알아보면서 그 이유를 알아볼게요~!
(재탕하는 거 아.. 아.. 니라고요!!)
오늘은 그 두 번째 시간, ‘풀다운 저항’; ‘Pull-down Resistor’입니다.
오늘의 재료 Ingredient
<메인 재료>
택트 스위치 (모델명 : DM626)
<그 외 재료>
아두이노 우노
브레드보드
4.7kΩ 저항(1개)
수-수 케이블(5개)
메이킹 방법 Steps
Step 1. 선 연결하기 Wiring
a. 택트스위치를 브레드보드에 그림처럼 연결해 줍니다.
b. 택트스위치의 다리 한쪽은 아두이노의 5v에 연결해 주세요.
c. 택트스위치의 반대쪽 다리는 저항을 이용해서 아두이노의 GND와 연결해 주세요.
d. 저항이 있는 택트스위치 다리와 아두이노의 D2번 핀을 연결해 주세요.
(그림을 참고해 주세요! )
- - - - - - - - - -
Step 2. 아두이노 코드 Code review
여러분의 요리가 훨씬 간편해질 수 있도록, 숙성이 필요한 코드는 언제나 제가 준비할게요ㅎㅎ
일단 제대로 동작하는지 알아야 하니, 신호를 확인해 보죠.
void setup(){ Serial.begin(9600); pinMode(2,INPUT); } void loop(){ Serial.println(digitalRead(2)); delay(100); }
어제처럼 if문을 이용해서 신호에 따라 빌트인 LED를 켜볼게요.
void setup(){ pinMode(2,INPUT); pinMode(13,OUTPUT); } void loop(){ int pull_up = digitalRead(2); if(pull_up == 1){ digitalWrite(13,HIGH); } digitalWrite(13,LOW); }
Step 3. 동작시키기 Working
● 코드를 아두이노 우노에 업로드해 주세요.
● 디지털신호가 알맞게 들어오나요? 또 LED가 스위치를 누르는 대로만 켜지나요?
코드의 동작 알고리즘
알고리즘은 쉬운 말로 ‘진행절차’라고 할 수 있습니다.
코드가 어떻게 동작되는지 알아볼까요?
오늘의 알고리즘은 너무 단순하죠?
첫 번째 코드는
단순히 D2번 핀에서 읽은 디지털 신호를 시리얼모니터로 출력했을 뿐이고,
두 번째 코드는
첫 번째 코드에 if문을 추가해서 신호가 0일 때, LED를 켜고 아니면 껐을 뿐이에요.
(이 부분이 이해가 되지 않는다면, LED기초 편을 참고해 주세요!)
“과학으로 양념하기” Seasoning
스위치 및 회로 원리
혹시라도 아직 스위치 사용이 익숙하지 않은 분들을 위해
한 번 더 구조를 보여드릴게요.
photo by 에듀이노
우리가 사용한 스위치는 저런 구조를 가졌어요.
그래서 저희가 a와 b에 각각 연결한 거랍니다~!
이제 다시 본론으로 가면
어제 스위치에 풀업저항을 연결해야 하는 이유가
아두이노 핀의 임피던스 때문이라고 했던 것 기억하나요?
(잘 모르겠다면, 어제 포스팅으로 GO GO)
주파수에 따라 저항도가 달라지는 것을 임피던스라고 했잖아요.
실생활의 작은 정전기, 자기장 등에 영향을 받아서
저항도가 달라져 신호가 항상 일정하지 않는 문제가 있다는 것,
기억하나요?ㅋㅋ
오늘은 그 조금 더 자세히 이야기를 해볼까 합니다.
먼저,
다들 눈치채셨겠지만
풀다운 저항은
풀업저항과 반대로
눌리기 전 '0'인 상태를 유지하다가
눌렸을 때, '1'을 인식하는 회로연결이에요.
여러분.
예전에 아날로그에 대해서 얘기하면서
디지털 신호 0,1을
0~1023까지의 값으로 나타나낸 것을
아날로그라고 했었는데 기억하나요??
여기서 문제!
아날로그 값 100은
디지털 기준에서 0일까요, 1일까요?
아님 아날로그 값 3은요?
아날로그 값 500은 어떤가요?
이러한 값을 digitalRead로 읽었을 때,
1이라고 표시할까요? 아님 0이라고 표시할까요?
우리가 어제 직접 해봐서 알겠지만,
아두이노는 이를 '1'이라는 디지털신호로 인식한답니다.
세기에 상관없이요.
임피던스 때문에 발생하는 이러한 현상을
플로팅 Floating이라고 합니다.
실제로 5v로 직접 전류를 인가하지 않아도
아주 미세한 전류가 흐른다면
디지털은 1로 인식하는데,
이를 플로팅 현상이라고 해요.
그냥 소수점(float)이라고 생각하면 조금 이해가 쉬울까요?ㅎㅎ
제가 오늘 시작하는 글에서
실제 다양한 전자회로에서 스위치를 사용할 때는 풀다운이 아닌 풀업저항을 이용하는데요.
라고 했잖아요.
풀업이 아닌 풀다운 사용하는 이유는
혹시라도 있을지 모르는 이러한 플로팅 현상을 막기 위해서입니다.
다시 한번, 풀업과 풀다운을 정리하고 가보죠.
인풋(Input) 핀을 5V에 연결하여
스위치가 눌리기 전에는 항상 신호 '1'을 받고,
눌렸을 때 '0'을 받는 회로연결을 풀업저항 회로라고 했고요.
반대로,
인풋핀을 GND에 연결하여
스위치가 눌리기 전에는 항상 신호 '0'을 받고
눌렸을 때야 신호 '1'을 받는 연결을 풀다운 저항 회로라고 했어요.
플로팅이 뭐라고 했었죠?
아주 약간의 신호만 있어도
'1'로 인식되는 거잖아요.
이러한 플로팅 현상을 방지하기 위해서는
스위치가 눌리기 전에,
스위치의 상태가 '0'인 게 유리할까요?
'1'인 게 유리할까요?
당연히 '1'이 유리할 거예요.
혹여나 플로팅현상이 일어나도
항상 '0'을 유지해야 하는 풀다운에 비해
항상 '1'을 유지하는 풀업은 이러한 플로팅에도
스위치는 눌림으로 인식되지 않으니까요.
이러한 때문에
플로팅 현상을 방지하기 위해서
풀업저항, 풀다운 저항이 있지만,
대부분의 전자제품의 스위치는 풀업저항을 이용해서 연결되어 있답니다!
이제 조금 차이를 아셨나요?
여러분도 스위치를 사용할 일이 있다면
안정적인 풀업저항을 이용해서 스위치를 구성하면 어떨까요?
(풀다운에 대한 시간이었는데.... 풀업저항 좋은 점만 얘기했네....)'아두이노 레시피' 카테고리의 다른 글
아두이노 레시피 : 블루투스 자동차 PART 1. (0) 2025.02.28 아두이노 레시피 : 전자피아노 - 기본편 (0) 2025.02.28 아두이노 레시피 : 버튼(Switch) - 기초편 (0) 2025.02.27 아두이노 레시피 : 7세그먼트 - 초중급편 (0) 2025.02.26 아두이노 레시피 : LED 자동밝기 - 기초편 (0) 2025.02.26