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

Создайте надежный автоматический кормушку для кошки — DIY-проект для беспокойного ухода за питомцем

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

Механический таймер розетки × 1
Шаговый двигатель × 1
Драйвер шагового двигателя L9110S × 1
Линейная опора вала SHF8 × 1
USB-зарядное устройство для розетки × 1
SparkFun Arduino Pro Mini 328 — 5V/16MHz × 1
Адаптер USB Male на DIP × 1
Удлинитель USB × 1
Угловые крепления × 1

О проекте

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

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

Принцип работы прост: я наполняю контейнер для еды (пустую коробку от йогурта), закрываю крышку и подключаю кабель с таймером розетки к сети 230В. Настраиваю таймер так, чтобы через сутки он включил питание кормушки. При подаче питания шаговый двигатель открывает крышку контейнера. Через сутки дверца открывается, и кошка получает свежий прием пищи. По возвращении я извлекаю контейнер, удаляю остатки, мою его, наполняю свежим кормом, закрываю крышку — и цикл повторяется.

Создайте надежный автоматический кормушку для кошки — DIY-проект для беспокойного ухода за питомцем

Все основные этапы сборки показаны в видео.

Код

Прошивка для Arduino (C/C++)

Код загружается в Arduino Pro Mini через Arduino IDE, FTDI-адаптер и кабель Mini-B USB. Инструкция по загрузке: видео.

Алгоритм прост: в setup() шаговый двигатель поворачивается на заданный угол, затем в основном цикле ожидает нажатия кнопки для следующего вращения.

// Automatic cat feeder made by: J. Rundhall
// Original stepper code from: R. Jordan Kreindler, Oct 2016
float RPM; 
boolean isButtonpressed = false; 
unsigned long timee; 

// Pin assignments
int buttonPIN = 6;
int aPin = 4;      // IN1
int bPin = 3;      // IN2
int aPrimePin = 5; // IN3
int bPrimePin = 2; // IN4

int one = aPin, two = bPin, three = aPrimePin, four = bPrimePin;
int degrees = 0;
int delay1 = 5;    // задержка между шагами (мс)
int delay2 = 200;  // задержка после полного оборота (мс)
int count = 0;
int numberOfRotations = 1;

void setup() {
  Serial.begin(9600);
  pinMode(6, INPUT_PULLUP); // Кнопка
  pinMode(aPin, OUTPUT);
  pinMode(bPin, OUTPUT);
  pinMode(aPrimePin, OUTPUT);
  pinMode(bPrimePin, OUTPUT);
  Serial.println(" Clockwise");
  digitalWrite(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);
  // Pull-up: HIGH = отпущена, LOW = нажата
  if (sensorVal == LOW) {
    isButtonpressed = true;
  } else {
    if(isButtonpressed) {
      isButtonpressed = false;
      doTurn();
      digitalWrite(aPin, LOW);
      digitalWrite(bPin, LOW);
      digitalWrite(aPrimePin, LOW);
      digitalWrite(bPrimePin, LOW);
    }
  }
}

void doTurn() {
  // Half-step sequence (8 шагов)
  // 1. aPin HIGH
  digitalWrite(aPin, HIGH); digitalWrite(bPin, LOW); digitalWrite(aPrimePin, LOW); digitalWrite(bPrimePin, LOW); delay(delay1);
  // 2. aPin + bPin HIGH
  digitalWrite(aPin, HIGH); digitalWrite(bPin, HIGH); digitalWrite(aPrimePin, LOW); digitalWrite(bPrimePin, LOW); delay(delay1);
  // 3. bPin HIGH
  digitalWrite(aPin, LOW); digitalWrite(bPin, HIGH); digitalWrite(aPrimePin, LOW); digitalWrite(bPrimePin, LOW); delay(delay1);
  // 4. bPin + aPrimePin HIGH
  digitalWrite(aPin, LOW); digitalWrite(bPin, HIGH); digitalWrite(aPrimePin, HIGH); digitalWrite(bPrimePin, LOW); delay(delay1);
  // 5. aPrimePin HIGH
  digitalWrite(aPin, LOW); digitalWrite(bPin, LOW); digitalWrite(aPrimePin, HIGH); digitalWrite(bPrimePin, LOW); delay(delay1);
  // 6. aPrimePin + bPrimePin HIGH
  digitalWrite(aPin, LOW); digitalWrite(bPin, LOW); digitalWrite(aPrimePin, HIGH); digitalWrite(bPrimePin, HIGH); delay(delay1);
  // 7. bPrimePin HIGH
  digitalWrite(aPin, LOW); digitalWrite(bPin, LOW); digitalWrite(aPrimePin, LOW); digitalWrite(bPrimePin, HIGH); delay(delay1);
  // 8. bPrimePin + aPin HIGH
  digitalWrite(aPin, HIGH); digitalWrite(bPin, LOW); digitalWrite(aPrimePin, LOW); digitalWrite(bPrimePin, HIGH); delay(delay1);

  count += 8;
  degrees = (360.0 * (count / 400.0));

  if ((numberOfRotations % 2) == 1) {
    Serial.println(" Clockwise ");
    Serial.println(degrees);
  } else {
    Serial.println(" Anti-Clockwise ");
    degrees = 360 - degrees;
    Serial.print("-");
    Serial.println(degrees);
  }

  if (count == 160) { // Полный оборот (400 шагов / 2.5 = 160 half-steps)
    numberOfRotations++;
    timee = millis();
    RPM = timee / numberOfRotations;
    RPM = (60000.00 / RPM);
    if (numberOfRotations >= 10) {
      Serial.print("RPM:");
      Serial.println(round(RPM));
    }
    delay(delay2);
    count = 0;

    // Смена направления после каждого оборота
    if ((numberOfRotations) % 2 == 0) {
      aPin = four; bPin = three; aPrimePin = two; bPrimePin = one;
    } else {
      aPin = one; bPin = two; aPrimePin = three; bPrimePin = four;
    }
    digitalWrite(aPin, LOW); digitalWrite(bPin, LOW);
    digitalWrite(aPrimePin, LOW); digitalWrite(bPrimePin, LOW);
  }
}

Схемы

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

Затем собрал угловые крепления, модифицировал коробку и закрепил её на конструкции.

Создайте надежный автоматический кормушку для кошки — DIY-проект для беспокойного ухода за питомцем

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

  1. DIY Thermocam: от идеи в классе к глобальному продукту
  2. Подробное руководство по автоматическим подавателям прутков: характеристики, преимущества и лучшие практик…
  3. Автоматические прессовые станки: принцип работы, преимущества и применение
  4. Питатели прессов: принцип работы, функции и промышленное применение
  5. Автоматические кованые прессы: особенности, преимущества и применение
  6. Пневматические бароавтоматы: экономичное решение для автоматизации токарных станков с ЧПУ
  7. Автоматические трубогибоны: функции, преимущества и применение
  8. Автоматические вращательные столы: точность и эффективность в металлообработке
  9. Автоматическая коробка передач: полное руководство — виды, узлы, принцип работы
  10. Автоматические системы смазки (ALS): принципы, виды, компоненты и преимущества