Здесь могла бы быть реклама
Она помогает блогу развиваться.
Кажется, сегодня она немного загрустила.

Главная страница » DIY проекты » Умная кормушка для кота на ESP32: кормим питомца по расписанию
Умная кормушка для кота на ESP32: кормим питомца по расписанию
DIY проекты

Умная кормушка для кота на ESP32: кормим питомца по расписанию

31.03.2026 167
Умная кормушка для кота на ESP32: кормим питомца по расписанию

Пошаговый проект умной кормушки для кота на ESP32 с Wi-Fi и веб-интерфейсом. Собираем своими руками: схема, код, сборка. Автоматическое кормление по расписанию.

Всем привет! Сегодня мы соберём проект, который лежит на стыке DIY-электроники и заботы о домашних любимцах — автоматическую кормушку для кота на базе ESP32. Если вы, как и я, иногда задерживаетесь на работе или просто хотите обеспечить своему пушистому другу стабильный график питания, этот проект для вас. Мы не просто подключим мотор к таймеру, а создадим умное устройство с Wi-Fi, веб-интерфейсом и возможностью интеграции в экосистему умного дома. Всё это — на доступной и популярной платформе ESP32.

Зачем это нужно? Больше, чем просто «миска с таймером»

Поначалу идея может показаться простой: крути мотор в заданное время — и дело в шляпе. Но на практике автоматическая кормушка решает несколько важных задач:

  • Стабильный график. Кошки — создания привычки. Кормление в одно и то же время улучшает их самочувствие и дисциплинирует.
  • Контроль порций. Особенно актуально для котов на диете или склонных к перееданию. Дозатор выдаст ровно столько, сколько вы запрограммируете.
  • Ваше спокойствие. Можно смело уехать на выходные, не прося соседей заглядывать для кормёжки (конечно, при условии наличия запаса корма и воды).
  • Удалённое управление. Забыли выставить расписание? Дайте команду через телефон из любой точки мира.
  • Фундамент для «умного» питомника. К кормушке можно добавить датчики веса, видеокамеру или датчик присутствия, создав полноценную экосистему.

В этом проекте мы пойдём дальше базового таймера и научим ESP32 работать как веб-сервер, чтобы настраивать расписание через браузер.

Что нам понадобится: железо и софт

Компоненты

  1. Плата ESP32 (любая, например, ESP32 DevKit V1). Сердце проекта, отвечает за логику и подключение к Wi-Fi.
  2. Сервопривод SG90 или MG90S. Он будет поворачивать дозатор. SG90 — самый популярный и бюджетный вариант.
  3. Пластиковый контейнер или готовая ёмкость для корма. Подойдёт любая герметичная банка с широким горлышком.
  4. Крышка от бутылки/пластиковый винт/3D-печатная деталь. Это будет наш «шнек» или заслонка, которую прикрепим к сервоприводу для дозирования.
  5. Макетная плата и провода «папа-папа». Для удобства монтажа на этапе прототипирования.
  6. Блок питания 5V 2A и кабель Micro-USB. Для питания ESP32 и сервопривода.
  7. Корпус. Можно использовать пластиковую коробку для электроники, чтобы спрятать «начинку».

Программное обеспечение

  1. Arduino IDE или PlatformIO. Я буду показывать код в Arduino IDE, как в более простом для начала варианте.
  2. Библиотеки для Arduino IDE:
    • ESPAsyncWebServer (для удобного веб-сервера)
    • AsyncTCP (зависимость для предыдущей библиотеки)
    • ESP32Servo (для работы с сервоприводом на ESP32)

Собираем схему: от прототипа к устройству

Схема очень проста. Главное — правильно подключить сервопривод. * Красный провод (VCC) сервопривода -> к контакту 5V на ESP32. * Коричневый/чёрный провод (GND) -> к любому контакту GND на ESP32. * Жёлтый/оранжевый провод (Signal) -> к GPIO 13 на ESP32 (этот пин можно изменить в коде, если нужно).

