- Необходимый материал
- Принципиальная электрическая схема
- 3D-модель кормушки для домашних животных
- Модуль DS3231 RTC
- Код и объяснение
- Работа автоматической кормушки для домашних животных
Сегодня мы создаем автоматическую кормушку для домашних животных на базе Arduino, которая может автоматически своевременно подавать корм вашему питомцу. Он имеет модуль DS3231 RTC (часы реального времени), который используется для установки времени и даты, когда вашему питомцу следует кормить. Таким образом, установив время в соответствии с графиком питания вашего питомца, устройство автоматически уронит или наполняет миску для корма.
В этой схеме мы используем ЖК-дисплей 16 * 2 для отображения времени с помощью модуля DS3231 RTC с Arduino UNO. Кроме того, серводвигатель используется для вращения контейнеров для подачи корма и матричная клавиатура 4 * 4 для ручной настройки времени кормления питомца. Вы можете установить угол поворота и продолжительность открытия контейнера в зависимости от количества корма, которое вы хотите подать своему питомцу. Количество еды также может зависеть от вашего питомца, будь то собака, кошка или птица.
Необходимый материал
- Arduino UNO
- Матричная клавиатура 4 * 4
- 16 * 2 ЖК-дисплей
- Нажать кнопку
- Серводвигатель
- Резистор
- Подключение проводов
- Макетная плата
Принципиальная электрическая схема
В этой кормушке для кошек на базе Arduino для получения времени и даты мы использовали модуль RTC (часы реального времени). Мы использовали матричную клавиатуру 4 * 4, чтобы вручную установить время еды питомца с помощью ЖК-дисплея 16x2. Сервомотор вращает контейнер и сбрасывает пищу в установленное пользователем время. ЖК-дисплей используется для отображения даты и времени. Полную работу можно найти в видео, приведенном в конце.
3D-модель кормушки для домашних животных
Мы разработали этот Arduino Pet Feeder контейнер с помощью 3D-принтера. Вы также можете распечатать тот же дизайн, загрузив файлы отсюда. Материал, используемый для печати этой модели - PLA. Он состоит из четырех частей, как показано на изображении ниже:
Соберите четыре части и подключите серводвигатель, как показано на рисунке ниже:
Если вы новичок в 3D-печати, вот руководство для начала. Вы можете скачать файлы STL для этой кормушки здесь.
Модуль DS3231 RTC
DS3231 - это модуль часов реального времени (RTC). Он используется для поддержания даты и времени для большинства проектов в области электроники. Этот модуль имеет собственный источник питания с круглой ячейкой, с помощью которого он поддерживает дату и время даже при отключении основного питания или при аппаратном сбросе MCU. Итак, как только мы установим дату и время в этом модуле, он всегда будет их отслеживать. В нашей схеме мы используем DS3231 для кормления питомца в соответствии со временем, установленным владельцем питомца, как будильник. Когда часы достигают установленного времени, они приводят в действие серводвигатель, чтобы открыть заслонку контейнера, и еда падает в миску для корма питомца.
Примечание: при первом использовании этого модуля вам необходимо установить дату и время. Вы также можете использовать RTC IC DS1307 для чтения времени с помощью Arduino.
Код и объяснение
Полный код Arduino от Automatics Pet Feeder приведен в конце.
У Arduino есть библиотеки по умолчанию для использования с ним серводвигателя и LCD 16 * 2. Но для использования модуля DS3231 RTC и матричной клавиатуры 4 * 4 с Arduino вам необходимо загрузить и установить библиотеки. Ссылка для скачивания обеих библиотек приведена ниже:
- Библиотека модулей DS3231 RTC (часы реального времени)
- Библиотека матричной клавиатуры 4 * 4
В приведенном ниже коде мы определяем библиотеки: «#include
#включают
В приведенном ниже коде мы определяем раскладку клавиатуры для матричной клавиатуры 4 * 4 и назначаем выводы Arduino для строк и столбцов клавиатуры.
char keys = {{'1', '2', '3', 'A'}, {'4', '5', '6', 'B'}, {'7', '8', ' 9 ',' C '}, {' * ',' 0 ',' # ',' D '}}; byte rowPins = {2, 3, 4, 5}; byte colPins = {6, 7, 8, 9};
Здесь мы создаем клавиатуру, используя команду ниже в коде.
Keypad kpd = Keypad (makeKeymap (keys), rowPins, colPins, ROWS, COLS);
Назначение контактов Arduino A4 и A5 для подключения к контактам SCL и SDA DS3231. Кроме того, назначение контактов ЖК-дисплею и инициализация серводвигателя.
DS3231 rtc (A4, A5); Servo servo_test; // инициализировать сервообъект для подключенного сервопривода LiquidCrystal lcd (A0, A1, A2, 11, 12, 13); // Создает объект LC. Параметры: (rs, enable, d4, d5, d6, d7)
В приведенном ниже коде мы объявляем от t1 до t6, ключ и массив r, а также фид.
int t1, t2, t3, t4, t5, t6; логическая подача = истина; ключ char; int r;
В приведенном ниже коде мы настраиваем все компоненты для начала. Как в этом коде «servo_test.attach (10);» Сервопривод подключается к 10- му выводу Arduino. Определение A0, A1 и A2 в качестве выходного контакта и инициализация модуля LCD и RTC.
недействительная настройка () {servo_test.attach (10); // подключаем сигнальный вывод сервопривода к выводу 9 arduino rtc.begin (); lcd.begin (16,2); servo_test.write (55); Serial.begin (9600); pinMode (A0, ВЫХОД); pinMode (A1, ВЫХОД); pinMode (A2, ВЫХОД); }
Теперь важно понять, как работает цикл. Каждый раз, когда нажимается кнопка, она переходит в высокий уровень, что означает 1, что можно прочитать с помощью «buttonPress = digitalRead (A3)» . Теперь он входит в оператор if и вызывает функцию setFeedingTime . Затем он сравнивает реальное время и время, введенное пользователем. Если условие истинно, что означает, что реальное время и введенное время совпадают, серводвигатель поворачивается на угол 100 градусов и после задержки 0,4 секунды возвращается в исходное положение.
недействительный цикл () {lcd.setCursor (0,0); int buttonPress; buttonPress = digitalRead (A3); если (buttonPress == 1) setFeedingTime (); lcd.print ("Время:"); Строка t = ""; t = rtc.getTimeStr (); t1 = t.charAt (0) -48; t2 = t.charAt (1) -48; t3 = t.charAt (3) -48; t4 = t.charAt (4) -48; t5 = t.charAt (6) -48; t6 = t.charAt (7) -48; lcd.print (rtc.getTimeStr ()); lcd.setCursor (0,1); lcd.print ("Дата:"); lcd.print (rtc.getDateStr ()); если (t1 == r && t2 == r && t3 == r && t4 == r && t5 <1 && t6 <3 && feed == true) {servo_test.write (100); // команда для поворота сервопривода на указанный угол delay (400); servo_test.write (55); feed = false; }}
В коде функции void setFeedingTime () после нажатия кнопки мы можем ввести время кормления питомца, затем мы должны нажать «D», чтобы сэкономить это время. Когда сохраненное время совпадает с реальным временем, сервопривод начинает вращаться.
void setFeedingTime () {feed = true; int я = 0; lcd.clear (); lcd.setCursor (0,0); lcd.print («Установить время кормления»); lcd.clear (); lcd.print ("ЧЧ: ММ"); lcd.setCursor (0,1); в то время как (1) {ключ = kpd.getKey (); char j; если (ключ! = NO_KEY) {lcd.setCursor (j, 1); lcd.print (ключ); r = ключ-48; i ++; j ++; если (j == 2) {lcd.print (":"); j ++; } задержка (500); } если (ключ == 'D') {ключ = 0; сломать; }}}
Работа автоматической кормушки для домашних животных
После загрузки кода в Arduino Uno время и дата будут отображаться на ЖК-дисплее размером 16 * 2. Когда вы нажимаете кнопку, она запрашивает время кормления питомца, и вы должны ввести время, используя матричную клавиатуру 4 * 4. На дисплее будет отображаться введенное время, и если вы нажмете «D», это сэкономит время. Когда реальное время и введенное время совпадают, он поворачивает серводвигатель из исходного положения 55 ° на 100 ° и после задержки снова возвращается в исходное положение. Таким образом, серводвигатель подключен к заслонке контейнера для пищевых продуктов, поэтому, когда он движется, заслонка открывается, и некоторое количество еды падает в миску или тарелку. После задержки 0,4 секунды серводвигатель снова вращается и закрывает ворота. Весь процесс занимает несколько секунд. Таким образом ваш питомец автоматически получает корм в указанное вами время.
Меняйте время и степень в зависимости от еды