今天,我們將要制作一個(gè)基于Arduino開發(fā)板的自動(dòng)寵物喂食機(jī),它可以及時(shí)的自動(dòng)為你的寵物提供食物。該項(xiàng)目采用一個(gè)DS3231的RTC(實(shí)時(shí)時(shí)鐘)模塊,用于設(shè)置寵物需要喂食的時(shí)間和日期。因此,根據(jù)您寵物進(jìn)食的時(shí)刻表,設(shè)備會(huì)自動(dòng)放下或填充食物。
在本項(xiàng)目中,我們使用一個(gè)1602的LCD模塊顯示時(shí)間,通過使用連接到Arduino UNO的DS3231 RTC模塊獲得。此外,它還使用一個(gè)伺服電機(jī)旋轉(zhuǎn)容器以提供食物,同時(shí)還提供一個(gè)4 * 4的矩陣鍵盤,用來手動(dòng)設(shè)置喂食寵物的時(shí)間。您可以根據(jù)您想要喂給寵物的食物量來設(shè)置旋轉(zhuǎn)角度和容器開啟時(shí)間。食物量也可能由于你的寵物是小狗、小貓還是鳥兒而略有不同。

所需的材料
● Arduino UNO開發(fā)板
● 4 * 4的矩陣鍵盤
● LCD顯示模塊1602
● 一個(gè)按鈕
● 伺服電機(jī)
● 電阻
● 連接導(dǎo)線
● 面包板
電路原理圖
在這款基于Arduino的寵物喂食機(jī)的項(xiàng)目中,為了獲取時(shí)間和日期,我們使用了RTC(實(shí)時(shí)時(shí)鐘)模塊。我們使用4 * 4矩陣鍵盤以及LCD模塊1602手動(dòng)設(shè)置寵物的喂食時(shí)間。伺服電機(jī)旋轉(zhuǎn)容器并按照用戶設(shè)定的時(shí)間放下食物。 LCD用于顯示日期和時(shí)間。

使用3D打印的寵物喂食機(jī)模型
我們使用3D打印機(jī)設(shè)計(jì)了這款A(yù)rduino寵物喂食機(jī)的容器。您也可以通過從這里下載文件來打印相同的設(shè)計(jì)。用于打印此模型的材料是PLA。它包含四個(gè)部分,如下圖所示:

按照下圖所示組裝四個(gè)部件并連接伺服電機(jī):

DS3231 RTC模塊簡介
DS3231是一個(gè)RTC(實(shí)時(shí)時(shí)鐘)模塊。在大多數(shù)電子項(xiàng)目中,它用于保持日期和時(shí)間。該模塊自帶了紐扣電池,即使主電源被移除或MCU硬件復(fù)位,也可使用該紐扣電池來保持日期和時(shí)間。所以一旦我們?cè)谶@個(gè)模塊中設(shè)置了日期和時(shí)間,它會(huì)一直保持下去。在我們的電路中,我們使用DS3231根據(jù)寵物主人設(shè)置的時(shí)間來喂寵物,就像鬧鈴一樣。當(dāng)時(shí)鐘達(dá)到設(shè)定的時(shí)間時(shí),它操作伺服電機(jī)打開容器門,食物落入寵物食物碗中。

注意:首次使用此模塊時(shí),您必須設(shè)置日期和時(shí)間。
代碼和說明
自動(dòng)寵物喂食機(jī)的完整的Arduino代碼在本章的末尾給出。
Arduino有使用伺服電機(jī)和LCD模塊1602的默認(rèn)的庫文件。但是對(duì)于Arduino使用RTC模塊DS3231 和4 * 4矩陣鍵盤,您必須下載并安裝這些庫。這兩個(gè)庫的下載鏈接如下:
● DS3231 RTC(實(shí)時(shí)時(shí)鐘)模塊庫
在下面的代碼中,我們定義了庫,“#include <DS3231.h>”用于RTC模塊,“#include <Servo.h>”用于伺服電機(jī),“#include <LiquidCrystal.h>”用于16 * 2 LCD ,以及“#include <Keypad.h>”用于4 * 4矩陣鍵盤。
在下面的代碼中,我們定義了4 * 4矩陣鍵盤的鍵盤映射,并為鍵盤的行和列分配了Arduino引腳。
在這里,我們通過在代碼中使用下面的命令來創(chuàng)建鍵盤。
我們分配Arduino開發(fā)板的A4和A5連接DS3231的SCL和SDA引腳。另外,將引腳分配給LCD并初始化伺服電機(jī)。
在下面的代碼中,我們聲明了t1到t6、key和數(shù)組r[6]以及feed。
在下面的代碼中,我們?cè)O(shè)置了所有組件用于初始化操作。比如,在代碼“servo_test.attach(10);”中,將伺服電機(jī)連接到Arduino的第10個(gè)引腳。將A0、A1和A2定義為輸出引腳,然后初始化LCD和RTC模塊。
現(xiàn)在,理解的重要部分是loop函數(shù)是如何工作的。無論何時(shí)按下按鈕,它都會(huì)變?yōu)楦愣ㄆ剑簿褪?,可以通過“buttonPress = digitalRead(A3)”的方式來讀取。現(xiàn)在它進(jìn)入'if'語句并調(diào)用'setFeedingTime'函數(shù)。然后比較實(shí)時(shí)時(shí)間和用戶輸入的時(shí)間。如果條件為真,即實(shí)時(shí)時(shí)間和輸入時(shí)間相同,則伺服電機(jī)旋轉(zhuǎn)至100度,并在0.4秒延遲后返回其初始位置。
在void setFeedingTime()函數(shù)代碼中,按下按鈕后,我們可以輸入寵物的喂食時(shí)間,然后我們必須按'D'來保存時(shí)間。當(dāng)保存的時(shí)間與實(shí)時(shí)時(shí)間匹配時(shí),伺服開始旋轉(zhuǎn)。
自動(dòng)寵物喂食器的工作過程

將代碼上傳到Arduino Uno開發(fā)板后,LCD模塊將會(huì)顯示相應(yīng)的時(shí)間和日期。當(dāng)您按下按鈕時(shí),它會(huì)詢問寵物的喂食時(shí)間,您必須使用4 * 4矩陣鍵盤輸入時(shí)間。顯示屏將顯示輸入的時(shí)間,按'D'鍵可以保存該時(shí)間。當(dāng)實(shí)時(shí)時(shí)間和輸入時(shí)間一致時(shí),伺服電機(jī)從初始位置55⁰旋轉(zhuǎn)到100⁰,并在延遲后再次返回到初始位置。由于伺服馬達(dá)連接到了食品容器門,因此當(dāng)它移動(dòng)時(shí),門打開并且一些食物落入碗或盤中。延時(shí)0.4秒后,伺服電機(jī)再次旋轉(zhuǎn),并關(guān)閉閘門。整個(gè)過程在幾秒鐘內(nèi)完成。這就是您的寵物如何在您輸入的時(shí)間點(diǎn)自動(dòng)獲取食物的方式。
您根據(jù)食物量來改變時(shí)間和旋轉(zhuǎn)角度。如果您在制作類似項(xiàng)目時(shí)遇到問題,歡迎在此貼下進(jìn)行回復(fù)
| 歡迎光臨 (http://www.raoushi.com/bbs/) | Powered by Discuz! X3.1 |