프로젝트 06: 🗑️ 스마트 자동 휴지통 만들기

초음파 센서로 사람의 손을 감지하고 서보 모터로 뚜껑을 자동으로 여닫는 지능형 가전을 제작합니다.

1. 프로젝트 개요

손을 휴지통 가까이 가져가면 뚜껑이 자동으로 열리고, 일정 시간이 지나면 다시 닫히는 시스템입니다. 비접촉 방식으로 매우 위생적이며, 아두이노의 '입력(센서)'과 '출력(모터)'의 상호작용을 완벽하게 이해할 수 있는 프로젝트입니다.

📦 준비물

아두이노 우노 x 1 초음파 센서 (HC-SR04) x 1 서보 모터 (SG90) x 1 빈 상자 또는 작은 휴지통 점퍼 와이어 & 브레드보드

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

초음파 센서는 2번(Trig), 3번(Echo) 핀에, 서보 모터는 9번(PWM) 핀에 연결합니다. 전원선이 복잡하므로 브레드보드의 전원 라인을 잘 활용하세요.

Arduino Uno D2 | D3 | ~D9 | 5V | GND Ultra Sensor (D2, D3) Servo Motor (D9) Breadboard 전원 공유
▲ 휴지통 결선도: 센서로 손을 찾고(입력), 모터로 뚜껑을 엽니다(출력).

3. 코드 작성하기

서보 라이브러리를 사용하며, 거리가 15cm 이내로 가까워지면 뚜껑을 여는 각도(90도)로 회전시키고 3초 후 닫도록 설계합니다.

#include <Servo.h>

Servo myServo;
int trigPin = 2;
int echoPin = 3;

void setup() {
    myServo.attach(9);      // 서보모터 9번 핀
    pinMode(trigPin, OUTPUT);
    pinMode(echoPin, INPUT);
    
    // 초기 상태: 뚜껑 닫기
    myServo.write(0); 
    Serial.begin(9600);
}

void loop() {
    // 1. 초음파로 거리 측정하기
    digitalWrite(trigPin, LOW);
    delayMicroseconds(2);
    digitalWrite(trigPin, HIGH);
    delayMicroseconds(10);
    digitalWrite(trigPin, LOW);

    long duration = pulseIn(echoPin, HIGH);
    int distance = duration * 0.034 / 2;

    // 2. 거리에 따른 뚜껑 제어
    if (distance > 0 && distance < 15) { // 15cm 이내에 손이 오면
        Serial.println("Open!");
        myServo.write(90); // 뚜껑 열기 (90도)
        delay(3000);       // 3초 동안 열어두기
    } else {
        myServo.write(0);  // 평상시에는 닫기 (0도)
    }
    
    delay(100);
}

4. 프로젝트 메커니즘 설명

Lid Open (90°) Hand Detected!
▲ 작동 원리: 손이 감지되면 서보 모터가 축을 회전시켜 뚜껑을 밀어 올립니다.

💡 설치 팁: 서보 모터 고정

실제 뚜껑을 여닫기 위해서는 서보 모터의 날개(Horn) 부분에 긴 막대나 철사를 붙여 뚜껑을 들어 올리는 지렛대 구조를 만들어야 합니다. 뚜껑이 너무 무거우면 서보 모터가 힘겨워할 수 있으니 가벼운 종이나 플라스틱 뚜껑을 추천합니다.

5. 🎯 심화 챌린지: 상태 알림 LED

뚜껑이 열려 있을 때는 **초록색 LED**가 켜지고, 닫혀 있을 때는 **빨간색 LED**가 켜지도록 코드를 업그레이드해 보세요. 사용자가 멀리서도 휴지통의 상태를 한눈에 확인할 수 있어 더욱 편리해집니다!