如果您在自己的地方養了一只寵物,并且在您不在的時候沒有人在正確的時間喂他/她。因此,我們正在構建一個簡單、高效且經濟的基于物聯網的寵物喂食器。使用這款自動寵物喂食器,您可以在世界任何地方使用Blynk 移動應用程序或 Web 儀表板喂養您的寵物。您只需按一個按鈕或設置一個時間,其余的任務將由這臺機器完成。在這個項目中,我們使用NodeMCU ESP8266作為主控制器,使用伺服電機來操作寵物喂食器和 NTP 服務器來獲取當前時間。
構建寵物喂食器所需的組件
NodeMCU ESP8266
伺服電機
自動寵物喂食器電路圖
自動寵物喂食器的完整示意圖如下:
連接非常簡單,因為我們只是將伺服電機與 NodeMCU 連接起來。Servo 的 Vcc(紅線)和 GND(棕線)引腳連接到 NodeMCU 的 3.3V 和 GND,而 Servo 的信號引腳(黃線)連接到 NodeMCU 的 D3 引腳。
為寵物喂食器配置 Blynk
Blynk 是一套完整的軟件,用于對任何規模的連接設備進行原型設計、部署和遠程管理,從小型物聯網項目到數百萬商業可用的連接項目。它可用于將硬件連接到云并構建無代碼 iOS、Android 和 Web 應用程序,以分析來自設備的實時和歷史數據,從全球任何地方遠程控制它們,接收重要通知等等。 在這個項目中,我們將使用 Blynk 移動應用程序來控制連接到寵物喂食器設置的伺服電機。
首先,我們必須為Blynk Cloud平臺創建一個新帳戶,或者如果您已有舊帳戶,您可以使用舊帳戶。登錄到您的帳戶后,您必須創建一個模板,您可以在其中添加多個設備。為此,請單擊右上角的“+ 新模板”按鈕。
將彈出一個窗口,您必須在其中輸入模板名稱、硬件類型和連接類型。模板名稱可以是與您的項目相關的任何名稱,硬件類型是您正在使用的微控制器板,連接類型是 Wi-Fi。
現在在模板中,我們可以添加多個信息,如設備信息、元數據、DataStream、事件等。在接下來的步驟中,我們將一一填寫這些詳細信息。因此,第一個選項卡是設備信息,將其保留為默認值。
然后第二個選項卡是元數據。元數據是我們提供給項目的附加信息,例如設備名稱、設備所有者等。這不是強制性的,您可以根據需要添加填寫這些內容。
下一個選項卡是“DataStream”。數據流是一種結構化數據的方法,這些數據定期流入和流出設備。在這里,我們將創建兩個數據流,一個用于控制伺服,另一個用于從 blynk 應用程序獲取計時器數據。要創建 DataStream,請單擊“+New Datastream”按鈕,然后選擇Virtual Pin。
將彈出一個窗口,您必須在其中輸入數據流名稱、虛擬引腳和數據類型。在此之后單擊“創建”按鈕并按照相同的過程創建數據流以獲取計時器值。
完成此操作后,保留“事件”選項卡并移至“Web 儀表板”選項卡。在 blynk 2.0 中,我們有兩種類型的儀表板,即 Web 儀表板和移動儀表板。兩個儀表板都可以單獨配置和使用。Web Dashboard 的小部件數量有限。您可以添加一個開關進行測試。
完成此操作后,下一個選項卡是移動儀表板。移動儀表板只能在移動設備上配置。所以在移動到移動端之前,首先將所有更改保存在云端。為此,請單擊右上角的保存按鈕。
現在我們剩下編碼部分和移動儀表板。首先,我們將使用編碼部分。
為寵物喂食器編程 NodeMCU
該項目的完整代碼在文檔末尾給出。在這里,我們將解釋一些重要的代碼行。因此,像往常一樣通過包含所有必需的庫文件來啟動代碼。BlynkEdgent.h是 Blynk 2.0 平臺的新庫。“NTPClient.h”用于從 NTP 服務器獲取時間和日期數據。“WiFiUdp.h”庫用于處理UDP協議,如打開UDP端口,發送和接收UDP數據包等。而“Servo.h”用于控制伺服電機。
#include “BlynkEdgent.h” #include#include #include #include <伺服.h>
然后在接下來的行中輸入 Blynk 模板 ID 和 Blynk 設備 ID。這些 ID 可以從 Blynk 云平臺上的“設備信息”頁面復制。
#define BLYNK_TEMPLATE_ID "TMPLrKGv1gYp" #define BLYNK_DEVICE_NAME "寵物喂食器"
然后在下一行為 NTP 客戶端創建一個實例。在這個實例中,我們必須指定我們希望使用的 NTP 服務器的地址。
NTPClient timeClient(ntpUDP, "asia.pool.ntp.org", utcOffsetInSeconds);
BLYNK_WRITE()函數用于檢查 V0 和 V1 虛擬引腳的傳入數據。虛擬引腳 V0 用于接收開關狀態,而 V1 引腳用于從 Blynk 應用程序獲取定時器數據。
BLYNK_WRITE(V0) { int 數據 = param.asInt(); 如果(數據 == 1){ 伺服_1.write(45);// 伺服將移動到 45 度角。 延遲(1000); 伺服_1.write(90);//伺服將移動到90度角。 } } BLYNK_WRITE(V1){ time_blynk = param.asInt(); }
在設置部分,我們首先以 115200 的波特率初始化串行通信,并啟動 Blynk 和時間客戶端通信。
無效設置() { 序列號.開始(115200); 延遲(100); BlynkEdgent.begin(); 伺服_1.attach(0); timeClient.begin(); }
現在在循環函數中,我們首先從 NTP 客戶端-服務器獲取時間數據,然后將這些數據存儲在 HH 和 MM 變量中。我們從 NTP 客戶端獲取的時間數據是 24 小時格式,所以首先我們將其更改為 12 小時格式,然后我們以秒為單位轉換小時和分鐘數據,以將其與我們從 Blynk 接收的計時器數據進行比較應用程序。如果當前時間和從 Blynk 應用程序接收到的時間相同,則寵物喂食器將在特定時間段內打開和關閉。
無效循環(){ timeClient.update(); HH = timeClient.getHours(); 國際小時= HH; 如果(小時 == 0)小時 = 12; 如果(小時 > 12)小時 = 小時 - 12; MM = timeClient.getMinutes(); final_time = 3600*小時+ 60*MM; 如果(time_blynk == final_time){ } BlynkEdgent.run(); }
現在選擇“ NodeMCU ”的板類型和連接NodeMCU的端口并上傳代碼。現在完成此操作后,我們就剩下了 Blynk 移動應用程序,并將 Wi-Fi 憑據添加到 NodeMCU。
配置 Blynk 移動應用程序
第一步是從 Play 商店下載 Blynk 應用程序,然后創建一個新帳戶。如果您有一個現有帳戶,您也可以使用現有帳戶登錄。現在您必須啟用開發者模式。開發人員是一個特殊用戶,他可以訪問配置平臺以供最終用戶使用所需的所有功能。要啟用開發者模式,請單擊左上角的“個人資料”圖標,然后啟用開發者模式。
之后,您需要單擊添加新設備按鈕并將 NodeMCU 板靠近手機并單擊就緒按鈕。
它會自動找到NodeMCU板創建的熱點。連接到該熱點,然后您可以輕松輸入路由器的 Wi-Fi 憑據。之后單擊繼續,它將 Wi-Fi 憑據發送到 NodeMCU 板,我們完成了將 Wi-Fi 憑據添加到板。
創建 Blynk 移動儀表板
現在我們完成了配置 Blynk 移動儀表板的最后一步。為此,請轉到您剛剛創建的設備,然后單擊菜單圖標,您將看到所有可用的小部件。
在這里,我們將添加兩個小部件,即 Button 和 Timer 小部件。按鈕小部件用于手動控制伺服,而計時器小部件用于設置特定操作的時間。
現在點擊按鈕小部件進行配置。在這里,您必須選擇我們在 Blynk 云上創建的數據流。之后點擊計時器小部件并選擇數據流。您還可以更改其他設置,如小部件名稱、顏色等。
現在我們已經成功配置了 Blynk Mobile 儀表板,下一步是構建 Pet Feeder 設置。
構建寵物喂食器設置
為了制造一個自動貓喂食器,我們從亞馬遜訂購了一個寵物喂食器盒,并對其進行了修改以適應伺服系統和其他電子設備。直流電機放置在盒子內,并附有一個 3D 打印齒輪。NodeMCU 板放置在盒子的底部,這個完整的設置使用 12V 適配器供電。
測試自動寵物喂食器
現在我們已經準備好了一切,讓我們繼續測試這個寵物喂食器設置。為此,我在寵物喂食器的盒子里裝滿了貓糧,為了進行測試,我使用安裝在我手機上的 Blynk 應用程序作為遙控器來檢查我們的寵物喂食器是否正在分配食物。我一打開設置,寵物喂食器就開始以可控的速度分配貓糧。
除了開關,我們還可以使用 Blynk 應用程序的計時器小部件設置喂貓的時間。完整的測試過程顯示在頁面底部的視頻中。希望你理解這篇文章并學到新的東西。如果您有任何疑問,請將它們放在下面的評論部分。
代碼
// 在此處填寫來自您的 Blynk 模板的信息
#define BLYNK_TEMPLATE_ID "TMPLrKGv1gYp" #define BLYNK_DEVICE_NAME "寵物喂食器" #define BLYNK_FIRMWARE_VERSION "0.1.0" #define BLYNK_PRINT 序列號 //#define BLYNK_DEBUG #define APP_DEBUG // 取消注釋您的板,或在 Settings.h 中配置自定義板 //#define USE_SPARKFUN_BLYNK_BOARD //#define USE_NODE_MCU_BOARD //#define USE_WITTY_CLOUD_BOARD //#define USE_WEMOS_D1_MINI #include “BlynkEdgent.h” #include#include #include //#include // 包括伺服庫。 常量長 utcOffsetInSeconds = 19800; WiFiUDP ntpUDP; NTPClient timeClient(ntpUDP, "asia.pool.ntp.org", utcOffsetInSeconds); int HH,MM,final_time; int time_blynk,數據; //伺服servo_1; #定義電機D0 BLYNK_WRITE(V0) { 數據 = param.asInt(); } BLYNK_WRITE(V1) { time_blynk = param.asInt(); Serial.print(time_blynk); //Serial.print("有時間"); } 無效設置() { 序列號.開始(115200); 延遲(100); BlynkEdgent.begin(); pinMode(電機,輸出); 數字寫入(電機,低); //servo_1.attach(0); timeClient.begin(); } 無效循環(){ timeClient.update(); HH = timeClient.getHours(); //Serial.print(timeClient.getHours()); 國際小時= HH; 如果(小時 == 0)小時 = 12;// 午夜 如果(小時 > 12)小時 = 小時 - 12; //Serial.print(小時); //Serial.print(":"); MM = timeClient.getMinutes(); // Serial.println(timeClient.getMinutes()); final_time = 3600*小時+ 60*MM; // Serial.println(final_time); 如果(time_blynk == final_time){ 數字寫入(電機,低); 延遲(3000); 數字寫入(電機,高); } 如果(數據 == 1){ 數字寫入(電機,高); 延遲(5000); 數字寫入(電機,低); Serial.print("開幕"); } 延遲(6000); BlynkEdgent.run(); }
-
物聯網
+關注
關注
2909文章
44578瀏覽量
372874 -
ESP8266
+關注
關注
50文章
962瀏覽量
44969 -
喂食器
+關注
關注
1文章
23瀏覽量
3063
發布評論請先 登錄
相關推薦
評論