Оглавление:
2025 Автор: John Day | [email protected]. Последнее изменение: 2025-01-13 06:58
Это мой проект автоматической кормушки для домашних животных. Меня зовут Паркер, я учусь в 11 классе, и я сделал этот проект 11 ноября 2020 года в качестве CCA (завершающее задание курса). В этом проекте я покажу вам, как сделать автоматическую кормушку для домашних животных с Arduino UNO. Вы можете выбрать время, которое можете изменить. Корм будет подаваться через шнек и кормить ваших питомцев!
Запасы
Электроника:
- Arduino UNO
- L298N - 10 $ - Управляет Nema 17
- NEMA 17 - 10 $ - Поворачивает шнек для подачи корма
- RTC (DS1307) - 10 $ - дает время
- Блок питания 12 В - 5 $ - Все питает
- Мини-макетная плата - для дополнительного места для проводки
- Провода перемычки - все соединяет
- Женский и мужской провода - соединяет все
Аппаратное обеспечение:
- Нить для 3D-печати - для 3D-принтера
- 2 болта M4 - удерживайте опорную плиту на месте
- 4 болта Nema 17 - удерживайте nema вниз
- ПВХ Т 48мм внутренний размер 66мм внешний размер - 3 $
Инструменты:
- 3д принтер
- Дрель
- Паяльный пистолет
Шаг 1. Обзор дизайна
Конструкция кормушки для домашних животных очень проста. Бункер устанавливается на верхнюю часть ПВХ T. Затем на заднюю часть ПВХ T устанавливается крышка (как показано на рисунке) с прикрепленным к ней Nema 17. Затем Nema 17 будет вставлен в заднюю часть шнека, который можно увидеть выше, и болт войдет в боковую часть, чтобы удерживать его на месте, чтобы он не деформировал отверстие, которое можно увидеть выше!
Тогда шнек просто вытолкнет корм из трубы в миску!
Шаг 2: Обзор кода
RTC & Stepper имеет библиотеку под названием RTClib.h и Stepper.h, которая добавляет упрощенный код для RTC & Stepper. Операторы if очень просты: если часы и минуты равны указанному времени, он будет вращать nema, который будет раздавать еду. Остальной код очень легко понять даже для человека с дневным опытом.
Шаг 3: прикрепление Nema 17 к опорной плите и шнеку
Сначала вам нужно взять базовую пластину и прикрепить ее к Nema 17, используя предварительно сделанные отверстия на опорной пластине. После этого вы хотите прикрепить шнек к Nema через заднее отверстие на нем. Затем соедините опорную пластину со шнеком и прикрепленным Nema, затем вверните болты M2 с каждой стороны.
Шаг 4: Подключение L298N и RTC
Этот шаг расскажет вам, как подключить L298N и RTC.
Мы начнем с контактов 8, 9, 10, 11 на L298N.
- Контакт 8 (белый) к IN1
- Контакт 9 (фиолетовый) к IN2
- Контакт 10 (розовый) к IN3
- КОНТАКТ 11 (желтый) к IN4
Далее мы подключим Nema 17 к L298N.
- OUT1 к 1 по NEMA
- OUT2 - 2 по NEMA
- OUT3 до 3 по NEMA
- OUT4 до 4 по NEMA
Подключение 12 В и Arduino к L298N (не удалось найти 12 В, поэтому представьте батарею 9 В в качестве источника питания)
- Вольт до 12В
- Земля на GND
- От 5 В до 5 В на макетной плате
Подключение RTC к Arduino
- GND к GND
- От 5 В до 5 В на макетной плате
- SDA в A5
- SCL в A4
Перемычки
Все перемычки должны быть на L298N
Шаг 5. Кодирование с комментариями
Код более понятен на изображениях выше
// Имя: Паркер Фредерик
// Название проекта: Auto Pet Feeder // Дата: вторник, 10 ноября 2020 г. // Учитель: М. Бонистил // Описание: Кормите своих питомцев в указанное время!
// Библиотеки для вещей, которые я использовал #include #include #include "RTClib.h"
RTC_DS1307 rtc; // Говорит, какой RTC я использую
// Здесь вы устанавливаете время для еды
// Часы int mornFeedTime = 12; int nightFeedTime = 7; // Минуты int mornFeedTimeM = 29; int nightFeedTimeM = 00; // Секунды int mornFeedTimeS = 20; int nightFeedTimeS = 00;
char daysOfTheWeek [7] [12] = {«Воскресенье», «Понедельник», «Вторник», «Среда», «Четверг», «Пятница», «Суббота»}; // Превращает обычные дни в дни недели
const int feed = 200; // Это ваши шаги, поэтому сколько раз вы хотите, чтобы он вращался
Stepper myStepper (подача, 8, 9, 10, 11); // Ваши контакты для Nema 17 и большинства других степперов
void setup () {Serial.begin (9600);
в то время как (! серийный); // Если RTC не работает, он отобразит его на последовательном экране if (! Rtc.begin ()) {Serial.println ("Не удалось найти RTC"); в то время как (1); }
// Это сообщит вам, работают ли часы реального времени, и отобразит их на последовательном экране if (! Rtc.isrunning ()) {Serial.println ("RTC is running!");
rtc.adjust (DateTime (F (_ DATE_), F (_ TIME_))); // Это займет у вашего компьютера время и будет использовать его в RTC
// Если вы хотите установить время вместо компьютерного, вы можете сделать это здесь //rtc.adjust(DateTime(2020, 10, 29, 8, 28, 0)); // Год / Месяц / День / Час / Минута / Секунда} myStepper.setSpeed (200); // Скорость, с которой он должен разворачиваться}
недействительный цикл () {DateTime now = rtc.now ();
// Это сделает эту переменную текущим часом и т. Д. Int hr = now.hour (); int mi = now.minute (); int se = now.second ();
// Закодируем так, чтобы в установленное время он выдавал еду и вращался 5 раз, это если для утреннего кормления
if (hr == mornFeedTime && mi == mornFeedTimeM && mornFeedTimeS == se) {Serial.println ("Завтрак!"); myStepper.step (-фид); задержка (700);
myStepper.step (-фид); задержка (700);
myStepper.step (-фид); задержка (700);
myStepper.step (-фид); задержка (700);
myStepper.step (-фид); задержка (700);
myStepper.step (-фид); задержка (700);
myStepper.step (-фид); задержка (700);
}
// Закодируем так, чтобы в установленное время он выдавал еду и вращался 5 раз, это для ночного кормления
if (hr == nightFeedTime && mi == nightFeedTimeM && nightFeedTimeS == se) {Serial.println ("Ужин!"); myStepper.step (-фид); задержка (700);
myStepper.step (-фид); задержка (700);
myStepper.step (-фид); задержка (700);
myStepper.step (-фид); задержка (700);
myStepper.step (-фид); задержка (700);
myStepper.step (-фид); задержка (700);
myStepper.step (-фид); задержка (700); }
// Это отобразит ГОД, МЕСЯЦ, ДЕНЬ, ЧАС, МИНУТУ, СЕКУНДУ в серийном номере
Serial.print (now.year (), DEC); Серийный.принт ('/'); Serial.print (now.month (), DEC); Серийный.принт ('/'); Serial.print (now.day (), DEC); Serial.print ("("); Serial.print (daysOfTheWeek [now.dayOfTheWeek ()]); Serial.print (")"); Serial.print (now.hour (), DEC); Serial.print (':'); Serial.print (now.minute (), DEC); Serial.print (':'); Serial.print (now.second (), DEC); Serial.println (); }
Веб-сайт, который я использовал для RTC, я удалил большинство вещей, кроме операторов if, которые говорят, включен ли RTC или нет. В основном я использовал этот сайт, чтобы научиться программировать RTC
Веб-сайт, который я использовал для шагового двигателя, помог мне понять, как запрограммировать шаговый двигатель для работы, я действительно ничего не скрывал от него. Это просто помогло мне понять, как это кодировать
Шаг 6: Проблемы и как их исправить
У меня было несколько проблем
- Мне нужен был источник питания на 12 В, у меня была только батарея на 9 В, я нашел один, и проблема была быстро решена.
- При подключении L298N к NEMA 17 у меня были неправильные провода на A и A - из-за чего он немного дрожал. Я просто поправил, поменяв провода на другую сторону.
- Пытался сделать код более простым, потому что в операторе if myStepper.step (-feed); снова и снова выглядел беспорядочно. Поэтому мне пришлось вернуть его обратно.
- У меня была опорная пластина неправильного размера, как показано на картинке, поэтому мне пришлось немного распечатать новую, и она идеально подошла!
- У меня проблема в том, что это заедание, так как шнек слишком мал, поэтому он заклинивает, простой способ, который я могу исправить, - это немного увеличить шнек!