디지털 입출력 포트(digital I/O port, 혹은 그냥 포트)는 디지털 신호를 출력하거나 입력받을 수 있는 통로(물리적으로는 핀)이다. 디지털 신호는 0과 1 두 가지 상태만을 표현하므로 포트를 통해서 0 또는 1신호를 내보내거나 입력받을 수 있다. 아두이노 우노에는 13개의 디지털핀이 있는데 이것들이 포트에 해당된다.


 앞으로의 설명을 위해서 약간의 전기회로 지식이 필요하다. 먼저 전압(voltage)과 전류(current)의 개념을 설명하면 다음과 같다. 마트에서 흔히 살 수 있는 AA나 AAA사이즈 건전지 하나의 '전압'은 1.5V (V는 Volt 볼트, 전압의 단위) 라는 것은 알고 있을 것이다. 이 의미는 음극과 양극의 '전위차'가 1.5V라는 의미이며 일단 '전압은 전류를 흘릴 수 있는 힘' 정도로 이해하면 된다. 이 전위차가 있는 두 부분을 도선으로 연결하면 전자가 도선을 따라서 흐르게 되는데 이 전자의 흐름이 전류이다. 전자는 음극에서 양극으로 흐른다. 전압(또는 전위차)이 높을 수록 전자가 더 많이 흐르고 전류값도 높아진다. 전자의 흐름인 전류의 단위는 암페어(Ampere, A로 표시함)이다. 전류는 '양전하의 흐름'이다.


  • 전류(단위는 암페어, A) : 양전하의 흐름

  • 전압(단위는 볼트, V) : 전류를 흘릴 수 있는 힘



위 그림을 보면 건전지의 +극과 -극을 저항 $R$로 연결하였다. (왼쪽은 건전지와 저항의 모양을 그대로 그렸고 오른쪽은 이것을 기호로 표시한 것이다.) 이 경우 전류가 도선을 따라 흐르게 되는데 전지의 전압을 $v$, 저항을 $R$이라고 하면 전류의 크기는 $\frac{v}{R}$로 계산된다. 이것을 오옴의 법칙이라고 한다. 저항의 단위는 오옴(ohm)이다. '저항은 전류의 흐름을 제한하는 역할을 하는 소자'이다.


  • 저항(단위는 오옴 Ω) : 전류의 흐름을 제한하는 역할을 하는 소자

  • 오옴의 법칙 : $v = i R$


 디지털 시스템의 디지털 신호는 '전압'으로 표현된다. 신호 0(LOW)은 0V (GND, 그라운드라고 읽는다)가 사용되고 1신호는 주로 5V, 3.3V 혹은 1.8V이다. 아두이노의 경우 동작 전압이 대부분 5V이므로 신호 1 (HIGH) 은 전압으로 5V가 되는 것이다.


포트를 이용한 출력 내보내기


 포트를 출력으로 사용하는 경우는 스위치를 생각하면 간단히 이해할 수 있다. 건전지와 연결된 전구사이에 스위치가 있는 간단한 실험장치를 생각해 보면 된다. 스위치를 손가락으로 눌러서 연결(on 되었다고 한다)되면 전구에 전압이 걸려서 켜질 것이고 손가락을 떼면 (off되었다고 한다.) 전구가 꺼지게 된다.



포트는 이와 같이 핀에 연결된 회로에 전압을 인가하거나(1, HIGH 신호) 인가하지 않을 (0, LOW 신호) 수 있는 스위치의 역할을 하는데 아두이노의 경우 이 스위치를 프로그램을 통해서 on시키거나 off시킬 수 있다. 사용자가 원하는 타이밍, 주기, 속도를 가지고 스위치를 켰다 끌 수 있는 것이다. 따라서 손으로 스위치를 조작하는 것과는 비교할 수 없는 정밀도와 속도로 개폐를 제어할 수 있다.


포트를 이용한 입력신호 받기


 입력의 경우에는 출력과 반대로 이 물리적인 핀과 연결된 부분의 전압이 0V(LOW)이냐 혹은 5V이냐(HIGH)를 읽어들이는 기능을 한다. 보통 디지털 입력 실험을 할 때 처음으로 접하는 부품이 택스위치 회로인데 택스위치가 눌려졌는지 혹은 떼어졌는지를 포트의 입력 기능으로 판별할 수 있다.


 위 그림 (a)에서 화살표 표시된 곳의 전압은 5V인데 저항에 전류가 흐르지 않아 저항 양단에 전위차가 발생하지 않기 때문이다. 반면에 (b)를 보면 화살표 된 곳의 전압은 0V인데 GND와 직결되어 있기 때문이다.


 이제 (c) 그림을 보면 스위치를 안 눌렸을 때 (a)와 같고 스위치를 누르면 (b)그림과 같다는 것을 알 수 있다. 따라서 스위치를 눌렀을 때와 안 눌렸을 때의 전압값이 달라지므로 포트에서 이 전압값을 읽어 들여서 스위치의 상태를 검출할 수 있다. 여기에선 사용된 저항 $R$을 '풀업(pull-up) 저항'이라고 한다.


아두이노 강좌 전체 목록 (TOP) >>>

C++ 언어 전체 강좌 목록 >>>

c{ard},n{ad006}

Posted by 살레시오

댓글을 달아 주세요