본문 바로가기
코딩/아두이노

[아두이노 강좌] 예제로 배우는 아두이노 #7 DigitalInputPullup, 아두이노 내장 pullup 저항 이용하기

by DIYver 2020. 3. 27.

<목표>

 

 

- 아두이노 내부 회로에 내장되어 있는 풀업저항을 pinMode() 함수를 사용하여 설정하고, digitalRead() 함수를 사용하여 스위치 상태를 읽은 후 digitalWrite() 함수를 이용하여 LED를 제어한다.


<준비물>

 

 

- 아두이노(나노, 우노, 메가), 시리얼 통신 케이블, 브레드보드, led, 버튼(택트스위치)

아두이노 우노 / 시리얼 통신 케이블(USB-B타입) / 브레드보드 / LED / 택트 스위치 


<회로도>

 


<코드>

 

 

void setup() {
  //start serial connection
  Serial.begin(9600);
  //configure pin 2 as an input and enable the internal pull-up resistor
  pinMode(2, INPUT_PULLUP);
  pinMode(13, OUTPUT);

}

void loop() {
  //read the pushbutton value into a variable
  int sensorVal = digitalRead(2);
  //print out the value of the pushbutton
  Serial.println(sensorVal);

  // Keep in mind the pull-up means the pushbutton's logic is inverted. It goes
  // HIGH when it's open, and LOW when it's pressed. Turn on pin 13 when the
  // button's pressed, and off when it's not:
  if (sensorVal == HIGH) {
    digitalWrite(13, LOW);
  } else {
    digitalWrite(13, HIGH);
  }
}

코드는 아두이노 - 파일 - 예제 - 02.Digital - DigitalInputPullup 의 예제 파일과 동일 합니다.

예제파일을 쓰셔도 되고, 위의 코드를 복사하여 붙여넣으셔도 됩니다.


<실행 결과>

 

 

버튼을 누르면 LED가 켜지고, 버튼을 떼면 LED가 꺼지는 결과를 확인할 수 있었다.

 

저번 강의인 #6 과 같은 결과이지만, 중간 내용이 다르다.

 

원래 버튼을 사용할 때에는 pull-up 과 pull-down 저항 회로로 2가지 방식이 존재한다.

여태 했던 방식은 가장 기본이 되는 pull-down 저항 회로였다.

버튼을 누르면 1(HIGH) 신호가 입력되고, 버튼을 떼면 0(LOW) 신호가 입력된다.

 

하지만 pull-up 은 반대의 구조이다.

(좌) pull-down / (우) pull-up

위의 사진을 참고하자면 

pull-down 에서는 버튼을 누르는 순간 5V(HIGH)2번핀으로 흐르게된다.

GND로 가고 싶지만 길목에 저항이 있다보니 2번핀으로 전류가 흐르는 것이다.

그리고 버튼에 손을 떼면 잔류 전류가 GND로 넘어가면서 깔끔하게 0V(LOW)로 입력을 받을 수 있는 것이다.

 

pull-up 에서는 버튼을 안 누르고 있으면 5V(HIGH)가 그대로 2번핀으로 흐르게 된다.

따라서 안누르고 있는 상태에서는 HIGH 신호를 입력받게 된다.

버튼을 누르게 되면, 길목에 저항이 없는 GND 핀으로 전류가 전량 흐르게 되면서

2번핀에는 0V(LOW) 가 읽히게 된다.

 

 

하지만 앞서 회로도에서 나타난 회로와 pull-up의 회로가 같지 않음을 볼 수 있다.

여기서 제공한 코드를 이용한다면 회로도에 올린 것과 같은 회로를 구성해야 한다.

이유는 아두이노 내부에는 각 핀에 pull-up 저항 회로가 내장되어 있기 때문이다.

이를 소프트웨어(코딩)를 통해 제어할 수 있다.

코딩에서 보면 새로운 설정이 있는데,

pinMode(2, INPUT_PULLUP); 

위 명령이 새로운 설정이다.

pinMode 에서는 OUTPUT / INPUT / INPUT_PULLUP 으로 총 3가지 설정이 가능하다.

여기서 INPUT_PULLUP 을 선택하면 내부 풀업 저항을 이용하는 설정이 되는 것이다.

새롭게 아두이노를 공부하는 경우라면 풀다운/풀업 저항을 직접 회로를 구성해서 테스트해보고

아두이노의 INPUT_PULLUP 도 해보는 것을 추천한다.

 

코드의 내용은 앞선 강의들을 참고한다면 이해하는데 문제가 없으므로 생략한다.

 


※ 궁금하시거나 질문사항이 있으시면 댓글로 작성해주시면 답변해 드릴 수 있는 부분에서 친절히 답변드리겠습니다!

 

 

 

 

댓글