- Gerekli Malzeme
- Devre şeması
- 3D Baskılı Evcil Hayvan Besleyici Modeli
- DS3231 RTC Modülü
- Kod ve Açıklama
- Otomatik Hayvan Besleyicinin Çalışması
Bugün, evcil hayvanınıza zamanında otomatik olarak yiyecek sunabilen Arduino tabanlı bir Otomatik Hayvan Besleyici inşa ediyoruz. Bu bir var DS3231 RTC sizin evcil hayvan yemi verilmelidir hangi belirli bir süre ve bugüne kadar kullanılan (Gerçek Zamanlı Saat) Modülü. Böylece, evcil hayvanınızın yeme programına göre zamanı ayarlayarak, cihaz mama kabını otomatik olarak düşürür veya doldurur.
Bu devrede, DS3231 RTC Modülünü Arduino UNO ile kullanarak saati görüntülemek için 16 * 2 LCD kullanıyoruz. Ayrıca, yiyecek sağlamak için kapları döndürmek için bir servo motor ve Pet'i besleme zamanını manuel olarak ayarlamak için 4 * 4 matris tuş takımı kullanılır. Evcil hayvanınıza servis etmek istediğiniz mama miktarına göre dönüş açısını ve kap açılma süresini ayarlayabilirsiniz. Yiyecek miktarı evcil hayvanınızın köpek, kedi veya kuş olmasına da bağlı olabilir.
Gerekli Malzeme
- Arduino UNO
- 4 * 4 Matrix Tuş Takımı
- 16 * 2 LCD
- Butona basınız
- Servo Motor
- Direnç
- Kabloların Bağlanması
- Breadboard
Devre şeması
Bu Arduino tabanlı Cat Feeder'da Zamanı ve Tarihi Almak için RTC (Gerçek Zamanlı Saat) Modülünü kullandık. 4 * 4 Matrix Tuş Takımını kullanarak 16x2 LCD ekran yardımıyla Pet'in yeme zamanını manuel olarak ayarladık. Servo motor, kabı döndürür ve kullanıcı tarafından belirlenen sürede yiyeceği düşürür. LCD, Tarih ve Saati görüntülemek için kullanılır. Sonunda verilen videoda tam çalışma bulunabilir.
3D Baskılı Evcil Hayvan Besleyici Modeli
Bu Arduino Pet Feeder kabını 3D yazıcıyı kullanarak tasarladık. Dosyaları buradan indirerek de aynı tasarımı yazdırabilirsiniz. Bu modeli yazdırmak için kullanılan malzeme PLA'dır. Aşağıdaki resimde gösterildiği gibi dört Bölüme sahiptir:
Dört parçayı birleştirin ve Servo Motoru aşağıdaki resimde gösterildiği gibi bağlayın:
3D baskıda yeniyseniz, işte başlangıç kılavuzu. Bu evcil hayvan besleyici için STL dosyalarını buradan indirebilirsiniz.
DS3231 RTC Modülü
DS3231, bir RTC (Gerçek Zamanlı Saat) modülüdür. Elektronik projelerinin çoğu için tarih ve saati korumak için kullanılır. Bu modül, ana güç kesildiğinde veya MCU donanımdan sıfırlamadan geçtiğinde bile tarih ve saati koruyan kendi madeni para hücreli güç kaynağına sahiptir. Bu modülde tarih ve saati bir kez belirlediğimizde, her zaman takip edecektir. Devremizde, evcil hayvanı alarm gibi evcil hayvan sahibinin kurduğu zamana göre beslemek için DS3231 kullanıyoruz. Saat ayarlanan zamana ulaştığında, servo motoru çalıştırarak kap kapısını açar ve yiyecek Pet'in mama kabına düşer.
Not: Bu modülü ilk kez kullanırken tarih ve saati ayarlamanız gerekir. Arduino ile zamanı okumak için de RTC IC DS1307'yi kullanabilirsiniz.
Kod ve Açıklama
Automatics Pet Feeder'ın Tam Arduino Kodu sonunda verilmiştir.
Arduino, Servo motoru kullanmak için varsayılan kitaplıklara ve onunla LCD 16 * 2'ye sahiptir. Ancak DS3231 RTC Modülünü ve 4 * 4 Matrix Keypad'i Arduino ile kullanmak için kütüphaneleri indirip yüklemeniz gerekir. Her iki kitaplık için indirme bağlantısı aşağıda verilmiştir:
- DS3231 RTC (Gerçek Zamanlı Saat) Modül Kitaplığı
- 4 * 4 Matrix Tuş Takımı Kitaplığı
Aşağıdaki kodda kitaplıkları tanımlıyoruz, "#include
#Dahil etmek
Aşağıdaki kodda, 4 * 4 matris tuş takımı için tuş eşlemesini tanımlıyor ve tuş takımının Satır ve Sütunları için Arduino pinlerini atıyoruz.
karakter tuşları = {{'1', '2', '3', 'A'}, {'4', '5', '6', 'B'}, {'7', '8', ' 9 ',' C '}, {' * ',' 0 ',' # ',' D '}}; bayt rowPins = {2, 3, 4, 5}; bayt colPins = {6, 7, 8, 9};
Burada kodda aşağıdaki komutu kullanarak tuş takımını oluşturuyoruz.
Keypad kpd = Keypad (makeKeymap (anahtarlar), rowPins, colPins, ROWS, COLS);
DS3231'in SCL ve SDA pinlerine bağlanmak için A4 ve A5 Arduino pinleri atama. Ayrıca, LCD'ye pin atamak ve Servo motoru başlatmak.
DS3231 rtc (A4, A5); Servo servo_test; // bağlı servo LiquidCrystal lcd (A0, A1, A2, 11, 12, 13) için bir servo nesnesi başlat; // Bir LC nesnesi oluşturur. Parametreler: (rs, etkinleştir, d4, d5, d6, d7)
Aşağıdaki kodda, t1'den t6'ya, anahtar ve r dizisini ve feed'i bildiriyoruz.
int t1, t2, t3, t4, t5, t6; boole beslemesi = true; karakter anahtarı; int r;
Aşağıdaki kodda, başlangıç için tüm bileşenleri kuruyoruz. Bu koddaki gibi “servo_test.attach (10);” Servo 10 bağlı olan inci Arduino pimi. A0, A1 ve A2'yi Çıkış Pimi olarak tanımlama ve LCD ve RTC modülünü başlatma.
geçersiz kurulum () {servo_test.attach (10); // servonun sinyal pinini arduino rtc.begin () pin9'una bağlayın; lcd.begin (16,2); servo_test.write (55); Serial.begin (9600); pinMode (A0, OUTPUT); pinMode (A1, OUTPUT); pinMode (A2, OUTPUT); }
Şimdi, döngünün nasıl çalıştığı, anlaşılması gereken önemli kısımdır. Basma Düğmesine her basıldığında, yüksek anlamına gelir 1, bu "buttonPress = digitalRead (A3)" ile okunabilir. Şimdi 'if' ifadesinin içine giriyor ve 'setFeedingTime' işlevini çağırıyor . Daha sonra gerçek zamanı ve kullanıcı tarafından girilen zamanı karşılaştırır. Koşul doğruysa, yani gerçek zaman ve girilen zaman aynıysa, Servo motor 100 dereceye ve açıya döner ve 0,4 saniye gecikmeden sonra başlangıç konumuna geri döner.
geçersiz döngü () {lcd.setCursor (0,0); int düğmesiBasın; buttonPress = digitalRead (A3); eğer (buttonPress == 1) setFeedingTime (); lcd.print ("Zaman:"); Dize 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 ("Tarih:"); lcd.print (rtc.getDateStr ()); eğer (t1 == r && t2 == r && t3 == r && t4 == r && t5 <1 && t6 <3 && feed == true) {servo_test.write (100); // servoyu belirtilen açı gecikmesine (400) döndürme komutu; servo_test.write (55); feed = false; }}
In boşluk setFeedingTime () işlevi kodu, basma düğmesine sonra hayvan besleme süresini girebiliyorlar, o zaman o zaman kazanmak için Basın 'D' gerekiyor. Kaydedilen zaman gerçek zamanla eşleştiğinde servo dönmeye başlar.
void setFeedingTime () {feed = true; int i = 0; lcd.clear (); lcd.setCursor (0,0); lcd.print ("Besleme Süresini Ayarla"); lcd.clear (); lcd.print ("HH: MM"); lcd.setCursor (0,1); while (1) {anahtar = kpd.getKey (); char j; eğer (anahtar! = NO_KEY) {lcd.setCursor (j, 1); lcd.print (anahtar); r = anahtar-48; i ++; j ++; eğer (j == 2) {lcd.print (":"); j ++; } gecikme (500); } if (anahtar == 'D') {anahtar = 0; kırmak; }}}
Otomatik Hayvan Besleyicinin Çalışması
Kodu Arduino Uno'ya yükledikten sonra, saat ve tarih 16 * 2 LCD ekranda görüntülenecektir. Basma düğmesine bastığınızda, Pet'in besleme süresini sorar ve 4 * 4 matris Tuş Takımını kullanarak süreyi girmeniz gerekir. Ekran girilen zamanı gösterecek ve 'D'ye bastığınızda zamandan tasarruf edecek. Gerçek zaman ve Girilen zaman eşleştiğinde, servo motoru 55⁰ başlangıç konumundan 100⁰'ye döndürür ve bir gecikmeden sonra tekrar başlangıç konumuna döner. Bu nedenle, Servo motor, Yemek Kabı kapısına bağlanır, böylece hareket ettikçe kapak açılacak ve kase veya tabağa bir miktar yiyecek düşecektir. 0,4 saniye gecikmeden sonra Servo motor tekrar döner ve kapıyı kapatır. Tüm süreç birkaç saniye içinde tamamlanır. Bu, girdiğiniz saatte evcil hayvanınızın mamayı otomatik olarak alma şeklidir.
Yiyeceklere göre zamanı ve dereceyi değiştirin