중급⏱ 예상 시간: 45분📝 5단계
스마트 쓰레기통
초음파 센서로 손을 감지하면 서보모터가 뚜껑을 자동으로 열어주는 비접촉 스마트 쓰레기통을 만듭니다.
🧩 필요한 모듈
Arduino Uno
브레드보드
피에조 부저
점퍼 와이어
LED
저항 (220Ω / 10kΩ)
서보모터 (SG90)
초음파 센서 (HC-SR04)
📖 단계별 설명서
1단계준비물 확인
다음 부품들을 준비해주세요:
- Arduino Uno 1개
- 브레드보드 1개
- 점퍼 와이어 10개
- 초음파 센서 (HC-SR04) 1개
- 서보모터 (SG90) 1개
- LED 1개 (상태 표시용)
- 피에조 부저 1개
- 220Ω 저항 1개
2단계회로 연결하기
- 초음파 센서의 Trig를 D7, Echo를 D6에 연결합니다.
- 초음파 센서의 VCC를 5V, GND를 GND에 연결합니다.
- 서보모터의 신호선을 D9에 연결합니다.
- 서보모터의 VCC를 5V, GND를 GND에 연결합니다.
- LED를 220Ω 저항을 통해 D13에 연결합니다.
- 부저를 D8에 연결합니다.
📐 회로도
회로도 이미지
/images/projects/smart-trash-circuit.png
3단계코드 작성하기
code.ino
#include <Servo.h>
Servo lidServo;
const int TRIG = 7;
const int ECHO = 6;
const int SERVO_PIN = 9;
const int LED_PIN = 13;
const int BUZZER = 8;
const int OPEN_DIST = 20; // 20cm 이내 감지시 열림
void setup() {
lidServo.attach(SERVO_PIN);
lidServo.write(0); // 닫힌 상태
pinMode(TRIG, OUTPUT);
pinMode(ECHO, INPUT);
pinMode(LED_PIN, OUTPUT);
pinMode(BUZZER, OUTPUT);
Serial.begin(9600);
}
long getDistance() {
digitalWrite(TRIG, LOW);
delayMicroseconds(2);
digitalWrite(TRIG, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG, LOW);
long duration = pulseIn(ECHO, HIGH, 30000);
return duration * 0.034 / 2;
}
void openLid() {
digitalWrite(LED_PIN, HIGH);
tone(BUZZER, 1000, 100);
for (int pos = 0; pos <= 90; pos += 3) {
lidServo.write(pos);
delay(15);
}
}
void closeLid() {
for (int pos = 90; pos >= 0; pos -= 3) {
lidServo.write(pos);
delay(15);
}
digitalWrite(LED_PIN, LOW);
}
void loop() {
long dist = getDistance();
Serial.print("Distance: ");
Serial.print(dist);
Serial.println(" cm");
if (dist > 0 && dist < OPEN_DIST) {
openLid();
delay(3000); // 3초간 열린 상태 유지
closeLid();
delay(500);
}
delay(100);
}+45 줄 더 보기
4단계업로드 및 테스트
- 코드를 업로드합니다.
- 초음파 센서 앞에 손을 20cm 이내로 가져가면 서보모터가 90도 회전하며 뚜껑이 열립니다.
- 3초 후 자동으로 닫히는지 확인합니다.
- LED가 열릴 때 켜지고, 닫힐 때 꺼지는지 확인합니다.
💡 팁: OPEN_DIST 값을 조절하면 감지 거리를 변경할 수 있습니다. 실제 쓰레기통에 장착할 때는 종이컵 등으로 외형을 만들어보세요.
5단계심화 — LCD에 사용 횟수 표시
LCD를 추가하면 뚜껑이 열린 횟수를 카운트하여 디스플레이에 표시할 수 있습니다.