아두이노 기반 스마트 분리수거함: 건조/습식 쓰레기 효율적 분리
부품 및 소모품
| 아두이노 메가 2560 |
× |
1 |
| DFRobot 그래비티: 아두이노용 디지털 정전식 터치 센서 |
× |
1 |
| 스파크펀 토양 수분 센서 (스크류 터미널 포함) |
× |
1 |
| SG90 마이크로 서보 모터 |
× |
1 |
| 아크릴 시트 |
× |
1 |
| 솔더리스 브레드보드 하프 사이즈 |
× |
1 |
| 점퍼 와이어 (일반) |
× |
1 |
| 9V 배터리 (일반) |
× |
1 |
필요한 도구 및 기계
| 와이어 스트리퍼 & 커터, 18-10 AWG / 0.75-4mm² |
| 핫글루건 (일반) |
앱 및 온라인 서비스
프로젝트 소개
설명: 이 분리수거함은 건조 쓰레기와 습식 쓰레기를 성공적으로 분리할 수 있습니다.
참고: 플라스틱이나 금속은 분리할 수 없습니다. 그러려면 추가 센서와 모듈이 필요합니다.
구성
1. 분리수거함 본체로 아크릴 시트 2장을 사용했습니다.
2. 서보 모터를 액추에이터로 사용해 쓰레기 종류(건조/습식)에 따라 회전시킵니다.
3. 아주 저렴한 문구용 자/자를 서보 모터 축으로 사용했습니다. 이걸로 상단 베이스와 서보 모터를 연결했고 핫글루로 고정했습니다.
- 참고: 순간접착제(페비퀵)도 쓸 수 있지만 위험하니 조심해서 사용하세요.
4. 수분 센서를 분리수거함 상단에 고정해 쓰레기를 넣으면 바로 센서 위에 떨어지게 했습니다. 바로 옆에 터치 센서도 둬서 건조 쓰레기를 감지합니다. 이로써 구성이 완료됩니다.
수분 센서만으로도 쓰레기 종류를 분류할 수 있는데 왜 터치 센서를 쓰나요?
- 네, 수분 센서로 습식 쓰레기는 분류할 수 있습니다. 하지만 건조 쓰레기는 분류 못 합니다. 왜냐면 쓰레기가 센서 위에 없을 때 중립 상태를 만들고 싶은데, 아무리 노력해도 이 중립 상태를 달성할 수 없습니다. 수분 센서는 기본적으로 항상 건조 상태라 분리수거함이 항상 한쪽으로만 기울게 됩니다. 이 문제를 해결하려고 터치 센서를 썼습니다.
구현 단계별 가이드
- 1단계: 위 이미지처럼 아크릴 시트 2장을 준비하세요. 동네 철물점이나 아마존 등 온라인에서 구할 수 있습니다.
- 2단계: 이미지처럼 아크릴 시트에 구멍을 뚫어 배터리 홀더를 고정하세요.
- 3단계: 배터리 홀더 위쪽에 서보 모터를 이미지처럼 앞을 향하게 붙이세요. 양면 테이프나 핫글루건으로 고정합니다.
- 4단계: 플라스틱 문구용 자(학교에서 선 긋던 자)를 가져다가 바닥 부분에 모터 축 지름보다 조금 작은 구멍을 뚫으세요. (납땜 인두나 얇은 철봉으로 구멍을 뚫을 수 있습니다.)
- 5단계: 자 위에 다른 아크릴 시트를 핫글루건으로 붙이세요. 단단히 고정돼 움직이지 않게 하세요.
- 6단계: 아크릴 플레이트 위에 수분 센서와 터치 센서를 놓으세요.
>> 이 6단계를 올바르게 따라하면 준비 완료입니다 :)
하드웨어 설명
이 하드웨어 설정을 구현하려면 다음 개념을 깊이 있게 학습해야 합니다:
- 아두이노: 이 프로젝트에 쓰이는 마이크로컨트롤러입니다. 이 링크에서 모든 걸 배울 수 있습니다. 공식 문서도 꼭 확인하세요.
- C++ 프로그래밍: 아두이노 프로그래밍하려면 중급 수준의 C++을 배워야 합니다. 아두이노 기본 함수도 익히세요.
- 수분 센서: 아두이노와 수분 센서 인터페이싱, 회로도를 배워야 합니다.
- 터치 센서: 아두이노와 터치 센서 인터페이싱, 회로도를 배워야 합니다.
- 서보 모터: 서보 모터 작동 원리와 아두이노로 제어하는 법을 배워야 합니다.
스마트 분리수거함 작동 원리 단계별
- 1단계: 쓰레기를 넣으면 수분 센서 위에 떨어집니다.
- 2단계: 설정된 임계값에 따라 수분 센서가 건조/습식으로 분류합니다.
- 3단계: 2단계가 끝나면 서보 모터가 쓰레기 종류에 따라 양쪽으로 회전해 쓰레기가 적절한 칸으로 들어갑니다.
- 4단계: 전체 과정이 자율적이고 지속적으로 이뤄집니다.
영상: 이 프로젝트의 멋진 작동 영상을 꼭 확인하세요 (아래 링크 참조)
코드
스마트 분리수거함 C/C++
#include <Servo.h>
class Smart_Segregator {
public:
int servo_pin;
int moisture_sensor_pin;
int touch_sensor_pin;
int detect_moisture;
int detect_touch;
Servo servo;
Smart_Segregator(int pin_1, int pin_2, int pin_3) {
servo_pin = pin_1;
moisture_sensor_pin = pin_2;
touch_sensor_pin = pin_3;
detect_moisture = 0;
detect_touch = false;
}
void init() {
Serial.begin(9600);
servo.attach(servo_pin);
servo.write(90);
pinMode(moisture_sensor_pin, INPUT);
pinMode(touch_sensor_pin, INPUT);
Serial.println("Your Smart Segregator is ready to Segregate!");
}
void dry_waste() {
servo.write(0);
}
void wet_waste() {
servo.write(180);
}
void neutral_state() {
servo.write(90);
}
void execute() {
detect_moisture = digitalRead(moisture_sensor_pin);
detect_touch = digitalRead(touch_sensor_pin);
if (detect_moisture > 85 && detect_touch == true) {
wet_waste();
} else if (detect_moisture <= 85 && detect_touch == true) {
dry_waste();
} else {
neutral_state();
}
}
};
Smart_Segregator segregator = Smart_Segregator(8, 6, 2);
void setup() {
segregator.init();
}
void loop() {
segregator.execute();
}
회로도
회로도 이미지 2개 포함