[Из песочницы] Очумелые ручки: «Кормовой диспенсер»
Предисловие
Многие сталкивались с ситуацией, когда, уезжая на лето в заслуженный отпуск, приходилось оставлять домашнего питомца не весть с кем на злосчастные 14 дней, тем самым ограничивая себя и других обязательствами и заботами, срывая и так редкое время наслаждения морем и солнцем звонком в 2 часа ночи от друга детства: «Серега, извини, корм, который ты давал, закончился, а твой Мартин не ест «Китикет», который я своему Мурзу даю», «Чрезвычайная ситуация: нужно уехать на 3 дня из города, придется оставить твоего Мартина с Бабой Галей» и так далее и тому подобное.
Будучи студентом университета информатики и радиоэлектроники, решил решить данную ситуацию самым логичным для себя способом — создать прибор, с помощью которого больше не придется перекладывать заботы об уходе за домашними питомцами на своих друзей и близких в свое отсутствие. Благо, работа над курсовым проектом со одноименной («Совпадение? Не думаю…») темой придавала стимула и мотивации творчеству. Как известно, в бытовой жизни среднестатистического студента редко найдется место лишним деньгам, особенно если дело касается особо дорогих гаджетов и предметов быта. Поэтому было решено обойтись лишь тем, что было в наличии дома, а также пожертвованиями друзей и родственников.
С чего начать
Так как работу решил проделать абсолютно с нуля, не прибегая к использованию готовых корпусов, решил продумать как вообще организовать управление и работу устройства, выбор (к сожалению, небольшой) пал на Arduino Uno R3, купленный как раз для выполнения того самого курсового проекта.
С устройством управления определились, дело за корпусом. Для корпуса было выбрано два довольно вместительных ведра — от мороженного и капусты, корпус микроконтроллера идеально поместился в корпус от шариковой мыши Genius Easy Mouse Pro PS2 2003 года выпуска.
Система дозировки будет состоять из привода и регулятора. Привод для подачи выполнен при помощи электродвигателя из автоматического освежителя воздуха AirWick. Как вариант можно использовать любой 3,5 вольтовый двигатель.
Регулятор в итоге было решено сделать из фоторезистора и светодиода синего цвета, позаимствованных из набора юного электрика одногруппника.
Организацию своеобразного «расписания» решено было сделать при помощи датчика движения, подобные устанавливаются в системах автоматического включения освещения в помещениях.
Изначально было решено сделать расписание выдачи с периодом в 8 часов, не используя никаких датчиков. Однако от идеи пришлось отказаться, из-за ненадежности системы.
Сборка прибора
Для начала проделаем нужные отверстия в ведре от капусты, читай нижняя часть корпуса.
Отверстия нам понадобятся для установки регулятора и резервуара под корм.
На дне ведра от мороженного (верхняя часть) нам понадобится отверстие для подачи сигнала светодиода на фоторезистор (смотреть выше), а также отверстие побольше для подачи корма. Сбоку ведра разместим отверстие для крепления регулятора. По центру дна разместим отверстия для вала и его крепления к кругу самого дозатора, про круг будет ниже. На крышке сверху закрепляем корпус от мыши с микроконтроллером, попутно проделывая отверстия для соединительных проводов.
Привод для подачи выполнен из электродвигателя на вал которого дозатор. Дозатор в свою очередь выполнен в виде пластикового круга с вырезанным отверстием. Собственно, через отверстие и подается корм в резервуар посредством вращения круга электродвигателем. Сам электродвигатель с подключенными проводами размещаем на дне верхней части.
Перейдем к регулятору. Для этого понадобится П-образный кронштейн для крепления фоторезистора точно над светодиодом. В данном случае использовался алюминиевая скоба для крепления гипсокартона, выбрана была из-за своей гибкости, а также удобных отверстий для крепления самих светодиода и резистора.
Перед сборкой отдельных элементов, подключением самих элементов убедимся подключить все провода и более мелкие элементы, принципиальная схема подключения:
На схеме:
PIR — пироэлектрический датчик движения:
M1 — электродвигатель, R2 — понижающий 10 кОм резистор, для чего он нужен смотреть здесь, R1 — резистор 220 Ом, VD1 — светодиод, PR1 — фоторезистор. A1 — аналоговый вход Arduino, D7, D4 и D13 — цифровые входы Arduino.
После подключения и сборки помещаем защитный экран на периферию, в нашем случае им выступила верхняя часть бутылки от газировки, для того чтобы корм не попадал на движимые части, рекомендуется использовать сухой корм чтобы предотвратить засорение отверстия дозатора.
Простейший скетч:
int pirMSPin = 7;
int pirEMPin = 4;
int pirDaPPin = 13;
int portion;
int delayflag;
int sensorValue;
void setup()
{
pinMode(pirMSPin, INPUT);//motion sensor
pinMode(pirEMPin, OUTPUT);//electrical motor
pinMode(pirDaPPin, OUTPUT);//diode and photoresistor
digitalWrite(pirDaPPin, HIGH);//turn on diode and photoresistor
Serial.begin(9600);//set baud rate
}
void checkPhoto()
{
if(sensorValue>600)
potion++;
}
void turnOffEM()
{
digitalWrite(pirEMPin, LOW);
}
void makeDelay()
{
delay(600);
delayflag=1;
}
void turnOnEM()
{
digitalWrite(pirEMPin, HIGH);
}
void loop()
{
portion=0;
delayflag=0;
//digitalWrite(pirEMPin, LOW);
int pirValMS = digitalRead(pirMSPin);
if (pirValMS == HIGH)
{
Serial.println("MOVEMENT");
do{
sensorValue = analogRead(A0);
Serial.println(sensorValue);
checkPhoto();
Serial.println(flag);
if(portion==1){
turnOnEM();
if(delayflag==0)
makeDelay();
}
if(portion==2)
turnOffEM();
}while(portion<2);
//delay for a portion extraction, AKA timetable for 3 portions a day
delay(28800000);
}
else
{
Serial.println("no movement");
}
}
Комментарии к скетчу, а также работе устройства
Получив данные о зарегистрированном движении, поступает сигнал для начала процесса дозировки. Процесс дозировки начинается со считывания значения фоторезистора, если значение сигнала фоторезистора достаточно высоко, то это означает, что фоторезистор регистрирует сигнал со светодиода и механизм выдачи корма находится в закрытом положении. Затем запускается электродвигатель и начинается процесс дозировки. Процесс дозировки заканчивается при повторной регистрации высоко сигнала с фоторезистора, что является индикатором полного цикла дозировки.После окончания выдачи порции система переходит в режим ожидания, длительность которого можно выставить путем перепрограммирования микроконтроллера, для этого используется строка delay (28800000). Количество циклов дозировки (порций) можно также установить изменением переменной с говорящим названием portion, delayflag используется для корректировки положения дозатора.Цена вопроса
Учитывая что контроллер Arduino доступен был априори, из комплектующих в конечном варианте пришлось заплатить лишь за сенсор, который стоит около трех условных единиц.В итоге
За два вечера работы получаем доступную систему, при которой и любимый питомец не останется голодным, и кошелек не опустеет.