- Nødvendigt materiale
- Kredsløbsdiagram
- 3D-trykt fodermodel til kæledyr
- DS3231 RTC-modul
- Kode og forklaring
- Arbejde med den automatiske foderautomat
I dag bygger vi en Arduino-baseret automatisk kæledyrsføder, der automatisk kan servere mad til dit kæledyr rettidigt. Den har et DS3231 RTC (Real Time Clock) -modul, som bruges til at indstille tid og dato, hvor dit kæledyr skal gives mad. Så ved at indstille tiden i henhold til dit kæledyrs spiseplan, skal enheden automatisk tabe eller fylde madskålen.
I dette kredsløb bruger vi en 16 * 2 LCD til at vise tiden ved hjælp af DS3231 RTC-modul med Arduino UNO. Der bruges også en servomotor til at rotere beholderne for at give mad og 4 * 4 matrix-tastatur til manuelt at indstille tiden til fodring af kæledyret. Du kan indstille rotationsvinklen og åbningens varighed i henhold til den mængde mad, du vil servere dit kæledyr. Mængden af mad kan også afhænge af dit kæledyr, om det er en hund, kat eller fugl.
Nødvendigt materiale
- Arduino UNO
- 4 * 4 Matrix-tastatur
- 16 * 2 LCD
- Trykknap
- Servomotor
- Modstand
- Tilslutning af ledninger
- Brødbræt
Kredsløbsdiagram
I denne Arduino-baserede katteføder til brug for tid og dato har vi brugt RTC (Real Time Clock) -modul. Vi har brugt 4 * 4 Matrix-tastaturet til at indstille kæledyrets spisetid manuelt ved hjælp af 16x2 LCD. Servomotoren roterer beholderen og taber maden på den tid, brugeren har indstillet. LCD'et bruges til at vise dato og klokkeslæt. Komplet arbejde kan findes i den video, der er givet i slutningen.
3D-trykt fodermodel til kæledyr
Vi har designet denne Arduino Pet Feeder- container ved hjælp af 3D-printeren. Du kan også udskrive det samme design ved at downloade filerne herfra. Det materiale, der bruges til udskrivning af denne model, er PLA. Den har fire dele som vist på billedet nedenfor:
Saml de fire dele, og tilslut servomotoren som vist på billedet nedenfor:
Hvis du er ny med 3D-udskrivning, her er startguiden. Du kan downloade STL-filerne til denne kæledyrsføder her.
DS3231 RTC-modul
DS3231 er et RTC- modul (Real Time Clock). Det bruges til at opretholde dato og tid for de fleste af elektronikprojekterne. Dette modul har sin egen møntcelleforsyning, ved hjælp af hvilken det opretholder datoen og klokkeslættet, selv når hovedstrømmen fjernes, eller MCU'en har gennemgået en hård nulstilling. Så når vi har indstillet dato og klokkeslæt i dette modul, vil det altid holde styr på det. I vores kredsløb bruger vi DS3231 til at fodre kæledyret i henhold til det tidspunkt, der er oprettet af kæledyrets ejer, som en alarm. Da uret når til det indstillede tidspunkt, betjener det servomotoren for at åbne beholderporten, og maden falder i kæledyrets madskål.
Bemærk: Når du bruger dette modul for første gang, skal du indstille dato og klokkeslæt. Du kan også bruge RTC IC DS1307 til at læse tiden med Arduino.
Kode og forklaring
Automatics Pet Feeder's komplette Arduino-kode gives i slutningen.
Arduino har standardbiblioteker til brug af Servomotor og LCD 16 * 2 med den. Men for at bruge DS3231 RTC-modul og 4 * 4 Matrix-tastatur med Arduino, skal du downloade og installere bibliotekerne. Downloadlinket til begge biblioteker er angivet nedenfor:
- DS3231 RTC (Real Time Clock) modulbibliotek
- 4 * 4 Matrix-tastaturbibliotek
I nedenstående kode definerer vi biblioteker, “#include
#omfatte
I nedenstående kode definerer vi nøglekortet til 4 * 4 matrix-tastaturet og tildeler Arduino-stifter til tastaturets række og kolonner.
char nøgler = {{'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};
Her opretter vi tastaturet ved hjælp af kommandoen nedenfor i koden.
Tastatur kpd = Tastatur (makeKeymap (nøgler), rowPins, colPins, ROWS, COLS);
Tildeling af A4- og A5 Arduino-ben til forbindelse med SCL- og SDA-ben på DS3231. Også tildeling af stifter til LCD'et og initialisering af servomotoren.
DS3231 rtc (A4, A5); Servo servo_test; // initialisere et servoobjekt til den tilsluttede servo LiquidCrystal lcd (A0, A1, A2, 11, 12, 13); // Opretter et LC-objekt. Parametre: (rs, aktiver, d4, d5, d6, d7)
I nedenstående kode erklærer vi t1 til t6, nøgle og array r og feedet.
int t1, t2, t3, t4, t5, t6; boolsk foder = sandt; char nøgle; int r;
I nedenstående kode opretter vi alle komponenterne til starten. Som i denne kode "servo_test.attach (10);" Servo er fæstnet til 10 th pin af Arduino. Definition af A0, A1 og A2 som udgangsstift og initialisering af LCD- og RTC-modul.
ugyldig opsætning () {servo_test.attach (10); // vedhæft signalstiften på servo til pin9 i arduino rtc.begin (); lcd.begin (16,2); servo_test.write (55); Serial.begin (9600); pinMode (A0, OUTPUT); pinMode (A1, OUTPUT); pinMode (A2, OUTPUT); }
Nu, hvordan sløjfen fungerer, er den vigtige del at forstå. Hver gang der trykkes på trykknappen, går den højt, hvilket betyder 1, som kan læses ved “buttonPress = digitalRead (A3)” . Nu går det ind i 'if' -erklæringen og kalder funktionen 'setFeedingTime' . Derefter sammenlignes brugerens realtid og den indtastede tid. Hvis tilstanden er sand, hvilket betyder, at den realtid og den indtastede tid er den samme, roterer Servomotoren til og vinkler 100 grader, og efter 0,4 sekunders forsinkelse vender den tilbage til sin oprindelige position.
ugyldig sløjfe () {lcd.setCursor (0,0); int-knapTryk på; buttonPress = digitalRead (A3); hvis (buttonPress == 1) sætFeedingTime (); lcd.print ("Time:"); Streng 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 ("Dato:"); lcd.print (rtc.getDateStr ()); hvis (t1 == r && t2 == r && t3 == r && t4 == r && t5 <1 && t6 <3 && feed == true) {servo_test.write (100); // kommando til at rotere servoen til den specificerede vinkelforsinkelse (400); servo_test.write (55); feed = false; }}
I ugyldig setFeedingTime () -funktionskoden, Når vi har trykket på trykknappen, er vi i stand til at indtaste kæledyrets fodringstid, så skal vi trykke på 'D' for at spare den tid. Når den gemte tid matcher realtid, begynder servo at rotere.
ugyldig setFeedingTime () {feed = true; int i = 0; lcd.clear (); lcd.setCursor (0,0); lcd.print ("Indstil fodringstid"); lcd.clear (); lcd.print ("HH: MM"); lcd.setCursor (0,1); mens (1) {key = kpd.getKey (); char j; hvis (nøgle! = NO_KEY) {lcd.setCursor (j, 1); lcd.print (nøgle); r = nøgle-48; i ++; j ++; hvis (j == 2) {lcd.print (":"); j ++; } forsinkelse (500); } hvis (nøgle == 'D') {nøgle = 0; pause; }}}
Arbejde med den automatiske foderautomat
Efter upload af koden til Arduino Uno vises tid og dato på 16 * 2 LCD. Når du trykker på trykknappen, beder den om kæledyrs fodringstid, og du skal indtaste tiden ved hjælp af 4 * 4 matrix-tastaturet. Displayet viser det indtastede tidspunkt, og når du trykker på 'D', sparer det tiden. Når realtiden og den indtastede tid stemmer overens, drejer den servomotoren fra sin udgangsposition 55⁰ til 100⁰ og vender tilbage til sin udgangsposition igen efter en forsinkelse. Derfor er Servomotor forbundet med Food Container-porten, så når den bevæger sig, åbnes porten, og en vis mængde mad falder i skålen eller tallerkenen. Efter en forsinkelse på 0,4 sekunder roterer servomotoren igen og lukker porten. Hele processen afsluttes inden for få sekunder. Sådan får dit kæledyr mad automatisk på det tidspunkt, du indtastede.
Skift tid og grad alt efter mad