Аппарат кормления котов управляемый, пассивный АКК-УП-1

в 19:55, , рубрики: Без рубрики

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

Итак, появление Аппарата кормления котов управляемого, пассивного АКК-УП-1 вызвано насущной необходимостью. Которая, между прочим, проявляется в исключительно капризном характере одного из хвостатых, проживающих с нами в одном доме. По ряду причин субъективного и объективного характера упомянутая персона взяла привычку требовать еды по нескольку раз за ночь (причем ест ну совсем крошку, как издевается). В противном же случае не менее противно стонет и играет на батарее.

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

Так вот, кот стонет, играет на батарее, а сил вставать и кормить нет. Что делать? Правильно: нажать на волшебную красную кнопку.

Вводные

В принципе, нам повезло, что диета одного из котов позволяет ему прикладываться и к чужим мискам. Главное, чтобы у него не было неограниченного доступа. Это обстоятельство серьезно упростило конструкцию кормушки: нет необходимости распознавать котов.

А так как иногда капризный кот имеет обыкновение требовать еды буквально за четверть часа до подъема — причем не факт, что он прикоснется к предложенной еде — кормушка должна была хотя бы отвлекать его на эти самые 15 минут, чтобы можно было спокойно их «доспать».

Т.е. нужен был агрегат из категории «хлеба и зрелищ», только для котов.

Мне повезло — под руками была пачка купленных давным-давно, и довольно редко используемых автоматических кормушек Feed-Ex. Эти кормушки представляют из себя разделенную на четыре сектора миску для корма. Внутри также моторчик и собственный контроллер, который обеспечивает не более 4 кормлений по заранее заданному расписанию.

. такая примерно кормушка (это уже модернизированная)
image

Кормление выполняется путем поворота сектора с кормом к специальному вырезу в верхней крышке кормушки. И хотя это неважно: первый (а точнее — последний) сектор до начала первого по графику кормления закрыт специальной сдвижной шторкой, которая отъезжает в начале этого самого первого кормления. Шторка съезжает всего один раз, и не возвращается обратно — при «перезаправке» кормушки ее необходимо вернуть в исходное положение вручную.

Такова заводская логика.

Также под руками были: несколько радиореле и вполне себе работающий центральный контроллер, который мог управлять в том числе и этими самыми реле.

Я сложил первое и второе, и заодно решил не городить огород в виде отдельного контроллера кормушки. Отсюда родилась концепция. Примитивная, но очень простая в исполнении и, как показала практика, достаточно эффективная:

1. Заполняем секторы кормушки через один.
2. В цепь питания кормушки добавляем радиореле, параллельно ее контроллеру.
3. Добавляем в центральный контроллер управляющий код радиореле.
4. По команде контроллер включает реле на интервал времени, достаточный для поворота кормушки на один сектор.

Таким образом, каждый поворот сектора или открывает корм, или закрывает его.

. вот так заполняем сектора кормом
image

Назначение АКК-УП-1

Основная функция кормушки — кормление котов (или любых других небольших животных) сухим кормом по команде с пульта, через интернет или по заранее заданному расписанию без непосредственного (подай-принеси) участия человека.

Количество кормлений не ограничено и зависит только от остатка корма в секциях кормушки.

Дополнительная функция кормушки — переключение внимания кота с банального хулиганства и скандального поведения на что-нибудь более конструктивное. Например, пойти посмотреть что там такое на кухне жужжит.

Функции АКК-УП-1

Кормушка:

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

2. В течение заданного времени обеспечивает доступ животных к корму по команде через интернет

3. Предотвращает доступ к корму во все остальное время

4. Обеспечивает количество кормлений, ограниченное только емкостью для корма

Алгорим работы

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

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

При управлении пультом ДУ

1. При получении команды от пульта ДУ центральный контроллер выдает команду на включение кормушки на интервал времени, необходимый для поворота на один сектор (это время можно просто измерить секундомером).

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

3. После паузы контроллер снова выполняет включение кормушки для поворота на сектор. Таким образом корм «прячется».

4. Если повторно нажать на кнопку пульта до окончания паузы, контроллер немедленно выдаст команду на поворот кормушки на сектор, при этом поворот по таймеру отменяется. Это процедура «ручного» закрытия на случай, если кто-то находится рядом с кормушкой и видит, что питается нелегитимный кот.

При управлении через интернет

1. При управлении через интернет доступны три основные команды: начать вращение, прекратить вращение и выполнить поворот на сектор.

