Умный мусорный бак на Arduino с ультразвуковым датчиком
В этом проекте мы соберём умный мусорный бак, который будет открывать крышку автоматически, когда кто-то подносит руку или объект ближе 20 см. Серво-мотор поднимает крышку, а спустя несколько секунд закрывает её обратно — всё без физического касания.
Где и зачем используется
Такой бесконтактный бак полезен для дома, кухни, мастерской или школьных проектов: он делает утилизацию мусора гигиеничной и интерактивной, особенно когда руки заняты или грязные.
Что понадобится для проекта
- Плата Arduino (Uno, Nano и аналоги)
- Ультразвуковой датчик HC-SR04
- Сервопривод SG90
- Соединительные провода
- Мусорный бак с крышкой
Назначение пинов
| Компонент | Пин Arduino | Назначение |
|---|---|---|
| TRIG датчика HC-SR04 | D5 | Запуск ультразвукового импульса |
| ECHO датчика HC-SR04 | D6 | Приём отражённого сигнала |
| Сигнал серво SG90 | D9 | Управление положением крышки |
| Питание элементов | 5V | Питание датчика и серво |
| Общий провод | GND | Общая земля |
Принцип работы
- Arduino подключает HC-SR04 и генерирует короткий импульс на TRIG.
- Датчик измеряет время отражения сигнала от объекта.
- Arduino вычисляет расстояние в сантиметрах на основе времени реакции.
- Если расстояние ≤ 20 см, крышка открывается.
- Через ~3,5 секунды крышка закрывается обратно.
Пример скетча Arduino
#include <Servo.h> // Библиотека для работы с серво
Servo servo;
int trig = 5; // Пин триггера ультразвука
int echo = 6; // Пин эха ультразвука
int servoPin = 9; // Пин управления серво
long Duration, Distance, Average;
long aver[3]; // Массив для усреднения измерений
void setup() {
Serial.begin(9600);
servo.attach(servoPin);
pinMode(trig, OUTPUT);
pinMode(echo, INPUT);
servo.write(0); // Инициализация: крышка закрыта
delay(100);
servo.detach(); // Открепить серво для экономии энергии
}
void measure() {
digitalWrite(trig, LOW);
delayMicroseconds(5);
digitalWrite(trig, HIGH);
delayMicroseconds(15);
digitalWrite(trig, LOW);
Duration = pulseIn(echo, HIGH);
Distance = (Duration / 2) / 29.1; // Время → расстояние в см
}
void loop() {
for (int i = 0; i <= 2; i++) {
measure();
aver[i] = Distance; // Записать измерение
delay(10);
}
Distance = (aver[0] + aver[1] + aver[2]) / 3; // Усреднение
if (Distance <= 20) { // Если объект ближе 20 см
servo.attach(servoPin);
servo.write(0); // Открыть крышку
delay(3500); // Ждать 3.5 секунды
servo.write(180); // Закрыть крышку
delay(1500);
servo.detach(); // Снова открепить
}
}
Этот код измеряет расстояние три раза, усредняет результаты для устойчивости и управляет положением крышки через серво-мотор.
FAQ — Умный мусорный бак на Arduino
Зачем усреднять несколько измерений?
Усреднение трёх измерений уменьшает шумы и даёт более стабильное значение расстояния.
Можно ли изменить порог срабатывания?
Да, в коде условие Distance <= 20 можно заменить на любое нужное значение (например, 15 или 30 см).
Почему серво отключается после движения?
Чтобы экономить энергию и уменьшить нагрев, серво временно отключается, когда не двигается.
Какой диапазон измерения у HC-SR04?
HC-SR04 может измерять расстояние примерно от 2 до 400 см, но стабильные результаты получаются в пределах 2–200 см.
Можно ли использовать другой серво?
Да, любой серво-мотор с рабочим напряжением 5 В (например, MG90) подойдёт так же.
Заключение
Smart Dustbin — это простой, но наглядный проект, который показывает, как использовать ультразвуковой датчик и серво-мотор вместе с Arduino для автоматизации повседневной задачи. Он идеален для начинающих и может быть расширен (например, добавлением датчика заполнения или звукового сигнала).