본문 바로가기
Arduino&RasberryPi/Arduino Uno

10. Arduino - Arduino Pin과 통신 종류

by Rosmary 2019. 10. 30.
728x90
반응형

사실, 이 포스팅 내용은 Arduino 시리즈 포스팅에서 가장 먼저 작성되어야 했던 글이다. 하지만, 일전에 밝혔듯이, 필자도 어떤 메뉴얼 없이 달랑 부품들만 조달받은 상태에서 Arduino를 시작했다. 이 때문에 맨 땅에 헤딩하고 뚝빼기 깨져가면서(?) 지식을 얻어 왔던터라, 체계적으로 글을 작성하기에 시간적인 여유가 없었다. 

 

Arduino를 사용하면서 가장 중요하게 바라봐야하는 부분이 무엇일까? 회로? 아니면 부품의 사용법? 아니었다. Arduino 자체다. Arduino가 어떤 방식으로 부품들에게 신호를 조달하며, 신호 조달 방식에 따라 사용할 수 있는 핀이 어떤 것들이 있는지를 먼저 파악하는 것이 우선이었다. 필자는 운이 좋게도, 이를 잘 알지도 못한 상태에서 어떠한 부품의 손상없이 지금까지 실험을 진행해 올 수 있었다.

 

Arduino를 보면, 위/아래로 구멍이 무수하게 난, 무언가를 꽂을 수 있도록 만들어진 구획이 보일 것이다. 이 부분을 핀(pin)이라고 하는데, 각 핀 밑에는 조그마한 숫자 또는 영문으로 이 핀들이 무슨 역할을 하는지 알려준다.

 

< 빨간 네모로 표시된 부분이 핀이다 >

 

각 핀을 자세히 보면 다시 세 부분으로 나눌 수 있다. Arduino 아래쪽의 POWER / ANALOG IN 과 위쪽의 DIGITAL 부분으로. 왜 신호를 보내는 핀이 이렇게 각기 다른 이름으로 묶여져 있는 것일까? 이는 Arduino가 소자에 전하는 신호의 종류가 다양하게 존재하기 때문이다.

 

 

1. Arduino 통신의 종류

 

Arduino는 크게 3가지 방식으로 신호를 전달한다. 이 세 가지 통신 방법은 각각 Serial 통신 / Digital 통신 / Analog 통신이라고 부른다. 하나씩 살펴보면 아래와 같다.

 

(1) Digital 통신

 

Digital 통신은, 쉽게 설명하자면 정보가 존재하거나 존재하지 않음을 알리기 위해 사용하는 통신 방법이다. 이는 마치 프로그래밍 언어의 Boolean(True / False)과 유사한데, 신호가 존재하면 1을 전송하고, 신호가 없으면 0을 전송하는 것처럼  말이다. 

 

앞서 작성한 포스팅에서 digitalWrite() 이라는 함수에 대한 설명을 진행한 적이 있었다. 이 함수는 2개의 인자를 가지며, 두 번째 인자에 사용되는 값이 HIGH/LOW로 두 가지가 존재한다. digitalWrite() 함수에서 HIGH는 신호를 켜는 역할을, LOW는 신호를 끄는 역할을 했다는 것을 기억한다면, 크게 어렵지 않은 내용이다. 

 

신호가 전달되는 과정을 그래프로 나타내자면, 아래와 같이 불연속적인(미분 불가능한) 그래프로 나타낼 수 있다.

 

따라서 Digital 통신에 사용할 수 있는 소자가 별도로 존재할 수 밖에 없는데, 그 부품의 예로 들 수 있는 것이 스위치다.

 

 

 

(2) Analog 통신

 

Analog 통신은 Digital 통신과는 상반된 통신이다. Digital 통신의 그래프가 불연속적인 모습을 띈다면, Analog 통신의 그래프는 연속적인 모양을 띈다. 이 말은, On/Off 만 가능한 Digital 통신과 달리, On일 경우, 그 신호의 세기까지도 조절이 가능하다는 말이다. 

 

Analog 통신 시, 출력에 사용했던 함수로는 analogWrite() 함수가 있었다. 이 함수 역시, digitalWrite() 함수처럼 2개의 인자를 가지는데, digitalWrite() 함수의 두 번째 인자가 HIGH/LOW 값만을 가지는데 반해, analogWrite() 함수는 해당 인자가 0부터 255 사이의 정수 값을 가질 수 있다. 이 통신은 그래프로 나타내면, 미분이 가능한 곡선형태를 띄게 된다.

 