2. Также доступны три сервисные команды: увеличить время вращения на 0.5 сек, уменьшить время вращения на 0.5 сек и привести все параметры кормушки в исходное состояние.

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

Такую подгонку необходимо периодически повторять, так как из-за плавающей точности таймера в Arduino и далеко не прецизионной механики кормушки, границы сектора и крышки постепенно «уплывают» друг от друга.

Это, кстати, главный минус моей поделки.

Железо

Для сборки кормушки по моему варианту понадобятся (ссылки приведены для примера):

1. Кормушка Feed-Ex или аналогичная.
2. Обучаемое радиореле 433 МГц 12В или аналогичное, совместимое с библиотекой RC-Switch. А лучше — сразу на 5В.
3. Если исходное радиореле на 12В, то реле на 5В.
4. Если, как и мне, не повезет с приемником в радиореле, то — приемник 433 МГц с амплитудной модуляцией (ASK/OOK), по ссылке — комплект из приемника и передатчика.
5. Источник питания 5В (по вкусу, кормушка и с батарейками может какое-то время прожить).
6. Провода и разъемы питания (разъемы пригодятся, если захотите внешнее питание).

ЕСЛИ У ВАС РЕЛЕ НА 12В ИЛИ НЕУДАЧНЫЙ ПРИЕМНИК РЕЛЕ

Если вам не повезло с приемником в радиореле

Основные симптомы: вы его (реле) пытаетесь переключить, а оно не переключается. Или делает это на расстоянии сантиметров в десять от передатчика, и не дальше.

У меня реле было несколько, и, попробовав одно, я подумал, что бракованный экземпляр. Но когда второе повело себя точно так же, стало ясно, что что-то не так в Китайской империи. Один грамотный товарищ предположил, что мне прислали реле на 315 МГц, а вблизи передатчика 433 МГц оно переключалось по принципу «ветром надуло». В целом, я с ним согласен, но проверить эту гипотезу на практике так и не удосужился.

Решение проблемы достаточно простое: по приемнику на плате реле довольно прозрачно видно, что там плюс, что земля, а что — выход данных. Собственно, к соответствующим местам (можно даже запаять вместо родного) припаиваем новый проверенный 433 МГц приемник. И все, проблема решена.

Если у вас реле на 12В

Кормушка питается от 6В, а реле у нас на 12В. Питания кормушки слишком мало для реле, а питания реле слишком много уже для кормушки. Что будем делать?

Сначала — вдумчиво смотреть на плату реле. Я вот обнаружил прямо на плюсовом входе питания какую-то непонятную деталь, которая в итоге оказалась диодом, защищающим схему от обратной полярности. И на этом же диоде происходит довольно заметное падение напряжения. Поэтому пообещал себе, что подключать буду строго плюс к плюсу, а минус к минусу, выпаял диод и перемкнул его посадочные места.

Стало немного веселее — в смысле индикатор питания реле загорелся ярче, но сути это не поменяло: логика реле работала, а само реле не переключалось. Все таки слишком мало напряжение.

Эту проблему я решил кардинально: поменял реле 12В на аналогичное по размерам и разводке контактов реле с напряжением катушки 5В. И все заработало. Отсюда схема:

1. Если в вашем реле стоит такой же диод — можно выпаять и перемкнуть.
2. Оригинальное реле на 12В необходимо заменить на реле 5В.

. на этой картинке отлично видно реле
image

. а вот на этой — диод: левее площадки реле, между электролитическими конденсаторами
image

. здесь уже перемычка (сиреневая) вместо диода, новое реле и новый приемник на проводочках
image

Итак, у вас есть рабочее радиореле на 433 МГц и 5В. Тогда процедура сборки простая, но немного муторная на мой вкус.

1. Запрограммируем реле на наши команды

Для этого воспользуемся инструкцией к реле, собственным интеллектом, или, если ваше реле — как мое, то чем-то промежуточным между первыми двумя вариантами.

Назначение лампочек опознается элементарно: красный светодиод — питание, желтый — обучение, зеленый — срабатывание реле.

У реле три режима работы, которые переключаются джампером на плате:

1) Включено, пока нажата кнопка пульта (без перемычки)
2) Переключение состояний одной кнопкой пульта (одно нажатие — вкл, второе — выкл — и по кругу) (перемычка слева)
3) Переключение состояний двумя кнопками (одна кнопка включает, другая — выключает) (перемычка справа)

