亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

巴甫洛夫猫

组件和用品

Arduino MKR IoT Bundle
× 1

应用和在线服务

电报

关于这个项目

注意:本教程可能已过时,请转到 这里 获取最新版本。

如果你曾经尝试过训练一只猫,你就会知道它有多难。猫是它们自己的主人,但现在您有机会使用这款支持物联网的设备让猫听从您的指令。

欢迎来到巴甫洛夫的猫实验!

在这个项目中,您将学习如何在(和不是)晚餐时间教您的猫,只使用 MKR IoT Bundle 中的组件和一些纸板。

我们都知道猫已经喜欢纸板箱了!

每当猫听到某种旋律时,它就会得到食物。光传感器检测到猫的存在。另一个旋律没有任何作用。看看这将如何运作?

您将能够随着时间的推移监控您的猫的进展,并通过您的手机设置食物分配率。一旦达到令人满意的统计数据,就可以将传感器重新用于可穿戴设备。如果你发出哔哔声,你的猫应该会跟着你。

免责声明:在本实验的开发过程中,没有猫受到伤害。另外,不能保证猫会吃掉食物,但你知道图片,对吗?

简而言之

按照这些简单的分步说明,您将能够构建自己的食物分配器。分配器基本上只是一些纸板和一个带有一些 Arduino 魔法的伺服电机。

使用名为 Telegram 的消息服务,您可以设置要分配的食物量并触发蜂鸣器播放的旋律。

光传感器用于检测猫是否对旋律做出反应并获取食物。

专业提示: 您可以在 MKR1000 上托管网页并将收集到的数据显示在一个方便的表格中。

组件

  • 伺服电机
  • 光电晶体管
  • 220 欧姆电阻
  • 蜂鸣器

学习目标

在本实验中,您将学习如何:

  • 使用自定义键盘管理 Telegram Bot
  • 从 MKR1000 本身设置和管理网络服务器功能。 #专业提示

专业提示 是有用但不是严格必要的步骤,为项目增加了一层复杂性。

想了解更多?

本教程是让您熟悉 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); // 将一行分配给一个或多个键盘 keyboard_one.addRow(row_two, 3); // 第二个参数是行的长度 

请记住,需要使用 UNICODE 发送表情符号。例如发送一个心形表情,我们将使用:\U00002764

您可以在此处查看 unicode 表情符号代码的完整列表。这意味着要定义我们的按钮,我们将使用:

 const char* MusicAndFood ="\U0001F3B6 + \U0001F36A"; // Note + Cookie const char* MusicNoFood ="\U0001F3B6 NO \U0001F36A"; // 注意没有 Cookie const char* OnePortion ="\U0001F408"; // CAT const char* TwoPortion ="\U0001F408 \U0001F408"; // 2 CATS const char* ThreePartion ="\U0001F408 \U0001F408 \U0001F408"; // 3 只猫  

这是完整的草图:

#include  #include  #include  const char* ssid =SECRET_SSID; // 您的网络 SSID(名称) const char* password =SECRET_PSWD; // 您的网络密码 const char BotToken[] =SECRET_BOT_TOKEN; WiFiSSLClient客户端; TelegramBot 机器人(BotToken,客户端); TelegramKeyboard keyboard_one; String OldChatId ="";无效设置(){ Serial.begin(115200);延迟(3000); // 尝试连接到 Wifi 网络: Serial.print("Connecting Wifi:"); Serial.println(ssid); while (WiFi.begin(ssid, password) !=WL_CONNECTED) { Serial.print(".");延迟(500); Serial.println(""); Serial.println("WiFi 已连接"); // 使用 UNICODE 选择您喜欢的表情符号 // 这里是列表 https://unicode.org/emoji/charts/full-emoji-list.html const char* MusicAndFood ="\U0001F3B6 + \U0001F36A"; // Note + Cookie const char* MusicNoFood ="\U0001F3B6 NO \U0001F36A"; // 注意没有 Cookie const char* OnePortion ="\U0001F408"; // CAT const char* TwoPortion ="\U0001F408 \U0001F408"; // 2 CATS const char* ThreePartion ="\U0001F408 \U0001F408 \U0001F408"; // 3 CATS // 定义您行的 const char* row_one[] ={MusicAndFood, MusicNoFood}; const char* row_two[] ={OnePortion, TwoPortion, ThreePortion}; keyboard_one.addRow(row_one, 2); // 将一行分配给一个或多个键盘 keyboard_one.addRow(row_two, 3); // 第二个参数是行的长度 bot.begin(); } void loop() { message m =bot.getUpdates(); // 读取新消息 if ( m.chat_id !=0 ) { // 检查是否有更新 OldChatId =m.chat_id; Serial.println(m.text); bot.sendMessage(m.chat_id, "你好!", keyboard_one); } 延迟(1000); }  

不幸的是,机器人发送表情符号的方式与接收它们的方式不同。 使用 EchoBot 示例是查看机器人如何接收表情符号的简单方法。

例如,我们将使用的表情符号是这样接收的:

ud83cudfb6 // 旋律 ud83cudf6a // Cookieud83dudc08 // 猫 

