- Potreben material
- Shema vezja
- 3D-natisnjen model podajalnika hišnih ljubljenčkov
- Modul RTC DS3231
- Koda in razlaga
- Delovanje samodejnega podajalnika hišnih ljubljenčkov
Danes gradimo samodejni podajalnik hišnih ljubljenčkov na osnovi Arduina, ki lahko samodejno pravočasno postreže hrano vašim ljubljenčkom. Ima DS3231 RTC (Real Time Clock) modul, ki je uporabljal za nastavitev ure in datuma, na katerega naj bo vaš ljubljenček dobil hrano. Z nastavitvijo časa v skladu z urnikom prehranjevanja vašega ljubljenčka naprava samodejno spusti ali napolni skledo s hrano.
V tem vezju uporabljamo LCD 16 * 2 za prikaz časa z uporabo modula DS3231 RTC z Arduino UNO. Servo motor se uporablja tudi za vrtenje posod za zagotavljanje hrane in matrična tipkovnica 4 * 4 za ročno nastavitev časa za hranjenje hišnega ljubljenčka. Kot vrtenja in trajanje odpiranja posode lahko nastavite glede na količino hrane, ki jo želite postreči hišnemu ljubljenčku. Količina hrane je lahko odvisna tudi od vašega ljubljenčka, ali je to pes, mačka ali ptica.
Potreben material
- Arduino UNO
- Matrična tipkovnica 4 * 4
- 16 * 2 LCD
- Pritisni gumb
- Servo motor
- Upor
- Povezovanje žic
- Breadboard
Shema vezja
V tem podajalniku mačk, ki temelji na Arduinu, smo za pridobivanje časa in datuma uporabili RTC (Real Time Clock) modul. Z matrično tipkovnico 4 * 4 smo s pomočjo LCD 16x2 ročno nastavili čas prehranjevanja hišnih ljubljenčkov. Servo motor vrti posodo in spušča hrano v času, ki ga je določil uporabnik. LCD se uporablja za prikaz datuma in ure. Celotno delo najdete v videoposnetku na koncu.
3D-natisnjen model podajalnika hišnih ljubljenčkov
To posodo Arduino Pet Feeder smo zasnovali s 3D-tiskalnikom. Isto obliko lahko natisnete tudi tako, da datoteke prenesete od tukaj. Za tiskanje tega modela je uporabljen material PLA. Ima štiri dele, kot je prikazano na spodnji sliki:
Sestavite štiri dele in priključite servo motor, kot je prikazano na spodnji sliki:
Če še ne uporabljate 3D tiskanja, je tukaj začetni vodnik. Datoteke STL za to hranilnico hišnih ljubljenčkov lahko prenesete tukaj.
Modul RTC DS3231
DS3231 je RTC (Real Time Clock) modul. Uporablja se za vzdrževanje datuma in ure za večino projektov Elektronika. Ta modul ima lastno napajalno celico, s katero ohranja datum in čas, tudi ko je glavno napajanje odvzeto ali je MCU trdo ponastavljen. Torej, ko bomo v tem modulu nastavili datum in uro, ga bo vedno spremljal. V našem krogu uporabljamo DS3231 za hranjenje hišnega ljubljenčka glede na čas, ki ga je določil lastnik hišnega ljubljenčka, kot alarm. Ko ura doseže nastavljeni čas, s servo motorjem odpre vrata posode in hrana pade v posodo s hrano za hišne ljubljenčke.
Opomba: Ko prvič uporabljate ta modul, morate nastaviti datum in uro. Za odčitavanje časa z Arduinom lahko uporabite tudi RTC IC DS1307.
Koda in razlaga
Na koncu je podana celotna Arduino koda avtomatike Pet Feeder.
Arduino ima privzete knjižnice za uporabo servo motorja in LCD 16 * 2 z njim. Toda za uporabo modula DS3231 RTC in matrične tipkovnice 4 * 4 z Arduinom morate knjižnice prenesti in namestiti. Povezava za prenos obeh knjižnic je navedena spodaj:
- Knjižnica modula DS3231 RTC (ura v realnem času)
- 4 * 4 matrična knjižnica tipkovnice
V spodnji kodi definiramo knjižnice, "#include
#include
V spodnji kodi definiramo zemljevid tipk za matrično tipkovnico 4 * 4 in dodelimo zatiče Arduino za vrstico in stolpce tipkovnice.
tipke char = {{'1', '2', '3', 'A'}, {'4', '5', '6', 'B'}, {'7', '8', ' 9 ',' C '}, {' * ',' 0 ',' # ',' D '}}; bajtov rowPins = {2, 3, 4, 5}; bajtov colPins = {6, 7, 8, 9};
Tu ustvarjamo tipkovnico z uporabo spodnjega ukaza v kodi.
Tipkovnica kpd = tipkovnica (makeKeymap (tipke), rowPins, colPins, ROWS, COLS);
Dodelitev zatičev A4 in A5 Arduino za povezavo z zatiči SCL in SDA DS3231. Prav tako dodelitev zatičev LCD-ju in inicializacija servo motorja.
DS3231 rtc (A4, A5); Servo servo_test; // inicializiramo servo objekt za povezani servo LiquidCrystal lcd (A0, A1, A2, 11, 12, 13); // Ustvari objekt LC. Parametri: (rs, omogoči, d4, d5, d6, d7)
V spodnji kodi prijavljamo t1 do t6, ključ in matriko r ter vir.
int t1, t2, t3, t4, t5, t6; logična vrednost = true; tipka char; int r;
V spodnji kodi nastavljamo vse komponente za začetek. Kot v tej kodi "servo_test.attach (10);" Servo vezan na 10 th pin Arduino. Določitev A0, A1 in A2 kot izhodnega zatiča ter inicializacija LCD in RTC modula.
void setup () {servo_test.attach (10); // signalni zatič servo priključimo na pin9 arduino rtc.begin (); lcd.begin (16,2); servo_test.write (55); Serial.begin (9600); pinMode (A0, IZHOD); pinMode (A1, IZHOD); pinMode (A2, IZHOD); }
Zdaj je pomembno razumeti, kako deluje zanka. Vsakič, ko pritisnete tipko, gre visoko, pomeni 1, ki jo lahko preberete z “buttonPress = digitalRead (A3)” . Zdaj gre znotraj stavka 'if' in pokliče funkcijo 'setFeedingTime' . Nato primerja realni čas in vneseni čas s strani uporabnika. Če je pogoj resničen, kar pomeni, da sta dejanski čas in vneseni čas enaka, se servo motor zavrti pod kotom 100 stopinj in se po 0,4 sekunde zakasnitve vrne v začetni položaj.
void loop () {lcd.setCursor (0,0); int buttonPress; buttonPress = digitalRead (A3); if (buttonPress == 1) setFeedingTime (); lcd.print ("Čas:"); Niz 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 ("Datum:"); lcd.print (rtc.getDateStr ()); če (t1 == r && t2 == r && t3 == r && t4 == r && t5 <1 && t6 <3 && feed == true) {servo_test.write (100); // ukaz za zasukanje servo motorja na določeno zakasnitev kota (400); servo_test.write (55); feed = false; }}
V funkcijski kodi void setFeedingTime () lahko po pritisku na tipko vnesemo čas hranjenja hišnih ljubljenčkov, nato moramo pritisniti 'D', da prihranimo ta čas. Ko se prihranjeni čas ujema z realnim časom, se servo začne vrteti.
void setFeedingTime () {feed = res; int i = 0; lcd.clear (); lcd.setCursor (0,0); lcd.print ("Nastavi čas podajanja"); lcd.clear (); lcd.print ("HH: MM"); lcd.setCursor (0,1); while (1) {key = kpd.getKey (); char j; if (ključ! = NO_KEY) {lcd.setCursor (j, 1); lcd.print (ključ); r = tipka-48; i ++; j ++; if (j == 2) {lcd.print (":"); j ++; } zamuda (500); } if (key == 'D') {key = 0; odmor; }}}
Delovanje samodejnega podajalnika hišnih ljubljenčkov
Po nalaganju kode na Arduino Uno bosta čas in datum prikazana na LCD 16 * 2. Ko pritisnete tipko, vas vpraša za čas hranjenja hišnega ljubljenčka in čas morate vnesti z matrično tipkovnico 4 * 4. Na zaslonu bo prikazan vneseni čas in s pritiskom na 'D' čas prihrani. Ko se ujemata realni čas in vneseni čas, servo motor zavrti iz začetnega položaja 55⁰ na 100⁰ in se po zakasnitvi spet vrne v začetni položaj. Zato je servo motor priključen na vrata zabojnika za hrano, tako da se med premikanjem vrata odprejo in v posodo ali krožnik pade nekaj hrane. Po zakasnitvi 0,4 sekunde se servo motor spet zavrti in zapre vrata. Celoten postopek se zaključi v nekaj sekundah. Tako vaš hišni ljubljenček samodejno dobi hrano ob vnesenem času.
Spreminjajte čas in stopnjo glede na hrano