Для кормушки требуется перевести реле в третий режим, т.е. включение одной кнопкой пульта, а выключение — другой. Переключение режима необходимо выполнять при выключенном реле, иначе оно перестает понимать, что происходит.

. на картинке видно положение перемычки и приемник
image

Привязка к пульту (контроллеру) простая:

1) Нажимаем и удерживаем единственную кнопку программирования реле, пока не погаснет желтый светодиод.
2) Кратковременно нажимаем кнопку программирования реле
3) Нажимаем на пульте ДУ кнопку (отправляем команду через контроллер), к которой нужно привязать реле.

Во всех режимах достаточно нажать только одна кнопка пульта ДУ. Даже в третьем, потому что у контроллера реле жесткая логика: он “железно” вычисляет вторую управляющую комбинацию на основании великого китайского алгоритма.

Суть в том, что управляющая команда представляет собой некое число (например, 380242). При этом команда выключения на единицу меньше, чем команда включения (380241). В результате контроллер реле считает полученный код кодом включения и вычитает из него единицу для кода выключения.

Так как мы под пультом подразумеваем контроллер, то для тренировки реле можно воспользоваться простеньким скетчем:

СКЕТЧ

Здесь понадобится передатчик ASK/OOK 433 МГц (например, из этого комплекта), подключенный к 10 пину Arduino (или можете переназначить). Скетч передает одну и ту же команду с интервалом в 5 секунд, так что если не получится запрограммировать реле с первого раза — не беда. Просто снова переведите его в режим обучения (начиная с п. 1. инструкции по привязке) и подождите, пока реле примет и запомнит команду.

На всякий случай реле и передатчик лучше расположить рядом друг с другом.

#include <RCSwitch.h>

RCSwitch mySwitch = RCSwitch();

void setup() {
  
  // Transmitter is connected to Arduino Pin #10  
  mySwitch.enableTransmit(10);

  
}

void loop() {

  /* Same switch as above, but using decimal code */
  mySwitch.send(380242, 24);
  delay(5000);  

}

Когда реле готово, можно встраивать в кормушку.

2. Операция на кормушке

1. Сначала снимаем крышку, потом вынимаем миску, затем переворачиваем кормушку и выкручиваем все саморезы — и под ножками, и под батарейками. Защелок нет, поэтому если верхняя часть кормушки не снимается — значит, выкрутили не все саморезы.

2. Если вы хотите сохранить оригинальную функциональность кормушки, то понадобится диод типа 1N4007 (если вы выпаяли диод из радиореле — он подойдет). Если не хотите — можете сразу отпаять контроллер от питания и кормушки, только запомните полярность подключения проводов.

3. От батареек кормушки и от ее контроллера к мотору идут два провода: черный — минус, красный — плюс. При этом плюсовой провод от батарей идет на выключатель питания.

4. Подключаем к питанию реле минус от батарейного отсека и плюс после выключателя питания. То есть так, чтобы реле включалось одновременно с включением кормушки.

5. Плюс от питания реле также коммутируем на один из нормально разомкнутых контактов реле (NO или COM). Второй контакт (NO или COM соответственно) подключаем к мотору, предварительно отпаяв от него «родной» плюсовой провод контроллера.

. коммутация реле
image

6. Плюсовой провод от контроллера припаиваем к плюсовому же контакту мотора через диод. По моей задумке эта хитрость предотвратит попадание напряжения от реле на выход контроллера. Важно это или нет — не знаю, но на всякий случай сделал так. Минусовой провод мотора не трогаем.

. подключение к мотору
image

В итоге должно получиться что-то вроде вот этого:

image

Видите — контроллер не пострадал.

7. По желанию ставим разъем внешнего питания, просто параллельно контактам батарейного отсека. Т.е. минус разъема — к минусу батарейного отсека, плюс — к плюсу.

В принципе, это неплохой вариант, так как скорость вращения мотора, а значит и время на поворот сектора не будет зависеть от разряда батарей, и кормушка дольше не требует калибровки.

8. Проверяем работу кормушки с помощью, например, того же скетча. Если включится — отлично. Можете поменять команду на команду выключения, и снова запустить скетч. Если выключится — еще лучше, значит все работает.

9. А если все работает — закрепляем плату реле и приемника (если она висит отдельно) в корпусе кормушки и собираем ее.

Вот так я проверял кормушку с пультом:

Волшебная красная кнопка

