이번학기에 들을 수업이 없어서 타과 아두이노 수업을 듣는데.. 불 켰다 껐다만 할땐 머리가 안아팠는데 풀다운 저항부터 머리가 아프다 ㅋㅋㅋ
그래도 언젠가 쓸일이 있지 않을까 해서 정리
Pull-down register란?
일반적인 경우의 스위치로 전원을 공급하는 회로를 예로 들어보겠다. 그냥 위와 같이 구성하는게 가장 평범한데, 스위치가 눌렸을때는 아무 문제가 없다. 이때는 회로에서 HIGH로 인식을 할 수 있다. 그런데 스위치가 위와 같이 열린 경우에는 처음 그냥 생각했을 때 당연히 전류 공급이 안될테니 0V로 LOW로 인식이 될 줄 알았다. 그런데 그게 아니라 스위치를 누르지 않았을 때는 주변의 어떠한 이유(뭐 직전의 전자가 남아있거나, 회로 주변의 상태에 따라)에 의해 0V로 인식되지 않아서 이때 회로가 이를 HIGH인지 LOW인지 제대로 결정할 수 없다고 한다. 이 상태를 Floating 상태라고 한다. 위 그림은 스위치를 5V에 연결해서 그렇지만, 반대로 스위치를 그라운드에 연결했을때도 마찬가지로 회로가 열렸을 때, 이를 HIGH로 인식하지 못하고 어중이 떠중이 상태가 되어 버린다.
뭔가 내가 이해한대로 말로 풀어 설명하다보니 장황해 진 것 같다.
아무튼 이러한 플로팅 상태를 해결하기 위한 것이 Pull-down 저항이다. 내가 하려던 예시처럼 0V를 인식시키기 위해서는 Pull-down을 사용하는 것이고, 반대로 5V를 인식시키고자 할 때는 Pull-up 저항을 사용하는 것이다. 어차피 그냥 전압만 반대로 주면 되는 것이므로 나는 Pull-down 저항만 확인해보았다.
사용은 간단하다. 전압을 그라운드로도 연결을 시켜주면 되는 것이다.
왼쪽은 스위치가 열린 상태고 오른쪽은 스위치가 닫힌 상태다. 스위치가 열렸을 때는 회로에 전자가 남아있더라도 그라운드로 연결이 되어 있기 때문에 남은 전압이 모두 그라운드로 빠져나가게 된다. 따라서 회로에서는 입력으로 0V를 준것과 마찬가지가 되어 LOW로 인식할 수 있게 된다.
다음 스위치가 닫힌 상태에서는 저항아 있는 그라운드 쪽으로 가지 않고 당연히 회로로 전압이 이동할 것이다. 따라서 원래 의도한 대로 스위치가 닫히면 5V, 즉 HIGH로 인식할 수 있게 된다.
이렇게 풀다운 저항을 이용하여 스위치가 열려있을 때는 LOW로 인식하게 해 주어야 스위치를 목적에 맡게 올바르게 사용할 수 있게 된다.
간단한 예제로 확인하고 마무리 짓도록 하겠다.
const int led = 9;
const int btn = 2;
void setup() {
// put your setup code here, to run once:
pinMode(led, OUTPUT);
pinMode(btn, INPUT);
}
void loop() {
if(digitalRead(btn)==LOW){
digitalWrite(led, LOW);
}else{
digitalWrite(led, HIGH);
}
}
무지 간단한 예제다. 스위치는 2번에 연결하고, led는 9번 핀에 연결했다.
digitalRead를 통해 버튼이 LOW로 인식되고 있으면 led도 LOW로, 버튼이 HIGH면 led도 HIGH로 하여 버튼을 누른 동안은 회로가 연결되어 불이 켜지고, 버튼을 안누르면 불이 꺼져있도록 하는 예제이다.
회로는 위와 같이 연결했다. 잘 안보이지만 느낌 아니까..
코드 업로드 하고 나면 이처럼 누른 동안은 불이 켜지고, 뗀 동안은 불이 꺼진다.
'Programming' 카테고리의 다른 글
[InfluxDB] 마주했던 몇가지 오류 (2) | 2021.11.01 |
---|---|
[Arduino] switch bounce -> debounce (0) | 2020.05.10 |
[Qt] QCustomPlot (0) | 2020.03.15 |
[Data Structure] Linked list(Stack/Queue push and pop) (0) | 2020.02.04 |