Важный момент по питанию: При работе сервопривод создаёт скачки напряжения. Если он у вас крупный (MG996R) или вы подключаете несколько, питайте его от отдельного источника 5В, соединив «земли» (GND) ESP32 и этого источника. Для нашего SG90, питающегося от ESP32, всё должно работать стабильно.

Пишем прошивку: логика, веб-сервер и расписание

Создаём новый скетч в Arduino IDE. Не забудьте в Инструменты > Плата выбрать свою модель ESP32 и указать правильный порт.

1. Подключаем библиотеки и задаём константы

#include <WiFi.h>
#include <ESPAsyncWebServer.h>
#include <ESP32Servo.h>

// Замените на данные вашей Wi-Fi сети
const char* ssid = "ВАШ_SSID";
const char* password = "ВАШ_ПАРОЛЬ";

// Создаём объекты сервопривода и веб-сервера
Servo myServo;
AsyncWebServer server(80); // Сервер будет слушать 80-й порт

// Пины и переменные
const int servoPin = 13;
int feedHour = 8;   // Час кормления по умолчанию
int feedMinute = 0; // Минута кормления по умолчанию
int lastFeedDay = 0; // День последнего кормления (чтобы кормить 1 раз в сутки)

Комментарий: Мы используем асинхронный веб-сервер (AsyncWebServer), который не блокирует выполнение кода во время ожидания запросов. Это важно для стабильной работы таймера.

2. Функция кормления и HTML-интерфейс

Создадим функцию, которая будет вызываться для выдачи порции. Сервопривод повернётся на заданный угол, задержатся, и вернётся обратно.

void feedCat() {
  Serial.println("Кормление...");
  myServo.write(90);  // Поворачиваем сервопривод на 90 градусов
  delay(1000);        // Ждём, пока корм высыплется
  myServo.write(0);   // Возвращаем в исходное положение
  lastFeedDay = day(); // Запоминаем день последнего кормления
}

// Далее в коде объявим строку с HTML-кодом нашей веб-страницы.
// Она будет содержать форму для установки времени и кнопку ручного кормления.
const char index_html[] PROGMEM = R"rawliteral(
<!DOCTYPE HTML>
<html>
<head>
  <title>Умная кормушка</title>
  <meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
  <h1>Управление кормушкой</h1>
  <p>Текущее время на устройстве: %TIME%</p>
  <p>Последнее кормление: %LASTFEED%</p>
  <form action="/set">
    <label>Установите время кормления (раз в сутки):</label><br>
    Часы: <input type="number" name="hour" min="0" max="23" value="%FEEDHOUR%">
    Минуты: <input type="number" name="minute" min="0" max="59" value="%FEEDMINUTE%">
    <input type="submit" value="Сохранить">
  </form>
  <br>
  <button onclick="manualFeed()">Накормить сейчас!</button>
  <script>
    function manualFeed() {
      fetch('/manual');
      alert('Команда на кормление отправлена!');
    }
  </script>
</body>
</html>
)rawliteral";

3. Настройка Wi-Fi, сервера и логики в setup()

void setup() {
  Serial.begin(115200);
  myServo.attach(servoPin);

  // Подключаемся к Wi-Fi
  WiFi.begin(ssid, password);
  Serial.print("Подключение к WiFi");
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println();
  Serial.print("IP-адрес: ");
  Serial.println(WiFi.localIP()); // Выводим IP-адрес в монитор порта

  // Настраиваем маршруты веб-сервера
  // Главная страница
  server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){
    // Динамически подставляем значения в HTML
    String html = String(index_html);
    html.replace("%TIME%", getTimeString());
    html.replace("%LASTFEED%", String(lastFeedHour) + ":" + String(lastFeedMinute));
    html.replace("%FEEDHOUR%", String(feedHour));
    html.replace("%FEEDMINUTE%", String(feedMinute));
    request->send(200, "text/html", html);
  });

  // Маршрут для установки нового времени
  server.on("/set", HTTP_GET, [](AsyncWebServerRequest *request){
    if (request->hasParam("hour") && request->hasParam("minute")) {
      feedHour = request->getParam("hour")->value().toInt();
      feedMinute = request->getParam("minute")->value().toInt();
      request->send(200, "text/plain", "Время обновлено! Кормление в " + String(feedHour) + ":" + String(feedMinute));
    }
  });

  // Маршрут для ручного кормления
  server.on("/manual", HTTP_GET, [](AsyncWebServerRequest *request){
    feedCat();
    request->send(200, "text/plain", "Кормление...");
  });

  server.begin(); // Запускаем сервер
}

