아두이노프로세싱 프로그래밍

초보자를 위한 아두이노 DigitalReadSerial, Button 과 DigitalInputPullup 예제

coding art 2017. 5. 22. 20:30
728x90

 

 

 

 

 

 

 

 

 

__Up to here, advertization area__

 

 

아두이노 디지털 핀은 출력

 

과 입력 두 가지 기능을 가진다. 출력하는 방법에 관해서는 “코딩에 의한 LED on OFF” 예제를 통해서 pinMode() 사용법에  이미 익숙하다.
그렇다면 이들 디지털 핀에 있어서 입력 방법은 어떤지 알아보기로 하자. 출력의 반대는 입력? 이런 등식이 성립 하지는 않는다.
많은 사물인터넷 예제들이 LED와 같은 출력 디바이스를 대상으로 하여 흔히 on OFF 제어 문제를 다루고 있으나 사실 그 반대로 디지털 핀 입력 상태 여부를 점검 체크하는 것도 출력 문제와 함께 마찬가지로 중요성을 띤다.

특히 IOT(사물인터넷)의 핵심이 아두이노 보드의 디지털 핀의 on OFF를 제어하거나 또는 디지털 핀의 HIGH LOW 상태를 파악해야 하므로 정확한 스위칭 작업이 전제되는 것이다.

아두이노 편집기 예제에 있는 세 가지 DigitaReadSerial Button 과 DigitalInputPullup 예제를 다루어 보기로 하자.

tp 예제에 대한 배선은 동일하며 사진과 같이 대단히 간단하다, 똑딱 스위치를

 

GND 와 디지털 데이타 핀 2번에 연결한다.

 

DigitalReadSerial 의 코딩

 

알맹이는 대단히 간결하다. 스위치 입력을 위한 디지털 핀은 2번으로 설정한다. 아울러 setup()의 pinMode()에서 입력 즉 INPUT 으로 설정한다.

loop()에서 digitalRead() 명령에 의해 디지털 상태 값을 읽는다. 0 아니면 1이다. 시리얼 모니터를 통해 확인하도록 한다. 한편 잘 쓰는 테크닉은 아니지만 시리얼 모니터 바로 다음에 위치해 있는 시리얼 플로터 기능을 사용하여 비쥬얼하게 결과를 확인할 수도 있다. 스위치를

 

 

ON OFF 하면서 시리얼 플로터 그래픽을 관찰해 보면 똑딱 스위치가 제대로 on OFF 되는지 감각적으로 판단할 수 있을 것이다.

아두이노 아크릴 상자를 왼손에 쥔 채 오른손 손가락으로 가볍게 터치하듯이 스위치를 on OFF 시켜 본 결과이다.

ON OFF 가 된다는 것을 느낄 정도는 되지만 바운스(bounce) 즉 튀는 현상이 많이 있는 듯하다.

반면에 아두이노를 책상에 놓은 상태에서 강하게 뚝딱 스위치를 누를 경우 전혀 on OFF 반응을 느낄 수 없었다.

 

많은 아두이노 코딩을 경험해보았지만  이 두 가지 대비되는 스위치 시험에서 이

 

단순한 코딩의 유용성 여부를 판단하기는 어려워 보인다.

 

 

 

Digital의 Button 예제는 DigitalReadSerial 예제에서 스위치의 디지털 상태를 읽어 HIGH 또는 1 일 경우 와 LOW 또는 0 일 경우에 digitalWrite() 명령을 실행하여 빌트인 LED 13번을 on OFF 하는 코드이다.
DigitalReadSerial 예제와 동일한 시험을 시행해본 빌트인 LED 가 반응하는 느낌이 동일하였다.

 

 

하지만 이 예제 코드의 저자에 의하면 다음과 같이 똑딱 스위치와 GND 사이 배선에 10K옴 저항을 넣을 것을 권고하고 있으므로 배선을 수정해서 시험해 보도록 한다. 시험 결과 앞의 예제와 그다지 차이가 없었다. 여기까지의 시험은 시험 여건 즉 스위치의 품질, 빵판의 전기적 접촉, 배선의 전기적 접촉 상태 등에 의해서 좋지 않은 영향을 받을 수도 있다.

마지막으로 DigitalInputPullup 코드 예제를 시험해 보기로 하자.
2번 핀에 스위치가 있으며 스위치가 on 되면 2번 핀 상태를 읽어서 시리얼 모니터에 출력시킴과 아울러 13번 빌트인 LED를 on 시키는 코드이다. 앞의 예제들과 pinMode() 명령이 입력 상태 변수가 INPUT_PULLUP 임에 유의하자.

스위치 배선은 누름과 동시에 디지털 핀 속으로 전류 값은 대단히 작으며 일정 수준의 전압 즉 LOW 인 경우 0V 근처 HIGH 인 경우 5V(3.3V) 에 가까운 전압을 가해 주어야 한다. 따라서 전류제한 저항 한 점을 사용할 필요가 있다.

2번 핀에서 digitalRead()로 0 또는 1의 값을 읽어 시리얼 모니터에 출력하고 If 문에서 빌트인 LED를 on 또는 OFF 하게 된다.

결과 확인은 시리얼 모니터에서 숫자 출력 확인 후 시리얼 모니터를 끄고 시리얼 플로터를 이용하기로 하자.

 

 

 

PULL UP 이란 전압을 끌어 올린다는 뜻이다. 즉 그림의 왼쪽 회로에서 SW 가 on  되면 4.7K옴 저항 양단에 5V  전압이 가해지게 된다. 이때 흐르는 전류는 약 1mA 수준이다. SW 자체는 저항이 없으므로 전압 강하가 없다고 보면 Pin Digital 과 5V 사이에서 거의 5V의 전압 강하가 일어나며 Pin Digital 과 GND 사이의 전압은 거의 0V 가 된다. Pin Digital 이 그 내부에 대단히 큰 저항 값을 가지도록 설계 되었다면 SW를 OFF 할 경우에 5V의 전압은 4.7K 옴 저항에서 아주 조금의 전압 강하가 일어나므로 Pin Digital 지점에서는 거의 5V 에 가까운 전압 값을 가지게 된다. 이렇게 PULL UP  조건하에서 HIGH LOW 전압 상태를 만들 수 있다. PULL DOWN 은 그 반대 경우다.

 

 

시리얼 플로터의 출력 결과이다. 출력 값은 0 아니면 1 이다. DigitalReadSerial  예제와 Button  예제에서의 불확실성이 완전히 제거되었다. 스위치 on OFF 에 따라 빌트인 LED 의 on OFF 가 명확하였으며 시리얼 플로터에서도 그래프로 명확하게 확인 할 수 있었다.
결론적으로 아두이노 디지털 핀 입력 코딩은 반드시 INPUT_PULLUP 출력 조건을 사용하기 바란다.