Автоматическая кормушка для домашних животных - Своими руками
Своими руками

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

>

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

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

Конечно, для изготовления именно такого аппарата нужен 3D-принтер, но, я думаю, несложно будет адаптировать для этих целей старую мясорубку.

Инструменты и материалы:
-Шаговый двигатель NEMA17 – 42HB34F08AB;
-Драйвер шагового двигателя A4988;-Arduino UNO;-Клавиатура Arduino 4×4;-Часы RTC DS3231;-ЖК-дисплей 16×2;-Понижающий модуль LM2596S;-Источник питания 12 В;
-Провода;
-Монтажная плата;-Паяльные принадлежности;-Разъем питания 12В;-3D-принтер;
-Крепеж;
-Отвертка;
-Компьютер с ПО;
Шаг первый: печать деталей
Сначала мастер разработал детали в графическом редакторе, затем напечатал их на 3D-принтере. Печать деталей у него заняла около 5 дней. Файлы можно скачать ниже.
Автоматическая кормушка для домашних животных Показать / Скрыть текстmain pipe.stlnema 17 mount.stlpipe extension.stlscrew nema 17 5mm and nut.stlsupport 1.stlsupport 2.stltank crater (floor).stltank roof.stltank walls.stltop part main pipe.stlbox roof.stlbox wall.stlcap.stlbig box.stl
Автоматическая кормушка для домашних животныхСамым сложным было напечатать шнек. Для его печати шнек мастер печатал в вертикальном положении с использованием опор.
Автоматическая кормушка для домашних животныхАвтоматическая кормушка для домашних животныхШаг второй: электроника
Вся электрическая часть монтируется согласно схеме. Если дисплей при работе слишком темный, то нужно изменить значение резистора.
Автоматическая кормушка для домашних животныхАвтоматическая кормушка для домашних животныхШаг третий: код Arduino
Код Arduino включает дополнительные библиотеки: DS3231 RTC, Arduino Keypad 4×4
Когда пользователь нажимает ‘A’ – программа запрашивает время первой подачи и ждет, пока он не введете ЧЧ: ММ: СС.
Когда пользователь нажимает ‘B’ – программа запрашивает время второй подачи и ждет, пока он не введете ЧЧ: ММ: СС
Когда пользователь нажимает ‘C’ – шаговый двигатель работает в течение одного цикла (одна подача)
При нажатии ‘D’ на ЖК-дисплее отображается текущая дата.
ЖК-дисплей обычно отображает текущее время, а также часы и минуты первого и второго времени подачи.
Все функции описаны в коде ниже:
Автоматическая кормушка для домашних животных Показать / Скрыть текст#include <DS3231.h>
#include <LiquidCrystal.h>
#include <Keypad.h>

const byte ROWS = 4;
const byte COLS = 4;
const int stepPin = 10;
const int dirPin = A3;

char keys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte rowPins[ROWS] = { 2, 3, 4, 5 };
byte colPins[COLS] = { 6, 7, 8, 9 };

Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
DS3231 rtc(A4, A5);

LiquidCrystal lcd(A0, A1, A2, 11, 12, 13); // (rs, enable, d4, d5, d6, d7)

int feed_time = 2000; //define how fast stepper motor works
int feed_length = 600; //define how much steps should your motor do (mine does 200 for full spin)

String feed1;
String feed2;
char key[8];
int j = 0;
char button;

void setup() {

rtc.begin();
lcd.begin(16,2);
Serial.begin(9600);
pinMode(A0, OUTPUT);
pinMode(A1, OUTPUT);
pinMode(A2, OUTPUT);
pinMode(stepPin,OUTPUT);
pinMode(dirPin,OUTPUT);
}

