Хотел поделиться своей разработкой кормушки для аквариумных рыб.
Лето — сезон отпусков. Побоялся что три недели на море приведут к голодной смерти обитателей аквариума, а поскольку тёща поехала со мной, то доверить дело кормёжки рыб оказалось некому.
Немного подумав над проблемой решил с помощью Arduino UNO, которая оказалась под рукой, сделать автоматическую кормушку. Благо небольшой опыт автоматизации уже был. А поскольку впрок был закуплен Ethernet Shield, то возникла мысль о жутком извращении: управлении кормёжкой через компьютерную сеть. Дело в том, что дома у меня стоит постоянно включенный компьютер исполняющий обязанности домашнего сервера. Он подключен к бесперебойнику и потому высоки шансы что даже при кратковременных переключениях питающей сети, компьютер встретит нас жужжанием своих вентиляторов, а за одно и снизойдёт до управления этой самой кормушкой.
Дело в том, что в примерах из среды разработки Arduino IDE для Ethernet Shield был найден вэб-сервер, некоторая переделка которого позволила выдавать состояние всех аналоговых контактов в формате JSON.
Небольшие эксперименты со строкой запроса в этом вэб-сервере позволили сделать распознавание URL'ов типа:
Два последних я приспособил для включения и выключения света в аквариуме, а первый — для непосредственно кормления.
Включение-выключение света делается посредством релейного модуля. Эту самую релюху я прямо встроил в заранее купленную розетку. Из всего этого впоследствии сделал небольшой управляемый удлинитель.
![image](https://habrastorage.org/r/w780q1/files/e9f/e7f/cfc/e9fe7fcfce824c41b1fd068498bcf8f9.jpg)
Самое сложное было сделать саму установку по кормлению. Стало очевидно, что на время отпуска рыба садится на диету из которой исключается мороженый мотыль, а кушает только гранулы.
Перерыл рунет в поисках приемлемой конструкции для собственноручного изготовления. Наиболее приемлемой счёл вращающийся барабан с кормом внутри. При этом барабан имеет щель, через которую высыпаются гранулы проходя нижнюю точку. Самое главное при этом, чтобы этот самый барабан случайно не остановился в положении «щелью вниз», тогда у рыб может случиться «праздник живота», а через некоторое время ощущение, что они живут в сартире вместо аквариума. Короче, возникли проблемы:
Порывшись в раздолбанных сыном игрушках, нашел приличный, как мне казалось, редуктор с моторчиком. Вокруг которого и стал собирать механическую часть кормушки. Барабаном стала обычная пластиковая банка из под овсяного киселя, которым некоторое время баловалась супруга. Но когда я собрал конструкцию и попробовал её от стандартного пятивольтового питания, я понял, что редуктор имеет слишком малое понижение, и поведение всей системы чем-то напоминает центрифугу. Переделывать под другой редуктор было лень и я решил пойти иным путём — понижением напряжения. Но и трёхвольтовое питание чрезмерно быстро вращало барабан. Специально купил даже полуторавольтовый блок питания. Обрадовался, но радость моя была не долгой, т.к. при проверке работы в «полубоевом» режиме, т.е. при включении-выключении кормушки через реле вдруг выяснилось что после 20-40 циклов — китайский блок питания благополучно сдох. Пришлось экстренно купить Motor Shield и использовать его широкие возможности для регулирования скорости вращения барабана.
![image](https://habrastorage.org/r/w780q1/files/a73/179/0ae/a731790aee4f47be8e7d65a3ef83a5c0.jpg)
На этом две из трёх проблемы ушли, и я начал всерьёз задумываться о решении задачи точной остановки. Механический выключатель, который бы сигнализировал о прохождении оборота мне показался не очень хорошим решением. Смутила дополнительная механическая нагрузка на редуктор, возникающая только в одном положении барабана. Потому я решил использовать систему: светодиод + чёрная метка на барабане + фоторезистор. Взял фоторезистор, собрал с ним делитель напряжения, а с помощью одного из аналоговых входов Arduino UNO стал мерить напряжение для определения наличия или отсутствия метки. Самой меткой выступил небольшой фрагмент изоленты, а подсветка была организована посредством светодиода запитанного через резистор (для ограничения тока). Затем была скучная наработка статистики, при разных степенях освещённости барабана (свет в комнате). Определил какие значения снимаются с аналогового входа, и задал пороговые значения для вариантов «есть метка» — «нет метки». Так была решена последняя проблема.
![image](https://habrastorage.org/r/w780q1/files/bdd/f9a/d32/bddf9ad3247a4e228352ff56908190f4.jpg)
Затем попробовал кормушку вместе с гранулами и прорезью, но, дабы не обкормить заранее рыб все тесты проводил над листом бумаги, где я не только определял размер щели (заклеивая её фрагментами скотча) но и выяснил, что часть гранул просыпается мимо предназначенного для этого расстояния между двух реек. пришлось в нагрузку раскурочить пластиковую упаковку для какого-то кабеля и сделать из них нечто напоминающее щётки в электродвигателе, дабы при подъёме щели корм «затыкался» этими трущимися о барабан прозрачными пластинами.
Как вы уже поняли, цель этого устройства — вовсе не сытая рыбья жизнь, а некоторая проба себя. И я решил пойти дальше. В плане разработки софта. В железе у меня оказался только исполнитель трёх команд, а вот на домашнем сервере — я решил вести некоторую статистику. Поскольку я вэб-программист, взял по привычке базу данных MySQL завёл в ней две таблички. В одну складывал — URL'ы и даты запросов к устройству, в другую писал ответы, в результате я получил статистику успешно ли покормлены были рыбы и во сколько включился и выключился свет в аквариуме. (Дело в том, что ответ устройство выдаёт только после выполнения команды. И не выдаёт если что-то пошло не так.) Вспомнив свои некоторые навыки в Java взял класс URL и с его помощью сделал все эти три http-запроса к ардуинке. JSON-ответ парсил, библиотекой скачанной с json.org. Отпуск приблизился стремительно потому на оставшиеся извращения времени не хватило и саму управляющую java-софтину я решил запускать с помощью старого доброго cron'а.
Вот в таком виде и застал и нас и рыб отъезд на море. Спустя три недели мы вернулись загорелые и увидели всех наших весело плавающих по аквариуму рыбёшек, причём изрядно отъевшихся.
![image](https://habrastorage.org/r/w780q1/files/148/ce0/c55/148ce0c557594971ab7732fce9d0d5d6.jpg)
Лето — сезон отпусков. Побоялся что три недели на море приведут к голодной смерти обитателей аквариума, а поскольку тёща поехала со мной, то доверить дело кормёжки рыб оказалось некому.
Немного подумав над проблемой решил с помощью Arduino UNO, которая оказалась под рукой, сделать автоматическую кормушку. Благо небольшой опыт автоматизации уже был. А поскольку впрок был закуплен Ethernet Shield, то возникла мысль о жутком извращении: управлении кормёжкой через компьютерную сеть. Дело в том, что дома у меня стоит постоянно включенный компьютер исполняющий обязанности домашнего сервера. Он подключен к бесперебойнику и потому высоки шансы что даже при кратковременных переключениях питающей сети, компьютер встретит нас жужжанием своих вентиляторов, а за одно и снизойдёт до управления этой самой кормушкой.
Дело в том, что в примерах из среды разработки Arduino IDE для Ethernet Shield был найден вэб-сервер, некоторая переделка которого позволила выдавать состояние всех аналоговых контактов в формате JSON.
Небольшие эксперименты со строкой запроса в этом вэб-сервере позволили сделать распознавание URL'ов типа:
Два последних я приспособил для включения и выключения света в аквариуме, а первый — для непосредственно кормления.
Включение-выключение света делается посредством релейного модуля. Эту самую релюху я прямо встроил в заранее купленную розетку. Из всего этого впоследствии сделал небольшой управляемый удлинитель.
![image](https://habrastorage.org/files/e9f/e7f/cfc/e9fe7fcfce824c41b1fd068498bcf8f9.jpg)
Самое сложное было сделать саму установку по кормлению. Стало очевидно, что на время отпуска рыба садится на диету из которой исключается мороженый мотыль, а кушает только гранулы.
Перерыл рунет в поисках приемлемой конструкции для собственноручного изготовления. Наиболее приемлемой счёл вращающийся барабан с кормом внутри. При этом барабан имеет щель, через которую высыпаются гранулы проходя нижнюю точку. Самое главное при этом, чтобы этот самый барабан случайно не остановился в положении «щелью вниз», тогда у рыб может случиться «праздник живота», а через некоторое время ощущение, что они живут в сартире вместо аквариума. Короче, возникли проблемы:
- из чего сделать барабан
- как его вращать
- как его заставить вовремя остановиться, сделав только один оборот
Порывшись в раздолбанных сыном игрушках, нашел приличный, как мне казалось, редуктор с моторчиком. Вокруг которого и стал собирать механическую часть кормушки. Барабаном стала обычная пластиковая банка из под овсяного киселя, которым некоторое время баловалась супруга. Но когда я собрал конструкцию и попробовал её от стандартного пятивольтового питания, я понял, что редуктор имеет слишком малое понижение, и поведение всей системы чем-то напоминает центрифугу. Переделывать под другой редуктор было лень и я решил пойти иным путём — понижением напряжения. Но и трёхвольтовое питание чрезмерно быстро вращало барабан. Специально купил даже полуторавольтовый блок питания. Обрадовался, но радость моя была не долгой, т.к. при проверке работы в «полубоевом» режиме, т.е. при включении-выключении кормушки через реле вдруг выяснилось что после 20-40 циклов — китайский блок питания благополучно сдох. Пришлось экстренно купить Motor Shield и использовать его широкие возможности для регулирования скорости вращения барабана.
![image](https://habrastorage.org/files/a73/179/0ae/a731790aee4f47be8e7d65a3ef83a5c0.jpg)
На этом две из трёх проблемы ушли, и я начал всерьёз задумываться о решении задачи точной остановки. Механический выключатель, который бы сигнализировал о прохождении оборота мне показался не очень хорошим решением. Смутила дополнительная механическая нагрузка на редуктор, возникающая только в одном положении барабана. Потому я решил использовать систему: светодиод + чёрная метка на барабане + фоторезистор. Взял фоторезистор, собрал с ним делитель напряжения, а с помощью одного из аналоговых входов Arduino UNO стал мерить напряжение для определения наличия или отсутствия метки. Самой меткой выступил небольшой фрагмент изоленты, а подсветка была организована посредством светодиода запитанного через резистор (для ограничения тока). Затем была скучная наработка статистики, при разных степенях освещённости барабана (свет в комнате). Определил какие значения снимаются с аналогового входа, и задал пороговые значения для вариантов «есть метка» — «нет метки». Так была решена последняя проблема.
![image](https://habrastorage.org/files/bdd/f9a/d32/bddf9ad3247a4e228352ff56908190f4.jpg)
Затем попробовал кормушку вместе с гранулами и прорезью, но, дабы не обкормить заранее рыб все тесты проводил над листом бумаги, где я не только определял размер щели (заклеивая её фрагментами скотча) но и выяснил, что часть гранул просыпается мимо предназначенного для этого расстояния между двух реек. пришлось в нагрузку раскурочить пластиковую упаковку для какого-то кабеля и сделать из них нечто напоминающее щётки в электродвигателе, дабы при подъёме щели корм «затыкался» этими трущимися о барабан прозрачными пластинами.
Как вы уже поняли, цель этого устройства — вовсе не сытая рыбья жизнь, а некоторая проба себя. И я решил пойти дальше. В плане разработки софта. В железе у меня оказался только исполнитель трёх команд, а вот на домашнем сервере — я решил вести некоторую статистику. Поскольку я вэб-программист, взял по привычке базу данных MySQL завёл в ней две таблички. В одну складывал — URL'ы и даты запросов к устройству, в другую писал ответы, в результате я получил статистику успешно ли покормлены были рыбы и во сколько включился и выключился свет в аквариуме. (Дело в том, что ответ устройство выдаёт только после выполнения команды. И не выдаёт если что-то пошло не так.) Вспомнив свои некоторые навыки в Java взял класс URL и с его помощью сделал все эти три http-запроса к ардуинке. JSON-ответ парсил, библиотекой скачанной с json.org. Отпуск приблизился стремительно потому на оставшиеся извращения времени не хватило и саму управляющую java-софтину я решил запускать с помощью старого доброго cron'а.
Вот в таком виде и застал и нас и рыб отъезд на море. Спустя три недели мы вернулись загорелые и увидели всех наших весело плавающих по аквариуму рыбёшек, причём изрядно отъевшихся.
![image](https://habrastorage.org/files/148/ce0/c55/148ce0c557594971ab7732fce9d0d5d6.jpg)