- Materiaal vereist
- Schakelschema
- 3D-geprint model voerbak voor huisdieren
- DS3231 RTC-module
- Code en uitleg
- Werking van de automatische voerautomaat
Vandaag bouwen we een op Arduino gebaseerde automatische voerautomaat die automatisch voer aan uw huisdier kan serveren. Het heeft een DS3231 RTC- module (Real Time Clock), die vroeger de tijd en datum instelde waarop uw huisdier voer moest krijgen. Dus door de tijd in te stellen volgens het eetschema van uw huisdier, laat het apparaat de voerbak automatisch vallen of vult.
In dit circuit gebruiken we een 16 * 2 LCD-scherm om de tijd weer te geven met behulp van DS3231 RTC-module met Arduino UNO. Ook wordt een servomotor gebruikt om de containers te roteren om het voedsel te leveren en een 4 * 4 matrix toetsenbord om de tijd voor het voeren van het huisdier handmatig in te stellen. U kunt de draaihoek en de openingsduur van de container instellen op basis van de hoeveelheid voer die u uw huisdier wilt serveren. De hoeveelheid voer kan ook afhankelijk zijn van uw huisdier, of het nu een hond, kat of vogel is.
Materiaal vereist
- Arduino UNO
- 4 * 4 Matrix-toetsenbord
- 16 * 2 LCD
- Druk op de knop
- Servomotor
- Weerstand
- Verbindingsdraden
- Breadboard
Schakelschema
In deze op Arduino gebaseerde Cat Feeder hebben we voor het verkrijgen van tijd en datum de RTC-module (Real Time Clock) gebruikt. We hebben het 4 * 4 Matrix-toetsenbord gebruikt om de eettijd van het huisdier handmatig in te stellen met behulp van het 16x2 LCD-scherm. De servomotor draait de container en laat het eten vallen op de door de gebruiker ingestelde tijd. Het LCD-scherm wordt gebruikt om de datum en tijd weer te geven. De volledige werking is te vinden in de video aan het einde.
3D-geprint model voerbak voor huisdieren
We hebben deze Arduino Pet Feeder container ontworpen met behulp van de 3D-printer. U kunt hetzelfde ontwerp ook afdrukken door de bestanden van hier te downloaden. Het materiaal dat wordt gebruikt voor het printen van dit model is PLA. Het heeft vier onderdelen zoals weergegeven in de onderstaande afbeelding:
Monteer de vier delen en sluit de servomotor aan zoals weergegeven in de onderstaande afbeelding:
Als u nieuw bent bij 3D-printen, is hier de startgids. U kunt de STL-bestanden voor deze voerautomaat voor huisdieren hier downloaden.
DS3231 RTC-module
DS3231 is een RTC- module (Real Time Clock). Het wordt gebruikt om de datum en tijd bij te houden voor de meeste elektronicaprojecten. Deze module heeft zijn eigen knoopcelvoeding waarmee hij de datum en tijd behoudt, zelfs wanneer de hoofdstroom is verwijderd of de MCU een harde reset heeft ondergaan. Dus zodra we de datum en tijd in deze module hebben ingesteld, houdt deze deze altijd bij. In ons circuit gebruiken we DS3231 om het huisdier te voeren volgens de tijd, ingesteld door de eigenaar van het huisdier, als een alarm. Terwijl de klok de ingestelde tijd bereikt, bedient hij de servomotor om de containerpoort te openen en valt het voer in de voerbak van het huisdier.
Let op: Als u deze module voor het eerst gebruikt, moet u de datum en tijd instellen. U kunt ook RTC IC DS1307 gebruiken voor het aflezen van de tijd met Arduino.
Code en uitleg
De volledige Arduino-code van Automatics Pet Feeder wordt aan het einde gegeven.
Arduino heeft standaardbibliotheken voor het gebruik van de servomotor en LCD 16 * 2 ermee. Maar om de DS3231 RTC-module en het 4 * 4 Matrix-toetsenbord met de Arduino te gebruiken, moet u de bibliotheken downloaden en installeren. De downloadlink voor beide bibliotheken wordt hieronder gegeven:
- DS3231 RTC-modulebibliotheek (Real Time Clock)
- 4 * 4 Matrix-toetsenbordbibliotheek
In de onderstaande code definiëren we bibliotheken, “#include
# omvatten
In de onderstaande code definiëren we de keymap voor het 4 * 4 matrix-toetsenbord en wijzen we de Arduino-pinnen toe voor de rij en kolommen van het toetsenbord.
char-toetsen = {{'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 maken we het toetsenbord met behulp van de onderstaande opdracht in de code.
Toetsenbord kpd = Toetsenbord (makeKeymap (toetsen), rowPins, colPins, ROWS, COLS);
A4- en A5-Arduino-pinnen toewijzen om verbinding te maken met SCL- en SDA-pinnen van DS3231. Ook het toewijzen van pinnen aan het LCD-scherm en het initialiseren van de servomotor.
DS3231 rtc (A4, A5); Servo servo_test; // initialiseer een servo-object voor de aangesloten servo LiquidCrystal lcd (A0, A1, A2, 11, 12, 13); // Creëert een LC-object. Parameters: (rs, enable, d4, d5, d6, d7)
In de onderstaande code declareren we de t1 tot t6, key en array r, en de feed.
int t1, t2, t3, t4, t5, t6; booleaanse feed = waar; char sleutel; int r;
In de onderstaande code stellen we alle componenten voor het begin in. Zoals in deze code "servo_test.attach (10);" Servo aan de 10 bijgevoegde ste pin van de Arduino. A0, A1 en A2 definiëren als de uitgangspen en de LCD- en RTC-module initialiseren.
leegte setup () {servo_test.attach (10); // bevestig de signaalpin van servo aan pin9 van arduino rtc.begin (); lcd.begin (16,2); servo_test.write (55); Serial.begin (9600); pinMode (A0, OUTPUT); pinMode (A1, OUTPUT); pinMode (A2, OUTPUT); }
Nu, hoe de lus werkt, is het belangrijkste om te begrijpen. Elke keer dat de drukknop wordt ingedrukt, gaat deze hoog, betekent 1, wat kan worden gelezen door "buttonPress = digitalRead (A3)" . Nu gaat het naar de 'if'- instructie en roept de functie ' setFeedingTime ' aan. Vervolgens vergelijkt het de werkelijke tijd en de door de gebruiker ingevoerde tijd. Als de voorwaarde waar is, wat betekent dat de werkelijke tijd en de ingevoerde tijd hetzelfde zijn, dan draait de servomotor naar een hoek van 100 graden en keert na 0,4 seconden vertraging terug naar zijn oorspronkelijke positie.
void loop () {lcd.setCursor (0,0); int-knop Druk op; buttonPress = digitalRead (A3); if (buttonPress == 1) setFeedingTime (); lcd.print ("Tijd:"); 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); // commando om de servo te roteren naar de gespecificeerde hoekvertraging (400); servo_test.write (55); feed = false; }}
In de ongeldige setFeedingTime () functiecode, kunnen we na het indrukken van de drukknop de voedertijd voor het huisdier invoeren, daarna moeten we op 'D' drukken om die tijd op te slaan. Wanneer de opgeslagen tijd overeenkomt met de realtime, begint de servo te draaien.
void setFeedingTime () {feed = true; int i = 0; lcd.clear (); lcd.setCursor (0,0); lcd.print ("Stel voedertijd in"); lcd.clear (); lcd.print ("UU: MM"); lcd.setCursor (0,1); while (1) {key = kpd.getKey (); char j; if (key! = NO_KEY) {lcd.setCursor (j, 1); lcd.print (sleutel); r = key-48; i ++; j ++; if (j == 2) {lcd.print (":"); j ++; } vertraging (500); } if (key == 'D') {key = 0; breken; }}}
Werking van de automatische voerautomaat
Na het uploaden van de code naar de Arduino Uno, worden de tijd en datum weergegeven op het 16 * 2 LCD-scherm. Wanneer u op de drukknop drukt, wordt gevraagd naar de voedertijd van uw huisdier en moet u de tijd invoeren met behulp van het 4 * 4 matrix toetsenbord. Het display toont de ingevoerde tijd en als u op 'D' drukt, wordt de tijd opgeslagen. Wanneer de werkelijke tijd en de ingevoerde tijd overeenkomen, roteert het de servomotor van zijn beginpositie 55⁰ naar 100⁰ en keert na een vertraging weer terug naar zijn beginpositie. Daarom is de servomotor verbonden met de poort van de voedselcontainer, dus terwijl deze beweegt, gaat de poort open en valt er een beetje voedsel in de kom of het bord. Na een vertraging 0,4 seconden Servomotor draait weer en sluit het hek. Het hele proces is binnen een paar seconden voltooid. Zo krijgt uw huisdier het voer automatisch op het door u ingevoerde tijdstip.
Verander tijd en graad volgens voedsel