[65호]초음파센서를 이용한 자동문 쓰레기통
2020 ICT 융합 프로젝트 공모전 장려상
초음파센서를 이용한 자동문 쓰레기통
글 | 대구대학교 정원용
1. 심사평
칩센 얼핏 간단해 보이지만 주제와 부합되는 명확한 목표와 결과물을 확인할 수 있습니다. 작품으로서는 충분히 아이디어를 실제로 구현한 상황이지만, 실용성 측면에서 쓰레기통에 전원을 포함한 하드웨어 회로가 장착되어야 하므로 일체형이 아닌 기존 쓰레기통에 적용할 수 있는 별도 구조는 어떨까 하는 생각이 듭니다.
펌테크 작품의 하우징 구성이 상당히 깔끔하고 훌륭하며 설계에 고생이 많았으리라 생각됩니다. 최근 코로나 등으로 위생에 관련된 비접촉식 생활용품에 관심이 많은 시기와도 맞물리는 완성도가 높은 출품작으로 생각됩니다.
위드로봇 전력 관리 부분이 추가되면 더욱 좋은 작품이 될 것 같습니다.
2. 작품 개요
2.1. 배경 및 요약
2.1.1. 더러운 쓰레기통의 위생상 문제
· 쓰레기통 공간이 없어 쓰레기를 쓰레기통 주변에 버려서 쓰레기통이 더러워짐
· 더러운 쓰레기통으로 인해 접촉하기 어려움
· 자동문 쓰레기통을 활용해 접촉을 줄여 위생상의 문제 해결
2.1.2. 쓰레기통 주변 환경 문제
· 쓰레기통의 내용물이 다 찼는지 알지 못해 쓰레기통이 넘치게 됨
· 넘치는 쓰레기통으로 인해 주변이 더러워짐
· 쓰레기통이 다 찼을 시 알림 기능으로 넘치는 쓰레기통 문제 해결
2.1.3. 작품 기능
2.1.3. 완성본
· 평상 시, 초록 LED와 쓰레기통이 닫혀있음
· 물체가 인식될 시, 쓰레기통이 열림
· 쓰레기통이 일정량 채워지면 빨간 LED로 바뀜
3. 작품 설명
3.1. 주요 동작 및 특징
3.1.1. 주요 동작 순서도
3.1.2. 자동문 휴지통 순서도
· 초음파센서를 통해 정면에 있는 물체와의 거리를 측정
· 측정된 물체와의 거리에 따라 쓰레기통이 열리고 닫힘
· 쓰레기통 천장에 있는 초음파센서로 쓰레기 인식
· 초음파센서로 쓰레기양에 따라 LED의 색깔이 바뀜
3.1.3. 물체 인식
· 가까운 거리의 물체 인식을 위한 초음파센서 사용
· 초음파센서로 가까운 거리의 물체와의 거리 측정
· 초음파센서에서 발사된 초음파가 물체로부터 반사되어 돌아온 시간으로 거리산출
· 산출된 거리가 일정 거리보다 작아지면 물체 인식
3.1.4. 쓰레기통의 자동문
· 쓰레기통의 덮개 부분이 움직이면서 쓰레기통이 열리고 닫히게 됨
· 서보모터를 축으로 덮개 부분이 돌아가도록 설계
· 물체를 인식하여 덮개가 움직이는 자동문
3.1.5. 쓰레기통 알림 기능
· 쓰레기통 알림 기능을 위해 LED를 사용
· 평상시에는 LED에 초록 불이 켜짐
· 쓰레기통이 다 찼을 시에는 LED에 빨간 불이 켜짐
3.2. 전체 시스템 구성
3.2.1. 하드웨어(HW)
아두이노 우노 보드 : 아두이노 가장 보편적이고 기본적인 보드
초음파센서 HC-SR04 : 물체와의 거리 측정을 위해 사용
서보모터 hs-311 : 쓰레기통이 열리고 닫히게 하기위해 사용
RGB 3색 LED : 상태를 LED로 표시해주기 위해 사용
3.2.2. 소프트웨어(SW)
Arduino : 작품의 소프트웨어 설계
3.2.3. 전체 시스템 구성도
개발 환경
· OS : windows 10
· 개발 환경(IDE) : Arduino
· 개발 언어 : Arduino
구성 장비
· 디바이스 : 아두이노 우노 보드
· 센서 : 초음파센서(HC-SR04) :
· 사용 장비 : 서보모터 hs-311, RGB 3색 LED
4. 단계별 제작 과정
4.1. Paper Prototype
제작 계획
· 작품 기능 구현
· 외부 프레임 설계
· 3D 프린팅
· 외부 프레임 결합
· 완성품 테스트
· 외부 전원 연결
4.2. 외부 프레임 설계
프레임 Paper Prototype
3D Printing
3D 프린터 출력물
외부 프레임 결합
5. 참고문헌
· 한 권으로 끝내는 아두이노 입문 + 실전(종합편)
· https://www.youtube.com/watch?v=h7yyw6p_tZk&t=1s
6. 회로도
7. Arduino 소스코드
#include <Servo.h>
Servo servo;
// 각 핀 번호 설정
int value=0;
int echo1 = 8;
int trig1 = 9;
int echo2 = 10;
int trig2 = 11;
int red=4;
int green=3;
// 각 핀의 입출력 설정
void setup() {
Serial.begin(9600);
pinMode(trig1, OUTPUT);
pinMode(echo1, INPUT);
pinMode(trig2, OUTPUT);
pinMode(echo2, INPUT);
pinMode(red,OUTPUT);
pinMode(green,OUTPUT);
servo.attach(7);
}
void loop() {
// 1번 초음파센서에서 초음파 발사 후 초음파가 다시 돌아오는데 걸리는 시간 저장
digitalWrite(trig1, LOW);
digitalWrite(echo1, LOW);
delayMicroseconds(2);
digitalWrite(trig1, HIGH);
delayMicroseconds(10);
digitalWrite(trig1, LOW);
unsigned long duration1 = pulseIn(echo1, HIGH);
// 2번 초음파센서에서 초음파 발사 후 초음파가 다시 돌아오는데 걸리는 시간 저장
digitalWrite(trig2, LOW);
digitalWrite(echo2, LOW);
delayMicroseconds(2);
digitalWrite(trig2, HIGH);
delayMicroseconds(10);
digitalWrite(trig2, LOW);
unsigned long duration2 = pulseIn(echo2, HIGH);
// 초음파를 발산한 후 다시 돌아온 시간을 가지고 거리 측정
float distance1 = ((float)(340 * duration1) / 10000) / 2;
float distance2 = ((float)(340 * duration2) / 10000) / 2;
// 1번 초음파센서로 측정한 거리가 13cm미만일 경우 (쓰레기통에 근접하는 물체가 감지 될 경우)
if(distance1<13) // 쓰레기통의 문을 연다
{
for(;value>=0;value -=2)
{
servo.write(value);
delay(10);
}
delay(3000); // 문이 열린 후 3초의 지연시간을 준다
}else // 아닐 경우
{
for(;value<=100;value +=2) // 쓰레기통의 문이 닫힌다
{
servo.write(value);
delay(10);
}
}
// 2번 초음파센서로 측정한 거리가 9.5cm초과일 경우(쓰레기통 안의 내용물이 다 찼을 경우)
if(distance2<9.5)
{
// LED 빨간불 ON
digitalWrite(green,HIGH);
digitalWrite(red,LOW);
}
else // 아닐 경우
{
// LED 초록불 ON
digitalWrite(green,LOW);
digitalWrite(red,HIGH);
}
// 측정된 거리 값을 시리얼 모니터에 출력
Serial.print(“1 : “);
Serial.print(distance1);
Serial.print(“cm “);
Serial.print(“2 : “);
Serial.print(distance2);
Serial.println(“cm”);
delay(100);
}