Автоматические кормушки для домашних животных

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

Во всех кормушках в электронном блоке будут часы реального времени, а потому они смогут работать по расписанию, или просто выдерживать заданный интервал времени между кормлениями, а перебои с питанием не повлияют на график. Время кормления задаётся программно. Это не самый удобный способ, но он позволяет сделать схему простой и дешёвой. Хочешь добавить удобные органы управления смотри как сделать автоматическую кормушку для рыбок.

Обзор кормушек на Arduino

Вариант №1: Кормушка из Pringles

Что потребуется

Отдельно придётся раздобыть:

  • Банку от чипсов Pringles
  • Консервную банку на 500мл
  • Двойную миску подходящего размера
  • Пару шурупов по металлу 20мм
  • Пластиковую бутылку

Как собрать

Электроника

  1. Установите плату Iskra Nano Pro на макетную плату.
  2. Подключите с помощью перемычек линии питания 5V GND к макетной плате и соедините линии питания макетной платы как на картинке.
  3. Установите на макетную плату модуль часов реального времени.
  4. Подключите перемычками питание модуля и линии передачи данных как на картинке.
  5. Вставьте в макетную плату длинные штырьковые соединители.
  6. Возьмите сервопривод и подключите его к штырьковому соединителю.
  7. Далее с помощью перемычек подсоедините контакты штырькового соединителя к питанию и контакту А0
  8. Возьмите Гнездо питания и прикрутите к его клеммнику длинные перемычки.
  9. Провод от контакта - гнезда питания вставьте в синюю линию контактов макетной платы. А контакт + соедините с контакто VIN на Iskra Nano Pro.

Механика

  1. Первым делом проделаем отверстие в дне банки Pringles. И вырежем сектор.
  2. В центре дна закрепим качалку сервопривода.
  3. Возьмём консервную банку и сделаем на дне, такой же вырез как и в банке Pringles. Попутно сделаем отверстия для крепления сервопривода.
  4. Прорежем отверстие для выхода корма. Вставим в отверстие под углом горлышко от бутылки. Прикрутим Сервопривод винтами M3.
  5. Теперь поставим банки одна на другую. Наденем качалку на вал сервопривода, и закрутим винт крепления.
  6. В двойной миске просверлим 5 отверстий.
  7. В боковое отверстие вставим гнездо питания, а на остальные 4, углами обопрём макетную плату.
  8. Накроем макетную плату конструкцией из банок. Не забываем подключить провод от сервы к макетной плате.
  9. Саморезом прикрутим миску к банке.

Кормушка готова. Засыпать в неё можно сухой корм. Порция корма будет регулироваться длительностью открытия шлюза.

Скетч

Прошейте контроллер скетчем через 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. Установите плату Iskra Nano Pro на макетную плату.
  2. Подключите с помощью перемычек линии питания 5V GND к макетной плате и соедините линии питания макетной платы как на картинке.
  3. Установите на макетную плату модуль часов реального времени.
  4. Подключите перемычками питание модуля и линии передачи данных как на картинке.
  5. Вставьте в макетную плату длинные штырьковые соединители.
  6. Возьмите сервопривод и подключите его к штырьковому соединителю.
  7. Далее с помощью перемычек подсоедините контакты штырькового соединителя к питанию и контакту А0
  8. Возьмите Гнездо питания и прикрутите к его клеммнику длинные перемычки.
  9. Провод от контакта - гнезда питания вставьте в синюю линию контактов макетной платы. А контакт + соедините с контакто VIN на Iskra Nano Pro.

Механика