检测猫!

为了检测猫的存在,我们将使用一个光电晶体管,它能够测量光强度,因此是否有人靠近它。

请注意,我们使用了 220 欧姆的电阻器。

要从传感器读取值,我们只需要一个 analogRead(A6)。

由于我们只在旋律之后才对检测猫的存在感兴趣,并且只是在一定时间内我们可以使用以下逻辑:

unsigned long timer;bool startDetecting =true;int threshold=200; // 任意值void setup(){timer=millis()Serial.begin(9600);} void loop(){if (startDetecting) { int value =analogRead(A6); if (value  120000) { Serial.println("在过去两分钟内没有检测到猫");开始检测 =假; } } } 

请注意,我们使用 millis() 设置定时器的函数 . Millis() 为我们提供自电路板启动并运行以来的时间(以毫秒为单位)。我们可以使用它来设置定时器并在一定时间后触发事件。

我们也使用阈值 以确定是否检测到猫。该阈值是任意的,您可以根据自己的光照条件进行设置。

播放歌曲

要播放歌曲,我们将使用蜂鸣器和 tone() 功能。

我们将使用标准示例 toneMelody 的略微修改版本。 您可以在下拉菜单中找到它:

examples> digital>toneMelody. 

添加伺服电机

伺服用于开箱送餐。

注意我们使用了一个变量 int PartionAmount =1; 设置伺服器必须保持旋转 90 度的时间量。 我们将能够通过 Telegram 更改其值。

将伺服器连接到引脚 7 并上传此草图以查看其工作情况。

#include  伺服 myservo; // 创建伺服对象来控制伺服 int pos =0; // 存储伺服位置的变量 int PartionAmount =1; // 将默认食物量设置为 1 份 void setup() { myservo.attach(7); // 将引脚 6 上的伺服连接到伺服对象 } void loop() { moveServo();延迟(2000); } void moveServo() { Serial.println("移动伺服"); for (pos =0; pos <=90; pos +=1) { // 从 0 度到 90 度 myservo.write(pos); // 告诉伺服器转到变量“pos”延迟(15)中的位置; // 等待 15ms 等待舵机到达位置 } delay(PortionAmount * 300); // 根据您要提供的食物量,将盒子保持打开一段时间 (pos =90; pos>=0; pos -=1) { // 从 90 度变为 0 度 myservo.write(位置); / 告诉伺服器在变量“pos”延迟(15)中定位; // 等待 15ms 等待舵机到达位置 } }  

#ProTip:添加 Web 服务器

MKR1000 最强大的功能之一是接入点模式。

它允许我们在 MKR1000 上托管一个网页,我们可以通过使用板子 IP 地址并连接到同一网络来访问该网页 .

我们将使用此工具打印食品分配器收集的数据。

这一步需要基本的HTML和CSS知识 (或者对示例草图非常信任。您可以在以下位置查看基本的 Web 服务器示例:

> 示例> WiFi101> AP_SimpleWebServer 

我们将通过发送一个特定的词来触发接入点模式 到我们的 Telegram Bot,它 将回复链接以访问网页。 然后电报客户端将断开连接并且网络服务器启动。

else if(m.text =="Server"){ IPAddress ip =WiFi.localIP(); web_server_mode=true; String message ="查看网页请访问http://"+IpToString(ip); bot.sendMessage(m.chat_id, message , keyboard_one);电报客户端。停止();延迟(1000); server.begin(); // 在端口 80 上启动 Web 服务器 }  

网页包含一个按钮,可以关闭网络服务器模式并返回为电报客户端:

if (currentLine.endsWith("GET /BACKBUTTON")) { // 如果按钮按下 web_server_mode=false;客户端停止();延迟(1000); bot.begin(); bot.sendMessage(OldChatId, "重新上线!", keyboard_one); }  

每次猫检测结束时都会添加一个新的表格单元格 收集到的数据:食物是否送达、猫是否在两分钟内出现以及到达分配器需要多长时间。

AddTableCell(food/noFood, Yes/No, TimeValue);  

然后包含所有表格单元格的字符串被更新并集成到主 html 的其余部分中。

 table_cells+=cell; // 添加新单元格 html =html_1 + table_cells + html_2; // 将单元格添加到主 html 

查看最终的 Pro 示例,了解如何集成所有这些新功能!

提示: 如果您希望您的数据在电路板复位后仍然存在,请查看 Flash Storage 库或检查 Nerd 项目!

代码

完成草图
#ProTips 完整草图

定制零件和外壳

2 毫米纸板 pavlovcase_ShVm1OJRIF.dxf

示意图


制造工艺

  1. 冷冻蔬菜
  2. 电视晚宴
  3. CAT 扫描仪
  4. 猫砂
  5. 冻干食品
  6. 宠物食品
  7. 食品工业中的金属可检测塑料
  8. 在食品制造中提高产品质量的 6 种方法
  9. Shop.Cat.Com 指南
  10. My.Cat.com 入门
  11. 自动食品自动售货机 - 产品多功能性
  12. 食物变得更快