- Wymagany materiał
- Schemat obwodu
- Model karmnika dla zwierząt wydrukowany w 3D
- Moduł DS3231 RTC
- Kod i wyjaśnienie
- Działanie automatycznego karmnika dla zwierząt
Dzisiaj budujemy automatyczny karmnik dla zwierząt domowych oparty na Arduino, który może automatycznie podawać karmę Twojemu zwierzakowi w odpowiednim czasie. Posiada moduł DS3231 RTC (Real Time Clock), który służy do ustawiania czasu i daty, w której zwierzę powinno otrzymać jedzenie. Tak więc, ustawiając czas zgodnie z harmonogramem jedzenia Twojego zwierzaka, urządzenie automatycznie upuszcza lub napełnia miskę na karmę.
W tym obwodzie używamy wyświetlacza LCD 16 * 2 do wyświetlania czasu za pomocą modułu DS3231 RTC z Arduino UNO. Ponadto, do obracania pojemników w celu dostarczenia pożywienia służy serwomotor, a klawiatura matrycowa 4 * 4 umożliwia ręczne ustawienie czasu karmienia Zwierzaka. Możesz ustawić kąt obrotu i czas otwarcia pojemnika w zależności od ilości karmy, którą chcesz podać swojemu zwierzakowi. Ilość pożywienia może również zależeć od Twojego zwierzaka, niezależnie od tego, czy jest to pies, kot czy ptak.
Wymagany materiał
- Arduino UNO
- Klawiatura matrycowa 4 * 4
- Wyświetlacz LCD 16 * 2
- Naciśnij przycisk
- Siłownik
- Rezystor
- Podłączanie przewodów
- Płytka prototypowa
Schemat obwodu
W tym podajniku Cat Feeder opartym na Arduino, do pobierania czasu i daty, użyliśmy modułu RTC (Real Time Clock). Użyliśmy klawiatury matrycowej 4 * 4, aby ręcznie ustawić czas jedzenia zwierzaka za pomocą wyświetlacza LCD 16x2. Silnik Servo obraca pojemnik i upuszcza jedzenie w czasie ustawionym przez użytkownika. Wyświetlacz LCD służy do wyświetlania daty i czasu. Kompletną pracę można znaleźć w wideo podanym na końcu.
Model karmnika dla zwierząt wydrukowany w 3D
Zaprojektowaliśmy ten pojemnik Arduino Pet Feeder przy użyciu drukarki 3D. Możesz również wydrukować ten sam projekt, pobierając pliki stąd. Materiał użyty do nadruku tego modelu to PLA. Ma cztery części, jak pokazano na poniższym obrazku:
Złóż cztery części i podłącz serwomotor, jak pokazano na poniższym obrazku:
Jeśli nie masz doświadczenia z drukowaniem 3D, oto przewodnik początkowy. Możesz pobrać pliki STL dla tego karmnika dla zwierząt tutaj.
Moduł DS3231 RTC
DS3231 to moduł RTC (Real Time Clock). Służy do utrzymywania daty i godziny dla większości projektów elektroniki. Ten moduł ma własny zasilacz do baterii pastylkowej, za pomocą którego utrzymuje datę i godzinę nawet po odłączeniu głównego zasilania lub po przeprowadzeniu twardego resetu MCU. Więc kiedy ustawimy datę i godzinę w tym module, będzie to zawsze śledzić. W naszym obwodzie używamy DS3231 do karmienia zwierzaka zgodnie z godziną ustawioną przez właściciela zwierzaka, jak alarm. Gdy zegar dotrze do ustawionego czasu, uruchamia serwomotor, aby otworzyć bramę pojemnika, a jedzenie spada do miski Peta.
Uwaga: Korzystając z tego modułu po raz pierwszy, musisz ustawić datę i godzinę. Możesz również użyć RTC IC DS1307 do odczytu czasu za pomocą Arduino.
Kod i wyjaśnienie
Kompletny kod Arduino Automics Pet Feeder jest podany na końcu.
Arduino ma domyślne biblioteki do używania silnika Servo i LCD 16 * 2 z nim. Ale aby używać modułu DS3231 RTC i klawiatury matrycowej 4 * 4 z Arduino, musisz pobrać i zainstalować biblioteki. Link do pobrania dla obu bibliotek znajduje się poniżej:
- Biblioteka modułu DS3231 RTC (zegar czasu rzeczywistego)
- Biblioteka klawiatur macierzowych 4 * 4
W poniższym kodzie definiujemy biblioteki „#include
#zawierać
W poniższym kodzie definiujemy układ klawiszy dla klawiatury matrycowej 4 * 4 i przypisujemy piny Arduino dla rzędu i kolumn klawiatury.
klucze znaków = {{'1', '2', '3', 'A'}, {'4', '5', '6', 'B'}, {'7', '8', ' 9 ',' C '}, {' * ',' 0 ',' # ',' D '}}; bajt rowPins = {2, 3, 4, 5}; bajt colPins = {6, 7, 8, 9};
Tutaj tworzymy klawiaturę za pomocą poniższego polecenia w kodzie.
Keypad kpd = Keypad (makeKeymap (keys), rowPins, colPins, ROWS, COLS);
Przypisanie pinów Arduino A4 i A5 do połączenia z pinami SCL i SDA DS3231. Również przypisanie pinów do wyświetlacza LCD i inicjalizacja silnika serwo.
DS3231 rtc (A4, A5); Servo servo_test; // inicjalizacja obiektu serwa dla podłączonego serwomechanizmu LiquidCrystal lcd (A0, A1, A2, 11, 12, 13); // Tworzy obiekt LC. Parametry: (rs, enable, d4, d5, d6, d7)
W poniższym kodzie deklarujemy t1 do t6, klucz i tablicę r oraz kanał.
int t1, t2, t3, t4, t5, t6; boolean feed = true; klawisz char; int r;
W poniższym kodzie przygotowujemy wszystkie komponenty na początek. Jak w tym kodzie „servo_test.attach (10);” Serwo jest przymocowane do 10- tego pinu Arduino. Zdefiniowanie A0, A1 i A2 jako Pin wyjściowy i inicjalizacja modułu LCD i RTC.
void setup () {servo_test.attach (10); // dołącz pin sygnałowy serwa do pin9 arduino rtc.begin (); lcd.begin (16,2); servo_test.write (55); Serial.begin (9600); pinMode (A0, WYJŚCIE); pinMode (A1, WYJŚCIE); pinMode (A2, WYJŚCIE); }
Teraz, jak działa pętla, jest ważną częścią do zrozumienia. Za każdym naciśnięciem przycisku przechodzi w stan wysoki, co oznacza 1, co można odczytać za pomocą „buttonPress = digitalRead (A3)” . Teraz wchodzi do instrukcji „if” i wywołuje funkcję „setFeedingTime” . Następnie porównuje czas rzeczywisty z czasem wprowadzonym przez użytkownika. Jeśli warunek jest spełniony, co oznacza, że czas rzeczywisty i wprowadzony czas są takie same, to silnik serwo obraca się do kąta 100 stopni i po 0,4 sekundy opóźnienia wraca do pozycji wyjściowej.
void loop () {lcd.setCursor (0,0); int buttonPress; buttonPress = digitalRead (A3); if (buttonPress == 1) setFeedingTime (); lcd.print ("Czas:"); 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 ("Data:"); lcd.print (rtc.getDateStr ()); if (t1 == r && t2 == r && t3 == r && t4 == r && t5 <1 && t6 <3 && feed == true) {servo_test.write (100); // polecenie obrócenia serwomechanizmu do określonego opóźnienia kątowego (400); servo_test.write (55); feed = false; }}
W kodzie funkcji void setFeedingTime () , po naciśnięciu przycisku możemy wprowadzić czas karmienia zwierzaka, następnie musimy wcisnąć 'D', aby zapisać ten czas. Gdy zapisany czas zgadza się z czasem rzeczywistym, serwo zaczyna się obracać.
void setFeedingTime () {feed = true; int i = 0; lcd.clear (); lcd.setCursor (0,0); lcd.print ("Ustaw czas podawania"); lcd.clear (); lcd.print ("HH: MM"); lcd.setCursor (0,1); while (1) {klucz = kpd.getKey (); char j; if (klucz! = NIE_KLUCZ) {lcd.setCursor (j, 1); lcd.print (klucz); r = klucz-48; i ++; j ++; if (j == 2) {lcd.print (":"); j ++; } opóźnienie (500); } if (klucz == 'D') {klucz = 0; przerwa; }}}
Działanie automatycznego karmnika dla zwierząt
Po wgraniu kodu do Arduino Uno, czas i data zostaną wyświetlone na wyświetlaczu LCD 16 * 2. Po naciśnięciu przycisku zapyta o czas karmienia zwierzaka i musisz wprowadzić czas za pomocą klawiatury matrycowej 4 * 4. Wyświetlacz pokaże wprowadzony czas, a naciśnięcie „D” oszczędza czas. Kiedy czas rzeczywisty i wprowadzony czas się zgadzają, to obraca serwomotor z jego początkowego położenia 55⁰ do 100⁰ i po opóźnieniu ponownie powraca do jego początkowego położenia. Dlatego serwomotor jest podłączony do bramki pojemnika na żywność, więc gdy się porusza, bramka otworzy się i pewna ilość żywności wpadnie do miski lub talerza. Po upływie 0,4 sekundy Silnik serwo obraca się ponownie i zamyka bramę. Cały proces trwa kilka sekund. W ten sposób Twój zwierzak automatycznie otrzymuje karmę o godzinie, o której wszedłeś.
Zmień czas i stopień w zależności od jedzenia