[Из песочницы] Очумелые ручки: «Кормовой диспенсер»

Предисловие
Многие сталкивались с ситуацией, когда, уезжая на лето в заслуженный отпуск, приходилось оставлять домашнего питомца не весть с кем на злосчастные 14 дней, тем самым ограничивая себя и других обязательствами и заботами, срывая и так редкое время наслаждения морем и солнцем звонком в 2 часа ночи от друга детства: «Серега, извини, корм, который ты давал, закончился, а твой Мартин не ест «Китикет», который я своему Мурзу даю», «Чрезвычайная ситуация: нужно уехать на 3 дня из города, придется оставить твоего Мартина с Бабой Галей» и так далее и тому подобное.

Будучи студентом университета информатики и радиоэлектроники, решил решить данную ситуацию самым логичным для себя способом — создать прибор, с помощью которого больше не придется перекладывать заботы об уходе за домашними питомцами на своих друзей и близких в свое отсутствие. Благо, работа над курсовым проектом со одноименной («Совпадение? Не думаю…») темой придавала стимула и мотивации творчеству. Как известно, в бытовой жизни среднестатистического студента редко найдется место лишним деньгам, особенно если дело касается особо дорогих гаджетов и предметов быта. Поэтому было решено обойтись лишь тем, что было в наличии дома, а также пожертвованиями друзей и родственников.

С чего начать
Так как работу решил проделать абсолютно с нуля, не прибегая к использованию готовых корпусов, решил продумать как вообще организовать управление и работу устройства, выбор (к сожалению, небольшой) пал на Arduino Uno R3, купленный как раз для выполнения того самого курсового проекта.

С устройством управления определились, дело за корпусом. Для корпуса было выбрано два довольно вместительных ведра — от мороженного и капусты, корпус микроконтроллера идеально поместился в корпус от шариковой мыши Genius Easy Mouse Pro PS2 2003 года выпуска.

a1708c3971e14cfcbf69d8a3651e4231.jpg

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

f16949ed450c4e5d9aec97bab2c755bc.jpg

Регулятор в итоге было решено сделать из фоторезистора и светодиода синего цвета, позаимствованных из набора юного электрика одногруппника.

a79f764f91ec49c8bdb4cc474d7cec37.jpg

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

6186b44a54fa4fcd8de0189a4d4bbe8f.jpg

Изначально было решено сделать расписание выдачи с периодом в 8 часов, не используя никаких датчиков. Однако от идеи пришлось отказаться, из-за ненадежности системы.

Сборка прибора
Для начала проделаем нужные отверстия в ведре от капусты, читай нижняя часть корпуса.

eaea287d957d48e1b07971c7c5535da4.jpg

Отверстия нам понадобятся для установки регулятора и резервуара под корм.

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

ff9aba2922604d6182ed0ea6919bd6e5.jpg

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

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

Перед сборкой отдельных элементов, подключением самих элементов убедимся подключить все провода и более мелкие элементы, принципиальная схема подключения:

3112322f423144818350b523193cdd19.jpg

На схеме:

PIR — пироэлектрический датчик движения:

7c04e0d557b542ff97ec2e0d2ecff992.PNG

M1 — электродвигатель, R2 — понижающий 10 кОм резистор, для чего он нужен смотреть здесь, R1 — резистор 220 Ом, VD1 — светодиод, PR1 — фоторезистор. A1 — аналоговый вход Arduino, D7, D4 и D13 — цифровые входы Arduino.

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

2c665e5d10724b8191a149bdd6186448.jpg

Простейший скетч:

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 доступен был априори, из комплектующих в конечном варианте пришлось заплатить лишь за сенсор, который стоит около трех условных единиц.В итоге
За два вечера работы получаем доступную систему, при которой и любимый питомец не останется голодным, и кошелек не опустеет.

© Geektimes