프로젝트 03: 🌙 감성 스마트 무드등

주변이 어두워지면 스스로 은은한 불빛을 내뿜는 똑똑한 조명을 만들어 봅시다.

1. 프로젝트 개요

방 안의 불을 끄면 자동으로 켜지고, 아침이 되어 해가 뜨면 자동으로 꺼지는 스마트 가전의 원리를 배웁니다. 조도 센서로 들어오는 아날로그 값(0~1023)을 LED의 밝기 값(0~255)으로 변환하는 것이 핵심입니다.

📦 준비물

아두이노 우노 x 1 고휘도 LED (흰색/노란색) x 1 조도 센서 (CDS) x 1 220Ω 저항 (LED용) x 1 10kΩ 저항 (센서용) x 1 브레드보드 & 와이어

2. 상세 회로도 (Wiring Diagram)

조도 센서는 빛의 양에 따라 저항이 변하므로, 전압 분배 법칙을 이용해 10kΩ 저항과 함께 연결해야 합니다. LED는 밝기 조절을 위해 물결표시(~)가 있는 PWM 9번 핀에 연결합니다.

Arduino Uno ~9(PWM) | A0 | 5V | GND Pin 9 (PWM) A0 (Analog) 5V / GND
▲ 스마트 무드등 회로도: 조도 센서와 LED의 연결 위치를 확인하세요.

3. 코드 작성하기

단순히 켜고 끄는 것이 아니라, 어두울수록 더 밝게 빛나도록 수식을 반전시키는 것이 포인트입니다.

int sensorPin = A0;  // 조도 센서 핀
int ledPin = 9;      // LED 핀 (PWM 핀)

void setup() {
    pinMode(ledPin, OUTPUT);
    Serial.begin(9600);
}

void loop() {
    // 1. 빛의 세기 읽기 (밝을수록 큰 값, 어두울수록 작은 값)
    int value = analogRead(sensorPin);
    Serial.print("Sensor Value: ");
    Serial.println(value);

    // 2. 밝기 계산 (어두울 때 켜져야 하므로 범위를 뒤집습니다)
    // 입력: 300(밝음) ~ 800(어두움) -> 출력: 0(끔) ~ 255(최대 밝기)
    // ※ 실제 센서 값에 따라 300, 800 숫자는 조정이 필요할 수 있습니다.
    int brightness = map(value, 300, 800, 0, 255);

    // 3. 값의 범위를 0~255로 제한 (안전을 위해)
    brightness = constrain(brightness, 0, 255);

    // 4. LED 밝기 조절
    analogWrite(ledPin, brightness);

    delay(50);
}

4. 핵심 로직 설명

💡 map() 함수의 마법: 거꾸로 변환하기

일반적으로 조도 센서는 어두울수록 낮은 숫자(전압)를 냅니다. 하지만 무드등은 어두울 때(낮은 숫자) 더 밝게(높은 숫자) 빛나야 하죠. 그래서 map(value, 300, 800, 255, 0) 처럼 마지막 숫자의 순서를 바꿔주면 '반비례' 효과를 쉽게 낼 수 있습니다.

5. 🎯 심화 챌린지: 무드등 색깔 바꾸기

단색 LED 대신 RGB LED를 사용해 보세요! 주변이 어두워질수록 단순히 밝아지는 것이 아니라, 파란색에서 따뜻한 주황색으로 색상이 변하게 만들면 훨씬 감성적인 무드등이 됩니다.