- Potrebný materiál
- Schéma zapojenia
- Model tlačeného 3D podávača domácich zvierat
- Modul RTC DS3231
- Kód a vysvetlenie
- Práca s automatickým podávačom domácich zvierat
Dnes staviame automatické krmítko pre domáce zvieratá založené na Arduine, ktoré môže vášmu miláčikovi automaticky včas podávať jedlo. Má modul DS3231 RTC (hodiny v reálnom čase), pomocou ktorého sa nastavuje čas a dátum, kedy sa má vášmu miláčikovi podávať jedlo. Nastavením času podľa stravovacieho harmonogramu vášho domáceho maznáčika teda zariadenie automaticky spadne alebo naplní misku na jedlo.
V tomto obvode používame 16 * 2 LCD na zobrazenie času pomocou modulu DS3231 RTC s Arduino UNO. Servomotor sa tiež používa na otáčanie nádob na zabezpečenie jedla a maticová klávesnica 4 * 4 na manuálne nastavenie času podávania domáceho maznáčika. Môžete nastaviť uhol natočenia a trvanie otvorenia nádoby podľa množstva jedla, ktoré chcete svojmu miláčikovi podať. Množstvo jedla môže závisieť aj od vášho domáceho maznáčika, či už je to pes, mačka alebo vták.
Potrebný materiál
- Arduino UNO
- Maticová klávesnica 4 * 4
- 16 * 2 LCD
- Tlačidlo
- Servo motor
- Rezistor
- Pripojenie drôtov
- Nepál
Schéma zapojenia
V tomto podávači mačiek založenom na Arduine sme na získanie času a dátumu použili modul RTC (hodiny v reálnom čase). Použili sme maticovú klávesnicu 4 * 4 na manuálne nastavenie času stravovania zvieraťa pomocou 16x2 LCD. Servomotor otáča nádobu a vypúšťa jedlo v čase stanovenom používateľom. LCD sa používa na zobrazenie dátumu a času. Kompletné fungovanie nájdete vo videu na konci.
Model tlačeného 3D podávača domácich zvierat
Tento kontajner Arduino Pet Feeder sme navrhli pomocou 3D tlačiarne. Rovnaký dizajn môžete vytlačiť aj stiahnutím súborov odtiaľto. Materiál použitý na tlač tohto modelu je PLA. Má štyri časti, ako je znázornené na obrázku nižšie:
Zostavte štyri časti a pripojte servomotor podľa obrázka nižšie:
Ak ste v oblasti 3D tlače nováčikom, je tu úvodná príručka. Súbory STL pre toto krmítko pre domáce zvieratá si môžete stiahnuť tu.
Modul RTC DS3231
DS3231 je modul RTC (hodiny v reálnom čase). Používa sa na zachovanie dátumu a času pre väčšinu projektov elektroniky. Tento modul má vlastné napájanie z gombíkových článkov, pomocou ktorého udržiava dátum a čas, aj keď je odpojené hlavné napájanie alebo MCU prešiel tvrdým resetom. Akonáhle teda nastavíme dátum a čas v tomto module, bude ho vždy sledovať. V našom obvode používame zariadenie DS3231 na kŕmenie domáceho maznáčika podľa času nastaveného majiteľom domáceho maznáčika ako alarm. Keď hodiny dosiahnu nastavený čas, uvedú do činnosti servomotor, aby otvorili bránu kontajnera a jedlo kleslo do misky s domácim miláčikom.
Poznámka: Pri prvom použití tohto modulu musíte nastaviť dátum a čas. Na čítanie času pomocou Arduina môžete použiť aj RTC IC DS1307.
Kód a vysvetlenie
Na konci je uvedený kompletný Arduino kód Automatics Pet Feeder.
Arduino má predvolené knižnice na používanie servomotora a LCD 16 * 2. Ak však chcete v Arduine používať modul RTC DS3231 a maticovú klávesnicu 4 * 4, musíte si stiahnuť a nainštalovať knižnice. Odkaz na stiahnutie pre obe knižnice je uvedený nižšie:
- Knižnica modulu DS3231 RTC (hodiny v reálnom čase)
- Knižnica maticových klávesníc 4 * 4
V nasledujúcom kóde definujeme knižnice, „#include
#include
V nasledujúcom kóde definujeme klávesovú mapu pre maticovú klávesnicu 4 * 4 a priraďujeme piny Arduino pre riadky a stĺpce klávesnice.
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};
Tu vytvárame klávesnicu pomocou príkazu uvedeného nižšie v kóde.
Klávesnica kpd = Klávesnica (makeKeymap (klávesy), RowPins, ColPins, ROWS, COLS);
Priradenie pinov A4 a A5 Arduino na pripojenie k pinom SCL a SDA modelu DS3231. Tiež priradenie pinov k LCD a inicializácia servomotora.
DS3231 rtc (A4, A5); Servo servo_test; // inicializuje servo objekt pre pripojene servo LiquidCrystal lcd (A0, A1, A2, 11, 12, 13); // Vytvorí LC objekt. Parametre: (rs, enable, d4, d5, d6, d7)
V nasledujúcom kóde deklarujeme t1 až t6, kľúč a pole r a informačný kanál.
int t1, t2, t3, t4, t5, t6; boolean feed = true; char kľúč; int r;
V nasledujúcom kóde nastavujeme všetky komponenty na začiatok. Podobne ako v tomto kóde „servo_test.attach (10);“ Servo je pripojený k 10 -tého kolíka Arduino. Definovanie A0, A1 a A2 ako výstupného kolíka a inicializácia modulu LCD a RTC.
void setup () {servo_test.attach (10); // pripojte signálny pin serva na pin9 arduino rtc.begin (); lcd.začiatok (16,2); servo_test.write (55); Serial.begin (9600); pinMode (A0, VÝSTUP); pinMode (A1, VÝSTUP); pinMode (A2, VÝSTUP); }
Teraz je dôležité pochopiť, ako slučka funguje. Po každom stlačení tlačidla sa hodnota zvýši na 1, čo sa dá prečítať „buttonPress = digitalRead (A3)“ . Teraz ide do príkazu „if“ a volá funkciu „setFeedingTime“ . Potom porovnáva reálny čas a zadaný čas používateľom. Ak je podmienka pravdivá, čo znamená, že skutočný čas a zadaný čas sú rovnaké, potom sa servomotor točí do a uhla 100 stupňov a po 0,4 sekundách oneskorenia sa vráti do svojej pôvodnej polohy.
void loop () {lcd.setCursor (0,0); tlačidlo int buttonPress = digitalRead (A3); if (buttonPress == 1) setFeedingTime (); lcd.print ("Čas:"); Reťazec t = ""; t = rtc.getTimeStr (); ti = 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 ("Dátum:"); lcd.print (rtc.getDateStr ()); if (t1 == r && t2 == r && t3 == r && t4 == r && t5 <1 && t6 <3 && feed == true) {servo_test.write (100); // príkaz otočiť servo na zadané uhlové oneskorenie (400); servo_test.write (55); feed = false; }}
Vo funkčnom kóde void setFeedingTime () , po stlačení tlačidla môžeme zadať čas kŕmenia zvieraťa, potom musíme stlačiť kláves „D“, aby sme tento čas zachránili. Keď sa ušetrený čas zhoduje s reálnym časom, servo sa začne otáčať.
void setFeedingTime () {feed = true; int i = 0; lcd.clear (); lcd.setCursor (0,0); lcd.print ("Nastaviť čas podávania"); lcd.clear (); lcd.print ("HH: MM"); lcd.setCursor (0,1); while (1) {key = kpd.getKey (); char j; if (kľúč! = NO_KEY) {lcd.setCursor (j, 1); lcd.print (kľúč); r = kľúč-48; i ++; j ++; if (j == 2) {lcd.print (":"); j ++; } oneskorenie (500); } if (key == 'D') {key = 0; prestávka; }}}
Práca s automatickým podávačom domácich zvierat
Po nahraní kódu do Arduino Uno sa čas a dátum zobrazia na 16 * 2 LCD. Po stlačení tlačidla sa zobrazí výzva na kŕmenie zvieraťa a čas musíte zadať pomocou maticovej klávesnice 4 * 4. Na displeji sa zobrazí zadaný čas a stlačením 'D' sa šetrí čas. Keď sa zhoduje skutočný čas a zadaný čas, otočí servomotor z pôvodnej polohy 55⁰ na 100⁰ a po oneskorení sa opäť vráti do svojej pôvodnej polohy. Preto je servomotor pripojený k bráne kontajnera na potraviny, takže keď sa pohybuje, brána sa otvorí a určité množstvo jedla spadne do misky alebo taniera. Po oneskorení 0,4 sekundy sa servomotor opäť roztočí a zatvorí bránu. Celý proces je dokončený v priebehu niekoľkých sekúnd. Takto získa vaše domáce zviera jedlo automaticky v čase, ktorý ste zadali.
Zmeňte čas a stupeň podľa jedla