Умный мусорный бак на Arduino с ультразвуковым датчиком

В этом проекте мы соберём умный мусорный бак, который будет открывать крышку автоматически, когда кто-то подносит руку или объект ближе 20 см. Серво-мотор поднимает крышку, а спустя несколько секунд закрывает её обратно — всё без физического касания.

Умный мусорный бак на Arduino

Где и зачем используется

Такой бесконтактный бак полезен для дома, кухни, мастерской или школьных проектов: он делает утилизацию мусора гигиеничной и интерактивной, особенно когда руки заняты или грязные.

Что понадобится для проекта

  • Плата Arduino (Uno, Nano и аналоги)
  • Ультразвуковой датчик HC-SR04
  • Сервопривод SG90
  • Соединительные провода
  • Мусорный бак с крышкой

Назначение пинов

Компонент Пин Arduino Назначение
TRIG датчика HC-SR04 D5 Запуск ультразвукового импульса
ECHO датчика HC-SR04 D6 Приём отражённого сигнала
Сигнал серво SG90 D9 Управление положением крышки
Питание элементов 5V Питание датчика и серво
Общий провод GND Общая земля
Умный мусорный бак на Arduino

Принцип работы

  1. Arduino подключает HC-SR04 и генерирует короткий импульс на TRIG.
  2. Датчик измеряет время отражения сигнала от объекта.
  3. Arduino вычисляет расстояние в сантиметрах на основе времени реакции.
  4. Если расстояние ≤ 20 см, крышка открывается.
  5. Через ~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 для автоматизации повседневной задачи. Он идеален для начинающих и может быть расширен (например, добавлением датчика заполнения или звукового сигнала).