< 참고로 필자는 미술에 재능이 없다... >

 

일상 생활에서 Analog 신호를 이용하는 소자는 쉽게 발견할 수 있다. 카오디오의 볼륨조절 버튼이나 연속적인 값을 측정할 수 있는 온도계, 속도계 등이 여기에 속하게 된다. 

 

 

(3) Serial 통신

 

Serial 통신은 지금까지의 통신과는 조금 다른 형태의 통신이다. 일반적인 컴퓨터는 보통 Serial 포트라고 불리는 통신 모듈을 장착하고 있는데, 이 포트는 컴퓨터와 컴퓨터 사이의 통신에 주로 사용된다. Arduino의 Serial 포트 또한 마찬가지로, Arduino가 다른 컴퓨터에게 정보를 보내거나, 혹은 컴퓨터로부터 정보를 받는데 이 포트를 사용한다. 

 

Arduino의 USB 포트가 Serial 통신을 진행하는 녀석이다. 우리가 Serial 관련 코드를 수행하면, Arduino의 측정값이 Serial Monitor에 출력되거나, 반대로 컴퓨터에 입력한 값을 통해 Arduino가 작동하는 과정을 생각하면 된다. 

 

Arduino USB 포트 외에도, Serial 통신을 진행할 수 있는 핀이 존재하는데, 이 핀을 통해 다른 Arduino나 Rasberry Pi와도 정보를 주고받는 것이 가능하다. 일반적으로 Arduino같은 경우, 연산 처리 능력이 많이 떨어지기 때문에, 연산 처리가 필요한 작업의 경우, 이 핀을 통해 Rasberry Pi에 연산 정보를 전달하고 그 결과값을 돌려받을 때 많이 사용한다고 한다. 

 

 

 

2.  핀의 종류

 

위에서 언급했듯이, 핀은 3 부분으로 나눌 수 있다. Digital / Power / Analog In으로.

 

 

(1) Digital 핀

 

Arduino의 상단에는 0부터 13까지, 그리고 GND를 포함하여 4개의 추가 핀이 존재하는 것을 볼 수 있다. 이 핀들은 모두 Digital 통신으로 정보를 송/수신할 수 있는 핀이다. 이 핀들을 통해 digitalWrite() 함수와 digitalRead() 함수를 모두 사용할 수 있다. 

 

핀들의 아래에는 작은 글씨로 각 핀에 대한 번호가 적혀있다. 번호 옆에는 추가로 글자가 기입된 핀들도 볼 수 있을 것인데, 이는 이 핀들이 다른 용도로도 사용될 수 있음을 표기해 놓은 것이다.

 

가장 많이 볼 수 있는 표시는 물결(~) 표시다. ~11 또는 ~10 과 같은 형태로 표기되어 있다. 이 물결표시가 무엇인지도 Arduino 보드에서 확인할 수 있다. DIGITAL이라고 각인된 보드의 오른편에 (PWD ~)라는 문구도 보일텐데, 이 문구가 물결 표시의 역할을 명시해 놓은 것이라고 보면 된다. PWD에 대해서는 조금 뒤에 설명한다.

 

물결 표시 외에 볼 수 있는 표시로는 TX와 RX가 있다. 각각 Transmission과 Recieve를 나타내는 단어이며 각각 1번과 0번에 위치하고 있다. 이 핀들은, 다른 컴퓨터와 정보를 주고 받을 때 사용하는, 즉 Serial 통신을 수행할 때 사용하는 핀이다. 위에서 설명한 대로, 이 핀들은 다른 Arduino나 Rasberry Pi와 통신할 때 사용하는데, 통신을 진행하는 보드의 Rx와 Tx가 연결되어야 제대로 된 통신이 이루어진다. 마치 사람이 전화를 사이에 두고 대화할 때, 입을 떠난 소리가 귀로 전달되도록 전화기 구조를 만든것과 동일하게 말이다. 

 

 

(2)  Analog 핀

 

Analog 핀을 가장 손쉽게 찾을 수 있는 곳이, Arduino 우측 하단 구역이다. A0부터 A5까지의 핀이 있으며, 이들은 모두 ANALOG IN 이라는 카테고리에 소속되어 있다. 이 핀들은 외부에서 들어오는 Analog 신호를 읽어들이는 역할을 수행할 수 있다. 

 