Скачайте и распечатайте детали. Дальше по этим разверткам можно резать картон.

  1. Приклейте к картону и вырежьте детали.
  2. Закрепите сервопривод с помощью стяжек как на фото.
  3. Возьмите самую большую деталь и продавите обратной стороной ножа по линиям сгиба.
  4. Согните деталь с клапаном и вставьте в неё откосы, теперь можно вставлять деталь с клапаном и откосами в основание.
  5. Собрав конструкцию прошейте место соединения концов стяжками.
  6. Собранную электронику приклейте двухсторонним скотчем к детали дна.
  7. В основании прорежьте отверстие, и вставьте гнездо питания в отверстие.
  8. Накрываем конструкцию дном и продеваем картонные замки. Не забываем подключить сервопривод и гнездо питания к макетной плате.
  9. Результат.

Кормушка собрана. И готова к использованию. Откинув верхнюю крышку можно засыпать корм и включить питание.

Скетч

Прошейте контроллер скетчем через 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: Кормушка из пластика

Что потребуется

Как собрать

Электроника

  1. Установите плату Iskra Nano Pro на макетную плату.
  2. Подключите с помощью перемычек линии питания 5V GND к макетной плате и соедините линии питания макетной платы как на картинке.
  3. Установите на макетную плату модуль часов реального времени.
  4. Подключите перемычками питание модуля и линии передачи данных как на картинке.
  5. Вставьте в макетную плату длинные штырьковые соединители.
  6. Возьмите сервопривод и подключите его к штырьковому соединителю.
  7. Далее с помощью перемычек подсоедините контакты штырькового соединителя к питанию и контакту А0.
  8. Возьмите Гнездо питания и прикрутите к его клеммнику длинные перемычки.
  9. Провод от контакта - гнезда питания вставьте в синюю линию контактов макетной платы. А контакт + соедините с контакто VIN на Iskra Nano Pro.
  10. Добавим Troyka Pad и подключим шлейф из комплекта к его контактам S V G.
  11. Подключим провода как на схеме. Сигнальный жёлтый провод соединим с контактом 4 Iskra Nano Pro.
  12. Установим в Troyka Pad Troyka кнопку. Контакты кнопки, должны совпадать с контактами S V G на TroykaPad.
  13. Возьмём 4 Аналоговых датчика линии и подключим к ним провода из комплекта.
  14. Соединим первый датчик с макетной платой. Жёлтый провод датчика соединим с контактом A1 на Iskra Nano Pro.
  15. Соединим второй датчик с макетной платой. Жёлтый провод датчика соединим с контактом A2 на Iskra Nano Pro.
  16. Соединим третий датчик с макетной платой. Жёлтый провод датчика соединим с контактом A3 на Iskra Nano Pro.
  17. Соединим четвёртый датчик с макетной платой. Жёлтый провод датчика соединим с контактом A6 на Iskra Nano Pro.

Механика

В архиве вы найдёте файлы в формате DWG и сможете открыть их любой CAD-программой. Или сразу заказать резку пластика. Чертежи Кормушки №3

  1. К детали крышки прикрутите качалку сервопривода.
  2. Стяните 2 пластины крепления мисок винтами М3.
  3. Прикрутите сервопривод в центр конструкции.
  4. Нарежьте шпильку М3 на 12 частей длинной 75мм и прикрутите к пластинам. Закрепите на шпильках аналоговые датчики линии как на фото.
  5. Вставьте пластины перегородки.
  6. Закрепите макетную плату с электроникой на основании. Соедините провода с датчиками линии, и сервоприводом.
  7. Накройте конструкцию пластиной основанием и закрутите гайки.
  8. Переверните кормушку и вставьте миски в посадочные места.
  9. Приклейте на крышку кусочек белой бумаги или белую наклейку.
  10. Соедините крышку с основание.

Кормушка готова. Нажимая на кнопку можно принудительно повернуть механизм и открыть доступ к новой миске. Это необходимо при загрузке корма в миски, а так же при чистке кормушки без её разборки.

Скетч

Прошейте контроллер скетчем через 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, чтобы отправлять фотографии довольного питомца прямо в Инстаграм.

Часто задаваемые вопросы

Где скачать необходимые библиотеки и как их установить?