- Nødvendig materiale
- Kretsdiagram
- 3D-Printed Pet Feeder Model
- DS3231 RTC-modul
- Kode og forklaring
- Arbeid av den automatiske kjæledyrmateren
I dag bygger vi en Arduino-basert automatisk kjæledyrmater som automatisk kan servere mat til kjæledyret ditt i tide. Den har en DS3231 RTC (Real Time Clock) -modul, som brukes til å angi tid og dato som kjæledyret ditt skal få mat. Så, ved å sette opp tiden i henhold til kjæledyrets spiseplan, slipper eller fyller du matskålen automatisk.
I denne kretsen bruker vi en 16 * 2 LCD for å vise tiden ved hjelp av DS3231 RTC-modul med Arduino UNO. Dessuten brukes en servomotor til å rotere beholderne for å skaffe maten og 4 * 4 matrise-tastaturet for å manuelt sette opp tiden for fôring av kjæledyret. Du kan stille rotasjonsvinkelen og beholderåpningens varighet i henhold til mengden mat du vil servere til kjæledyret ditt. Mengden mat kan også avhenge av kjæledyret ditt om det er en hund, katt eller fugl.
Nødvendig materiale
- Arduino UNO
- 4 * 4 Matrix-tastatur
- 16 * 2 LCD
- Trykknapp
- Servo motor
- Motstand
- Koble ledninger
- Brettbrett
Kretsdiagram
I denne Arduino-baserte kattemateren, for å få tid og dato, har vi brukt RTC (Real Time Clock) Module. Vi har brukt 4 * 4 Matrix-tastaturet til å stille kjæledyrets spisetid manuelt ved hjelp av 16x2 LCD. Servomotoren roterer beholderen og slipper maten på den tiden som er angitt av brukeren. LCD-skjermen brukes til å vise dato og klokkeslett. Komplett arbeid finner du i videoen som er gitt til slutt.
3D-Printed Pet Feeder Model
Vi har designet denne Arduino Pet Feeder- beholderen ved hjelp av 3D-skriveren. Du kan også skrive ut samme design ved å laste ned filene herfra. Materialet som brukes til å trykke denne modellen er PLA. Den har fire deler som vist på bildet nedenfor:
Sett sammen de fire delene og koble til servomotoren som vist på bildet nedenfor:
Hvis du er ny i 3D-utskrift, er her startguiden. Du kan laste ned STL-filene for denne kjæledyrmateren her.
DS3231 RTC-modul
DS3231 er en RTC- modul (Real Time Clock). Den brukes til å opprettholde dato og tid for de fleste av elektronikkprosjektene. Denne modulen har sin egen myntcelle strømforsyning ved hjelp av hvilken den opprettholder dato og klokkeslett selv når hovedstrømmen er fjernet eller MCU har gått gjennom en hard tilbakestilling. Så når vi har satt dato og klokkeslett i denne modulen, vil den alltid holde rede på det. I vår krets bruker vi DS3231 til å mate kjæledyret i henhold til tiden, satt opp av kjæledyrets eier, som en alarm. Når klokken når den angitte tiden, betjener den servomotoren for å åpne beholderporten, og maten faller i kjæledyrets matskål.
Merk: Når du bruker denne modulen for første gang, må du stille inn dato og klokkeslett. Du kan også bruke RTC IC DS1307 for å lese tiden med Arduino.
Kode og forklaring
Automatics Pet Feeder's komplette Arduino-kode er gitt på slutten.
Arduino har standardbiblioteker for bruk av Servomotor og LCD 16 * 2 med den. Men for å bruke DS3231 RTC-modul og 4 * 4 Matrix-tastatur med Arduino, må du laste ned og installere bibliotekene. Nedlastningskoblingen for begge bibliotekene er gitt nedenfor:
- DS3231 RTC (sanntidsklokke) modulbibliotek
- 4 * 4 Matrise-tastaturbibliotek
I koden nedenfor definerer vi biblioteker, “#include
#inkludere
I koden nedenfor definerer vi nøkkelkortet for matrise-tastaturet 4 * 4 og tilordner Arduino-pinnene for raden og kolonnene på tastaturet.
char nøkler = {{'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 oppretter vi tastaturet ved å bruke kommandoen nedenfor i koden.
Tastatur kpd = Tastatur (makeKeymap (nøkler), rowPins, colPins, ROWS, COLS);
Tilordner A4- og A5 Arduino-pinner for å koble til SCL- og SDA-pinner på DS3231. Tilordne også pinner til LCD-skjermen og initialisere servomotoren.
DS3231 rtc (A4, A5); Servo servo_test; // initialisere et servoobjekt for den tilkoblede servo LiquidCrystal lcd (A0, A1, A2, 11, 12, 13); // Oppretter et LC-objekt. Parametere: (rs, aktivere, d4, d5, d6, d7)
I koden nedenfor erklærer vi t1 til t6, nøkkel og array r og feed.
int t1, t2, t3, t4, t5, t6; boolsk feed = true; røye nøkkel; int r;
I koden nedenfor setter vi opp alle komponentene for starten. Som i denne koden “servo_test.attach (10);” Servo er festet til den 10 th pin av Arduino. Definere A0, A1 og A2 som utgangsstift og initialisere LCD- og RTC-modulen.
ugyldig oppsett () {servo_test.attach (10); // fest signalpinnen til servoen til pin9 av arduino rtc.begin (); lcd.begin (16,2); servo_test.write (55); Serial.begin (9600); pinMode (A0, OUTPUT); pinMode (A1, OUTPUT); pinMode (A2, OUTPUT); }
Nå, hvordan løkken fungerer, er den viktige delen å forstå. Når trykknappen trykkes, blir den høy, betyr 1, som kan leses av “buttonPress = digitalRead (A3)” . Nå går den inn i 'if' -uttalelsen og kaller 'setFeedingTime' -funksjonen. Deretter sammenlignes brukerens sanntid og den angitte tiden. Hvis tilstanden er sant, noe som betyr at sanntid og angitt tid er den samme, så roterer servomotoren til og vinkler 100 grader, og etter 0,4 sekunder forsinkelse kommer den tilbake til utgangsposisjonen.
ugyldig sløyfe () {lcd.setCursor (0,0); int-knappTrykk på; buttonPress = digitalRead (A3); hvis (buttonPress == 1) setFeedingTime (); 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 ("Date:"); lcd.print (rtc.getDateStr ()); hvis (t1 == r && t2 == r && t3 == r && t4 == r && t5 <1 && t6 <3 && feed == true) {servo_test.write (100); // kommando for å rotere servoen til den angitte vinkelforsinkelsen (400); servo_test.write (55); feed = false; }}
I tomrommet setFeedingTime () -funksjonskode, Etter å ha trykket på trykknappen, er vi i stand til å angi dyrefôringstiden , så må vi trykke 'D' for å spare den tiden. Når den sparte tiden samsvarer med sanntid, begynner servo å rotere.
ugyldig setFeedingTime () {feed = true; int i = 0; lcd.clear (); lcd.setCursor (0,0); lcd.print ("Angi fôringstid"); lcd.clear (); lcd.print ("HH: MM"); lcd.setCursor (0,1); mens (1) {nøkkel = kpd.getKey (); røye j; hvis (nøkkel! = NO_KEY) {lcd.setCursor (j, 1); lcd.print (nøkkel); r = nøkkel-48; i ++; j ++; hvis (j == 2) {lcd.print (":"); j ++; } forsinkelse (500); } hvis (nøkkel == 'D') {nøkkel = 0; gå i stykker; }}}
Arbeid av den automatiske kjæledyrmateren
Etter at du har lastet opp koden til Arduino Uno, vises klokkeslett og dato på 16 * 2 LCD-skjermen. Når du trykket på trykknappen, blir det bedt om kjæledyrens fôringstid, og du må angi klokkeslettet ved hjelp av 4 * 4-matrisetastaturet. Displayet viser den angitte tiden, og når du trykker på 'D', sparer den tiden. Når sanntid og angitt tid stemmer overens, roterer den servomotoren fra utgangsposisjonen 55⁰ til 100⁰ og returnerer igjen til utgangsposisjonen etter en forsinkelse. Derfor er Servomotor koblet til Food Container-porten, så når den beveger seg, vil porten åpne seg og noe mat faller i bollen eller tallerkenen. Etter en forsinkelse på 0,4 sekunder roterer servomotoren igjen og lukker porten. Hele prosessen fullføres i løpet av få sekunder. Slik får kjæledyret maten automatisk den tiden du skrev inn.
Endre tid og grad i henhold til mat