안녕하세요. 메카럽입니다.
이번 포스팅에서는 지난 포스팅에 이어서 플로팅과 관련된 포스팅을 해보겠습니다. 지난 포스팅에서는 플로팅으로 인해 불안정한 결과값을 도출할 수 있었습니다. 이러한 불안정한 값이 없는 연결 방법은 어떤 것이 있는지 알아보도록 하겠습니다.
그럼 플로팅없이 스위치를 연결하는 방법은 어떤 것이 있을까요? 우리는 풀업 저항이나 풀다운 저항을 배치하여 회로의 개방 상태를 피해갈 수 있습니다.
택트 스위치를 아두이노와 연결하는 방법은 크게 두 가지 정도로 요약됩니다. 첫 번째는 5V라인이나 I/O 핀에 풀업 저항을 연결하거나, GND 라인이나 I/O 핀에 풀다운을 배치하여 스위치 작동 유무를 살피는 것입니다.
위 그림에서 풀업 저항과 풀다운 저항을 배치하여 재구성한 회로입니다. 풀업과 풀다운이라 부르는 이유는, 스위치로 인가되는 신호가 허튼짓을 못하도록 각각 상대적으로 높은 위치에 있는 곳에(5V) 저항을 매달아두거나 낮은 위치(0V)에 묶어준다는 의미가 있습니다. 아래 풀업 회로에서 스위치가 열려있을 때는 D3 단자에 5V 전압이 그대로 걸리지만, 스위치가 닫히게 되면 D3 단자는 접지와 동일한 레벨이 됩니다. 풀다운 회로에서는 이와 반대로 구성되는데, 스위치가 열려있을 때는 D3 단자의 전위는 GND와 동일하지만 스위치가 닫히게 되면 D3 단자는 5V와 동일한 레벨이 됩니다.
이제 아두이노 우노와 택트 스위치, 그리고 풀업 저항(보통 수kΩ~수십kΩ) 이번 예제에서는 10kΩ 저항을 사용해서 연결했습니다. 지난 포스팅의 예제를 동일하게 적용해도 플로팅 현상은 발생하지 않음을 확인할 수 있습니다. 스위치가 눌리면 5V 전원이 풀업 저항을 거쳐 디지털 포트에 연결되고, 스위치가 열리면 0V에 바로 연결되기 때문입니다.
이번에는 풀업 저항을 달지 않고 택트 스위치 입력에 따라 우노의 LED를 밝히는 예제를 구현해보겠습니다. 사실 외부에 달린 풀업이 없을 뿐이지, 아두이노 내부의 풀업 저항을 활용하겠다는 취지입니다. 코드만 조금 바꿔주면 간단한 회로에서는 조금 더 편리하게 내부 풀업 저항을 활용할 수 있습니다. setup( ) 함수에서 다음과 같이 pinMode( ) 설정을 조금 변형해주면 내부 풀업 저항이 연결됩니다.
pinMode(핀 번호, INPUT_PULLUP); |
void setup( ) { Serial.begin(9600); pinMode(3, INPUT_PULLUP); pinMode(13, OUTPUT); } void loop( ) { if (digitalRead(2)==HIGH) { digitalWrite(13, LOW); } else { digitalWrite(13, HIGH); } } |
앞의 예제는 D3 핀이 HIGH일 때, 즉 택트 스위치가 눌리지 않았을 대 우노 보드의 LED(D13)를 OFF하고, 스위치가 눌러졌을 때 ON하는 과정을 반복합니다.
INPUT_PULLUP은 외부 풀업 저항 없이 아두이노 내부 풀업 저항을 활용하는 방법입니다. 5V에 연결된 20kΩ 내부 풀업이 D3 핀에 연결되고, 이는 택트 스위치와 연결되기에 마치 풀업 저항을 달아놓은 것과 동일한 효과를 얻습니다. 이렇듯 간단한 회로에서는 내부 풀업을 적절히 활용하는 것이 수월성 면에서 좋으나, 별도로 지정된 풀업 저항값이 있는 소자를 사용해야 할 대는 외부 풀업을 사용해야 합니다.
'3D프린터와 아두이노 > 아두이노' 카테고리의 다른 글
아두이노 전기적 스위치 - 릴레이 (4) | 2020.09.18 |
---|---|
여러가지 스위치 (6) | 2020.09.17 |
풀업, 풀다운과 플로팅 (택트 스위치 연결 실습) (2) | 2020.09.15 |
아두이노 우노 아날로그 포트 및 전원, 접지 포트 (가변저항 실습) (2) | 2020.09.14 |
아두이노 우노 디지털 포트(LED 램프 예제 실험) (2) | 2020.09.13 |