久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4435|回復: 0
打印 上一主題 下一主題
收起左側

使用Arduino制作自動寵物喂食機

[復制鏈接]
跳轉到指定樓層
樓主
ID:839588 發表于 2020-11-6 00:09 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式

今天,我們將要制作一個基于Arduino開發板的自動寵物喂食機,它可以及時的自動為你的寵物提供食物。該項目采用一個DS3231的RTC(實時時鐘)模塊,用于設置寵物需要喂食的時間和日期。因此,根據您寵物進食的時刻表,設備會自動放下或填充食物。


在本項目中,我們使用一個1602的LCD模塊顯示時間,通過使用連接到Arduino UNO的DS3231 RTC模塊獲得。此外,它還使用一個伺服電機旋轉容器以提供食物,同時還提供一個4 * 4的矩陣鍵盤,用來手動設置喂食寵物的時間。您可以根據您想要喂給寵物的食物量來設置旋轉角度和容器開啟時間。食物量也可能由于你的寵物是小狗、小貓還是鳥兒而略有不同。

所需的材料

●    Arduino UNO開發板

●    4 * 4的矩陣鍵盤

●    LCD顯示模塊1602

●    一個按鈕

●    伺服電機

●    電阻

●    連接導線

●    面包板

電路原理圖

在這款基于Arduino的寵物喂食機的項目中,為了獲取時間和日期,我們使用了RTC(實時時鐘)模塊。我們使用4 * 4矩陣鍵盤以及LCD模塊1602手動設置寵物的喂食時間。伺服電機旋轉容器并按照用戶設定的時間放下食物。 LCD用于顯示日期和時間。

使用3D打印的寵物喂食機模型

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

按照下圖所示組裝四個部件并連接伺服電機:



DS3231 RTC模塊簡介

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


注意:首次使用此模塊時,您必須設置日期和時間。


代碼和說明

自動寵物喂食機的完整的Arduino代碼在本章的末尾給出。

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

●    DS3231 RTC(實時時鐘)模塊庫

●    4 * 4矩陣鍵盤庫


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

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

[color=rgb(51, 102, 153) !important]復制代碼


在下面的代碼中,我們定義了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 };

[color=rgb(51, 102, 153) !important]復制代碼

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

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

[color=rgb(51, 102, 153) !important]復制代碼


我們分配Arduino開發板的A4和A5連接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)

[color=rgb(51, 102, 153) !important]復制代碼


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

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

[color=rgb(51, 102, 153) !important]復制代碼


在下面的代碼中,我們設置了所有組件用于初始化操作。比如,在代碼“servo_test.attach(10);”中,將伺服電機連接到Arduino的第10個引腳。將A0、A1和A2定義為輸出引腳,然后初始化LCD和RTC模塊。

  • void setup()
  • {
  •   servo_test.attach(10);   // attach the signal pin of servo to pin9 of arduino
  •   rtc.begin();
  •   lcd.begin(16,2);
  •   servo_test.write(55);
  •   Serial.begin(9600);
  •   pinMode(A0, OUTPUT);
  •   pinMode(A1, OUTPUT);
  •   pinMode(A2, OUTPUT);
  • }

[color=rgb(51, 102, 153) !important]復制代碼


現在,理解的重要部分是loop函數是如何工作的。無論何時按下按鈕,它都會變為搞定平,也就是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 angle
  •    delay(400);
  •   servo_test.write(55);
  •   feed=false;
  • }
  • }

[color=rgb(51, 102, 153) !important]復制代碼


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 = key-48;
  •     i++;
  •     j++;
  •     if (j==2)
  •     {
  •       lcd.print(":"); j++;
  •     }
  •     delay(500);
  •   }
  •   if (key == 'D')
  •   {key=0; break; }
  •   }
  • }

[color=rgb(51, 102, 153) !important]復制代碼


自動寵物喂食器的工作過程


將代碼上傳到Arduino Uno開發板后,LCD模塊將會顯示相應的時間和日期。當您按下按鈕時,它會詢問寵物的喂食時間,您必須使用4 * 4矩陣鍵盤輸入時間。顯示屏將顯示輸入的時間,按'D'鍵可以保存該時間。當實時時間和輸入時間一致時,伺服電機從初始位置55⁰旋轉到100⁰,并在延遲后再次返回到初始位置。由于伺服馬達連接到了食品容器門,因此當它移動時,門打開并且一些食物落入碗或盤中。延時0.4秒后,伺服電機再次旋轉,并關閉閘門。整個過程在幾秒鐘內完成。這就是您的寵物如何在您輸入的時間點自動獲取食物的方式。


您根據食物量來改變時間和旋轉角度。如果您在制作類似項目時遇到問題,歡迎在此貼下進行回復



分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏3 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 四虎影视在线 | 自拍偷拍第1页 | 99视频在线免费观看 | 欧美一区二区三区在线免费观看 | 视频一区欧美 | 日韩欧美中文在线 | 亚洲国产精品一区二区第一页 | 在线免费看黄 | 日本黄色影片在线观看 | 精品一区二区电影 | 国产精品成人69xxx免费视频 | 国产成人一区二区三区 | 免费国产一区二区视频 | 激情黄色在线观看 | 亚洲欧美日韩中文字幕一区二区三区 | 91精品久久久久久久99 | 色爱综合网| 欧美在线一二三 | 午夜电影一区 | 亚洲三区在线 | 久久三区 | 亚洲精品中文在线观看 | 欧美精产国品一二三区 | 电影午夜精品一区二区三区 | 日韩精品网站 | 超碰在线免费 | 国产欧美一区二区三区另类精品 | 国产一级淫片免费视频 | 亚洲精品一区中文字幕乱码 | 免费一级欧美在线观看视频 | 精品国产一区二区三区免费 | 免费激情av | 日韩一区二区三区在线观看 | 99久久精品免费看国产四区 | 久久久久久久久99 | 欧美日韩一卡 | 色婷婷av久久久久久久 | 欧美日韩久久精品 | 99视频在线播放 | 精国产品一区二区三区四季综 | 福利av在线 |