- Необхідний матеріал
- Кругова діаграма
- Модель годівниці для домашніх тварин з 3D-принтом
- Модуль RTC DS3231
- Код та пояснення
- Працює автоматична годівниця для домашніх тварин
Сьогодні ми будуємо автоматичну годівницю для домашніх тварин на базі Arduino, яка може автоматично вчасно подавати їжу вашому вихованцеві. У ньому є модуль DS3231 RTC (Годинник реального часу), за допомогою якого встановлювали час і дату, коли ваш улюбленець повинен отримувати їжу. Отже, встановивши час відповідно до графіка харчування вашого вихованця, пристрій автоматично опускає або наповнює миску з їжею.
У цій схемі ми використовуємо РК-дисплей 16 * 2 для відображення часу за допомогою модуля RTC DS3231 з Arduino UNO. Крім того, сервомотор використовується для обертання контейнерів для забезпечення їжею та матрична клавіатура 4 * 4 для ручного встановлення часу годування вихованця. Ви можете встановити кут обертання та тривалість відкривання контейнера відповідно до кількості їжі, яку ви хочете подати своєму вихованцеві. Кількість їжі також може залежати від вашого вихованця, будь то собака, кішка чи птах.
Необхідний матеріал
- Arduino UNO
- 4 * 4 матрична клавіатура
- 16 * 2 РК-дисплей
- Нажимна Кнопка
- Серводвигун
- Резистор
- Підключення проводів
- Макет
Кругова діаграма
У цьому пристрої для подавання котів на основі Arduino для отримання часу та дати ми використали модуль RTC (годинник реального часу). Ми використовували матричну клавіатуру 4 * 4 для встановлення часу їжі вихованця вручну за допомогою РК-дисплея 16x2. Сервомотор обертає контейнер і скидає їжу у встановлений користувачем час. РК-дисплей використовується для відображення дати та часу. Повну роботу можна знайти у відео, поданому в кінці.
Модель годівниці для домашніх тварин з 3D-принтом
Ми розробили цей контейнер Arduino Pet Feeder за допомогою 3D-принтера. Ви також можете надрукувати той самий дизайн, завантаживши файли звідси. Матеріалом, що використовується для друку цієї моделі, є PLA. Він складається з чотирьох частин, як показано на зображенні нижче:
Зберіть чотири деталі та підключіть сервомотор, як показано на малюнку нижче:
Якщо ви не знайомі з 3D-друком, ось путівник. Ви можете завантажити файли STL для цієї годівниці для домашніх тварин тут.
Модуль RTC DS3231
DS3231 - це модуль RTC (Годинник реального часу). Він використовується для збереження дати та часу для більшості проектів з електроніки. Цей модуль має власний блок живлення для монетних клітин, за допомогою якого він підтримує дату та час, навіть коли основне живлення відключено або MCU пройшов жорсткий скидання. Отже, як тільки ми встановимо дату та час у цьому модулі, він буде відстежувати їх завжди. У нашій схемі ми використовуємо DS3231, щоб годувати вихованця відповідно до часу, встановленого власником тварини, як будильник. Оскільки годинник доходить до встановленого часу, він запускає серводвигун, щоб відкрити заслінку контейнера, і їжа падає в миску для їжі вихованця.
Примітка: Під час першого використання цього модуля вам потрібно встановити дату та час. Ви також можете використовувати RTC IC DS1307 для зчитування часу за допомогою Arduino.
Код та пояснення
У кінці подано повний код Arduino Feeder для автоматичних тварин.
Arduino має бібліотеки за замовчуванням для використання сервомотора та РК-дисплея 16 * 2 з ним. Але для використання модуля RTC DS3231 та матричної клавіатури 4 * 4 з Arduino вам потрібно завантажити та встановити бібліотеки. Посилання для завантаження обох бібліотек наведено нижче:
- Бібліотека модулів DS3231 RTC (годинник реального часу)
- Бібліотека матричної клавіатури 4 * 4
У наведеному нижче коді ми визначаємо бібліотеки, "#include
#включати
У наведеному нижче коді ми визначаємо карту клавіатури для матричної клавіатури 4 * 4 і призначаємо шпильки Arduino для рядка та стовпців клавіатури.
клавіші char = {{'1', '2', '3', 'A'}, {'4', '5', '6', 'B'}, {'7', '8', ' 9 ',' C '}, {' * ',' 0 ',' # ',' D '}}; байт rowPins = {2, 3, 4, 5}; байт colPins = {6, 7, 8, 9};
Тут ми створюємо клавіатуру за допомогою команди нижче в коді.
Клавіатура kpd = Клавіатура (makeKeymap (клавіші), rowPins, colPins, ROWS, COLS);
Призначення штифтів Arduino A4 та A5 для підключення до штифтів SCL та SDA DS3231. Крім того, присвоєння контактів на РК-дисплеї та ініціалізація сервомотора.
DS3231 rtc (A4, A5); Серво серво_тест; // ініціалізуємо сервооб'єкт для підключеного сервоприводу LiquidCrystal рідкокристалічний (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.
void setup () {servo_test.attach (10); // приєднати сигнальний штифт сервоприводу до pin9 ардуіно rtc.begin (); lcd.begin (16,2); servo_test.write (55); Serial.begin (9600); pinMode (A0, OUTPUT); pinMode (A1, OUTPUT); pinMode (A2, OUTPUT); }
Тепер важлива частина розуміння того, як працює цикл. Кожного разу, коли натискається кнопка, вона перевищує значення 1, яке можна прочитати за допомогою “buttonPress = digitalRead (A3)” . Тепер він потрапляє всередину оператора if, і викликає функцію setFeedingTime . Потім він порівнює реальний час та введений користувачем час. Якщо умова відповідає дійсності, а це означає, що реальний час і введений час однакові, то сервомотор повертається на кут 100 градусів і після 0,4 секунди затримки повертається у вихідне положення.
цикл void () {lcd.setCursor (0,0); int buttonPress; buttonPress = digitalRead (A3); if (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); // команда для повороту сервоприводу на задану кутову затримку (400); servo_test.write (55); feed = false; }}
У коді функції void setFeedingTime () , після натискання кнопки ми можемо ввести час годування вихованця, тоді нам потрібно натиснути 'D', щоб зберегти цей час. Коли збережений час збігається з реальним часом, сервопривід починає обертатися.
void setFeedingTime () {feed = true; int i = 0; lcd.clear (); lcd.setCursor (0,0); lcd.print ("Встановити час подачі"); lcd.clear (); lcd.print ("HH: MM"); lcd.setCursor (0,1); while (1) {key = kpd.getKey (); char j; if (ключ! = NO_KEY) {lcd.setCursor (j, 1); lcd.print (ключ); r = ключ-48; i ++; j ++; if (j == 2) {lcd.print (":"); j ++; } затримка (500); } if (key == 'D') {key = 0; перерву; }}}
Працює автоматична годівниця для домашніх тварин
Після завантаження коду на Arduino Uno час та дата відображатимуться на РК-дисплеї 16 * 2. Коли ви натискаєте кнопку, він запитує час годування вихованця, і ви повинні ввести час за допомогою матричної клавіатури 4 * 4. На дисплеї відображатиметься введений час, і коли ви натискаєте 'D', це економить час. Коли реальний час та Введений час збігаються, він обертає серводвигун із початкового положення 55⁰ до 100⁰ і після затримки знову повертається у вихідне положення. Отже, сервомотор підключений до заслінки харчового контейнера, тому, рухаючись, заслінка відкриється і деяка кількість їжі потрапляє в чашу або тарілку. Після затримки 0,4 секунди сервомотор знову обертається і закриває заслінку. Весь процес завершується за кілька секунд. Так ваш вихованець автоматично отримує їжу в той час, коли ви ввели.
Змінюйте час і ступінь відповідно до їжі