- Material krävs
- Kretsschema
- 3D-tryckt husdjursmatningsmodell
- DS3231 RTC-modul
- Kod och förklaring
- Arbeta med den automatiska sällskapsdjurmataren
Idag bygger vi en Arduino-baserad automatisk husdjursmatare som automatiskt kan servera mat till ditt husdjur i rätt tid. Den har en DS3231 RTC (Real Time Clock) -modul, som brukade ställa in tid och datum då ditt husdjur ska ges mat. Så, genom att ställa in tiden enligt ditt husdjurs matplan, tappar enheten eller fyller matskålen automatiskt.
I denna krets använder vi en 16 * 2 LCD för att visa tiden med DS3231 RTC-modul med Arduino UNO. Dessutom används en servomotor för att rotera behållarna för att skaffa mat och 4 * 4 matris knappsats för att manuellt ställa in tiden för matning av husdjuret. Du kan ställa in rotationsvinkeln och behållarens öppningstid efter den mängd mat du vill servera ditt husdjur. Mängden mat kan också bero på ditt husdjur om det är en hund, katt eller fågel.
Material krävs
- Arduino UNO
- 4 * 4 Matrittangentbord
- 16 * 2 LCD
- Tryckknapp
- Servomotor
- Motstånd
- Anslutande ledningar
- Bakbord
Kretsschema
I den här Arduino-baserade kattmataren, för att få tid och datum, har vi använt RTC-modulen (Real Time Clock). Vi har använt 4 * 4 Matrix-tangentbordet för att ställa in husdjurets ättid manuellt med hjälp av 16x2 LCD. Servomotorn roterar behållaren och släpper maten på den tid som användaren har ställt in. LCD-skärmen används för att visa datum och tid. Komplett arbete finns i videon som ges i slutet.
3D-tryckt husdjursmatningsmodell
Vi har designat den här Arduino Pet Feeder- behållaren med hjälp av 3D-skrivaren. Du kan också skriva ut samma design genom att ladda ner filerna härifrån. Materialet som används för utskrift av denna modell är PLA. Den har fyra delar som visas i bilden nedan:
Sätt ihop de fyra delarna och anslut servomotorn enligt bilden nedan:
Om du är ny inom 3D-utskrift är här startguiden. Du kan ladda ner STL-filerna för den här djurmataren här.
DS3231 RTC-modul
DS3231 är en RTC- modul (Real Time Clock). Den används för att bibehålla datum och tid för de flesta av elektronikprojekten. Denna modul har sin egen myntcellströmförsörjning med vilken den behåller datum och tid även när huvudströmmen tas bort eller MCU har genomgått en hård återställning. Så när vi har ställt in datum och tid i den här modulen kommer det alltid att hålla koll på det. I vår krets använder vi DS3231 för att mata husdjuret efter den tid, inställd av husdjursägaren, som ett larm. När klockan når den inställda tiden manövrerar den servomotorn för att öppna behållargrinden och maten sjunker i husdjursmatskålen.
Obs! När du använder den här modulen för första gången måste du ställa in datum och tid. Du kan också använda RTC IC DS1307 för att läsa tiden med Arduino.
Kod och förklaring
Automatics Pet Feeder's Complete Arduino Code ges i slutet.
Arduino har standardbibliotek för att använda Servomotorn och LCD 16 * 2 med den. Men för att använda DS3231 RTC-modul och 4 * 4 Matrix-tangentbord med Arduino måste du ladda ner och installera biblioteken. Nedladdningslänken för båda biblioteken finns nedan:
- DS3231 RTC-modulbibliotek (realtidsklocka)
- 4 * 4 Matrix Keypad Library
I koden nedan definierar vi bibliotek, “#include
#omfatta
I koden nedan definierar vi tangentbordet för matrisens 4 * 4-matris och tilldelar Arduino-stiften för tangentbordets rad och kolumner.
char-nycklar = {{'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};
Här skapar vi knappsatsen med hjälp av kommandot nedan i koden.
Knappsats kpd = Knappsats (makeKeymap (tangenter), rowPins, colPins, ROWS, COLS);
Tilldelar A4- och A5 Arduino-stift för att ansluta till SCL- och SDA-stift på DS3231. Tilldela även stift till LCD-skärmen och initiera servomotorn.
DS3231 rtc (A4, A5); Servo servo_test; // initiera ett servoobjekt för den anslutna servon LiquidCrystal lcd (A0, A1, A2, 11, 12, 13); // Skapar ett LC-objekt. Parametrar: (rs, aktivera, d4, d5, d6, d7)
I koden nedan förklarar vi t1 till t6, nyckel och array r och feed.
int t1, t2, t3, t4, t5, t6; booleskt flöde = sant; char nyckel; int r;
I koden nedan ställer vi in alla komponenter för starten. Som i den här koden “servo_test.attach (10);” Servo är fäst vid Arduino 10: e stift. Definierar A0, A1 och A2 som utgångsstift och initierar LCD- och RTC-modulen.
ogiltig installation () {servo_test.attach (10); // fäst servostyrans signalstift till 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, hur slingan fungerar är den viktiga delen att förstå. Varje gång du trycker på tryckknappen går den högt, vilket betyder 1, som kan läsas av “buttonPress = digitalRead (A3)” . Nu går det in i 'if' uttalande och kallar funktionen 'setFeedingTime' . Då jämförs användarens realtid och den angivna tiden. Om villkoret är sant, vilket innebär att realtid och inmatad tid är densamma, roterar Servomotorn till och vinklar 100 grader och efter 0,4 sekunders fördröjning återgår den till sitt ursprungliga läge.
ogiltig slinga () {lcd.setCursor (0,0); int-knappTryck på; buttonPress = digitalRead (A3); om (buttonPress == 1) setFeedingTime (); lcd.print ("Time:"); Sträng 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 ()); if (t1 == r && t2 == r && t3 == r && t4 == r && t5 <1 && t6 <3 && feed == true) {servo_test.write (100); // kommando för att rotera servon till den angivna vinkelfördröjningen (400); servo_test.write (55); mata = falskt; }}
I tomrummet setFeedingTime () -funktionskod, Efter att ha tryckt på tryckknappen kan vi ange husdjurets matningstid, då måste vi trycka på 'D' för att spara den tiden. När den sparade tiden matchar med realtid börjar servo rotera.
ogiltig setFeedingTime () {feed = true; int i = 0; lcd.clear (); lcd.setCursor (0,0); lcd.print ("Ställ in matningstid"); lcd.clear (); lcd.print ("HH: MM"); lcd.setCursor (0,1); medan (1) {key = kpd.getKey (); char j; om (nyckel! = NO_KEY) {lcd.setCursor (j, 1); lcd.print (nyckel); r = nyckel-48; i ++; j ++; om (j == 2) {lcd.print (":"); j ++; } fördröjning (500); } om (key == 'D') {key = 0; ha sönder; }}}
Arbeta med den automatiska sällskapsdjurmataren
Efter att ha laddat upp koden till Arduino Uno visas tid och datum på 16 * 2 LCD-skärmen. När du trycker på tryckknappen ber den om husdjurs matningstid och du måste ange tiden med 4 * 4-matrisens knappsats. Displayen visar den inmatade tiden och när du trycker på 'D' sparar den tiden. När realtiden och den inmatade tiden stämmer, roterar den servomotorn från sitt utgångsläge 55⁰ till 100⁰ och återgår sedan till sitt utgångsläge efter en fördröjning. Därför är Servomotorn ansluten till Food Container-grinden, så när den rör sig öppnas grinden och en viss mängd mat faller i skålen eller tallriken. Efter en försening 0,4 sekunder roterar servomotorn igen och stänger grinden. Hela processen slutförs inom några sekunder. Så här får ditt husdjur mat automatiskt den tid du angav.
Ändra tid och grad beroende på mat