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

Итак, кому интересен небольшой рассказ о конструкции кормушки, добро пожаловать под кат.
К сожалению, схема не предназначена для повторения. Так как собиралась из имеющихся деталей. Так, например, использовалась микросхема ATMEGA8535 купленная давно и уже не вспомню для чего. А вместо L293D можно было использовать более дешевый ULN2003. И, конечно же, потребуется переработка программы.
Конструкция состоит из поворотного контейнера, разделенного на восемь отсеков, что позволяет загрузить семь порций сухого корма. Программа позволяет установить четыре значения времени кормежки с возможностью выборочного отключения. Так же предусмотрены светодиоды для индикации количества оставшихся порций. Если в кормушке не остается корма – все светодиоды начинают мигать. Семисегментный 4-х разрядный индикатор с общим анодом отображает текущее время и используется для настройки. Так же предусмотрена функция переключения на резервное батарейное питание, переход в режим пониженного потребления при исчезновении напряжения питания в сети 220 В. Для начального обучения любимца перед кормежкой воспроизводится сигнал в динамик. Как впоследствии оказалось, в этом не было необходимости. И идея с резервным питанием, похоже, оказалась не совсем удачной, так как батарея «крона» обычно разряжается раньше времени, видимо, из-за каких-то паразитных токов. Более подробно так и не получилось изучить этот вопрос.
Фото кормушки в режиме ожидания:

Поворот контейнера осуществляется с помощью шагового двигателя из пяти дюймового флоппи дисковода (спасибо друзьям из общежития за то, что не выкинули).
Первая конструкция была горизонтальной, где контейнер просто поворачивался под отверстием и имел только четыре отсека. Но кошка очень быстро справилась с ней, так как шаговый двигатель не обеспечивал противодействия в режиме ожидания. После недели эксплуатации поступили замечания и кормушку принесли на доработку. После переделки в контейнере прибавилось еще четыре отсека для корма. А двигатель подключался через редуктор от CD-Rom. Всю механику делал отец, за что ему огромное спасибо.
Счетчик для часов был реализован на прерываниях по таймеру. Про управление шаговым двигателем и работу с индикатором писать не буду благо в интернете достаточно информации. Единственное отмечу, что при программировании индикатора требуется задать коды каждого символа, а так как индикаторы бывают разные, решил набросать вот такую программу для быстрого подбора кодов.

Исходники доступны, возможно, кому-нибудь пригодится.
Проект создан в CodeVisionAVR, но портировать в WinAVR, думаю, не составит труда. CodeVisionAVR позволяет легко производить начальную инициализацию контроллера с помощью графического интерфейса. Но все же лучше углубится в Datasheet контроллера. На остальную реализацию и то, как это не нужно делать, можно посмотреть в исходниках. Как нужно это делать я, как это часто бывает, узнал уже потом. Благо функционал не очень сложный и большой необходимости его изменять не возникает. Схему и плату рисовал в Proteus. В нем можно моделировать схемы из многих электронных компонентов. Есть необходимые инструменты, которых может не быть под рукой, например, осциллограф, очень помог при проверке алгоритмов работы шагового двигателя. Плата перерисовывалась на текстолит перманентным маркером.
Схема устройства достаточно простая.

Настройка производится с помощью трех кнопок — вверх ˄ вниз ˅ и ввод >. Была, так же, предусмотрена четвертая кнопка, но она так и не была использована. Короткое нажатие на кнопку > включает редактирование времени срабатывания, длинное – переводит кормушку в режим установки часов. Для заправки кормушки наклоняем ее, открываем крышку и закладываем корм. Далее можно сбросить состояние светодиодов (указывающих оставшиеся количество порций) кнопкой ˄. Кнопкой ˅ можно подстроить положение контейнера и вывести шаговые двигатель на рабочий режим, так как после включения первый такт зависит от начального положения ротора.
В целом, я доволен проделанной работой. Получил полезный опыт и результат оправдал ожидания. Всем желаю того же!
И, напоследок, небольшое видео.
Исходный код доступен на google code.
На все возникшие вопросы буду рада ответить.

