Проект 28: Умное ведро

Описание
Умное ведро не только обладает базовыми функциями традиционных мусорных баков, но и интегрирует различные интеллектуальные технологии, что приносит много удобств в нашу жизнь.
В этом проекте мы создаем умное ведро на базе платы разработки UNO R3 (ch340), ультразвукового датчика и сервопривода. Когда кто-то подходит к ведру, крышка автоматически открывается; когда человек уходит, крышка автоматически закрывается.
Аппаратное обеспечение
Плата разработки UNO R3 (ch340) x1
Ультразвуковой датчик HC-SR04 x1
Сервопривод SG90 x1
Провода DuPont
Перемычки
Принцип работы
Ультразвуковой датчик HC-SR04 вычисляет расстояние до объекта, посылая и принимая ультразвуковые волны. Когда обнаруживается человек, сервопривод управляет открытием крышки. Когда человек уходит, крышка закрывается.

Схема подключения
Подключите вывод Trig ультразвукового датчика HC-SR04 к цифровому пину D6, вывод Echo к цифровому пину D5.
Подключите желтый провод (сигнал) сервопривода к цифровому пину D10 на плате.

Пример кода
/*
Electronics Learning Starter Kit for Arduino
Project 28
Smart Bin
Edit By Keyes
*/
#include <Servo.h>
const int trigPin = 6; // Ultrasonic sensor Trig pin
const int echoPin = 5; // Ultrasonic sensor Echo pin
const int servoPin = 10; // Servo motor pin
Servo myservo; // Create a servo object
void setup() {
pinMode(trigPin, OUTPUT); // Set Trig pin as output
pinMode(echoPin, INPUT); // Set Echo pin as input
myservo.attach(servoPin); // Attach servo motor to pin 10
myservo.write(0); // Initialize servo to 0 degrees
Serial.begin(9600); // Initialize serial communication with a baud rate of 9600
}
void loop() {
long duration, distance;
// Send a 10-microsecond high pulse to trigger the ultrasonic sensor
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// Read the high pulse duration from the Echo pin
duration = pulseIn(echoPin, HIGH);
// Calculate distance (in centimeters)
distance = duration * 0.034 / 2;
// Print the distance value to the serial monitor
Serial.print("Distance: ");
Serial.print(distance);
Serial.println(" cm");
if (distance < 20) { // If the distance is less than 20 cm, open the lid
myservo.write(180);
delay(3000); // Keep it open for 3 seconds
} else { // If the distance is greater than 20 cm, close the lid
myservo.write(0);
}
delay(100); // Delay for 100 milliseconds
}
Объяснение кода
Подключение библиотеки:
#include <Servo.h>
Подключает библиотеку Arduino Servo, которая используется для управления сервоприводом.
Определение пинов и создание объекта:
const int trigPin = 6; // Trig pin for the ultrasonic sensor
const int echoPin = 5; // Echo pin for the ultrasonic sensor
const int servoPin = 10; // Pin for the servo motor
Servo myservo; // Create a servo motor object
Определяет пины Trig и Echo для ультразвукового датчика и пин для подключения сервопривода. Также создается объект сервопривода для последующего управления.
Настройка инициализации:
void setup() {
pinMode(trigPin, OUTPUT); // Set the Trig pin as an output
pinMode(echoPin, INPUT); // Set the Echo pin as an input
myservo.attach(servoPin); // Attach the servo to digital pin 10
myservo.write(0); // Set initial servo position to 0 degrees (closed position)
Serial.begin(9600); // Initialize serial communication at 9600 baud rate
}
Устанавливает режимы пинов для ультразвукового датчика, подключает сервопривод и инициализирует его позицию. Также запускается последовательная связь для отладки и мониторинга данных датчика.
Основная функция цикла:
void loop() {
// ... (continued as above)
}
В основном цикле непрерывно считываются данные с ультразвукового датчика и управляется действие сервопривода в зависимости от расстояния.
Триггер и считывание ультразвукового датчика:
// Send a 10-microsecond high pulse to trigger the ultrasonic sensor
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// Read the high duration on the Echo pin
duration = pulseIn(echoPin, HIGH);
Отправляет определенный импульс для запуска ультразвукового датчика, затем с помощью функции pulseIn измеряет длительность высокого сигнала на пине Echo.
Вычисление расстояния:
// Calculate distance (in centimeters)
distance = duration * 0.034 / 2;
Вычисляет расстояние от датчика до объекта на основе принципа работы ультразвуковых датчиков. Звук распространяется в воздухе со скоростью примерно 340 метров в секунду, или 0.034 сантиметра за микросекунду. Поскольку звук проходит путь туда и обратно, результат делится на два.
Вывод расстояния в сериал монитор:
// Print the distance to the serial monitor
Serial.print("Detected Distance: ");
Serial.print(distance);
Serial.println(" cm");
Выводит вычисленное расстояние в сериал монитор, который можно просмотреть в Arduino IDE.
Управление сервоприводом:
if (distance < 20) { // If the distance is less than 20 cm, open the trash bin lid
myservo.write(180); // Rotate the servo to 180 degrees (open position)
delay(3000); // Keep it open for 3 seconds
} else { // If the distance is 20 cm or greater, close the trash bin lid
myservo.write(0); // Rotate the servo to 0 degrees (closed position)
}
Определяет, находится ли кто-то поблизости по расстоянию. Если обнаруженное расстояние меньше 20 сантиметров, считается, что кто-то приближается, и крышка мусорного ведра открывается, удерживаясь открытой в течение 3 секунд; в противном случае сервопривод удерживает крышку закрытой.
Задержка в цикле:
delay(100); // Delay for 100 milliseconds to control loop frequency
Задержка в 100 миллисекунд для контроля частоты выполнения цикла и предотвращения чрезмерной нагрузки.
Результат проекта
Когда кто-то подходит к ведру (менее 20 см), крышка автоматически открывается на 3 секунды.
Когда человек уходит (расстояние равно или больше 20 см), крышка автоматически закрывается, чтобы поддерживать чистоту окружающей среды.
