- Необходим материал
- Електрическа схема
- 3D отпечатан модел за подаване на домашни любимци
- DS3231 RTC модул
- Код и обяснение
- Работа на автоматичната хранилка за домашни любимци
Днес изграждаме автоматична хранилка за домашни любимци, базирана на Arduino, която може автоматично да сервира храна на вашия домашен любимец навреме. Той има модул DS3231 RTC (часовник в реално време), който използва за задаване на час и дата, на които вашият домашен любимец трябва да получи храна. Така че, като настроите времето според графика за хранене на вашия домашен любимец, устройството автоматично изпуска или пълни купата с храна.
В тази схема ние използваме 16 * 2 LCD, за да покажем времето, използвайки DS3231 RTC модул с Arduino UNO. Също така, серво мотор се използва за завъртане на контейнерите за осигуряване на храна и матрична клавиатура 4 * 4 за ръчно настройване на времето за хранене на домашния любимец. Можете да зададете ъгъла на въртене и продължителността на отваряне на контейнера според количеството храна, което искате да сервирате на вашия домашен любимец. Количеството храна може също да зависи от вашия домашен любимец, независимо дали е куче, котка или птица.
Необходим материал
- Arduino UNO
- 4 * 4 матрична клавиатура
- 16 * 2 LCD
- Натисни бутона
- Серво мотор
- Резистор
- Свързване на проводници
- Макет
Електрическа схема
В тази базирана на Arduino Cat Feeder, за получаване на час и дата, използвахме RTC (часовник в реално време) модул. Използвали сме матричната клавиатура 4 * 4, за да зададем ръчно времето за хранене на домашния любимец с помощта на 16x2 LCD. Серво моторът завърта контейнера и пуска храната в определеното от потребителя време. LCD се използва за показване на датата и часа. Пълна работа може да се намери във видеото, дадено в края.
3D отпечатан модел за подаване на домашни любимци
Ние проектирахме този контейнер за подаване на домашни любимци Arduino с помощта на 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 Matrix Keypad Library
В кода по-долу дефинираме библиотеките, „#include
#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);
Присвояване на щифтове A4 и A5 Arduino за свързване с щифтове SCL и SDA на DS3231. Също така, присвояване на щифтове на LCD и инициализиране на серво мотора.
DS3231 rtc (A4, A5); Серво серво_тест; // инициализиране на серво обект за свързания серво 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 модул.
void setup () {servo_test.attach (10); // прикрепете сигналния щифт на серво към pin9 на arduino 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 = 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); докато (1) {ключ = 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 (ключ == 'D') {ключ = 0; почивка; }}}
Работа на автоматичната хранилка за домашни любимци
След качването на кода в Arduino Uno, часът и датата ще бъдат показани на 16 * 2 LCD. Когато натиснете бутона, той изисква времето за хранене на домашния любимец и трябва да въведете часа с помощта на матричната клавиатура 4 * 4. Дисплеят ще покаже въведеното време и докато натискате „D“, той спестява времето. Когато реалното време и въведеното време съвпадат, той завърта серво мотора от първоначалното му положение 55⁰ на 100⁰ и след забавяне отново се връща в първоначалното си положение. Следователно сервомоторът е свързан към портата на контейнера за храна, така че докато се движи, портата ще се отвори и известно количество храна попада в купата или чинията. След закъснение 0,4 секунди сервомоторът се завърта отново и затваря портата. Целият процес завършва в рамките на няколко секунди. Ето как вашият домашен любимец получава храната автоматично в момента, в който сте въвели.
Променете времето и степента според храната