다리가 4개인 버튼을 사용해서 스위치를 누르면 불이 켜지고 누르지 않았을 때는 불이 꺼지도록 해보겠습니다.
플로팅 현상
위 사진처럼 회로를 구성했을 때 버튼을 누르지 않았을 땐 2번핀에 0이 입력되고 눌렀을 땐 1이 입력된다고 생각하기 쉬운데 실제로는 그렇지 않다. 스위치가 눌러졌을 땐 5V가 맞지만 열려있을 땐 주변 디지털 입출력핀에 영향을 받아 1일 수도있고 0일 수도 있는 부유하는 플로팅 상태이다. 그래서 버튼을 눌러도 내 의도대로 실행되지않는다고 느낄것이다.
스위치
사용한건 아래와 같은 다리가 4개인 버튼이다. 각각 위아래 다리가 연결되어 있고 오른쪽 왼쪽은 스위치로 떨어져있다. 버튼을 눌렀을 때 4개의 다리가 모두 연결된다.
다리가 2개인 버튼도 같은방식으로 사용 가능하다.
풀다운저항 소스코드
const int BUTTON = 2;
const int LED = 13;
void setup()
{
pinMode(BUTTON, INPUT);
pinMode(LED, OUTPUT);
//Serial.begin(9600);
}
void loop()
{
int buttonState = digitalRead(BUTTON);
//Serial.println(buttonState);
if(buttonState)
digitalWrite(LED, HIGH);
else
digitalWrite(LED, LOW);
}
버튼을 digitalRead한 상태가 1이면 불을 켜고 0이면 불을 끈다.
풀다운저항 회로
버튼을 누르면 불이 켜진다.
근데 아래처럼 연결을 해도 위의 회로와 정확히 똑같은 구성이고 그럼 다리가 4개인 스위치 말고 2개인 스위치도 풀다운 저항회로를 구성하여 사용할 수 있다.
풀업저항 소스코드
const int BUTTON = 2;
const int LED = 13;
void setup()
{
pinMode(BUTTON, INPUT);
pinMode(LED, OUTPUT);
Serial.begin(9600);
}
void loop()
{
int buttonState = digitalRead(BUTTON);
if(!buttonState)
digitalWrite(LED, HIGH);
else
digitalWrite(LED, LOW);
}
위의 코드와 거의 비슷하다. 다른 점은 ! 연산자를 써서 버튼을 digitalRead한 상태가 0이면 불을 켜고 1이면 불을 끄도록 반대로 구성한다. (풀업저항회로에서는 스위치가 누르지 않았을 때 5V의 전류가 흐르고 있기 때문에)
풀업저항 회로
버튼을 누르면 불이 켜진다.
아래처럼 연결을 해도 위의 회로와 정확히 똑같은 구성이다. 다리가 4개인 스위치 말고 2개인 스위치도 풀업 저항회로를 구성하여 사용할 수 있다.
풀업저항과 풀다운저항의 스키매틱 회로도
회로를 보고 쉽게 판별하는 방법 중 하나는 저항이 위에 달렸으면 풀업저항이고 아래에 달렸으면 풀다운저항이구나 하면 된다. 왜냐면 모든 사람들이 GND는 아래에 그리자고 약속했기 때문이다. 스위치는 그 반대 쪽에 달렸다.
보통 스위치에 다는 저항은 1K옴-10K옴을 많이 사용하는데 이는 쇼트 방지하기 위한 목적이다.
택트스위치의 최대 전류는 50mA이고 R=V/I 공식으로 계산했을 때 5 / 0.05 = 100옴인데 보통은 그보다 큰 저항을 사용해 과전류를 방지한다.
'임베디드 개발 > 아두이노' 카테고리의 다른 글
Noctua 4-pin PWM fan 제어하기 with 아두이노 (0) | 2024.07.22 |
---|---|
아두이노 ] 릴레이 모듈 + 흡입펌프 다루기 (0) | 2022.06.30 |
NodeMCU 를 Arduino IDE에서 사용하기 위한 환경 설정 방법 (0) | 2022.05.04 |
[ 아두이노 ] I2C LCD로 문자 출력 + 한 칸 씩 옆으로 이동 + 커스텀으로 한글 출력 + 타이머 출력 (1) | 2022.05.02 |
[ 아두이노 ] 초음파센서로 측정한 거리를 LCD 화면에 표시하기 (0) | 2022.05.02 |