Итак, кому интересен небольшой рассказ о конструкции кормушки, добро пожаловать под кат.
К сожалению, схема не предназначена для повторения. Так как собиралась из имеющихся деталей. Так, например, использовалась микросхема ATMEGA8535 купленная давно и уже не вспомню для чего. А вместо L293D можно было использовать более дешевый ULN2003. И, конечно же, потребуется переработка программы.
Что же получилось в итоге
Конструкция состоит из поворотного контейнера, разделенного на восемь отсеков, что позволяет загрузить семь порций сухого корма. Программа позволяет установить четыре значения времени кормежки с возможностью выборочного отключения. Так же предусмотрены светодиоды для индикации количества оставшихся порций. Если в кормушке не остается корма – все светодиоды начинают мигать. Семисегментный 4-х разрядный индикатор с общим анодом отображает текущее время и используется для настройки. Так же предусмотрена функция переключения на резервное батарейное питание, переход в режим пониженного потребления при исчезновении напряжения питания в сети 220 В. Для начального обучения любимца перед кормежкой воспроизводится сигнал в динамик. Как впоследствии оказалось, в этом не было необходимости. И идея с резервным питанием, похоже, оказалась не совсем удачной, так как батарея «крона» обычно разряжается раньше времени, видимо, из-за каких-то паразитных токов. Более подробно так и не получилось изучить этот вопрос.
Фото кормушки в режиме ожидания:

Технические детали
Поворот контейнера осуществляется с помощью шагового двигателя из пяти дюймового флоппи дисковода (спасибо друзьям из общежития за то, что не выкинули).
Первая конструкция была горизонтальной, где контейнер просто поворачивался под отверстием и имел только четыре отсека. Но кошка очень быстро справилась с ней, так как шаговый двигатель не обеспечивал противодействия в режиме ожидания. После недели эксплуатации поступили замечания и кормушку принесли на доработку. После переделки в контейнере прибавилось еще четыре отсека для корма. А двигатель подключался через редуктор от CD-Rom. Всю механику делал отец, за что ему огромное спасибо.
Еще немного фото
Редуктор:

Контейнер:

Индикация и управление:

Загрузка:

Во время эксплуатации:


Контейнер:

Индикация и управление:
Загрузка:

Во время эксплуатации:

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

Исходники доступны, возможно, кому-нибудь пригодится.
Проект создан в CodeVisionAVR, но портировать в WinAVR, думаю, не составит труда. CodeVisionAVR позволяет легко производить начальную инициализацию контроллера с помощью графического интерфейса. Но все же лучше углубится в Datasheet контроллера. На остальную реализацию и то, как это не нужно делать, можно посмотреть в исходниках. Как нужно это делать я, как это часто бывает, узнал уже потом. Благо функционал не очень сложный и большой необходимости его изменять не возникает. Схему и плату рисовал в Proteus. В нем можно моделировать схемы из многих электронных компонентов. Есть необходимые инструменты, которых может не быть под рукой, например, осциллограф, очень помог при проверке алгоритмов работы шагового двигателя. Плата перерисовывалась на текстолит перманентным маркером.
Схема устройства достаточно простая.

Немного об управлении
Настройка производится с помощью трех кнопок — вверх ˄ вниз ˅ и ввод >. Была, так же, предусмотрена четвертая кнопка, но она так и не была использована. Короткое нажатие на кнопку > включает редактирование времени срабатывания, длинное – переводит кормушку в режим установки часов. Для заправки кормушки наклоняем ее, открываем крышку и закладываем корм. Далее можно сбросить состояние светодиодов (указывающих оставшиеся количество порций) кнопкой ˄. Кнопкой ˅ можно подстроить положение контейнера и вывести шаговые двигатель на рабочий режим, так как после включения первый такт зависит от начального положения ротора.
В целом, я доволен проделанной работой. Получил полезный опыт и результат оправдал ожидания. Всем желаю того же!
И, напоследок, небольшое видео.
Исходный код доступен на google code.
На все возникшие вопросы буду рада ответить.