- Erforderliches Material
- Schaltplan
- 3D-gedrucktes Tierfuttermodell
- DS3231 RTC-Modul
- Code und Erklärung
- Funktionsweise des automatischen Futterautomaten
Heute bauen wir einen automatischen Tierfutterautomat auf Arduino-Basis, der Ihrem Haustier automatisch rechtzeitig Futter servieren kann. Es verfügt über ein DS3231 RTC- Modul (Real Time Clock), mit dem Uhrzeit und Datum eingestellt werden, an denen Ihr Haustier Futter erhalten soll. Wenn Sie also die Zeit gemäß dem Ernährungsplan Ihres Haustieres einstellen, lässt das Gerät die Futternapf automatisch fallen oder füllt sie.
In dieser Schaltung verwenden wir ein 16 * 2-LCD, um die Uhrzeit mithilfe des DS3231-RTC-Moduls mit Arduino UNO anzuzeigen. Außerdem wird ein Servomotor verwendet, um die Behälter zu drehen, um das Futter bereitzustellen, und eine 4 * 4-Matrixtastatur, um die Zeit für die Fütterung des Haustieres manuell einzustellen. Sie können den Drehwinkel und die Öffnungsdauer des Behälters entsprechend der Futtermenge einstellen, die Sie Ihrem Haustier servieren möchten. Die Futtermenge kann auch von Ihrem Haustier abhängen, ob es sich um einen Hund, eine Katze oder einen Vogel handelt.
Erforderliches Material
- Arduino UNO
- 4 * 4 Matrixtastatur
- 16 * 2 LCD
- Druckknopf
- Servomotor
- Widerstand
- Kabel anschließen
- Steckbrett
Schaltplan
In diesem Arduino-basierten Cat Feeder haben wir zum Abrufen von Uhrzeit und Datum das RTC-Modul (Real Time Clock) verwendet. Wir haben die 4 * 4-Matrix-Tastatur verwendet, um die Fresszeit des Haustieres mithilfe eines 16x2-LCD manuell einzustellen. Der Servomotor dreht den Behälter und lässt die Lebensmittel zu der vom Benutzer festgelegten Zeit fallen. Das LCD dient zur Anzeige von Datum und Uhrzeit. Die vollständige Arbeit finden Sie im Video am Ende.
3D-gedrucktes Tierfuttermodell
Wir haben diesen Arduino Pet Feeder Container mit dem 3D-Drucker entworfen. Sie können das gleiche Design auch drucken, indem Sie die Dateien von hier herunterladen. Das für den Druck dieses Modells verwendete Material ist PLA. Es hat vier Teile, wie im Bild unten gezeigt:
Bauen Sie die vier Teile zusammen und schließen Sie den Servomotor wie in der folgenden Abbildung gezeigt an:
Wenn Sie mit dem 3D-Druck noch nicht vertraut sind, finden Sie hier die Startanleitung. Sie können die STL-Dateien für diesen Tierfutterautomat hier herunterladen.
DS3231 RTC-Modul
DS3231 ist ein RTC- Modul (Real Time Clock). Es wird verwendet, um Datum und Uhrzeit für die meisten Elektronikprojekte zu verwalten. Dieses Modul verfügt über ein eigenes Knopfzellen-Netzteil, mit dem Datum und Uhrzeit auch dann beibehalten werden, wenn die Hauptstromversorgung unterbrochen wird oder die MCU einen Hard-Reset durchlaufen hat. Sobald wir also Datum und Uhrzeit in diesem Modul eingestellt haben, wird es immer verfolgt. In unserer Schaltung verwenden wir DS3231, um das Haustier gemäß der vom Besitzer des Haustieres festgelegten Zeit wie einen Alarm zu füttern. Wenn die Uhr die eingestellte Zeit erreicht, betätigt sie den Servomotor, um das Containertor zu öffnen, und das Futter fällt in die Futterschale des Haustieres.
Hinweis: Wenn Sie dieses Modul zum ersten Mal verwenden, müssen Sie Datum und Uhrzeit einstellen. Sie können auch den RTC IC DS1307 verwenden, um die Zeit mit Arduino zu lesen.
Code und Erklärung
Der vollständige Arduino-Code von Automatics Pet Feeder wird am Ende angegeben.
Arduino verfügt über Standardbibliotheken für die Verwendung des Servomotors und des LCD 16 * 2. Für die Verwendung des DS3231 RTC-Moduls und der 4 * 4-Matrix-Tastatur mit dem Arduino müssen Sie die Bibliotheken herunterladen und installieren. Der Download-Link für beide Bibliotheken ist unten angegeben:
- DS3231 RTC-Modulbibliothek (Real Time Clock)
- 4 * 4 Matrix Keypad Library
Im folgenden Code definieren wir Bibliotheken: „#include
#einschließen
Im folgenden Code definieren wir die Tastaturbelegung für die 4 * 4-Matrixtastatur und weisen die Arduino-Pins für die Zeilen und Spalten der Tastatur zu.
Zeichenschlüssel = {{'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};
Hier erstellen wir die Tastatur mit dem folgenden Befehl im Code.
Tastatur kpd = Tastatur (makeKeymap (Schlüssel), rowPins, colPins, ROWS, COLS);
Zuweisen von A4- und A5-Arduino-Pins zur Verbindung mit SCL- und SDA-Pins von DS3231. Zuweisen von Pins zum LCD und Initialisieren des Servomotors.
DS3231 rtc (A4, A5); Servo servo_test; // Initialisiere ein Servoobjekt für das angeschlossene Servo LiquidCrystal lcd (A0, A1, A2, 11, 12, 13); // Erstellt ein LC-Objekt. Parameter: (rs, enable, d4, d5, d6, d7)
Im folgenden Code deklarieren wir t1 bis t6, den Schlüssel und das Array r sowie den Feed.
int t1, t2, t3, t4, t5, t6; Boolescher Feed = true; char key; int r;
Im folgenden Code richten wir alle Komponenten für den Start ein. Wie in diesem Code "servo_test.attach (10);" Servo ist mit dem 10 befestigt th Stift des Arduino. Definieren Sie A0, A1 und A2 als Ausgangspin und initialisieren Sie das LCD- und RTC-Modul.
void setup () {servo_test.attach (10); // Verbinde den Signal-Pin des Servos mit Pin 9 des Arduino rtc.begin (); lcd.begin (16,2); servo_test.write (55); Serial.begin (9600); PinMode (A0, OUTPUT); PinMode (A1, OUTPUT); PinMode (A2, OUTPUT); }}
Nun ist es wichtig zu verstehen, wie die Schleife funktioniert. Immer wenn der Druckknopf gedrückt wird, bedeutet er 1, was durch „buttonPress = digitalRead (A3)“ gelesen werden kann. Jetzt geht es in die 'if'- Anweisung und ruft die ' setFeedingTime'- Funktion auf. Dann vergleicht es die Echtzeit und die vom Benutzer eingegebene Zeit. Wenn die Bedingung erfüllt ist, was bedeutet, dass die Echtzeit und die eingegebene Zeit gleich sind, dreht sich der Servomotor auf einen Winkel von 100 Grad und kehrt nach 0,4 Sekunden Verzögerung in seine Ausgangsposition zurück.
void loop () {lcd.setCursor (0,0); int buttonPress; buttonPress = digitalRead (A3); if (buttonPress == 1) setFeedingTime (); lcd.print ("Zeit:"); String 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 ("Datum:"); lcd.print (rtc.getDateStr ()); if (t1 == r && t2 == r && t3 == r && t4 == r && t5 <1 && t6 <3 && feed == true) {servo_test.write (100); // Befehl zum Drehen des Servos auf die angegebene Winkelverzögerung (400); servo_test.write (55); feed = false; }}
Im ungültigen Funktionscode setFeedingTime () können wir nach Drücken der Taste die Fütterungszeit für Haustiere eingeben und dann 'D' drücken, um diese Zeit zu sparen. Wenn die gespeicherte Zeit mit der Echtzeit übereinstimmt, beginnt sich das Servo zu drehen.
void setFeedingTime () {feed = true; int i = 0; lcd.clear (); lcd.setCursor (0,0); lcd.print ("Fütterungszeit einstellen"); 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 (Schlüssel); r = Schlüssel-48; i ++; j ++; if (j == 2) {lcd.print (":"); j ++; } delay (500); } if (key == 'D') {key = 0; Unterbrechung; }}}
Funktionsweise des automatischen Futterautomaten
Nach dem Hochladen des Codes auf das Arduino Uno werden Uhrzeit und Datum auf dem 16 * 2-LCD angezeigt. Wenn Sie den Druckknopf gedrückt haben, werden Sie nach der Fütterungszeit von Pet gefragt, und Sie müssen die Zeit über die 4 * 4-Matrixtastatur eingeben. Das Display zeigt die eingegebene Zeit an und spart Zeit, wenn Sie 'D' drücken. Wenn die Echtzeit und die eingegebene Zeit übereinstimmen, dreht er den Servomotor von seiner Ausgangsposition 55⁰ auf 100⁰ und kehrt nach einer Verzögerung wieder in seine Ausgangsposition zurück. Daher ist der Servomotor mit dem Lebensmittelbehälter-Tor verbunden, sodass sich das Tor bei seiner Bewegung öffnet und eine gewisse Menge Lebensmittel in die Schüssel oder den Teller fällt. Nach einer Verzögerung von 0,4 Sekunden dreht sich der Servomotor erneut und schließt das Tor. Der gesamte Vorgang ist innerhalb weniger Sekunden abgeschlossen. Auf diese Weise erhält Ihr Haustier das Futter automatisch zum Zeitpunkt Ihrer Eingabe.
Ändern Sie Zeit und Grad je nach Lebensmittel