資料介紹
描述
如果你曾經嘗試過訓練一只貓,你就會知道這有多難。貓是它們自己的主人,但現在您有機會讓貓使用這種支持物聯網的設備進行競標。
歡迎來到巴甫洛夫的貓實驗!
在這個項目中,您將學習如何使用 MKR IoT Bundle 中的組件和一些紙板來教您的貓什么時候(和不是)晚餐時間。
我們都知道貓已經喜歡紙板箱了!
貓每聽到一段旋律,就會得到食物。光傳感器檢測貓的存在。另一個旋律什么也沒做。看看這將如何工作?
您將能夠隨著時間的推移監控貓的進展,并通過手機設置食物分配率。一旦達到令人滿意的統計數據,就該將傳感器重新用于可穿戴設備了。如果您發出嗶嗶聲,您的貓應該從那時起跟隨您。
免責聲明:在這個實驗的開發過程中沒有貓受到傷害。此外,不能保證貓會吃食物,但你明白了,對吧?
簡而言之
按照這些簡單的分步說明,您將能夠構建自己的食品分配器。分配器基本上只是一些紙板和一個伺服電機,添加了一些 Arduino 魔法。
使用名為 Telegram 的消息服務,您可以設置要分配的食物量并觸發蜂鳴器播放的旋律。
光傳感器用于檢測貓是否對旋律做出反應并得到食物。
專業提示:您可以在 MKR1000 上托管一個網頁,并將收集到的數據顯示在一個方便的表格中。
成分
- 伺服電機
- 220歐姆電阻
- 蜂鳴器
學習目標
在本實驗中,您將學習如何:
- 使用自定義鍵盤管理 Telegram Bot
- 從 MKR1000 本身設置和管理 Web 服務器功能。#專家提示
專業提示是有用但并非絕對必要的步驟,它們會為項目增加一層復雜性。
想知道更多?
本教程是讓您熟悉 MKR1000 和 IoT 的一系列實驗的一部分。所有實驗都可以使用 MKR IoT Bundle 中包含的組件構建。
- 巴甫洛夫的貓
電報和 Arduino
Telegram是一款流行的移動和桌面消息傳遞應用程序。除了讓我們與朋友聊天之外,它還允許我們創建方便且強大的聊天機器人!
Arduino的TelegramBot 庫為我們提供了一種簡單的方法來實現聊天機器人背后的邏輯。
要了解如何創建機器人和管理基本功能,請查看I Love You Pillow教程。
創建您的自定義鍵盤
Telegram 允許我們為快速回復創建自定義鍵盤。這意味著當您與機器人交談時,將顯示特定的按鈕選擇,而不是默認鍵盤。您可以輕松自定義這些按鈕并改善設備的用戶體驗。
我們的自定義鍵盤如下所示:
我們將使用第一排按鈕播放旋律并分配食物,而第二排按鈕將用于設置伺服電機的速度,從而設置要分配的食物量。
要創建自定義鍵盤,我們首先需要聲明它:
TelegramKeyboard keyboard_one;
然后定義行:
const char* row_one[] = {MusicAndFood, MusicNoFood};
const char* row_two[] = {OnePortion, TwoPortion, ThreePortion};
最后將行分配給鍵盤:
keyboard_one.addRow(row_one, 2); // assign a row to one or more keyboards
keyboard_one.addRow(row_two, 3); // second argument is the length of the row
請記住,表情符號需要使用 UNICODE 發送。例如,要發送一個心形表情符號,我們將使用:\U00002764
您可以在此處查看 unicode 表情符號代碼的完整列表。這意味著要定義我們的按鈕,我們將使用它:
const char* MusicAndFood = "\U0001F3B6 + \U0001F36A"; // Note + Cookie
const char* MusicNoFood = "\U0001F3B6 NO \U0001F36A"; // Note NO Cookie
const char* OnePortion = "\U0001F408"; // CAT
const char* TwoPortion = "\U0001F408 \U0001F408"; // 2 CATS
const char* ThreePortion = "\U0001F408 \U0001F408 \U0001F408"; // 3 CATS
這是完整的草圖:
#include
#include
#include
const char* ssid = SECRET_SSID; // your network SSID (name)
const char* password = SECRET_PSWD; // your network password
const char BotToken[] = SECRET_BOT_TOKEN;
WiFiSSLClient client;
TelegramBot bot (BotToken, client);
TelegramKeyboard keyboard_one;
String OldChatId = "";
void setup() {
Serial.begin(115200);
delay(3000);
// attempt to connect to Wifi network:
Serial.print("Connecting Wifi: ");
Serial.println(ssid);
while (WiFi.begin(ssid, password) != WL_CONNECTED) {
Serial.print(".");
delay(500);
}
Serial.println("");
Serial.println("WiFi connected");
// choose the emoji you like using UNICODE
// here's the list https://unicode.org/emoji/charts/full-emoji-list.html
const char* MusicAndFood = "\U0001F3B6 + \U0001F36A"; // Note + Cookie
const char* MusicNoFood = "\U0001F3B6 NO \U0001F36A"; // Note NO Cookie
const char* OnePortion = "\U0001F408"; // CAT
const char* TwoPortion = "\U0001F408 \U0001F408"; // 2 CATS
const char* ThreePortion = "\U0001F408 \U0001F408 \U0001F408"; // 3 CATS
// define your row's
const char* row_one[] = {MusicAndFood, MusicNoFood};
const char* row_two[] = {OnePortion, TwoPortion, ThreePortion};
keyboard_one.addRow(row_one, 2); // assing a row to one or more keyboards
keyboard_one.addRow(row_two, 3); // second argument is the length of the row
bot.begin();
}
void loop() {
message m = bot.getUpdates(); // Read new messages
if ( m.chat_id != 0 ) { // Checks if there are some updates
OldChatId = m.chat_id;
Serial.println(m.text);
bot.sendMessage(m.chat_id, "Hello !", keyboard_one);
}
delay(1000);
}
不幸的是,機器人發送表情符號的方式與接收它們的方式不同。使用 EchoBot 示例是了解機器人如何接收表情符號的簡單方法。
例如,我們將使用的表情符號是這樣收到的:
ud83cudfb6 // Melody
ud83cudf6a // Cookie
ud83dudc08 // Cat
檢測貓!
為了檢測貓的存在,我們將使用光電晶體管,它能夠測量光強度,因此是否有人靠近它。
請注意,我們使用了一個 220 歐姆的電阻。
要從傳感器讀取值,我們只需要一個analogRead(A6).
由于我們只在旋律之后才對檢測貓的存在感興趣,并且僅在一定時間內,我們可以使用以下邏輯:
unsigned long timer;
bool startDetecting = true;
int threshold=200; // arbitrary value
void setup(){
timer=millis()
Serial.begin(9600);
}
void loop(){
if (startDetecting) {
int value = analogRead(A6);
if (value < threshold) {
Serial.println("cat detected!");
startDetecting = false;
}
else if (millis() - timer > 120000) {
Serial.println("no cat detected in the past two minutes");
startDetecting = false;
}
}
}
請注意,我們使用該函數來設置計時器。 為我們提供了自開發板啟動并運行以來的毫秒數。我們可以使用它來設置計時器并在一定時間后觸發事件。millis()
Millis()
我們還使用閾值來確定是否檢測到貓。該閾值是任意的,您可以根據您的光照條件進行設置。
播放歌曲
要播放歌曲,我們將使用蜂鳴器和tone()
功能。
我們將使用標準示例toneMelody 的略微修改版本。您可以在下拉菜單中找到它:
examples > digital > toneMelody.
添加伺服電機
伺服器用于打開盒子并運送食物。
請注意,我們使用一個變量int PortionAmount = 1;
來設置伺服必須保持轉動 90 度的時間量。我們將能夠通過 Telegram 改變它的價值。
將伺服連接到引腳 7 并上傳此草圖以查看它的工作原理。
#include
Servo myservo; // create servo object to control a servo
int pos = 0; // variable to store the servo position
int PortionAmount = 1; // Set default amount of food to 1 portion
void setup() {
myservo.attach(7); // attaches the servo on pin 6 to the servo object
}
void loop() {
moveServo();
delay(2000);
}
void moveServo() {
Serial.println("moving servo");
for (pos = 0; pos <= 90; pos += 1) { // goes from 0 degrees to 90 degrees
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(15); // waits 15ms for the servo to reach the position
}
delay(PortionAmount * 300); // keep the box open for a time interval based on the amount of food you want to deliver
for (pos = 90; pos >= 0; pos -= 1) { // goes from 90 degrees to 0 degrees
myservo.write(pos); / tell servo to go to position in variable 'pos'
delay(15); // waits 15ms for the servo to reach the position
}
}
#ProTip:添加 Web 服務器
MKR1000 最強大的功能之一是接入點模式。
它允許我們在 MKR1000 上托管一個網頁,我們可以通過使用板 IP 地址并連接到同一網絡來訪問該網頁。
我們將使用此工具打印食品分配器收集的數據。
此步驟需要 HTML 和 CSS 的基本知識(或對示例草圖非常信任。您可以在以下位置查看基本 Web 服務器示例:
> example > WiFi101 > AP_SimpleWebServer
我們將通過向我們的 Telegram Bot發送特定單詞來觸發接入點模式,它會回復鏈接以訪問網頁。然后電報客戶端將斷開連接并啟動網絡服務器。
else if(m.text == "Server"){
IPAddress ip = WiFi.localIP();
web_server_mode=true;
String message = "To see the webpage go to http://"+IpToString(ip);
bot.sendMessage(m.chat_id, message , keyboard_one);
telegram_client.stop();
delay(1000);
server.begin(); // start the web server on port 80
}
該網頁包含一個按鈕,該按鈕將關閉 Web 服務器模式并作為電報客戶端返回:
if (currentLine.endsWith("GET /BACKBUTTON")) { // if button pressed
web_server_mode=false;
client.stop();
delay(1000);
bot.begin();
bot.sendMessage(OldChatId, "Back online !", keyboard_one);
}
每次貓檢測結束時,都會在表格的新單元格中添加收集到的數據:食物是否送達、貓是否在兩分鐘內出現以及到達分配器需要多長時間。
AddTableCell(food/noFood, Yes/No, TimeValue);
然后包含所有表格單元格的字符串被更新并集成到主 html 的其余部分中。
table_cells+=cell; // add new cell
html = html_1 + table_cells + html_2; // add cells to main html
查看最終的 Pro 示例,了解如何集成所有這些新功能!
提示:如果您希望您的數據在電路板重置后仍然存在,請查看Flash Storage庫或檢查Nerd項目!
- MKR WiFi 1010 + MKR RS 485 Shield連接到Ignition
- 如何安全地將Arduino MKR GSM 1400板與GCP IoT Core結合使用
- 通過WiFi Web服務器公開您的IoT Bundle Kit信息
- 基于Arduino Zero/MKR的示波器
- 使用Arduino MKR1000作為微控制器來創建筆更換系統
- 帶有Arduino MKR1010和MKR RGB Shield的Otto Biped
- 使用MKR IoT載體的Arduino燈控制器
- 使用MKR IoT Bundle中組件和紙板創建拼圖盒
- 使用Grove Sensor的Arduino MKR1010和阿里云IoT
- 使用MKR IoT Bundle中組件和紙板讓貓知道晚餐時間
- 基于Labview的小游戲飛天忍者貓源碼 50次下載
- 仿貓腿機器人跳躍能力評估分析 5次下載
- 基于ITM-MKR680Temperature Sensing的參考設計1
- 基于ITM-MKR680Temperature Sensing的參考設計
- 基于深度學習的機器人示教系統設計與實現 77次下載
- 電信光纖貓怎么設置上網 電信光纖貓和聯通光纖貓能通用嗎? 3145次閱讀
- 濕熱環境下乙酸的形成對光伏組件的影響 382次閱讀
- DWT跟蹤組件調試 841次閱讀
- 速通IoT設備電源測量難點 511次閱讀
- SpinalHDL中Bundle數據類型的轉換 1184次閱讀
- ROHM Solution Simulator允許更改組件屬性來執行仿真 1441次閱讀
- 干簧管傳感器構成的磁控電動電子貓電路 3892次閱讀
- 如何使用Cyber RT創建新組件 5738次閱讀
- 簡評FPGA——Arduino MKR Vidor 4000 6807次閱讀
- 手把手教你用紙板和鋁箔做一個簡易的可變電容 1.5w次閱讀
- 如何通過按示教器上的按鈕,來改變機器人的速度倍率和個性化設置 7126次閱讀
- 沒有示教器,還能控制機器人嗎? 1w次閱讀
- 基于MIPS CPU和微控制器來實現IoT節點和IoT網關的高安全性 1436次閱讀
- 光電轉化器和光貓有區別嗎 2.6w次閱讀
- 光貓是什么_電信光貓怎么設置 28.3w次閱讀
下載排行
本周
- 1山景DSP芯片AP8248A2數據手冊
- 1.06 MB | 532次下載 | 免費
- 2RK3399完整板原理圖(支持平板,盒子VR)
- 3.28 MB | 339次下載 | 免費
- 3TC358743XBG評估板參考手冊
- 1.36 MB | 330次下載 | 免費
- 4DFM軟件使用教程
- 0.84 MB | 295次下載 | 免費
- 5元宇宙深度解析—未來的未來-風口還是泡沫
- 6.40 MB | 227次下載 | 免費
- 6迪文DGUS開發指南
- 31.67 MB | 194次下載 | 免費
- 7元宇宙底層硬件系列報告
- 13.42 MB | 182次下載 | 免費
- 8FP5207XR-G1中文應用手冊
- 1.09 MB | 178次下載 | 免費
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 2555集成電路應用800例(新編版)
- 0.00 MB | 33566次下載 | 免費
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費
- 4開關電源設計實例指南
- 未知 | 21549次下載 | 免費
- 5電氣工程師手冊免費下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費
- 6數字電路基礎pdf(下載)
- 未知 | 13750次下載 | 免費
- 7電子制作實例集錦 下載
- 未知 | 8113次下載 | 免費
- 8《LED驅動電路設計》 溫德爾著
- 0.00 MB | 6656次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費
- 2protel99se軟件下載(可英文版轉中文版)
- 78.1 MB | 537798次下載 | 免費
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420027次下載 | 免費
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費
- 6電路仿真軟件multisim 10.0免費下載
- 340992 | 191187次下載 | 免費
- 7十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183279次下載 | 免費
- 8proe5.0野火版下載(中文版免費下載)
- 未知 | 138040次下載 | 免費
評論
查看更多