프로젝트 04: 🚨 꼼짝마! 레이저 도둑 경보기

보이지 않는 빛의 장벽을 만들고, 침입자가 발생하면 강력한 사이렌을 울려봅시다.

1. 프로젝트 원리: 빛의 차단 감지

이 경보기의 핵심 원리는 '일정한 빛의 유지''갑작스러운 변화'입니다. 레이저 포인터가 조도 센서(CdS)를 향해 계속 빛을 쏘고 있으면 센서값은 아주 높게 유지됩니다. 하지만 침입자가 그 사이를 지나가면 순간적으로 빛이 가려지며 센서값이 툭 떨어지게 되죠.

아두이노는 이 값의 변화를 감시하다가, 설정한 기준치(Threshold)보다 낮아지면 피에조 부저를 통해 경보음을 울립니다.

📦 준비물

아두이노 우노 x 1 레이저 모듈 (또는 레이저 포인터) x 1 조도 센서 (CDS) x 1 피에조 부저 x 1 10kΩ 저항 x 1 점퍼 와이어 & 브레드보드

2. 상세 회로 결선도 (Wiring Diagram)

조도 센서는 아날로그 A0 핀에 연결하고, 경보음을 낼 피에조 부저는 디지털 8번 핀에 연결합니다. 레이저 모듈은 전원(5V, GND)만 연결해도 되지만, 코드로 제어하고 싶다면 디지털 핀에 연결해도 좋습니다.

Arduino Uno A0 | D8 | 5V | GND Laser INTRUDER! CDS Sensor Buzzer (D8) A0 Connection D8 (Signal)
▲ 레이저 경보기 전체 구성도: 레이저가 센서를 직접 조준하도록 배치해야 합니다.

3. 코드 작성하기

시리얼 모니터를 통해 레이저가 켜졌을 때와 가려졌을 때의 값 차이를 먼저 확인하는 것이 중요합니다.

int sensorPin = A0;   // 조도 센서 핀
int buzzerPin = 8;    // 피에조 부저 핀
int threshold = 700;  // 경보 기준값 (레이저가 가려지면 이 값 아래로 떨어짐)

void setup() {
    pinMode(buzzerPin, OUTPUT);
    Serial.begin(9600);
    Serial.println("보안 시스템 가동 중...");
}

void loop() {
    int lightValue = analogRead(sensorPin);
    
    // 센서 값 실시간 모니터링 (기준값을 정할 때 사용하세요)
    Serial.print("현재 광량: ");
    Serial.println(lightValue);

    // 레이저 빛이 가려져서 값이 기준치보다 낮아지면?
    if (lightValue < threshold) {
        Serial.println("🚨 경보! 침입자 발생!");
        
        // 사이렌 소리 (높은 음과 낮은 음 반복)
        for (int i = 0; i < 3; i++) {
            tone(buzzerPin, 1000); delay(200);
            tone(buzzerPin, 600);  delay(200);
        }
    } else {
        noTone(buzzerPin); // 평상시에는 조용히
    }

    delay(100);
}

4. 프로젝트 핵심 팁

🎯 정교한 기준값(Threshold) 설정하기

장소마다 밝기가 다르기 때문에 코드의 700이라는 숫자는 정답이 아닙니다. 레이저를 쏘고 있을 때 시리얼 모니터에 뜨는 값(예: 900)과, 손으로 가렸을 때의 값(예: 500) 사이의 적당한 중간 숫자를 입력해야 경보기가 오작동하지 않습니다.

⚠️ 안전 주의사항

레이저 모듈을 사용할 때는 절대로 사람이나 동물의 눈을 직접 조준하지 마세요. 시력에 손상을 줄 수 있습니다. 실습 시에는 벽이나 종이 과녁을 향하게 설치하는 것이 안전합니다.

5. 🎯 심화 챌린지: 암호 해제 시스템

한 번 울린 경보가 침입자가 지나간 후에도 계속 울리게 하려면 어떻게 해야 할까요? 또한, 2장에서 배운 버튼을 추가해서 "특정 버튼을 눌러야만 사이렌이 꺼지는" 보안 해제 기능을 추가해 보세요!