- Anyag szükséges
- Kördiagramm
- 3D nyomtatású kisállat etető modell
- DS3231 RTC modul
- Kód és magyarázat
- Az automatikus állateledel működése
Ma építünk egy Arduino-alapú automatikus kisállateledelt, amely automatikusan időben tudja kiszolgálni az ételt az Ön kedvencének. Van egy DS3231 RTC (Real Time Clock) modulja, amely arra használta, hogy beállítsa azt az időpontot és dátumot, amikor a kedvencének ételt kell adni. Tehát a háziállat étkezési ütemtervének megfelelő beállításával az eszköz automatikusan leejti vagy megtölti az ételtálat.
Ebben az áramkörben egy 16 * 2 LCD-t használunk az idő megjelenítésére az Arduino UNO DS3231 RTC moduljával. Ezenkívül egy szervomotort is használnak a tartályok elforgatásához, hogy biztosítsák az ételt, és a 4 * 4-es mátrixos billentyűzetet, hogy manuálisan beállítsa a Pet etetésének idejét. Beállíthatja az elforgatási szöget és a tartály nyitási időtartamát a kedvtelésből tartott étel mennyiségének megfelelően. Az étel mennyisége függhet kedvenceitől, legyen szó kutyáról, macskáról vagy madárról.
Anyag szükséges
- Arduino UNO
- 4 * 4 Matrix kezelő
- 16 * 2 LCD
- Nyomógomb
- Szervómotor
- Ellenállás
- Vezetékek csatlakoztatása
- Kenyérlemez
Kördiagramm
Ebben az Arduino alapú macskaetetőben az idő és a dátum megszerzéséhez RTC (Real Time Clock) modult használtunk. A 4 * 4-es mátrix billentyűzettel a háziállat étkezési idejét kézzel állítottuk be a 16x2 LCD segítségével. A szervomotor elforgatja a tartályt, és az ételt a felhasználó által beállított időre dobja le. Az LCD a Dátum és Idő megjelenítésére szolgál. A teljes munka megtalálható a végén megadott videóban.
3D nyomtatású kisállat etető modell
Ezt az Arduino Pet Feeder konténert a 3D-nyomtató segítségével terveztük. Ugyanezt a rajzot kinyomtathatja a fájlok innen történő letöltésével is. A modell nyomtatásához használt anyag PLA. Négy része van, amint az az alábbi képen látható:
Szerelje össze a négy részt és csatlakoztassa a szervomotort az alábbi képen látható módon:
Ha még nem ismeri a 3D nyomtatást, akkor itt van a kezdő útmutató. A pet feeder STL fájljait itt töltheti le.
DS3231 RTC modul
A DS3231 egy RTC (Real Time Clock) modul. A legtöbb elektronikai projekt dátumának és idejének fenntartására szolgál. Ennek a modulnak saját érmeelemes tápegysége van, amely akkor is fenntartja a dátumot és az időt, ha a fő áramellátás megszűnik, vagy ha az MCU keményen visszaáll. Tehát miután beállítottuk a dátumot és az időt ebben a modulban, mindig nyomon fogja követni. A mi áramkörünkben a DS3231-et használjuk a háziállat etetéséhez az idő szerint, amelyet a háziállat gazdája állított be, mint egy riasztó. Amint az óra eléri a beállított időpontot, a szervomotort működteti, hogy kinyissa a tartály kapuját, és az étel cseppent a Háziállat ételtálába.
Megjegyzés: A modul első használatakor be kell állítania a dátumot és az időt. Az RTC IC DS1307 IC-t is használhatja az idő leolvasására az Arduino segítségével.
Kód és magyarázat
Az Automatics Pet Feeder teljes Arduino kódja a végén található.
Az Arduino alapértelmezett könyvtárakkal rendelkezik a Servo motor és az LCD 16 * 2 használatához. De a DS3231 RTC modul és a 4 * 4 Matrix billentyűzet Arduino-val történő használatához le kell töltenie és telepítenie kell a könyvtárakat. A két könyvtár letöltési linkje az alábbiakban található:
- DS3231 RTC (Real Time Clock) modulkönyvtár
- 4 * 4 Matrix kezelő könyvtár
Az alábbi kódban meghatározzuk a könyvtárakat: „#include
#include
Az alábbi kódban meghatározzuk a 4 * 4 mátrixos billentyűzet billentyűtérképét, és az Arduino csapokat hozzárendeljük a Kezelő sorához és oszlopához.
char billentyűk = {{'1', '2', '3', 'A'}, {'4', '5', '6', 'B'}, {'7', '8', ' 9 ',' C '}, {' * ',' 0 ',' # ',' D '}}; bájtosorPins = {2, 3, 4, 5}; bájt colPins = {6, 7, 8, 9};
Itt a billentyűzetet az alábbi parancs használatával hozzuk létre a kódban.
Kezelő kpd = Kezelő (makeKeymap (kulcsok), rowPins, colPins, ROWS, COLS);
A4 és A5 Arduino csapok hozzárendelése a DS3231 SCL és SDA csatlakozóihoz való kapcsolódáshoz. Ezenkívül hozzárendeli a csapokat az LCD-hez és inicializálja a szervomotort.
DS3231 rtc (A4, A5); Servo szervo_test; // inicializál egy szervo objektumot a csatlakoztatott szervóhoz LiquidCrystal lcd (A0, A1, A2, 11, 12, 13); // LC objektumot hoz létre. Paraméterek: (rs, enable, d4, d5, d6, d7)
Az alábbi kódban deklaráljuk a t1-t6, kulcs és r tömb, valamint a feed-et.
int t1, t2, t3, t4, t5, t6; logikai előtolás = true; char kulcs; int r;
Az alábbi kódban az összes összetevőt beállítjuk az indításhoz. Mint ebben a kódban: „servo_test.attach (10);” Szervo csatlakozik a 10 -én pin a Arduino. Az A0, A1 és A2 meghatározása kimeneti tűként és az LCD és RTC modul inicializálása.
void setup () {servo_test.attach (10); // csatolja a szervo jelcsapját az arduino rtc. pin9 kezdéséhez. lcdbegin (16,2); servo_test.write (55); Serial.begin (9600); pinMode (A0, OUTPUT); pinMode (A1, OUTPUT); pinMode (A2, OUTPUT); }
Most a hurok működésének megértése fontos része. Amikor megnyomja a nyomógombot, az magasra vált, az 1. értéket jelenti, amelyet a „buttonPress = digitalRead (A3)” segítségével lehet leolvasni. Most bemegy az 'if' utasításba, és meghívja a 'setFeedingTime' függvényt. Ezután összehasonlítja a valós és a felhasználó által megadott időt. Ha a feltétel igaz, ami azt jelenti, hogy a valós és a megadott idő megegyezik, akkor a szervomotor 100 fokos szögben forog és 0,4 másodperc késés után visszatér a kiindulási helyzetbe.
void loop () {lcd.setCursor (0,0); int gombNyomja meg; buttonPress = digitalRead (A3); if (buttonPress == 1) setFeedingTime (); lcd.print ("Idő:"); Karakterlánc 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 ("Dátum:"); lcd.print (rtc.getDateStr ()); if (t1 == r && t2 == r && t3 == r && t4 == r && t5 <1 && t6 <3 && feed == true) {servo_test.write (100); // parancs a szervo forgatására a megadott szögkésleltetésig (400); servo_test.write (55); feed = hamis; }}
A void setFeedingTime () függvénykódban a nyomógomb megnyomása után megadhatjuk a háziállat táplálási idejét, majd meg kell nyomnunk a 'D' gombot az idő megtakarításához. Amikor a mentett idő megegyezik a valós idővel, akkor a szervo forogni kezd.
void setFeedingTime () {feed = true; int i = 0; lcd.clear (); lcd.setCursor (0,0); lcd.print ("Állítsa be az adagolási időt"); lcd.clear (); lcd.print ("HH: MM"); lcd.setCursor (0,1); while (1) {kulcs = kpd.getKey (); char j; if (kulcs! = NO_KEY) {lcd.setCursor (j, 1); lcd.print (kulcs); r = kulcs-48; i ++; j ++; if (j == 2) {lcd.print (":"); j ++; } késés (500); } if (kulcs == 'D') {kulcs = 0; szünet; }}}
Az automatikus állateledel működése
A kód feltöltése után az Arduino Uno készülékbe az idő és a dátum megjelenik a 16 * 2-es LCD-n. Amikor megnyomta a nyomógombot, meg kell kérnie a Pet etetési idejét, és meg kell adnia az időt a 4 * 4 mátrixos billentyűzettel. A kijelzőn megjelenik a beírt idő, és amikor megnyomja a „D” gombot, ez időt takarít meg. Amikor a valós és a megadott idő megegyezik, a szervomotort 55⁰-ról 100⁰-ra forgatja, és késés után ismét visszatér a kiindulási helyzetbe. Ezért a szervomotor az Élelmiszer tartály kapujához van csatlakoztatva, így mozogása közben a kapu kinyílik, és bizonyos mennyiségű étel esik a tálba vagy a tányérba. Késedelem után 0,4 másodperc után a szervomotor újra forog és bezárja a kaput. Az egész folyamat néhány másodpercen belül befejeződik. Így a háziállat automatikusan megkapja az ételt a megadott időpontban.
Változtassa meg az időt és a fokot az étel szerint