컴퓨터 프로그램이란 데이터를 입력하여 우리가 원하는 형태로 가공한 후 우리가 알아볼 수 있는 형태로 출력하는 명령어들의 모임을 말합니다.
따라서 컴퓨터 프로그램의 필수 구성 요소는 데이터 입력, 프로세스, 데이터 출력이라고 할 수 있겠죠.
이번 글에서는 아두이노에서의 데이터 출력을 확인해 보겠습니다.
왜 입력이 먼저가 아니고 출력이 먼저냐.. 라고 하신다면...
일단 눈에 보이는 것이 먼저 나와야 뭔가 확인을 할 수 있으니까요.
데이터가 어찌 되었건.. 프로세스가 어찌되었건.. 일단은 뭔가가 눈에 보이기를 원합니다.
프로그램의 처리 결과도 출력이 없으면 애초에 확인이 안되는 것이니까요.
아두이노에서의 출력은 크게 3가지 형태로 볼 수 있습니다.
- 디지털 출력
- 아날로그 출력
- 펄스 폭 변조(Pulse Width Modulation, PWM) 출력
아두이노에서의 입출력은 기본적으로 범용 입출력(General Purpose Input/Output, GPIO) 핀(Pin)을 이용합니다.
그런데 기본적으로 아두이노의 모든 GPIO Pin은 입력으로 설정되어 있기때문에 출력을 하기 위해서는 각 핀의 동작모드를 출력(OUTPUT)으로 설정해 줄 필요가 있습니다.
이 부분이 바로 지난 번에 보았던 setup() 함수 안의 pinMode() 함수 입니다.
우리가 출력에 사용하고자 하는 핀을 선택하고 해당 모드를 출력용으로 설정한 후, Write 기능을 이용하여 해당 핀의 값을 지정해주면 지정하는 대로 작동하는거죠.
이때, Write 기능 중에서 디지털 출력을 지원하는 것이 digitalWrite() 함수이며 아날로그 출력을 지원하는 것이 analogWrite() 함수입니다.
해당 함수를 이용하여 특정 핀의 값을 지정하면 그대로 출력이 되는 것입니다.
전혀 어려울것이 없네요.
그런데 여기서 주의해야 할 것은 아두이노에는 아날로그 출력을 바로 수행하는 핀이 없다는 것입니다.
그 이유는 아두이노 자체가 디지털 장비이기때문에 아날로그 출력을 하는 것이 불가능하다는 것입니다.
그래서 아두이노는 아날로그 출력을 위해 펄스 폭 변조(Pulse Width Modulation, PWM)라는 기술을 사용합니다.
디지털 형태로 만들어진 데이터를 펄스 폭 변조를 통해서 우리가 원하는 아날로그 데이터와 비슷한 신호를 만들어냅니다.
이렇게 만들어진 신호를 아날로그 신호로서 출력하게 되는 것입니다.
그렇다면 앞에서 알아본 아두이노의 3가지 출력 형태는 2가지로 바뀌어야 할 수도 있겠죠.
디지털 출력과 아날로그 출력(≒PWM 출력)으로 말입니다.
그럼 예제를 살펴보겠습니다.
디지털 출력은 지난 번 LED 깜빡이는 예제를 생각하시면 됩니다.
이건 건너뛰고...
아날로그 출력(PWM 출력)의 예제를 살펴보도록 하죠.
별다른 것은 없습니다.
analogWrite() 함수를 호출하면 아두이노가 알아서 PWM 신호를 출력해줍니다.
단지 PWM 기능이 지원되는 핀을 선택하기만 하면 되는 일입니다.
그럼 LED의 밝기를 조절하는 예제를 사용해 보겠습니다.
먼저 아두이노 회로를 구성해야 합니다.
회로는 간단하게 LED 1개와 220Ω의 저항 하나를 사용합니다.
저항을 사용하는 이유는 그냥 LED를 연결할 경우 과전하로 인해 LED가 타버리는 것을 방지하기 위해서 입니다.
아두이노 보드에 따로 전원을 사용하지 않고 USB 케이블만으로 입력되는 전력(약합니다)을 사용하긴 하지만 혹시 모르니까 미리 예방하는 것이 좋겠죠.
예전에 전력이 약하다고 무시했다가 LED 소자를 태워먹은 적이 있습니다. ㅠㅠ
회로연결은 아래와 같습니다.
9번 핀과 저항을 연결하고, 저항의 반대쪽 단자와 LED의 플러스(+) 단자를 연결한 후, LED의 마이너스(-) 단자와 그라운드(GND)를 연결하면 됩니다.
다음은 제어를 위한 코드를 입력하고 컴파일, 업로드 해야겠죠.
출력을 위한 핀은 9번 핀을 사용하겠습니다.
const int LED=9;
void setup(){
pinMode(LED, OUTPUT);
}
void loop(){
for(int i=0; i<256; i++){
analogWrite(LED, i);
delay(10);
}
for(int i=255; i>=0; i--){
analogWrite(LED, i);
delay(10);
}
}
컴파일, 업로드가 끝나면 LED의 밝기가 변하는 것을 확인하실 수 있습니다.
마지막으로 아두이노 GPIO핀의 MAP을 올려두니 참고하시면 되겠습니다.
'관련 기술 > SBC(싱글보드컴퓨터)' 카테고리의 다른 글
TinkerCAD를 이용하여 아두이노 없이 시뮬레이션을 통해 개발하기 (0) | 2023.03.15 |
---|---|
첫 번째 작업: 아두이노에 내장된 LED 깜빡이기 (0) | 2023.03.14 |
아두이노와 그 종류들, 그리고 대략적인 개발 순서 (0) | 2023.03.13 |
SBC(Single Board Computer) 학습도 시작해보자 (0) | 2023.03.12 |
Jetson Nano에서 PWM 동작시켜서 서보모터 돌리기 (6) | 2021.10.21 |