Автоматические кормушки для домашних животных
Кормить домашнее животное можно поручить автоматике. Тогда задерживаясь на работе ты не будешь беспокоиться, что питомец дома голоден. И утром животное не будет устраивать гонки по дому с пустой миской, в надежде что его услышат и покормят. У меня есть три варианта кормушки, отличающихся материалами, конструкцией и сложностью изготовления. Так что есть из чего выбрать.
Во всех кормушках в электронном блоке будут часы реального времени, а потому они смогут работать по расписанию, или просто выдерживать заданный интервал времени между кормлениями, а перебои с питанием не повлияют на график. Время кормления задаётся программно. Это не самый удобный способ, но он позволяет сделать схему простой и дешёвой. Хочешь добавить удобные органы управления смотри как сделать автоматическую кормушку для рыбок.
- Платформы: Arduino Nano, Iskra Nano Pro
- Язык программирования: Arduino (C++)
Обзор кормушек на Arduino
Вариант №1: Кормушка из Pringles
Что потребуется
- Полный сет электронных компонентов проекта. В сет входят:
Отдельно придётся раздобыть:
- Банку от чипсов Pringles
- Консервную банку на 500мл
- Двойную миску подходящего размера
- Пару шурупов по металлу 20мм
- Пластиковую бутылку
Как собрать
Электроника
- Установите плату
Iskra Nano Pro
на макетную плату. - Подключите с помощью
перемычек
линии питания5V
GND
к макетной плате и соедините линии питания макетной платы как на картинке. - Установите на макетную плату
модуль часов реального времени
. - Подключите перемычками питание модуля и линии передачи данных как на картинке.
- Вставьте в макетную плату
длинные штырьковые соединители
. - Возьмите
сервопривод
и подключите его к штырьковому соединителю. - Далее с помощью перемычек подсоедините контакты штырькового соединителя к питанию и контакту
А0
- Возьмите
Гнездо питания
и прикрутите к его клеммнику длинные перемычки. - Провод от контакта
-
гнезда питания вставьте в синюю линию контактов макетной платы. А контакт+
соедините с контактоVIN
наIskra Nano Pro
.
Механика
- Первым делом проделаем отверстие в дне банки Pringles. И вырежем сектор.
- В центре дна закрепим качалку сервопривода.
- Возьмём консервную банку и сделаем на дне, такой же вырез как и в банке Pringles. Попутно сделаем отверстия для крепления сервопривода.
- Прорежем отверстие для выхода корма. Вставим в отверстие под углом горлышко от бутылки. Прикрутим Сервопривод винтами M3.
- Теперь поставим банки одна на другую. Наденем качалку на вал сервопривода, и закрутим винт крепления.
- В двойной миске просверлим 5 отверстий.
- В боковое отверстие вставим гнездо питания, а на остальные 4, углами обопрём макетную плату.
- Накроем макетную плату конструкцией из банок. Не забываем подключить провод от сервы к макетной плате.
- Саморезом прикрутим миску к банке.
Кормушка готова. Засыпать в неё можно сухой корм. Порция корма будет регулироваться длительностью открытия шлюза.
Скетч
Прошейте контроллер скетчем через Arduino IDE.
- animal-fider-1.ino
#include <Wire.h> #include <TroykaRTC.h> #include <Servo.h> // Время первого кормления #define FEED_HOUR_1 6 #define FEED_MINUTE_1 0 #define FEED_SECOND_1 0 // Время второго кормления #define FEED_HOUR_2 10 #define FEED_MINUTE_2 0 #define FEED_SECOND_2 0 // Время третьего кормления #define FEED_HOUR_3 15 #define FEED_MINUTE_3 0 #define FEED_SECOND_3 0 // Время четвертого кормления #define FEED_HOUR_4 20 #define FEED_MINUTE_4 0 #define FEED_SECOND_4 0 // Время пятого кормления #define FEED_HOUR_5 24 #define FEED_MINUTE_5 0 #define FEED_SECOND_5 0 #define SERVO_PIN A0 // Пин к которому подключается сервопривод // Флаг "Уже покормили" boolean flag = true; RTC clock; Servo servo; void setup() { // Инициализируем часы clock.begin(); servo.attach(SERVO_PIN); servo.write(180); // Устанавливаем время clock.set(__TIMESTAMP__); } void loop() { clock.read(); //Проверяем не пришло ли время покормить животное if (((clock.getHour() == FEED_HOUR_1) && (clock.getMinute() == FEED_MINUTE_1) && (clock.getSecond() == FEED_SECOND_1)) || ((clock.getHour() == FEED_HOUR_2) && (clock.getMinute() == FEED_MINUTE_2) && (clock.getSecond() == FEED_SECOND_2)) || ((clock.getHour() == FEED_HOUR_3) && (clock.getMinute() == FEED_MINUTE_3) && (clock.getSecond() == FEED_SECOND_3)) || ((clock.getHour() == FEED_HOUR_4) && (clock.getMinute() == FEED_MINUTE_4) && (clock.getSecond() == FEED_SECOND_4)) || ((clock.getHour() == FEED_HOUR_5) && (clock.getMinute() == FEED_MINUTE_5) && (clock.getSecond() == FEED_SECOND_5))) { // Если время пришло устанавливаем флаг "Уже покормили" flag == false; // Открываем заслонку servo.write(90); // Время открытия заслонки delay(500); servo.write(180); } else { flag == true; long timeMs = millis(); while (millis() - timeMs < 10) {} servo.write(180); } }
Вариант №2: Кормушка из картона
Что потребуется
- Полный сет электронных компонентов проекта. В сет входят:
Отдельно придётся раздобыть:
- Картон размером 1×2м
- Стяжки строительные
Как собрать
Электроника
- Установите плату
Iskra Nano Pro
на макетную плату. - Подключите с помощью
перемычек
линии питания5V
GND
к макетной плате и соедините линии питания макетной платы как на картинке. - Установите на макетную плату
модуль часов реального времени
. - Подключите перемычками питание модуля и линии передачи данных как на картинке.
- Вставьте в макетную плату
длинные штырьковые соединители
. - Возьмите
сервопривод
и подключите его к штырьковому соединителю. - Далее с помощью перемычек подсоедините контакты штырькового соединителя к питанию и контакту
А0
- Возьмите
Гнездо питания
и прикрутите к его клеммнику длинные перемычки. - Провод от контакта
-
гнезда питания вставьте в синюю линию контактов макетной платы. А контакт+
соедините с контактоVIN
наIskra Nano Pro
.
Механика
Скачайте и распечатайте детали. Дальше по этим разверткам можно резать картон.
- Приклейте к картону и вырежьте детали.
- Закрепите сервопривод с помощью стяжек как на фото.
- Возьмите самую большую деталь и продавите обратной стороной ножа по линиям сгиба.
- Согните деталь с клапаном и вставьте в неё откосы, теперь можно вставлять деталь с клапаном и откосами в основание.
- Собрав конструкцию прошейте место соединения концов стяжками.
- Собранную электронику приклейте двухсторонним скотчем к детали дна.
- В основании прорежьте отверстие, и вставьте гнездо питания в отверстие.
- Накрываем конструкцию дном и продеваем картонные замки. Не забываем подключить сервопривод и гнездо питания к макетной плате.
- Результат.
Кормушка собрана. И готова к использованию. Откинув верхнюю крышку можно засыпать корм и включить питание.
Скетч
Прошейте контроллер скетчем через Arduino IDE.
- animal-fider-2.ino
// Подключаем библиотеки для работы #include <Wire.h> #include <TroykaRTC.h> #include <Servo.h> // Время первого кормления #define FEED_HOUR_1 9 #define FEED_MINUTE_1 0 #define FEED_SECOND_1 0 // Время второго кормления #define FEED_HOUR_2 12 #define FEED_MINUTE_2 0 #define FEED_SECOND_2 0 // Время третьего кормления #define FEED_HOUR_3 19 #define FEED_MINUTE_3 0 #define FEED_SECOND_3 0 // Пин к которому подключается сервопривод #define SERVO_PIN A0 // Флаг "Уже покормили" boolean flag = true; RTC clock; Servo servo; void setup() { // Инициализируем часы clock.begin(); servo.attach(SERVO_PIN); servo.write(90); // Устанавливаем время clock.set(__TIMESTAMP__); } void loop() { clock.read(); //Проверяем не пришло ли время покормить животное if (((clock.getHour() == FEED_HOUR_1) && (clock.getMinute() == FEED_MINUTE_1) && (clock.getSecond() == FEED_SECOND_1)) || ((clock.getHour() == FEED_HOUR_2) && (clock.getMinute() == FEED_MINUTE_2) && (clock.getSecond() == FEED_SECOND_2)) || ((clock.getHour() == FEED_HOUR_3) && (clock.getMinute() == FEED_MINUTE_3)&& (clock.getSecond() == FEED_SECOND_3))) { // Если время пришло устанавливаем флаг "Уже покормили" flag == false; // Открываем заслонку servo.write(0); // Время открытия заслонки delay(500); servo.write(90); } else { flag == true; long timeMs = millis(); while (millis() - timeMs < 10) {} servo.write(90); } }
Вариант №3: Кормушка из пластика
Что потребуется
- Полный сет электронных компонентов проекта. В сет входят:
Отдельно придётся раздобыть:
- Пластик ABS или Оргстекло 1х2м
- Шпилька М3х1м
- Винты М3х20мм
- гайки М3
Как собрать
Электроника
- Установите плату
Iskra Nano Pro
на макетную плату. - Подключите с помощью
перемычек
линии питания5V
GND
к макетной плате и соедините линии питания макетной платы как на картинке. - Установите на макетную плату
модуль часов реального времени
. - Подключите перемычками питание модуля и линии передачи данных как на картинке.
- Вставьте в макетную плату
длинные штырьковые соединители
. - Возьмите
сервопривод
и подключите его к штырьковому соединителю. - Далее с помощью перемычек подсоедините контакты штырькового соединителя к питанию и контакту
А0
. - Возьмите
Гнездо питания
и прикрутите к его клеммнику длинные перемычки. - Провод от контакта
-
гнезда питания вставьте в синюю линию контактов макетной платы. А контакт+
соедините с контактоVIN
наIskra Nano Pro
. - Добавим
Troyka Pad
и подключим шлейф из комплекта к его контактамS
V
G
. - Подключим провода как на схеме. Сигнальный жёлтый провод соединим с контактом
4
Iskra Nano Pro
. - Установим в
Troyka Pad
Troyka кнопку
. Контакты кнопки, должны совпадать с контактамиS
V
G
наTroykaPad
. - Возьмём 4
Аналоговых датчика линии
и подключим к ним провода из комплекта. - Соединим первый датчик с макетной платой. Жёлтый провод датчика соединим с контактом
A1
наIskra Nano Pro
. - Соединим второй датчик с макетной платой. Жёлтый провод датчика соединим с контактом
A2
наIskra Nano Pro
. - Соединим третий датчик с макетной платой. Жёлтый провод датчика соединим с контактом
A3
наIskra Nano Pro
. - Соединим четвёртый датчик с макетной платой. Жёлтый провод датчика соединим с контактом
A6
наIskra Nano Pro
.
Механика
В архиве вы найдёте файлы в формате DWG и сможете открыть их любой CAD-программой. Или сразу заказать резку пластика. Чертежи Кормушки №3
- К детали крышки прикрутите качалку сервопривода.
- Стяните 2 пластины крепления мисок винтами М3.
- Прикрутите сервопривод в центр конструкции.
- Нарежьте шпильку М3 на 12 частей длинной 75мм и прикрутите к пластинам. Закрепите на шпильках аналоговые датчики линии как на фото.
- Вставьте пластины перегородки.
- Закрепите макетную плату с электроникой на основании. Соедините провода с датчиками линии, и сервоприводом.
- Накройте конструкцию пластиной основанием и закрутите гайки.
- Переверните кормушку и вставьте миски в посадочные места.
- Приклейте на крышку кусочек белой бумаги или белую наклейку.
- Соедините крышку с основание.
Кормушка готова. Нажимая на кнопку можно принудительно повернуть механизм и открыть доступ к новой миске. Это необходимо при загрузке корма в миски, а так же при чистке кормушки без её разборки.
Скетч
Прошейте контроллер скетчем через Arduino IDE.
- animal-fider-3.ino
// Подключаем библиотеки для работы #include <Wire.h> #include <TroykaRTC.h> #include <Servo.h> // Время первого кормления #define FEED_HOUR_1 9 #define FEED_MINUTE_1 0 #define FEED_SECOND_1 0 // Время второго кормления #define FEED_HOUR_2 12 #define FEED_MINUTE_2 0 #define FEED_SECOND_2 0 // Время третьего кормления #define FEED_HOUR_3 19 #define FEED_MINUTE_3 0 #define FEED_SECOND_3 0 // Пин к которому подключается кнопка принудительного поворота #define BUTTON_PIN 4 // Пин к которому подключается сервопривод #define SERVO_PIN A0 // Пины к которым подключены датчики линии #define LINE_SENSOR_1 A1 #define LINE_SENSOR_2 A2 #define LINE_SENSOR_3 A3 #define LINE_SENSOR_4 A6 // Флаг "Уже покормили" boolean flag = true; RTC clock; Servo servo; void setup() { // Инициализируем часы clock.begin(); servo.attach(SERVO_PIN); servo.write(90); // Устанавливаем время clock.set(__TIMESTAMP__); } void loop() { clock.read(); //Проверяем не пришло ли время покормить животное if (((clock.getHour() == FEED_HOUR_1) && (clock.getMinute() == FEED_MINUTE_1) && (clock.getSecond() == FEED_SECOND_1)) || ((clock.getHour() == FEED_HOUR_2) && (clock.getMinute() == FEED_MINUTE_2) && (clock.getSecond() == FEED_SECOND_2)) || ((clock.getHour() == FEED_HOUR_3) && (clock.getMinute() == FEED_MINUTE_3) && (clock.getSecond() == FEED_SECOND_3)) || (flag && !digitalRead(BUTTON_PIN))) { // Если время пришло устанавливаем флаг "Уже покормили" flag == false; // Включаем сервопривод servo.write(88); delay(50); while ((analogRead(LINE_SENSOR_1) > 100) && (analogRead(LINE_SENSOR_2) > 100) && (analogRead(LINE_SENSOR_3) > 100) && (analogRead(LINE_SENSOR_4) > 100)) { // Ожидаем пока не срадобает датчик поворота } // Как только сработал датчик что сектор над миской останавливаем вращение сервы servo.write(90); } else { flag == true; long timeMs = millis(); while (millis() - timeMs < 10) {} servo.write(90); } }
Что дальше?
Подключать устройство к компьютеру, чтобы изменить график кормления крайне не удобно. Добавьте устройству четырёхкнопочную клавиатуру и индикатор — как в проекте с кормушкой для рыб. Или используйте Raspberry Pi Zero, чтобы отправлять фотографии довольного питомца прямо в Инстаграм.
Часто задаваемые вопросы
Где скачать необходимые библиотеки и как их установить?