Автоматическая кормушка для птиц

Ещё в 2010 году Леонид Каганов (как известно — большой затейник) поделился с читателями своего блога идеей кормушки для птиц с веб-камерой и досыпанием зерна путем отправки платных SMS. Идея мне понравилась. И вот, прошло 4 года, наступили новогодние праздники 2014, я достал из стола завалявшиеся arduino uno, роутер tp-link 3020 и вместе с bitl (ака админом городского сайта) приступил к реализации проекта.



Под катом много фото.


Кормушка

Сердцем кормушки выступает роутер Tp-Link 3020 с прошивкой OpenWrt, к которому по ethernet подключена камера D-Link DCS-2310L и arduino по usb. Сам он выходит в интернет через wifi. Каждую минуту cron запускает скрипт, который раз в 4 секунды определяет нужно ли и какое количество раз открыть задвижку на бункере с кормом.
Скрипт
<code class="bash">#!/bin/sh  COUNT=10 if [ -f /tmp/lock.ceed ]; then LOCK=`cat /tmp/lock.ceed` if [ "$LOCK" -lt "1" ]; then echo '1' > /tmp/lock.ceed while [ "$COUNT" -gt "0" ]; do rm /tmp/status.php wget http://labinsk.ru/feeder/status.php -P /tmp/ -t 5 if [ -f /tmp/status.php ]; then CEED=`cat /tmp/status.php` if [ "$CEED" -gt "0" ]; then until [ $CEED -lt 1 ]; do echo 1 > /dev/ttyACM0 let CEED=$CEED-1 let COUNT=$COUNT-1 sleep 4 done fi fi let COUNT=$COUNT-1 sleep 4 done echo '0' > /tmp/lock.ceed fi else echo '0' > /tmp/lock.ceed fi  </code>

Arduino слушает com порт и в случае получения единички (0x31) открывает задвижку на 120 мс.
Скетч Arduino
<code class="cpp">int incomingByte = 0;	 int relay0 = 8; int relay1 = 12;  void setup() { Serial.begin(9600); pinMode(8,OUTPUT); pinMode(12,OUTPUT); digitalWrite(relay0,LOW); digitalWrite(relay1,HIGH); delay (200); digitalWrite(relay0,HIGH); } void loop() { if (Serial.available() > 0) { incomingByte = Serial.read(); if(incomingByte==49){ digitalWrite(relay1,LOW); delay (120); digitalWrite(relay1,HIGH); digitalWrite(relay0,LOW); delay (200); digitalWrite(relay0,HIGH);  } } } </code>

Механизм сделан из 50мм тройника для канализации и автомобильного соленоида. В тройник вклеена пробка от 5 литровой пэт бутылки (бутылка выступает в качестве бункера для корма). Задвижка также сделана из куска канализационной трубы.







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



Сделан домик, с монтажной коробкой под электронику, поворотным креплением под бункер и откидывающимся дном:


Так добавлять корм гораздо удобней:


Изначально мы хотели установить кормушку в городском парке, но из-за проблем с электричеством и wifi было решено установить её дома. Собственно установка:










Сайт

Кормушка доступна по адресу http://www.labinsk.ru/index.php?p=feeder&stream=mjpeg

Пару слов о реализации на стороне сервера сайта.
От изначальной идеи насыпать корм SMS-ками решено было отказаться. Проект изначально не подразумевался как коммерческий. В самом деле, о какой выгоде может идти речь? Ну и, конечно, желающих отправлять SMS-сообщения ради того, чтобы посмотреть как насыпается корм — было бы не так много, и птички бы не оценили такой «заботы». Поэтому насыпать корм можно просто нажав кнопочку на страничке с видео-трансляцией. Чтобы пользователи не опустошили весь бункер за считанные часы — введён таймаут. На данный момент кнопка «Покормить» доступна только спустя 15 минут после предыдущей отсыпки корма.
Ну, а работает это всё тривиально. Пользователь жмёт кнопочку, php-скрипт добавляет в SQL-таблицу запись со статусом «не обработано», кормушка периодически опрашивает сервер, обращаясь к ещё одному php-скриптику, который и сообщает кормушке, о том, что появился запрос на отсыпку, после чего меняет в SQL-таблице статус соответствующей записи. Таким образом, не сайт посылает команду кормушке, а кормушка периодически спрашивает у сайта — не надо ли насыпать? Не самая оптимальная реализация, но зато простая. К тому же в данном случае нам не нужен статичный ip-адрес (или какой-то там DynDNS) для интернет-соединения кормушки.

Птички









P.S.
Кормушка работает уже 2 месяца, за это время птички съели около 10 литров корма (2 бункера). Корм — Семечки подсолнуха.

UPD Видео испытания механизма.



Источник: habrahabr.ru/post/217985/