Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

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

Компоненты и расходные материалы

Таймер механического выхода
× 1
Шаговый двигатель
× 1
Драйвер шагового двигателя L9110S
× 1
Опора линейного вала SHF8
× 1
Зарядное устройство USB
× 1
SparkFun Arduino Pro Mini 328 - 5 В / 16 МГц
× 1
Штекерные разъемы USB для адаптера DIP
× 1
Удлинительный кабель USB
× 1
угловые скобки
× 1

Об этом проекте

Когда я ухожу из дома на несколько дней, кормить кошку всегда сложно. Я должен попросить друзей или родственников позаботиться о моей кошке. Я искал решение в Интернете и нашел много раздаточных устройств для домашних животных, но они мне не понравились. Во-первых, они очень дорогие. Во-вторых, они подходят только для работы с сухим кормом для кошек (большую часть времени мика ест влажный корм). Наконец, они слишком большие, у меня в квартире не так много места. Поэтому я решил создать компактную автоматическую кормушку для кошек, оптимизированную для влажного корма. Проблема с влажной пищей в том, что она быстро портится. Я понял, что после того, как открою консервы для кошек, у меня есть максимум 1 день, чтобы им воспользоваться. Чтобы сэкономить место и сохранить качество корма, а также сделать этот проект максимально дешевым и простым, я разработал машину, которая может кормить питомца только один раз. Это даст мне два дня отсутствия в моих обязанностях по кормлению кошек (свобода :)).

Кормушка работает очень просто. Я заполняю пищевой контейнер (пустую коробку из-под йогурта) едой, закрываю дверцу контейнера и подключаю кабель с таймером розетки к сети 230VAC. Я настроил таймер так, чтобы через день он включил кормушку. Когда прибор включен, контейнер для еды открывается серводвигателем. Через день дверь откроется, и кошка сможет хорошо поесть. Когда я прихожу домой, я удаляю контейнер с едой, убираю остатки и наполняю свежими продуктами, затем кладу обратно и закрываю верх коробки, и цикл может начаться снова.…

Все основные шаги можно увидеть в этом видео:

Код

  • Код Arduino Automatic_cat_feeder