Комментарий: Обработчики маршрутов (server.on) — это функции, которые срабатывают, когда пользователь переходит по определённому адресу (например, http://192.168.1.100/set?hour=20&minute=30).

4. Проверка времени в главном цикле loop()

void loop() {
  // Получаем текущее время с помощью встроенных функций
  int currentHour = hour();
  int currentMinute = minute();
  int currentDay = day();

  // Проверяем, наступило ли время кормления И не кормили ли мы сегодня
  if (currentHour == feedHour && currentMinute == feedMinute && currentDay != lastFeedDay) {
    feedCat();
  }

  delay(30000); // Проверяем время каждые 30 секунд (не нужно делать это слишком часто)
}

// Вспомогательная функция для форматирования времени в строку
String getTimeString() {
  return String(hour()) + ":" + String(minute()) + ":" + String(second());
}

Типичная ошибка №1: Дребезг срабатывания. Если проверять условие в loop() без задержки (delay) или флага, функция feedCat() может выполниться несколько раз подряд за одну минуту. Мы избегаем этого, проверяя время раз в 30 секунд и сравнивая день последнего кормления.

Типичная ошибка №2: Сброс времени после перезагрузки. Встроенные функции hour() и minute() отсчитывают время с момента включения микроконтроллера. Для реального точного расписания нужно синхронизировать время по NTP (Network Time Protocol). Это отличное улучшение для вашего проекта! Добавьте библиотеку time.h и функцию configTime() в setup().

Сборка механической части: превращаем код в действие

Это самый творческий этап. Нужно прикрепить к валу сервопривода импровизированный дозатор. 1. Возьмите пластиковую крышку от бутылки. 2. Проделайте в её центре отверстие и насадите на вал сервопривода (часто в комплекте идут пластиковые «барашки» для крепления). 3. В боковой стенке крышки вырежьте сектор-отверстие. 4. Прикрепите эту крышку к горлышку банки с кормом так, чтобы при повороте отверстия совпадали, и корм высыпался в миску.

Совет: Перед окончательной сборкой протестируйте угол поворота и задержку, подобрав оптимальные значения в коде (myServo.write(angle) и delay()), чтобы порция была именно такой, как нужно вашему коту.

Тестирование и отладка

Прежде чем доверять устройство своему питомцу, проведите полный цикл проверок.

  1. Загрузка и подключение. Загрузите скетч, откройте Монитор порта. Убедитесь, что ESP32 подключилась к Wi-Fi и вывела свой IP-адрес.
  2. Веб-интерфейс. Введите этот IP-адрес в браузере. Должна открыться страница управления.
  3. Ручное кормление. Нажмите кнопку «Накормить сейчас!». Сервопривод должен отработать цикл поворота.
  4. Проверка расписания. Установите время на 1-2 минуты вперед от текущего. Дождитесь срабатывания. Помните о нашей проверке на lastFeedDay — в течение одного дня повторного срабатывания не будет.
  5. Стресс-тест. Отключите и снова подключите питание. Устройство должно переподключиться к Wi-Fi и продолжить работу. Время сбросится на отсчёт от включения, поэтому важно реализовать NTP для реального использования.
  6. Безопасность. Убедитесь, что все провода надёжно изолированы, сервопривод закреплён, а конструкция устойчива к «исследованиям» любопытного кота.

Куда развивать проект: идеи для улучшений

Наша кормушка уже функциональна, но предела совершенству нет!

  • Точное время через NTP. Как уже говорилось, это must-have для финальной версии.
  • Интеграция с Home Assistant. Через компонент ESPHome или собственную интеграцию по MQTT вы сможете видеть статус кормушки и управлять ею из общего интерфейса умного дома, создавать сложные сценарии (например, не кормить, если кот уже у миски).
  • Датчик уровня корма. Ультразвуковой датчик HC-SR04, направленный в контейнер, сможет оповещать вас о необходимости дозаправки.
  • Несколько кормлений в день. Достаточно усложнить логику, храня в памяти массив с несколькими парами «час-минута».
  • Резервное питание. На случай отключения электрительства можно добавить Power Bank.

Если тема интеграции с Home Assistant вас заинтересовала, рекомендую почитать мои статьи про HACS: лучшие сторонние интеграции и Node-RED + Home Assistant: Визуальная автоматизация. А чтобы устройство работало от батарей, пригодится материал про ESP32 Deep Sleep.

Заключение

Мы с вами прошли весь путь: от идеи и пары электронных компонентов до работающего умного устройства. ESP32 в очередной раз доказала свою универсальность, позволив нам не только управлять железом, но и поднять полноценный веб-сервер для управления. Такая кормушка — это не просто гаджет, это реальная помощь, которая делает жизнь вашего питомца, а значит и вашу, немного комфортнее и предсказуемее.

Самое приятное в DIY-проектах — возможность их модифицировать. Начните с этой базы, а потом добавляйте именно те функции, которые нужны вам. Удачи в сборке, и пусть ваш кот будет сыт и доволен!

Понравилась статья?

Поставьте лайк и сохраните полезный материал в закладки.

Комментарии (0)
Добавить комментарий
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.
Мониторинг качества воздуха: CO2, PM2.5 и VOC своими руками на ESP32
DIY проекты
31.03.2026
Мониторинг качества воздуха: CO2, PM2.5 и VOC своими руками на ESP32
Соберите систему мониторинга качества воздуха своими руками на ESP32. Измеряйте CO2, PM2.5 и VOC. Подробное руководство: схема, код, интеграция с Home Assistant.
DIY умный звонок с камерой на ESP32-CAM и Home Assistant
DIY проекты
31.03.2026
DIY умный звонок с камерой на ESP32-CAM и Home Assistant
Собираем умный дверной звонок на ESP32-CAM с камерой, уведомлениями и интеграцией в Home Assistant.
Умный аквариум своими руками: автодолив, контроль температуры и освещение по расписанию
DIY проекты
31.03.2026
Умный аквариум своими руками: автодолив, контроль температуры и освещение по расписанию
Собираем умный аквариум с автодоливом, контролем температуры и освещением по расписанию.
Умная теплица на ESP32 и Raspberry Pi: автоматизация от А до Я
DIY проекты
31.03.2026
Умная теплица на ESP32 и Raspberry Pi: автоматизация от А до Я
Собираем умную теплицу на ESP32 и Raspberry Pi: датчики, полив, освещение, автоматика и удалённый контроль.
Как печатать резьбу на 3D-принтере: зазоры, допуски и настройки для болтов и гаек
DIY проекты
09.09.2026
Как печатать резьбу на 3D-принтере: зазоры, допуски и настройки для болтов и гаек
Практическое руководство по печати резьбы на FDM-принтере: расчёт зазоров и допусков для PLA, PETG и ABS, настройки слайсера, калибровочная печать и типичные ошибки.
Домашняя метеостанция с графиками: ESP32 + InfluxDB + Grafana
DIY проекты
31.03.2026
Домашняя метеостанция с графиками: ESP32 + InfluxDB + Grafana
Создаём домашнюю метеостанцию на ESP32 с хранением данных в InfluxDB и наглядными графиками в Grafana.

Войдите в аккаунт, чтобы пользоваться закладками, сообщениями и другими возможностями сайта.