- Material requerit
- Esquema de connexions
- Model d'alimentador per a mascotes imprès en 3D
- Mòdul RTC DS3231
- Codi i explicació
- Funcionament de l'alimentador automàtic d'animals domèstics
Avui estem construint un alimentador automàtic d’animals per a mascotes basat en Arduino que pot servir automàticament menjar a la vostra mascota a temps. Té un mòdul DS3231 RTC (Rellotge en temps real), que s’utilitzava per definir l’hora i la data en què s’ha de donar menjar a la seva mascota. Per tant, configurant l’hora segons l’horari de menjar de la vostra mascota, el dispositiu cau o omple el bol de menjar automàticament.
En aquest circuit, estem utilitzant un LCD de 16 * 2 per mostrar l’hora mitjançant el mòdul RTC DS3231 amb Arduino UNO. A més, s’utilitza un servomotor per girar els contenidors per proporcionar els aliments i un teclat de matriu 4 * 4 per configurar manualment el temps d’alimentació de la mascota. Podeu definir l’angle de rotació i la durada d’obertura del recipient segons la quantitat d’aliments que vulgueu servir a la vostra mascota. La quantitat d'aliments també pot dependre de la vostra mascota, ja sigui un gos, un gat o un ocell.
Material requerit
- Arduino UNO
- Teclat Matrix 4 * 4
- 16 * 2 LCD
- Polsador
- Servomotor
- Resistència
- Connexió de cables
- Taula de pa
Esquema de connexions
En aquest alimentador de gats basat en Arduino, per obtenir hora i data, hem utilitzat el mòdul RTC (Real Time Clock). Hem utilitzat el teclat matricial 4 * 4 per configurar el temps de menjar de la mascota manualment amb l'ajut de la pantalla LCD de 16x2. El servomotor fa girar el recipient i deixa caure el menjar en el temps establert per l’usuari. La pantalla LCD s’utilitza per mostrar la data i l’hora. Es pot trobar un treball complet al vídeo que es dóna al final.


Model d'alimentador per a mascotes imprès en 3D
Hem dissenyat aquest contenidor Arduino Pet Feeder mitjançant la impressora 3D. També podeu imprimir el mateix disseny descarregant els fitxers des d’aquí. El material utilitzat per imprimir aquest model és PLA. Té quatre parts, com es mostra a la imatge següent:

Muntar les quatre parts i connectar el servomotor com es mostra a la imatge següent:

Si no coneixeu la impressió 3D, aquí teniu la guia inicial. Podeu descarregar els fitxers STL d’aquest alimentador d’animals per a mascotes aquí.
Mòdul RTC DS3231
DS3231 és un mòdul RTC (Real Time Clock). S'utilitza per mantenir la data i l'hora de la majoria de projectes electrònics. Aquest mòdul té la seva pròpia font d’alimentació amb cèl·lula de moneda mitjançant la qual manté la data i l’hora, fins i tot quan s’elimina l’alimentació principal o quan la MCU ha realitzat un restabliment complet. Per tant, un cop definida la data i l’hora en aquest mòdul, en farà un seguiment sempre. Al nostre circuit, estem utilitzant DS3231 per alimentar la mascota segons el temps, configurat pel propietari de la mascota, com una alarma. A mesura que el rellotge arriba a l'hora establerta, fa funcionar el servomotor per obrir la porta del contenidor i el menjar cau al recipient d'aliments de la mascota.

