03. 아날로그의 이해: 흑백에서 컬러 세상으로
1. 디지털(Digital) vs 아날로그(Analog)
디지털이 계단처럼 '도' 아니면 '모' (0V 아니면 5V)라면, 아날로그는 미끄럼틀처럼 연속적으로 부드럽게 이어지는 값입니다. 빛의 밝기, 온도의 변화, 소리의 크기 등 우리가 사는 자연의 모든 데이터는 아날로그 형태입니다.
2. 아날로그 입력: 볼륨 조절기(가변저항) 읽기
아두이노의 아래쪽을 보면 A0 ~ A5라고 적힌 핀들이 있습니다. 이 핀들은 들어오는 전압(0V ~ 5V)을 1024개의 단계로 아주 미세하게 쪼개어 읽을 수 있습니다. 이것을 아날로그-디지털 변환기(ADC)라고 합니다.
- 0V 입력: 아두이노는 숫자
0으로 읽음 - 5V 입력: 아두이노는 숫자
1023으로 읽음
💻 예제: 가변저항 값 읽어오기
void setup() {
// 시리얼 모니터(컴퓨터 화면)로 값을 보기 위한 준비 (4장에서 자세히 배웁니다!)
Serial.begin(9600);
}
void loop() {
// A0 핀의 아날로그 값을 읽어서 변수에 저장합니다 (0 ~ 1023)
int sensorValue = analogRead(A0);
Serial.println(sensorValue); // 읽어온 값을 컴퓨터 화면에 출력!
delay(100); // 0.1초마다 반복
}
3. 아날로그 출력: PWM (가짜 아날로그의 마법)
아두이노는 아날로그 신호를 입력받을 수는 있지만, 순수한 아날로그 전압을 출력(내보내기)할 수는 없습니다. 그래서 PWM (Pulse Width Modulation)이라는 눈속임 기술을 사용합니다.
전기를 매우 빠르게 켰다 껐다(1초에 수백 번) 하면서 켜져 있는 시간의 비율(Width)을 조절하면, 우리 눈에는 불빛이 흐려지거나 밝아지는 것처럼 보입니다.
⚠️ 아무 핀이나 다 되는 게 아닙니다!
디지털 핀 번호 옆을 자세히 보면 물결무늬(~)가 그려진 핀이 있습니다. (3, 5, 6, 9, 10, 11번 핀) 오직 이 핀들만 PWM 아날로그 출력이 가능합니다. 값이 0(완전 꺼짐)부터 255(완전 켜짐) 사이입니다.
4. 🎯 최종 미션: 가변저항으로 LED 밝기 조절 (스마트 전등)
손잡이를 돌리면 서서히 밝아지고, 반대로 돌리면 서서히 어두워지는 디머(Dimmer) 스위치를 만들어봅시다! 여기서 가장 중요한 함수인 map() 함수가 등장합니다.
void setup() {
pinMode(9, OUTPUT); // 물결무늬(~)가 있는 9번 핀에 LED 연결
}
void loop() {
// 1. 가변저항(A0) 값 읽기 (결과: 0 ~ 1023)
int sensor = analogRead(A0);
// 2. 값의 범위 변환하기 (1023을 255로 줄이기)
int brightness = map(sensor, 0, 1023, 0, 255);
// 3. 변환된 값을 이용해 LED 밝기 출력하기
analogWrite(9, brightness);
}
💡 map() 함수는 왜 쓰나요?
입력받는 값(A0)은 0~1023인데, 출력하는 값(PWM)의 한계는 0~255입니다. 큰 그릇의 물을 작은 그릇으로 비율에 맞게 옮겨 담아야 하죠.
map(바꿀 변수, 현재 최소, 현재 최대, 바꿀 최소, 바꿀 최대)를 사용하면 아두이노가 복잡한 수학 비례식을 대신 계산해 줍니다!