void loop() {

lcd.setCursor(0,0);
lcd.print("Time: ");
lcd.print(rtc.getTimeStr());
lcd.setCursor(0,1);
//lcd.print("Date: "); //Date to display
//lcd.print(rtc.getDateStr());
lcd.print("1)");
lcd.print(feed1);
lcd.setCursor(7,1);
lcd.print(" 2)");
lcd.print(feed2);
lcd.setCursor(15,1);
lcd.print(" ");

button = keypad.getKey();

if(button == 'A'){
lcd.clear();
lcd.setCursor(0,0);
lcd.print("HH:MM:SS 1st");
delay(500);
j = 0;
lcd.setCursor(j,1);
key[0] = keypad.waitForKey();
lcd.print(key[0]);j++;
lcd.setCursor(j,1);
key[1] = keypad.waitForKey();
lcd.print(key[1]);j++;
lcd.setCursor(j,1);
key[2] = ':';
lcd.print(key[2]);j++;
lcd.setCursor(j,1);
key[3] = keypad.waitForKey();
lcd.print(key[3]);j++;
lcd.setCursor(j,1);
key[4] = keypad.waitForKey();
lcd.print(key[4]);j++;
lcd.setCursor(j,1);
key[5] = ':';
lcd.print(key[5]);j++;
lcd.setCursor(j,1);
key[6] = keypad.waitForKey();
lcd.print(key[6]);j++;
lcd.setCursor(j,1);
key[7] = keypad.waitForKey();
lcd.print(key[7]);
key[8] = '';
feed1 = String(key);
delay(1000);
lcd.clear();
}

if(button == 'B'){
lcd.clear();
lcd.setCursor(0,0);
lcd.print("HH:MM:SS 2nd");
delay(500);
j = 0;
lcd.setCursor(j,1);
key[0] = keypad.waitForKey();
lcd.print(key[0]);j++;
lcd.setCursor(j,1);
key[1] = keypad.waitForKey();
lcd.print(key[1]);j++;
lcd.setCursor(j,1);
key[2] = ':';
lcd.print(key[2]);j++;
lcd.setCursor(j,1);
key[3] = keypad.waitForKey();
lcd.print(key[3]);j++;
lcd.setCursor(j,1);
key[4] = keypad.waitForKey();
lcd.print(key[4]);j++;
lcd.setCursor(j,1);
key[5] = ':';
lcd.print(key[5]);j++;
lcd.setCursor(j,1);
key[6] = keypad.waitForKey();
lcd.print(key[6]);j++;
lcd.setCursor(j,1);
key[7] = keypad.waitForKey();
lcd.print(key[7]);
key[8] = '';
feed2 = String(key);
delay(1000);
lcd.clear();
}
if(button == 'D'){
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Time: ");
lcd.print(rtc.getTimeStr());
lcd.setCursor(0,1);
lcd.print("Date: "); //Date to display
lcd.print(rtc.getDateStr());
delay(5000);
lcd.clear();
}
if(button == 'C'){
digitalWrite(dirPin,HIGH); // Enables the motor to move in a particular direction

for(int x = 0; x < feed_length; x++) { // Makes 200 pulses for making one full cycle rotation
digitalWrite(stepPin,HIGH);
delayMicroseconds(feed_time);
digitalWrite(stepPin,LOW);
delayMicroseconds(feed_time);
}
delay(1000);
}
if (feed1==rtc.getTimeStr())
{
digitalWrite(dirPin,HIGH); // Enables the motor to move in a particular direction

for(int x = 0; x < feed_length; x++) { // Makes 200 pulses for making one full cycle rotation
digitalWrite(stepPin,HIGH);
delayMicroseconds(feed_time);
digitalWrite(stepPin,LOW);
delayMicroseconds(feed_time);
}
delay(1000);
}
if (feed2==rtc.getTimeStr())
{
digitalWrite(dirPin,HIGH); // Enables the motor to move in a particular direction

for(int x = 0; x < feed_length; x++) { // Makes 200 pulses for making one full cycle rotation
digitalWrite(stepPin,HIGH);
delayMicroseconds(feed_time);
digitalWrite(stepPin,LOW);
delayMicroseconds(feed_time);
}
delay(1000);
}
} dog_feeder_keypad_lcd_stepper_motor.inoШаг четвертый: установка времени и даты на модуле RTC
Ниже можно скачать код для установки времени и даты в DS3231. Перед прошивкой нужно установить библиотеку DS3231.
Подключение модуля к Ардуино следующее:
DS3231 SDA – A4 в Arduino
DS3231 SCL – A5 в Arduino
Автоматическая кормушка для домашних животных Показать / Скрыть текст#include <DS3231.h>

// Init the DS3231 using the hardware interface
DS3231 rtc(A4, A5);

void setup()
{
// Setup Serial connection
Serial.begin(115200);

// Initialize the rtc object
rtc.begin();

// Write your current time and date to this following lines
rtc.setDOW(MONDAY); // Set Day-of-Week to Monday
rtc.setTime(12, 0, 0); // Set the time to 12:00:00 (24hr format)
rtc.setDate(01, 01, 2014); // Set the date to January 1st, 2014
}

void loop()
{
// Send Day-of-Week
Serial.print(rtc.getDOWStr());
Serial.print(" ");

// Send date
Serial.print(rtc.getDateStr());
Serial.print(" — ");

// Send time
Serial.println(rtc.getTimeStr());

// Wait one second before repeating :)
delay (1000);
}<br>DS3231_Set_Time.ino
Автоматическая кормушка для домашних животныхШаг пятый: сборка
Сборка простая и интуитивно понятная. Для крепежа деталей аппарата мастер использует винты. Шнек просто насаживается на вал двигателя и фиксируется винтом.
Автоматическая кормушка для домашних животныхАвтоматическая кормушка для домашних животныхВсе готово, теперь ваши животные не останутся голодными, даже если вы несколько дней будет отсутствовать дома.
Автоматическая кормушка для домашних животныхАвтоматическая кормушка для домашних животных

SitesReady

Только те, кто предпринимают абсурдные попытки, смогут достичь невозможного. - Альберт Эйнштейн

Follow us

Don't be shy, get in touch. We love meeting interesting people and making new friends.