На роль этого девайса я взял обычную кнопку «Паника» от беспроводной китайской сигнализации. По сути это просто однокнопочный пульт ДУ. Можно использовать все, что у вас есть свободного из аналогичных устройств, совместимых с упомянутой выше библиотекой RC-Switch.

Это именно та кнопка, по команде с которой контроллер повернет кормушку на сектор, подождет 2.5 минуты, а потом повернет еще на сектор. Или закроет кормушку сразу, если кнопка нажата повторно до истечения таймаута кормления.

. большая красная кнопка
image

Для эксплуатации кнопки необходимо прочитать ее код, а сделать это проще простого. Нужно только загрузить в Arduino пример ReceiveDemo_Simple из комплекта RC-Switch, открыть терминал и нажать на кнопку пульта. Появившаяся числовая комбинация и есть код кнопки, который вы потом вставите в управляющий код.

С моей кнопкой, впрочем, возникла небольшая проблема. Ну или с приемником контроллера. Оказалось, что на кровати — практически предел дальности действия кнопки. Возможно, вам повезет больше, а я в итоге добавил в один из сервисных контроллеров (он на полпути между кнопкой и центральным контроллером) функцию ретранслятора команд. И все заработало, как часы.

Софт

Итак, у нас получилась кормушка. Не очень умная, но очень исполнительная: скажешь — крутиться, будет крутиться. Скажешь остановиться — остановится. С другой стороны, зачем нам умная? У нас есть центральный контроллер — пусть он и думает.

Алгоритм кормушки, описанный выше определен в программе контроллера (она в конце текста Контроллер центральный домашний, всемогущий КЦД-В-2-12, а искать функции кормушки удобно по слову feed) определяется следующими функциями и фрагментами кода:

void feedOn() { // включение вращения кормушки

  if (feedB == false) { // если кормушка не занята поворотом
    txSwitch(380242); // включаем поворот
    feedB = true;} // устанавливаем признак занятости, чтобы повторные нажатия кнопок пульта не портили картину
}

void feedOff() { // выключение вращения кормушки

  if (feedB == true) {
    txSwitch(380241);
    feedB = false;}
}

void feedAuto() { // поворот кормушки на один сектор, время поворота задано в переменной feedTimer
    feedOn();
    myTime.setTimeout(feedTimer, feedOff); // таймер (библиотека <a href="http://playground.arduino.cc/Code/SimpleTimer">SimpleTimer</a>) на выполнение процедуры feedOff через интервал времени feedTimer
}

void feedClose() { // закрытие кормушки поворотом на один сектор
  feedAuto(); // поворот на сектор
  turnIt = false; // снятие признака для определения повторного нажатия кнопки пульта
}

И одна из веток радиокоманд, посвященная реакции на кнопку пульта:

      case 15741424: // Нажата кнопка пульта кормушки
      mySwitch.disableReceive();
	  if (feedB == false) { // если кормушка не вращается
              tone(9, 400, 450); // звуковой сигнал о приеме команды с пульта - можно отпустить кнопку
		if (aCl == true) { // если включено автозакрытие
			if (turnIt == true) { // кнопка уже была нажата
				myTime.deleteTimer(feedID); // отключение таймера
				feedAuto(); // поворот сектора
				turnIt = false; // сброс признака повторного нажатия кнопки
			} else { // если кнопка нажата в первый раз
				feedAuto(); // поворот сектора
				feedID=myTime.setTimeout(150000+feedTimer, feedClose); // таймер на закрытие (150000 - время кормления, можно менять)
				turnIt = true; // установка признака повторного нажатия
				}
		} else {
			feedAuto();
			}
	  }
      mySwitch.enableReceive(0);
      break;
Вместо заключения

Честное слово, когда вот это все делаешь — выглядит не так уж и сложно. А вот как начинаю описывать — получается изложение, от которого разве что кровь в жилах не стынет.

Может показаться, что это довольно дурацкая конструкция — в чем-то так и есть. Может показаться, что периодически корректировать положение миски — мартышкин труд и можно было бы поставить внутрь контроллер с датчиком положения секторов. Впрочем, это уже не кажется — действительно можно, и вы можете это сделать.

Но по факту даже в такой реализации кормушка оказалась довольно удобной и полезной. И все это, повторюсь, реально работает. Да и котики не жалуются.

Если где-то ошибся — сигнализируйте, будем вместе исправлять!

Автор: spc

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js