그렇다면, 여기서 의문이 생긴다. Analog 신호를 읽어들이는 것이 가능하다는 의미에서 ANALOG IN이라고 명시된 핀들은 확실히 보이는데, 그럼 ANALOG OUT, 즉 analog 신호를 출력할 수 있는 핀은 어디에 존재하는 것일까?? 보드의 어디에도 ANALOG OUT 이라는 단어는 찾아볼 수 없는데 말이다. 

 

Arduino 상단의 Digital 핀에서 물결 표시에 대해 언급을 잠깐 했다. 이 물결 표시가 있는 Digital Pin들은 digital 신호의 입/출력 외에도 Analog 신호 출력이 가능하다. 물결 표시에 대한 설명이 PWD라는 단어로만 설명되어 있는데, 이 PWD의 의미는 "펄스 폭  복조(Pulse width demodulation)"로, Digital 신호를 마치 Analog 신호처럼 보이도록 만들어 주는 녀석이라고 생각하면 된다. 

 

analogWrite()함수에 대한 포스팅을 할 때, 해당 함수를 사용할 수 있는 핀이 3, 5, 6, 9, 10, 11번 뿐이라고 설명한 적이 있는데, 이 핀들의 번호 앞에는 예외없이 모두 물결 표시가 붙어 있는 것을 알 수 있다. 이 중, 3번과 5번 핀은 980Hz의 진동을 통해, 나머지 4개의 핀은 490Hz의 진동을 통해 digital 신호가 analog신호처럼 보이도록 만들어준다. 어떻게??

 

PWD는 digital 신호인 1과 0을 굉장히 짧은 시간 동안 반복적으로 작동하도록 만든다. 이해를 쉽게 하기 위해, 시간 간격을 1초로 설정하고 설명하자면 다음과 같다. 1초 중 0.1초는 1이라는 신호가 동작하도록, 그리고 0.9초동안 0이라는 신호가 동작하도록 만들면, 평균적인 신호의 크기는 (1 * 0.1 + 0 * 0.9) = 0.1 이라고 볼 수 있다. 반대로 0.9초 동안 1이라는 신호가 동작하고, 남은 시간동안 0이라는 신호가 동작한다면, 평균 신호의 크기는 0.9이다. 만약, 이 시간 간격이 사람이 인지할 수 없을 정도로 짧아진다면 어떻게 될까?? 불이 깜빡거리기는 하지만, 사람이 인지하지 못할 정도로 변하게 될 것이다.

 

PWD에서 사용한 단위인 Hz는 1초 동안의 진동 횟수, 즉 1과 0이 반복되는 횟수를 나타낸다. 이를 통해 알 수 있는 것은, 3번 핀과 5번 핀은 1 / 980 초의 시간동안 0과 1을 반복하는 주기를 조절함으로써, 나머지 핀은 1 / 490 초의 시간동안 0과 1을 반복하는 주기를 조절함으로써, 이들의 출력 신호를 마치 analog 신호처럼 만들어 줄 수 있는 것이다.

 

 

*   참고로, A0부터 A5핀은 D14 ~ D19 핀으로도 표시할 수 있다고 한다. 물론 A0~ A5에서 필자가 digital 통신을 실험해보지 않아서, digital 통신 관련 함수가 작동되는지는 확실히 말할 수 없다만...

 

==========================================

pinMode(A0, INPUT) = pinMode(D14, INPUT)

==========================================

 

 

 

(3) POWER 핀

 

Power 핀은 사실 설명할 것이 많지 않다. 전력 소스로 사용하는 3.3V와 5V 핀과 GND 핀이 주로 많이 사용되는데, 전력 소스 핀은 회로에 전력을 공급해주는 핀으로 사용되며, GND는 회로를 통과하고 남은 전력이 빠져나가는 하수구 역할을 하는 핀이라고 생각하면 된다. POWER 핀의 가장 우측에는 Vin이라는 핀도 존재하는데, 이 핀은 Arduino 전력을 전용 어뎁터에서 공급받을 때 사용하는 핀이라고 한다... 필자가 이에 대한 실험을 따로 진행한 것은 아니라 정확한 정보를 얻는다면 추가로 내용을 작성할 예정이다...(3.3V와 5V핀은 USB 케이블로 컴퓨터와 연결했을 때 사용하는 핀이라고 하는데, 확실한 정보는 아니다.)

 

 

FIN.

 

반응형

댓글