日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

使用Arduino的自动宠物喂食器

發布時間:2024/3/24 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用Arduino的自动宠物喂食器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

原文:https://circuitdigest.com/microcontroller-projects/automatic-pet-feeder-using-arduino

使用Arduino的自動寵物喂食器

ARDUINO的

經過**潘卡·哈特里(Pankaj Khatri)** 2018年04月03日56

今天,我們正在構建一個基于Arduino的自動寵物喂食器,它可以自動為您的寵物及時提供食物。它具有DS3231 RTC(實時時鐘)模塊,該模塊用于設置寵物應被喂食的時間和日期。因此,通過根據寵物的進食時間設置時間,設備可以自動放下或裝滿食物碗。

在此電路中,我們使用帶Arduino UNO的DS3231 RTC模塊使用16 * 2 LCD來顯示時間。另外,使用伺服電機旋轉容器以提供食物,并使用4 * 4矩陣鍵盤手動設置喂食寵物的時間。您可以根據要提供給寵物的食物量來設置旋轉角度和容器打開時間。食物的數量也可能取決于您的寵物,無論它是狗,貓還是鳥。

所需材料

  • Arduino UNO
  • 4 * 4矩陣鍵盤
  • 16 * 2液晶屏
  • 按鈕
  • 伺服馬達
  • 電阻器
  • 連接線
  • 面包板

電路圖

在此基于Arduino的Cat Feeder中,為了獲取時間和日期,我們使用了RTC(實時時鐘)模塊。我們使用4 * 4矩陣鍵盤通過16x2 LCD手動設置寵物的進餐時間。伺服電機旋轉容器,并在用戶設定的時間將食物放下。LCD用于顯示日期和時間??梢栽谀┪驳囊曨l中找到完整的工作。

3D打印的寵物喂食器型號

我們使用3D打印機設計了Arduino Pet Feeder容器。您也可以通過從此處下載文件來打印相同的設計。用于打印此模型的材料是PLA。它分為四個部分,如下圖所示:

組裝四個零件,然后如下圖所示連接伺服電動機:

如果您不熟悉3D打印,則這里是入門指南。您可以在此處下載該寵物喂食器的STL文件。

DS3231 RTC模塊

DS3231是一個RTC(實時時鐘)模塊。它用于維護大多數電子項目的日期和時間。該模塊具有自己的紐扣電池電源,即使斷開主電源或MCU進行了硬復位,它也可以使用該電源來維持日期和時間。因此,一旦我們在此模塊中設置了日期和時間,它就會始終對其進行跟蹤。在我們的電路中,我們正在使用DS3231根據寵物主人設置的時間(如警報)喂食寵物。當時鐘達到設定的時間時,它將操作伺服電動機以打開容器門,并且食物會落入Pet的食物碗中。

**注意:**首次使用此模塊時,必須設置日期和時間。您還可以使用 RTC IC DS1307與Arduino讀取時間。

代碼和解釋

最后給出了自動寵物喂食器的完整Arduino代碼

Arduino具有用于使用伺服電機和LCD 16 * 2的默認庫。但是要在Arduino上使用DS3231 RTC模塊和4 * 4矩陣鍵盤,您必須下載并安裝庫。這兩個庫的下載鏈接如下:

  • DS3231 RTC(實時時鐘)模塊庫
  • 4 * 4矩陣鍵盤庫

在下面的代碼,我們定義庫,“#包括<DS3231.h>”用于RTC模塊,“#包括<Servo.h>”為伺服電機,“#包括<LiquidCrystal.h>” 16 * 2液晶,以及*“ #include <Keypad.h>”*代表4 * 4矩陣鍵盤。

#include <DS3231.h> #include <Servo.h> #include <LiquidCrystal.h> #include <Keypad.h>

在下面的代碼中,我們為4 * 4矩陣鍵盤定義了鍵盤映射,并為鍵盤的行和列分配了Arduino引腳。

char keys[ROWS][COLS] = {{'1','2','3','A'},{'4','5','6','B'},{'7','8','9','C'},{'*','0','#','D'} }; byte rowPins[ROWS] = { 2, 3, 4, 5 }; byte colPins[COLS] = { 6, 7, 8, 9 };

在這里,我們通過使用以下代碼中的命令來創建鍵盤。

Keypad kpd = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

分配A4和A5 Arduino引腳以與DS3231的SCL和SDA引腳連接。另外,將引腳分配給LCD并初始化伺服電機。

DS3231 rtc(A4, A5); Servo servo_test; //initialize a servo object for the connected servo LiquidCrystal lcd(A0, A1, A2, 11, 12, 13); // Creates an LC object. Parameters: (rs, enable, d4, d5, d6, d7)

在下面的代碼中,我們聲明t1到t6,鍵和數組r [6]以及feed。

int t1, t2, t3, t4, t5, t6; boolean feed = true;char key;int r[6];

在下面的代碼中,我們將開始設置所有組件。就像這段代碼中的*“ servo_test.attach(10);”* 伺服連接到Arduino的第10針。將A0,A1和A2定義為輸出引腳,并初始化LCD和RTC模塊。

