- Materiale richiesto
- Schema elettrico
- Modello di mangiatoia per animali stampato in 3D
- Modulo RTC DS3231
- Codice e spiegazione
- Funzionamento dell'alimentatore automatico per animali domestici
Oggi stiamo costruendo un alimentatore automatico per animali basato su Arduino che può servire automaticamente il cibo al tuo animale domestico tempestivamente. Ha un modulo RTC (Real Time Clock) DS3231, che consente di impostare l'ora e la data in cui il tuo animale dovrebbe ricevere il cibo. Quindi, impostando il tempo in base al programma alimentare del tuo animale domestico, il dispositivo fa cadere o riempie automaticamente la ciotola del cibo.
In questo circuito, stiamo utilizzando un LCD 16 * 2 per visualizzare l'ora utilizzando il modulo RTC DS3231 con Arduino UNO. Inoltre, un servomotore viene utilizzato per ruotare i contenitori per fornire il cibo e una tastiera a matrice 4 * 4 per impostare manualmente il tempo di alimentazione dell'animale. Puoi impostare l'angolo di rotazione e la durata di apertura del contenitore in base alla quantità di cibo che desideri servire al tuo animale domestico. La quantità di cibo può anche dipendere dal tuo animale domestico, che si tratti di un cane, un gatto o un uccello.
Materiale richiesto
- Arduino UNO
- Tastiera a matrice 4 * 4
- LCD 16 * 2
- Premi il bottone
- Servomotore
- Resistore
- Collegamento dei cavi
- Breadboard
Schema elettrico
In questo Cat Feeder basato su Arduino, per ottenere ora e data, abbiamo utilizzato il modulo RTC (Real Time Clock). Abbiamo utilizzato la tastiera a matrice 4 * 4 per impostare manualmente il tempo di alimentazione dell'animale con l'aiuto del display LCD 16x2. Il servomotore fa ruotare il contenitore e rilascia il cibo nel tempo impostato dall'utente. Il display LCD viene utilizzato per visualizzare la data e l'ora. La lavorazione completa si trova nel video dato alla fine.
Modello di mangiatoia per animali stampato in 3D
Abbiamo progettato questo contenitore Arduino Pet Feeder utilizzando la stampante 3D. Puoi anche stampare lo stesso disegno scaricando i file da qui. Il materiale utilizzato per la stampa di questo modello è PLA. Ha quattro parti come mostrato nell'immagine qui sotto:
Assemblare le quattro parti e collegare il servomotore come mostrato nella figura seguente:
Se sei nuovo alla stampa 3D, ecco la guida iniziale. Puoi scaricare i file STL per questa mangiatoia per animali domestici qui.
Modulo RTC DS3231
DS3231 è un modulo RTC (Real Time Clock). Viene utilizzato per mantenere la data e l'ora per la maggior parte dei progetti di elettronica. Questo modulo dispone di un proprio alimentatore a celle a bottone che mantiene la data e l'ora anche quando l'alimentazione principale viene rimossa o l'MCU ha subito un hard reset. Quindi una volta impostate la data e l'ora in questo modulo, ne terrà sempre traccia. Nel nostro circuito, stiamo utilizzando DS3231 per nutrire l'animale in base al tempo, impostato dal proprietario dell'animale, come un allarme. Quando l'orologio raggiunge l'ora impostata, aziona il servomotore per aprire il cancello del contenitore e il cibo cade nella ciotola del cibo per animali domestici.
Nota: quando si utilizza questo modulo per la prima volta è necessario impostare la data e l'ora. Puoi anche usare RTC IC DS1307 per leggere l'ora con Arduino.
Codice e spiegazione
Alla fine viene fornito il codice Arduino completo di Automatics Pet Feeder.
Arduino ha librerie predefinite per l'utilizzo del servomotore e LCD 16 * 2 con esso. Ma per utilizzare il modulo RTC DS3231 e la tastiera a matrice 4 * 4 con Arduino, è necessario scaricare e installare le librerie. Di seguito viene fornito il collegamento per il download per entrambe le librerie:
- Libreria del modulo DS3231 RTC (orologio in tempo reale)
- Libreria tastiera a matrice 4 * 4
Nel codice seguente, stiamo definendo le librerie, "#include
#includere
Nel codice seguente, stiamo definendo la mappa dei tasti per la tastiera a matrice 4 * 4 e assegnando i pin Arduino per la riga e le colonne della tastiera.
chiavi di caratteri = {{"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};
Qui, stiamo creando la tastiera utilizzando il comando sottostante nel codice.
Keypad kpd = Keypad (makeKeymap (keys), rowPins, colPins, ROWS, COLS);
Assegnazione di pin A4 e A5 Arduino per la connessione con i pin SCL e SDA di DS3231. Inoltre, assegnando i pin all'LCD e inizializzando il servomotore.
DS3231 rtc (A4, A5); Servo servo_test; // inizializza un oggetto servo per il servo collegato LiquidCrystal lcd (A0, A1, A2, 11, 12, 13); // Crea un oggetto LC. Parametri: (rs, enable, d4, d5, d6, d7)
Nel codice seguente, dichiariamo da t1 a t6, chiave e matrice r e feed.
int t1, t2, t3, t4, t5, t6; feed booleano = true; chiave di carattere; int r;
Nel codice seguente, stiamo impostando tutti i componenti per l'inizio. Come in questo codice "servo_test.attach (10);" Servo è fissato al 10 ° pin del Arduino. Definizione di A0, A1 e A2 come pin di uscita e inizializzazione del modulo LCD e RTC.
void setup () {servo_test.attach (10); // collega il pin del segnale del servo al pin9 di arduino rtc.begin (); lcd.begin (16,2); servo_test.write (55); Serial.begin (9600); pinMode (A0, OUTPUT); pinMode (A1, OUTPUT); pinMode (A2, OUTPUT); }
Ora, come funziona il ciclo è la parte importante da capire. Ogni volta che si preme il Pulsante, diventa alto significa 1, che può essere letto da “buttonPress = digitalRead (A3)” . Ora va all'interno dell'istruzione "if" e chiama la funzione "setFeedingTime" . Quindi confronta l'ora reale e l'ora immessa dall'utente. Se la condizione è vera, il che significa che il tempo reale e il tempo immesso sono uguali, il servomotore ruota a un angolo di 100 gradi e dopo 0,4 secondi di ritardo torna alla posizione iniziale.
void loop () {lcd.setCursor (0,0); pulsante intPremere; buttonPress = digitalRead (A3); if (buttonPress == 1) setFeedingTime (); lcd.print ("Time:"); Stringa 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); // comando per ruotare il servo all'angolo di ritardo specificato (400); servo_test.write (55); feed = false; }}
Nel codice funzione void setFeedingTime () , dopo aver premuto il pulsante siamo in grado di inserire il tempo di alimentazione dell'animale domestico, quindi dobbiamo premere 'D' per risparmiare quel tempo. Quando il tempo salvato corrisponde al tempo reale, il servo inizia a ruotare.
void setFeedingTime () {feed = true; int i = 0; lcd.clear (); lcd.setCursor (0,0); lcd.print ("Imposta ora alimentazione"); lcd.clear (); lcd.print ("HH: MM"); lcd.setCursor (0,1); while (1) {key = kpd.getKey (); char j; if (key! = NO_KEY) {lcd.setCursor (j, 1); lcd.print (chiave); r = chiave-48; i ++; j ++; if (j == 2) {lcd.print (":"); j ++; } ritardo (500); } if (key == 'D') {key = 0; rompere; }}}
Funzionamento dell'alimentatore automatico per animali domestici
Dopo aver caricato il codice su Arduino Uno, l'ora e la data verranno visualizzate sul display LCD 16 * 2. Quando si preme il pulsante si chiede il tempo di alimentazione dell'animale e si deve inserire il tempo utilizzando la tastiera a matrice 4 * 4. Il display mostrerà l'ora inserita e quando si preme "D" si salva l'ora. Quando il tempo reale e il tempo immesso coincidono, ruota il servomotore dalla sua posizione iniziale di 55⁰ a 100 after e dopo un ritardo torna di nuovo alla sua posizione iniziale. Pertanto, il servomotore è collegato al cancello del contenitore per alimenti, quindi mentre si muove, il cancello si aprirà e una certa quantità di cibo cade nella ciotola o nel piatto. Dopo un ritardo di 0,4 secondi il servomotore ruota di nuovo e chiude il cancello. L'intero processo viene completato in pochi secondi. Questo è il modo in cui il tuo animale domestico ottiene il cibo automaticamente all'ora che hai inserito.
Cambia tempo e grado in base al cibo