03. 아날로그의 이해: 흑백에서 컬러 세상으로

0과 1밖에 모르던 아두이노에게, 연속적으로 변하는 자연의 부드러운 값을 가르칩니다.

1. 디지털(Digital) vs 아날로그(Analog)

디지털이 계단처럼 '도' 아니면 '모' (0V 아니면 5V)라면, 아날로그는 미끄럼틀처럼 연속적으로 부드럽게 이어지는 값입니다. 빛의 밝기, 온도의 변화, 소리의 크기 등 우리가 사는 자연의 모든 데이터는 아날로그 형태입니다.

디지털 (Digital) 0V 5V 아날로그 (Analog) 0V 5V
▲ 디지털은 딱 떨어지는 각진 형태, 아날로그는 곡선처럼 연속적인 형태를 가집니다.

2. 아날로그 입력: 볼륨 조절기(가변저항) 읽기

아두이노의 아래쪽을 보면 A0 ~ A5라고 적힌 핀들이 있습니다. 이 핀들은 들어오는 전압(0V ~ 5V)을 1024개의 단계로 아주 미세하게 쪼개어 읽을 수 있습니다. 이것을 아날로그-디지털 변환기(ADC)라고 합니다.

GND A0 5V 가변저항 (Potentiometer)
▲ 가변저항 연결법: 양 끝은 5V와 GND에 연결하고, 가운데 핀을 A0(아날로그 입력) 핀에 연결합니다. 손잡이를 돌리면 가운데 핀으로 나가는 전압이 변합니다.

💻 예제: 가변저항 값 읽어오기

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)을 조절하면, 우리 눈에는 불빛이 흐려지거나 밝아지는 것처럼 보입니다.

analogWrite(64) - 25% 밝기 analogWrite(127) - 50% 밝기 analogWrite(191) - 75% 밝기 켜져 있는 시간(■)이 길어질수록 LED가 더 밝게 보입니다!
▲ PWM의 원리: 빠르게 깜빡이는 시간을 조절해 밝기를 속이는 마술

⚠️ 아무 핀이나 다 되는 게 아닙니다!

디지털 핀 번호 옆을 자세히 보면 물결무늬(~)가 그려진 핀이 있습니다. (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(바꿀 변수, 현재 최소, 현재 최대, 바꿀 최소, 바꿀 최대)를 사용하면 아두이노가 복잡한 수학 비례식을 대신 계산해 줍니다!