Nota: Quan utilitzeu aquest mòdul per primera vegada, heu d’establir la data i l’hora. També podeu utilitzar RTC IC DS1307 per llegir l’hora amb Arduino.
Codi i explicació
Al final, es dóna el codi Arduino complet de l’alimentador d’animals per a mascotes.
Arduino té biblioteques per defecte per utilitzar el motor Servo i el LCD 16 * 2 amb ell. Però per utilitzar el mòdul RTC DS3231 i el teclat Matrix 4 * 4 amb Arduino, heu de descarregar i instal·lar les biblioteques. A continuació es mostra l’enllaç de descàrrega de les dues biblioteques:
- Biblioteca de mòduls DS3231 RTC (rellotge en temps real)
- Biblioteca de teclats Matrix 4 * 4
Al codi següent, definim biblioteques: "#include
#incloure
Al codi següent, definim el mapa de tecles per al teclat de matriu 4 * 4 i assignem els pins Arduino per a la fila i les columnes del teclat.
claus char = {{'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};
Aquí, estem creant el teclat mitjançant l'ordre següent al codi.
Teclat kpd = Teclat (makeKeymap (tecles), filaPins, colPins, FILES, COLS);
Assignació de pins Arduino A4 i A5 per connectar amb pins SCL i SDA de DS3231. A més, assigneu pins a la pantalla LCD i inicialitzeu el motor Servo.
DS3231 rtc (A4, A5); Servo servo_test; // inicialitzar un servoobjecte per al servo connectat LiquidCrystal lcd (A0, A1, A2, 11, 12, 13); // Crea un objecte LC. Paràmetres: (rs, enable, d4, d5, d6, d7)
Al codi següent, declarem la t1 a la t6, la clau i la matriu r i el feed.
int t1, t2, t3, t4, t5, t6; aliment booleà = cert; clau de caràcter; int r;
Al codi següent, configurem tots els components per a l’inici. Com en aquest codi "servo_test.attach (10);" El servo està connectat al 10è pin de l'Arduino. Definir A0, A1 i A2 com a pin de sortida i inicialitzar el mòdul LCD i RTC.
configuració nul·la () {servo_test.attach (10); // connecteu el pin de senyal del servo al pin9 de l'arduino rtc.begin (); lcd.begin (16,2); servo_test.write (55); Serial.begin (9600); pinMode (A0, OUTPUT); pinMode (A1, OUTPUT); pinMode (A2, OUTPUT); }
Ara, com funciona el bucle és la part important que cal entendre. Sempre que es prem el polsador, puja alt significa 1, que es pot llegir amb “buttonPress = digitalRead (A3)” . Ara entra dins de la sentència "if" i crida la funció "setFeedingTime" . A continuació, compara el temps real i el temps introduït per l'usuari. Si la condició és certa, el que significa que el temps real i el temps introduït són els mateixos, el Servo motor gira a un angle de 100 graus i, després de 0,4 segons de retard, torna a la seva posició inicial.
bucle buit () {lcd.setCursor (0,0); botó intPremeu; buttonPress = digitalRead (A3); if (buttonPress == 1) setFeedingTime (); lcd.print ("Temps:"); Cadena 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 ("Data:"); lcd.print (rtc.getDateStr ()); if (t1 == r && t2 == r && t3 == r && t4 == r && t5 <1 && t6 <3 && feed == true) {servo_test.write (100); // ordre per girar el servo al retard d'angle especificat (400); servo_test.write (55); feed = fals; }}
Al codi de funció void setFeedingTime () , després de prémer el botó podem introduir el temps d’alimentació de les mascotes i, a continuació, hem de prémer 'D' per estalviar aquest temps. Quan el temps estalviat coincideix amb el temps real, el servo comença a girar.
void setFeedingTime () {feed = true; int i = 0; lcd.clear (); lcd.setCursor (0,0); lcd.print ("Configura el temps d'alimentació"); lcd.clear (); lcd.print ("HH: MM"); lcd.setCursor (0,1); mentre (1) {clau = kpd.getKey (); char j; if (clau! = NO_KEY) {lcd.setCursor (j, 1); lcd.print (clau); r = clau-48; i ++; j ++; if (j == 2) {lcd.print (":"); j ++; } retard (500); } if (clau == 'D') {clau = 0; trencar; }}}
Funcionament de l'alimentador automàtic d'animals domèstics
Després de penjar el codi a l’Arduino Uno, l’hora i la data es mostraran a la pantalla LCD de 16 * 2. En prémer el botó, demana el temps d’alimentació de la mascota i haureu d’introduir l’hora amb el teclat de matriu 4 * 4. La pantalla mostrarà l'hora introduïda i, a mesura que premeu "D", estalviarà el temps. Quan coincideix el temps real i el temps introduït, fa girar el servomotor des de la seva posició inicial de 55⁰ a 100⁰ i després d’un retard torna a tornar a la seva posició inicial. Per tant, el servomotor està connectat a la porta del contenidor d'aliments, de manera que a mesura que es mou, la porta s'obrirà i caurà una mica d'aliment al bol o al plat. Després d'un retard de 0,4 segons, el servomotor gira de nou i tanca la porta. Tot el procés es completa en pocs segons. Així és com la vostra mascota obté el menjar automàticament en el moment que heu introduït.
Canvieu el temps i el grau segons el menjar