void setup(){Servo_test.attach(10); //將伺服的信號引腳連接到arduino的pin9rtc.begin();lcd.begin(16,2);Servo_test.write(55);Serial.begin(9600);pinMode(A0,OUTPUT);pinMode(A1,OUTPUT);pinMode(A2,OUTPUT);}

現在,循環是如何工作的是要理解的重要部分。每當按下“ Pushbutton”(按鈕)時,它就會變高,意味著“ 1 *”可以通過“ buttonPress = digitalRead(A3)”讀取。現在,它進入“ if”語句,并調用“ setFeedingTime”*函數。然后,它將實時時間與用戶輸入的時間進行比較。如果條件為真,這意味著實時時間和輸入的時間相同,則伺服電機旋轉到100度角,并在經過0.4秒的延遲后返回到其初始位置。

void loop() { lcd.setCursor(0,0); int buttonPress; buttonPress = digitalRead(A3);if (buttonPress==1)setFeedingTime();lcd.print("Time: ");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("Date: ");lcd.print(rtc.getDateStr());if (t1==r[0] && t2==r[1] && t3==r[2] && t4==r[3]&& t5<1 && t6<3 && feed==true){servo_test.write(100); //command to rotate the servo to the specified angledelay(400); servo_test.write(55);feed=false;}}

在*void setFeedingTime()*函數代碼中,按下按鈕后,我們可以輸入寵物的喂食時間,然后必須按“ D”鍵以保存該時間。當保存的時間與實時一致時,伺服開始旋轉。

void setFeedingTime() {feed = true;int i=0;lcd.clear();lcd.setCursor(0,0);lcd.print("Set feeding Time");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(key);r[i] = key-48;i++;j++;if (j==2){lcd.print(":"); j++;}delay(500);}if (key == 'D'){key=0; break; }} }

自動寵物喂食器的工作


將代碼上傳到Arduino Uno之后,時間和日期將顯示在16 * 2 LCD上。當您按下按鈕時,它會詢問寵物的喂食時間,您必須使用4 * 4矩陣鍵盤輸入時間。顯示屏將顯示輸入的時間,當您按“ D”時,將節省時間。當實時時間和輸入時間匹配時,它將使伺服電動機從其初始位置55?旋轉到100°,并在延遲后再次返回其初始位置。因此,伺服馬達連接到食物容器的門上,因此隨著它的移動,門將打開,并且有一些食物掉入碗或盤中。延遲0.4秒后,伺服電機再次旋轉并關閉閘門。整個過程將在幾秒鐘內完成。這就是您的寵物在您輸入時自動獲取食物的方式。

根據食物改變時間和程度

代碼

#include <DS3231.h> #include <Servo.h> #include <LiquidCrystal.h> #include <Keypad.h>const byte ROWS = 4; // Four rows const byte COLS = 4; // Three columns// Define the Keymapchar keys[ROWS][COLS] = {{'1','2','3','A'},{'4','5','6','B'},{'7','8','9','C'},{'*','0','#','D'}};// Connect keypad ROW0, ROW1, ROW2 and ROW3 to these Arduino pins.byte rowPins[ROWS] = { 2, 3, 4, 5 };// Connect keypad COL0, COL1 and COL2 to these Arduino pins.byte colPins[COLS] = { 6, 7, 8, 9 };// Create the KeypadKeypad kpd = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );DS3231 rtc(A4, A5); Servo servo_test; //initialize a servo object for the connected servo LiquidCrystal lcd(A0, A1, A2, 11, 12, 13); // Creates an LC object. Parameters: (rs, enable, d4, d5, d6, d7)//int angle = 0; // int potentio = A0; // initialize the A0analog pin for potentiometerint t1, t2, t3, t4, t5, t6;boolean feed = true; // condition for alarmchar key;int r[6];void setup() { servo_test.attach(10); // attach the signal pin of servo to pin9 of arduinortc.begin();lcd.begin(16,2);servo_test.write(55); Serial.begin(9600);pinMode(A0, OUTPUT);pinMode(A1, OUTPUT);pinMode(A2, OUTPUT);} void loop() { lcd.setCursor(0,0); int buttonPress; buttonPress = digitalRead(A3);if (buttonPress==1)setFeedingTime();//Serial.println(buttonPress);lcd.print("Time: ");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("Date: ");lcd.print(rtc.getDateStr());if (t1==r[0] && t2==r[1] && t3==r[2] && t4==r[3]&& t5<1 && t6<3 && feed==true){ servo_test.write(100); //command to rotate the servo to the specified angle delay(400); servo_test.write(55); feed=false;} } void setFeedingTime() {feed = true;int i=0;lcd.clear();lcd.setCursor(0,0);lcd.print("Set feeding Time");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(key);r[i] = key-48;i++;j++;if (j==2){lcd.print(":"); j++;}delay(500);}if (key == 'D'){key=0; break; }} }

總結

以上是生活随笔為你收集整理的使用Arduino的自动宠物喂食器的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。