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

в 6:58, , рубрики: arduino, БГУИР, ВМСиС, эвм
Предисловие

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

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

С чего начать

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

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

Очумелые ручки: «Кормовой диспенсер» - 1

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

Очумелые ручки: «Кормовой диспенсер» - 2

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

Очумелые ручки: «Кормовой диспенсер» - 3

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

Очумелые ручки: «Кормовой диспенсер» - 4

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

Сборка прибора

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

Очумелые ручки: «Кормовой диспенсер» - 5

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

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

Очумелые ручки: «Кормовой диспенсер» - 6

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

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

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

Очумелые ручки: «Кормовой диспенсер» - 7

На схеме:

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

Очумелые ручки: «Кормовой диспенсер» - 8

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

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

Очумелые ручки: «Кормовой диспенсер» - 9

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

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

В итоге

За два вечера работы получаем доступную систему, при которой и любимый питомец не останется голодным, и кошелек не опустеет.

Автор: Reghfi

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js