Код Arduino Automatic_cat_feeder C / C ++
Исходный код прошивки Arduino. Я загрузил код на мини-плату Arduino pro с помощью программного обеспечения Arduino IDE (https://www.arduino.cc/en/Main/Software), адаптера FTDI и USB-кабеля Mini-B. Вот видео о том, как это сделать:https://www.youtube.com/watch?v=78HCgaYsA70
Код прост. В настройке он повернет шаговый двигатель, чем в основном цикле, он ждет, пока кнопка не будет нажата, затем он снова переместится.
 // Автоматическая кормушка для кошек, сделанная:J. Rundhall // Исходный код для шагового от:Эскиз Р. Джордана Крейндлера, написанный в октябре 2016 г., для вращения RPM; логическое isButtonpressed =false; unsigned long timee; // Назначение выводов int buttonPIN =6; int aPin =4; // IN1:свернуть a one endint bPin =3; // IN2:катушка b one endint aPrimePin =5; // IN3:катушка aPrime другой конец катушки aint bPrimePin =2; // IN4:катушка bPrime другой конец катушки bint one =aPin; int two =bPin; int three =aPrimePin; int four =bPrimePin; int sizes =0; // int delay1 =20; // Задержка между каждым шагом в миллисекундах int delay1 =5; // Задержка между каждым шагом в миллисекундах // int delay2 =50; // Задержка после каждого полного оборота в миллисекундах int delay2 =200; // Задержка после каждого полного оборота в миллисекундах int count =0; // Количество шаговint numberOfRotations =1; // Сколько раз ротор // повернулся на 360 градусов .void setup () {// Установить все выводы как выходные для отправки выходных сигналов от Arduino // UNO на обмотки катушки statorSerial.begin (9600); // открывает последовательный порт, устанавливает скорость передачи данных 9600 бит / с pinMode (6, INPUT_PULLUP); // ButtonpinMode (aPin, OUTPUT); pinMode (bPin, OUTPUT); pinMode (aPrimePin, OUTPUT); pinMode (bPrimePin, OUTPUT); Serial.println ("Clockwise"); // Начать со всех катушек offdigitalWrite (aPin, LOW ); digitalWrite (bPin, LOW); digitalWrite (aPrimePin, LOW); digitalWrite (bPrimePin, LOW); for (int ii =0; ii <20; ii ++) doTurn ();} void loop () {// считываем значение кнопки в переменную int sensorVal =digitalRead (6); // Помните, что подтягивание означает инвертированную логику кнопки. Он становится // ВЫСОКИМ, когда он открыт, и НИЗКИМ при нажатии. Включите контакт 13, // когда кнопка нажата, и выключите, если это не так:if (sensorVal ==LOW) {isButtonpressed =true; } else {если (isButtonpressed) {isButtonpressed =false; doTurn (); digitalWrite (aPin, LOW); digitalWrite (bPin, LOW); digitalWrite (aPrimePin, LOW); digitalWrite (bPrimePin, LOW); }}} void doTurn () {// Посылаем ток // 1. aPin // 2. aPin и bPin // 3. bPin // 4. Затем к bPin и aPrimePin // 5. Затем к aPrimePin // 6. Затем к aPrimePin и bPrime Pin // 7. Затем к bPrimePin // 8. Затем к bPrimePin и aPin. // Таким образом, создание шагов с использованием метода полушага // 1. Установите значение aPin High digitalWrite (aPin, HIGH); digitalWrite (bPin, LOW); digitalWrite (aPrimePin, LOW); digitalWrite (bPrimePin, LOW); // Позвольте некоторую задержку между подачей питания на катушки, чтобы дать // шагному ротору время среагировать. задержка (задержка1); // Итак, delay1 // 2. Подключаем aPin и bPin к HIGH digitalWrite (aPin, HIGH); digitalWrite (bPin, HIGH); digitalWrite (aPrimePin, LOW); digitalWrite (bPrimePin, LOW); // Позвольте некоторую задержку между подачей питания на катушки, чтобы дать // шагному ротору время среагировать. задержка (задержка1); // Итак, delay1 миллисекунды // 3. Установите для bPin значение High digitalWrite (aPin, LOW); digitalWrite (bPin, HIGH); digitalWrite (aPrimePin, LOW); digitalWrite (bPrimePin, LOW); // Позвольте некоторую задержку между подачей питания на катушки, чтобы дать // шагному ротору время среагировать. задержка (задержка1); // Итак, delay1 миллисекунды // 4. Установите для bPin и aPrimePin значение HIGH digitalWrite (aPin, LOW); digitalWrite (bPin, HIGH); digitalWrite (aPrimePin, HIGH); digitalWrite (bPrimePin, LOW); // Позвольте некоторую задержку между подачей питания на катушки, чтобы дать // шагному ротору время среагировать. задержка (задержка1); // Итак, delay1 миллисекунды // 5. Установите для пина aPrime высокое значение digitalWrite (aPin, LOW); digitalWrite (bPin, LOW); digitalWrite (aPrimePin, HIGH); digitalWrite (bPrimePin, LOW); // Позвольте некоторую задержку между подачей питания на катушки, чтобы дать // шагному ротору время среагировать. задержка (задержка1); // Итак, delay1 миллисекунды // 6. Установите для aPrimePin и bPrime Pin значение HIGH digitalWrite (aPin, LOW); digitalWrite (bPin, LOW); digitalWrite (aPrimePin, HIGH); digitalWrite (bPrimePin, HIGH); // Позвольте некоторую задержку между подачей питания на катушки, чтобы дать // шагному ротору время среагировать. задержка (задержка1); // Итак, delay1 миллисекунды // 7. Установите для bPrimePin значение HIGH digitalWrite (aPin, LOW); digitalWrite (bPin, LOW); digitalWrite (aPrimePin, LOW); digitalWrite (bPrimePin, HIGH); // Позвольте некоторую задержку между подачей питания на катушки, чтобы дать // шагному ротору время среагировать. задержка (задержка1); // Итак, delay1 миллисекунды // 8. Установите для bPrimePin и aPin значение HIGH digitalWrite (aPin, HIGH); digitalWrite (bPin, LOW); digitalWrite (aPrimePin, LOW); digitalWrite (bPrimePin, HIGH); // Позвольте некоторую задержку между подачей питания на катушки, чтобы дать // шагному ротору время среагировать. задержка (задержка1); // Итак, delay1 миллисекунды count =count + 8; градусы =(360.0 * (count / 400.0)); if ((numberOfRotations% 2) ==1) {// Проверяем, четное ли количество оборотов Serial.println ("По часовой стрелке"); Serial.println (градусы); // Печатать угловое положение в градусах} else {// Если numberOfRotations нечетное число Serial.println ("Против часовой стрелки"); градусы =360 - градусы; Serial.print ("-"); // Выводим знак минус Serial.println (градусы); // Вывести угловое положение в градусах} if (count ==160) {// Полный оборот шагового двигателя numberOfRotations =++ numberOfRotations; timee =миллис (); RPM =timee / numberOfRotations; // Среднее время вращения RPM =(60000.00 / RPM); // Количество оборотов в минуту if (numberOfRotations> =10) {Serial.print ("RPM:"); Serial.println (раунд (об / мин)); // Вывести число оборотов в минуту в виде целого числа} delay (delay2); // задержка 2/1000 секунд после каждого полного вращения count =0; // Сбрасываем счетчик шагов на ноль // Обратное направление после каждого поворота if ((numberOfRotations)% 2 ==0) {// Проверяем, четное ли количество оборотов // если да, обратное направление aPin =четыре; bPin =три; aPrimePin =два; bPrimePin =один; } else {// Если количество оборотов нечетное aPin =one; bPin =два; aPrimePin =три; bPrimePin =четыре; } digitalWrite (aPin, LOW); digitalWrite (bPin, LOW); digitalWrite (aPrimePin, LOW); digitalWrite (bPrimePin, LOW); }} 

Схема

Сначала я подключил электронику. Я использовал свой паяльник всего два раза, чтобы подключить кабели питания к плате USB-адаптера. Перед подключением к сети 230В рекомендую использовать лабораторный настольный блок питания с контролем и измерением тока. если вы неправильно подключили кабель, эта проверка может спасти вас от повреждений адаптера или другого компонента. Общее потребление должно быть меньше 1 Ампер при 5 Вольт.
Во-вторых, я собрал угловые распорки, затем модифицировал коробку и закрепил ее на конструкции машины.

Производственный процесс

  1. Сделайте самодельную термокамеру
  2. Плюсы и минусы автоматических устройств подачи прутка
  3. Что такое автоматический пресс?
  4. Что такое пресс-питатель?
  5. Что такое автоматический силовой пресс?
  6. Что такое пневматический питатель прутка?
  7. Что такое автоматический трубогиб?
  8. Что такое автоматический поворотный стол?
  9. Понимание системы автоматической коробки передач
  10. Понимание автоматической системы смазки