- Reikalinga medžiaga
- Grandinės schema
- 3D spausdintas naminių gyvūnėlių tiektuvų modelis
- DS3231 RTC modulis
- Kodas ir paaiškinimas
- Automatinio naminių gyvūnėlių tiekimo įrenginio darbas
Šiandien mes kuriame „ Arduino“ pagrindu veikiantį automatinį naminių gyvūnėlių tiektuvą, kuris gali automatiškai patiekti maistą jūsų augintiniui. Jame yra „ DS3231 RTC“ (realaus laiko laikrodžio) modulis, kuris nustatė laiką ir datą, kada jūsų augintiniui turėtų būti duodamas maistas. Taigi, nustatydamas laiką pagal savo augintinio valgymo grafiką, prietaisas automatiškai numeta arba užpildo maisto dubenėlį.
Šioje grandinėje mes naudojame 16 * 2 skystųjų kristalų ekraną, norėdami parodyti laiką naudodami DS3231 RTC modulį su „Arduino UNO“. Be to, servovariklis naudojamas konteineriams sukti, kad būtų galima tiekti maistą, ir 4 * 4 matricos klaviatūra, kad rankiniu būdu nustatytų naminio gyvūnėlio šėrimo laiką. Pasukimo kampą ir indo atidarymo trukmę galite nustatyti pagal maisto kiekį, kurį norite patiekti savo augintiniui. Maisto kiekis taip pat gali priklausyti nuo jūsų augintinio, nesvarbu, ar tai šuo, katė ar paukštis.
Reikalinga medžiaga
- „Arduino UNO“
- 4 * 4 „Matrix“ klaviatūra
- 16 * 2 skystųjų kristalų ekranas
- Paspauskite mygtuką
- Servo variklis
- Rezistorius
- Laidų sujungimas
- Bandomoji Lenta
Grandinės schema
Šiame „ Arduino“ pagrįstame kačių tiektuve, norėdami gauti laiką ir datą, mes naudojome RTC (realaus laiko laikrodžio) modulį. Mes naudojome 4 * 4 „Matrix“ klaviatūrą, kad nustatytumėte naminio gyvūnėlio valgymo laiką rankiniu būdu, naudodami 16x2 LCD ekraną. „Servo“ variklis sukioja indą ir numeta maistą vartotojo nustatytu laiku. LCD naudojamas datai ir laikui rodyti. Pilną darbą galite rasti vaizdo įraše, pateiktame pabaigoje.
3D spausdintas naminių gyvūnėlių tiektuvų modelis
Šį „ Arduino“ naminių gyvūnėlių tiekimo konteinerį suprojektavome naudodami 3D spausdintuvą. Taip pat galite atsispausdinti tą patį dizainą atsisiųsdami failus iš čia. Šio modelio spausdinimui naudojama medžiaga yra PLA. Jis turi keturias dalis, kaip parodyta paveikslėlyje:
Sumontuokite keturias dalis ir prijunkite servovariklį, kaip parodyta žemiau esančiame paveikslėlyje:
Jei dar nesinaudojote 3D spausdinimu, pateikiamas pradinis vadovas. Šių naminių gyvūnėlių tiektuvų STL failus galite atsisiųsti čia.
DS3231 RTC modulis
DS3231 yra RTC (Real Time Clock) modulis. Jis naudojamas daugumos „Electronics“ projektų datai ir laikui palaikyti. Šis modulis turi savo monetų elementų maitinimo šaltinį, kurį naudodamas jis palaiko datą ir laiką net tada, kai pagrindinė energija yra pašalinta arba MCU yra iš naujo nustatytas iš naujo. Taigi, kai šiame modulyje nustatysime datą ir laiką, ji visada ją stebės. Savo grandinėje mes naudojame DS3231, kad maitintume gyvūną pagal laiką, kurį nustatė augintinio savininkas, kaip žadintuvą. Laikrodžiui pasiekus nustatytą laiką, jis valdo servovariklį, kad atidarytų konteinerio vartus, o maistas lašinamas į augintinio ėdalo dubenėlį.
Pastaba: Pirmą kartą naudodamiesi šiuo moduliu turite nustatyti datą ir laiką. Taip pat galite naudoti RTC IC DS1307 skaitydami laiką su „Arduino“.
Kodas ir paaiškinimas
Pabaigoje pateikiamas pilnas automatikos naminių gyvūnėlių tiekėjų „ Arduino“ kodas.
„Arduino“ turi numatytąsias bibliotekas, skirtas naudoti „Servo“ variklį ir LCD 16 * 2. Bet jei norite naudoti „DS3231 RTC“ modulį ir 4 * 4 „Matrix“ klaviatūrą su „Arduino“, turite atsisiųsti ir įdiegti bibliotekas. Žemiau pateikiama abiejų bibliotekų atsisiuntimo nuoroda:
- DS3231 RTC (realaus laiko laikrodžio) modulių biblioteka
- 4 * 4 „Matrix“ klaviatūros biblioteka
Žemiau esančiame kode mes apibrėžiame bibliotekas: „#include
# įtraukti
Žemiau esančiame kode mes apibrėžiame 4 * 4 matricos klaviatūros klavišus ir priskiriame „Arduino“ kaiščius klaviatūros eilutei ir stulpeliams.
simbolių klavišai = {{'1', '2', '3', 'A'}, {'4', '5', '6', 'B'}, {'7', '8', ' 9 ',' C '}, {' * ',' 0 ',' # ',' D '}}; baitų eilutėSmeigtukai = {2, 3, 4, 5}; baitų colPins = {6, 7, 8, 9};
Čia mes kuriame klaviatūrą naudodami žemiau esančią kodo komandą.
Klaviatūra kpd = Klaviatūra (makeKeymap (raktai), rowPins, colPins, ROWS, COLS);
Skiriant A4 ir A5 „Arduino“ kaiščius prisijungti prie „DS3231“ SCL ir SDA kaiščių. Taip pat, kaiščių priskyrimas LCD ekranui ir servo variklio inicijavimas.
DS3231 rtc (A4, A5); Servo servo_testas; // inicializuoti prijungto servo servo objektą LiquidCrystal lcd (A0, A1, A2, 11, 12, 13); // Sukuria LC objektą. Parametrai: (rs, įjungti, d4, d5, d6, d7)
Žemiau esančiame kode mes deklaruojame t1 - t6, raktą ir masyvą r bei sklaidos kanalą.
int t1, t2, t3, t4, t5, t6; loginis tiekimas = true; char raktas; int r;
Žemiau esančiame kode mes nustatome visus pradžios komponentus. Kaip šiame kode „servo_test.attach (10);“ Servo serveris pritvirtintas prie 10 -ojo „Arduino“ kaiščio. Apibrėžti A0, A1 ir A2 kaip išvesties kaištį ir inicijuoti LCD ir RTC modulį.
negaliojanti sąranka () {servo_test.attach (10); // pritvirtinkite servo signalo kaištį prie arduino rtc.begin (); lcd.prade (16,2); servo_test.write (55); Serijos pradžia (9600); pinMode (A0, OUTPUT); pinMode (A1, OUTPUT); pinMode (A2, OUTPUT); }
Dabar svarbu suprasti, kaip veikia kilpa. Kai tik paspaudžiamas mygtukas, jis eina aukštai, tai reiškia 1, kurį galima perskaityti „buttonPress = digitalRead (A3)“ . Dabar jis eina į teiginį „if“ ir iškviečia funkciją „setFeedingTime“ . Tada palyginamas realus laikas ir vartotojo įvestas laikas. Jei sąlyga yra teisinga, o tai reiškia, kad realusis laikas ir įvestas laikas yra tas pats, tada „Servo“ variklis sukasi 100 laipsnių kampu ir po 0,4 sekundės vėlavimo grįžta į pradinę padėtį.
void loop () {lcd.setCursor (0,0); int mygtukasPaspauskite; mygtukasPaspauskite = digitalRead (A3); if (mygtukasPaspauskite == 1) setFeedingTime (); lcd.print ("Laikas:"); Eilutė 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 ("Data:"); lcd.print (rtc.getDateStr ()); jei (t1 == r && t2 == r && t3 == r && t4 == r && t5 <1 && t6 <3 && feed == true) {servo_test.write (100); // komanda pasukti servo nustatytą kampo vėlavimą (400); servo_test.write (55); pašaras = klaidingas; }}
Funkcijos „ void setFeedingTime ()“ kode paspaudę mygtuką galime įvesti augintinio šėrimo laiką, tada turime paspausti „D“, kad sutaupytume tą laiką. Kai sutaupytas laikas sutampa su realiuoju laiku, servo pradeda suktis.
void setFeedingTime () {feed = true; int i = 0; lcd.clear (); lcd.setCursor (0,0); lcd.print ("Nustatyti tiekimo laiką"); lcd.clear (); lcd.print ("HH: MM"); lcd.setCursor (0,1); while (1) {raktas = kpd.getKey (); char j; if (raktas! = NE_KEY) {lcd.setCursor (j, 1); lcd.print (raktas); r = raktas-48; i ++; j ++; if (j == 2) {lcd.print (":"); j ++; } vėlavimas (500); } if (raktas == 'D') {raktas = 0; pertrauka; }}}
Automatinio naminių gyvūnėlių tiekimo įrenginio darbas
Įkėlus kodą į „Arduino Uno“, laikas ir data bus rodomi 16 * 2 skystųjų kristalų ekrane. Kai paspausite mygtuką, jis paprašys augintinio šėrimo laiko, o jūs turite įvesti laiką naudodami 4 * 4 matricos klaviatūrą. Ekrane bus rodomas įvestas laikas, o jums paspaudus „D“, laikas bus taupomas. Kai realusis laikas ir Įvestas laikas sutampa, jis pasuka servovariklį iš pradinės padėties 55⁰ į 100⁰ ir po vėlavimo vėl grįžta į pradinę padėtį. Todėl „Servo“ variklis yra prijungtas prie „Food Container“ vartų, todėl jiems judant, vartai atsidarys ir į dubenį ar lėkštę pateks tam tikras maisto kiekis. Po 0,4 sekundės servo variklis vėl sukasi ir uždaro vartus. Visas procesas baigiasi per kelias sekundes. Taip jūsų augintinis automatiškai gauna maistą tuo metu, kai įvedėte.
Pakeiskite laiką ir laipsnį pagal maistą