Кормушка CHONK
ОБНОВЛЕНИЕ от 02.03.2025!!!
После того, как я начал распечатывать и собирать податчик, в сборке выявилось несколько нестыковок. Основная проблема была с валом, поэтому я обновил его конструкцию (2 лопасти вместо 4 и соединение с серводвигателем винтом М2).
Еще одно небольшое изменение, которое я внес, касалось корпуса механизма: я немного увеличил отверстия, в которых находится вал; теперь он вдавлен до тех пор, пока не сядет на место.
Я также решил распечатать сам корпус в ориентации, противоположной запланированной (также обновил картинки в инструкции ниже).
Добавлены новые фотографии и видео проекта.
--------------------------------------------------------------------------------------------------
CHONK — это, по сути, автоматизированная система, которая раздает еду, когда ваш питомец подходит достаточно близко. Ультразвуковой датчик обнаруживает присутствие вашего питомца, а серводвигатель управляет механизмом выдачи на основе логики близости и синхронизации в коде.
Используемое оборудование и программное обеспечение:
Аппаратное обеспечение:
Микроконтроллер UNO R3/Micro/Nano ESP32/ESP32
Ультразвуковой датчик (HC-SR04)
Серводвигатель MG90
Макетная плата и перемычки
Винт М2
Программное обеспечение:
Ардуино IDE
Солидворкс
Бамбу Студия
Схема подключения:
Ультразвуковой датчик:
VCC -> 5 В на ESP32
GND -> GND на ESP32
TRIG -> GPIO 23 на ESP32
ЭХО -> GPIO 22 на ESP32
Серводвигатель:
VCC -> 5 В на ESP32 (или при необходимости внешний источник питания)
GND -> GND на ESP32
Управление -> GPIO 26 на ESP32
Код:
Я старался сделать код максимально простым. Это ссылка на сайт, с которого я скачал исходный код: https://wokwi.com, но я его немного усовершенствовал с помощью AI, чтобы он более подходил для этой цели.
В коде используется микроконтроллер ESP32 для управления серводвигателем на основе измерений расстояния ультразвуковым датчиком. Когда объект обнаруживается в пределах заданного порога расстояния, серводвигатель поворачивается на определенный угол, имитируя открытие и закрытие двери. Серводвигатель открывает дверь только при обнаружении объекта на указанном расстоянии, а между последующими активациями существует задержка, чтобы избежать непрерывного срабатывания.
#include
#define TRIG_PIN 23 // Контакт ESP32 GPIO23 подключен к контакту TRIG ультразвукового датчика
#define ECHO_PIN 22 // Контакт ESP32 GPIO22, подключенный к контакту ECHO ультразвукового датчика
#define SERVO_PIN 26 // Вывод ESP32 GPIO26, подключенный к выводу серводвигателя
#define DISTANCE_THRESHOLD 10 // Порог расстояния в сантиметрах
Сервопривод; // Создаем сервообъект для управления серводвигателем
// Переменные для измерения расстояния и времени
float period_us, distance_cm;
беззнаковый longlastActivatedTime = 0;
беззнаковый длинный период задержки = 10000; // Период задержки 10 секунд в миллисекундах
недействительная настройка() {
Серийный.начало(9600); // Инициализируем последовательный порт
pinMode (TRIG_PIN, ВЫХОД); // Устанавливаем вывод ESP32 как выход для вывода TRIG
pinMode (ECHO_PIN, INPUT); // Устанавливаем вывод ESP32 в качестве входа для вывода ECHO
servo.attach(SERVO_PIN); // Подключаем сервопривод к контакту 26
серво.запись(0); // Инициализируем положение сервопривода на 0 градусов (дверь закрыта)
}
недействительный цикл() {
// Генерируем 10-микросекундный импульс на вывод TRIG
digitalWrite(TRIG_PIN, ВЫСОКИЙ);
задержкамикросекунды (10);
digitalWrite(TRIG_PIN, LOW);
// Измеряем длительность импульса с вывода ECHO
длительность_us = импульсВход (ECHO_PIN, ВЫСОКИЙ);
// Рассчитываем расстояние в сантиметрах
расстояние_см = 0,017 * длительность_нас;
unsigned long currentTime = millis();
// Проверяем, находится ли расстояние ниже порога и прошел ли период задержки
if (distance_cm = DelayPeriod) {
серво.запись(90); // Поворот серводвигателя на 90 градусов (открытая дверь)
задержка(1000); // Держим дверь открытой 1 секунду
серво.запись(0); // Закрываем дверь
LastActivatedTime = CurrentTime; // Обновляем время последней активации
}
// Выводим измеренное расстояние на последовательный монитор
Serial.print(«Расстояние: „);





























