爱你的枕头
组件和用品
| × | 1 |
应用和在线服务
|
关于这个项目
注意:本教程可能已过时,请转到 这里 获取最新版本。
我们都知道生活中没有那个特别的人可能会很困难,但是如果您只需拥抱一个枕头就可以通过互联网远程发送爱和情感呢?
现在,我们不能真正发送拥抱……但我们可以通过消息传递应用程序发送一个甜蜜的表情符号,由你给枕头一个拥抱触发。
当你拥抱I Love You Pillow 您会听到内部蜂鸣器发出的心跳声。根据您拥抱的长度,不同的表情符号将从 Telegram Bot 发送到您选择的任何聊天。
使用这款可拥抱的设备与您所爱的人保持联系!
简而言之
在这个实验中,我们将使用铝箔制作一个 DIY 电容式传感器,用于检测拥抱。
为了创建我们的拥抱发送设备,我们需要以下组件:
- 蜂鸣器
- 铝箔
- 1 个电阻 5M 欧姆
- 面包板
- 电线
学习目标
- 介绍 Telegram Bots
- 管理电容式传感器
- 电报机器人和群聊#ProTips
- WiFi 最佳做法#ProTips
专业提示 是有用但不是严格必要的步骤,为项目增加了一层复杂性。
想了解更多?
本教程是让您熟悉 MKR1000 和 IoT 的一系列实验的一部分。所有实验都可以使用 MKR IoT Bundle 中包含的组件构建。
- 我爱你的枕头
- 拼图盒
- 巴甫洛夫的猫
- 书呆子
- 工厂通讯员
介绍电报机器人
Telegram 是一种流行的移动和桌面消息应用程序。除了让我们与朋友聊天之外,它还允许我们创建方便且强大的聊天机器人!
聊天机器人只不过是一个你可以与之聊天的联系人,而不是它背后的一个人,有一台机器会根据你编写的代码做出相应的回复。
Arduino 的 TelegramBot 库为我们提供了一种简单的方法来实现聊天机器人背后的逻辑。
创建你的机器人
创建机器人是如此简单!
只需按照以下几个简单步骤操作或查看此处的文档即可。
图> 图> 图> 图>
设置董事会
首先确保我们拥有所有需要的库。
这是我们需要的所有库的列表:
- WiFi101
- TelegramBot
- ArduinoJson
- 电容传感器
您可以按照这个简单的指南轻松安装它们。
为了使用 Telegram 的 API,我们首先需要在 MKR1000 上上传证书。 这适用于大多数在线服务和 API!
从 WiFi101 库上传固件更新程序示例并将 api.telegram.org 添加到域中。
如果您使用的是 Arduino 网络编辑器,此功能尚未实现,您需要通过 Arduino 桌面应用程序。
图> 图>让魔法发生!
打开 TelegramBot 库中的 EchoBot 示例,填写您的 WiFi 凭据和您从 BotFather 收到的 API 令牌并上传!
您刚刚创建了一个可以回显您所有消息的机器人。
EchoBot 和表情符号
表情符号无处不在!我们将用它们来传递我们的爱和拥抱。使用 EchoBot 示例是查看机器人如何读取您的表情符号的简单方法。
不幸的是,机器人接收表情符号的方式与发送它们的方式不同。 为了发送表情符号,我们需要使用 UNICODE 字符。
例如要发送一个心形表情符号,我们将使用:\U00002764
您可以在此处查看 unicode 表情符号代码的完整列表。为了创建一个用另一个心形表情符号回复心形表情符号的机器人,我们将使用这样的代码:
void loop() { message m =bot.getUpdates(); // 读取新消息 if ( m.chat_id !=0 ){ // 检查是否有更新 Serial.println(m.text); // 打印收到的消息 if(m.text =="u2764ufe0f"){ // 检查是否收到心形表情 bot.sendMessage(m.chat_id, "\U00002764"); // 用心形表情回复同一个聊天 } } }
结果将是:
电容式传感器
Telegram 说够了,让我们开始构建我们的 DIY 电容式传感器!
CapacitiveSensor 库将两个或多个 Arduino 引脚变成一个电容传感器,可以感应人体的电容。传感器设置所需的只是一个中高值电阻器和一块铝箔。
在最灵敏的情况下,传感器将开始感应距离传感器几英寸远的手或身体并穿过不同种类的材料 .我们会把传感器藏在枕头里!
上传示例草图,连接电线并在控制台上查看结果:
#include CapacitiveSensor箔 =CapacitiveSensor(5,4); // 引脚 5 和 4 之间的 10M 电阻器,引脚 4 是传感器引脚,添加导线和或箔空隙 setup() {箔.set_CS_AutocaL_Millis(0xFFFFFFFF); // 关闭自动校准 Serial.begin(9600); } void loop() { long start =millis();长传感器值 =箔.电容传感器(30); Serial.print(millis() - 开始); // 以毫秒为单位检查性能 Serial.print("\t"); // 用于调试窗口间距的制表符 Serial.print(sensor_value); // 打印传感器输出 Serial.println("\t"); // 打印传感器输出 3 delay(500); // 任意延迟限制数据到串口 }
接线和结果
图>
我们将使用 sensor_value
作为检测拥抱的阈值!
心跳
拥抱的时间越长,听到的心跳声就越多。心跳越多,你发送的爱就越多(以及不同的表情符号)。
我们将使用蜂鸣器和几行简单的代码来模拟心跳声。
int 蜂鸣器 =8; // 连接到蜂鸣器的引脚 void setup(){} void loop(){ HeartBeat();延迟(1000); } void HeartBeat(){tone(Buzzer, 31, 200); // 音调(引脚,音符,持续时间);延迟(200);音调(蜂鸣器, 31, 400);延迟(200);无音(蜂鸣器);延迟(1000); } 代码>
要更复杂地使用蜂鸣器和 Tone 功能,请查看下拉菜单示例并查找 Digital> ToneMelody
#ProTip:聊天 ID 和群聊
为了发送消息,机器人需要一个 chat-id。
聊天 ID 是某人和机器人之间聊天的唯一标识符。为了让机器人向特定的人发送消息,您首先需要该人向机器人发送短信并保存该特定聊天的聊天 ID。
在这个项目中,机器人只会回复最后一个给它发短信的人,无论是谁。
机器人是公开的,每个人都可以给机器人发短信!
如果你想在群聊中加入机器人,你需要禁用隐私模式,允许机器人读取所有消息,否则它只能检测以 /:
开头的命令
#ProTip:WiFi 最佳实践
WiFi 可能很棘手。有时它只是在没有任何理由的情况下关闭几秒钟。这对您的 Arduino 来说可能是个问题,因为大部分时间我们只在草图的开头运行 WiFi 连接功能。
在线服务也可能很棘手,当 Arduino 向服务器(在本例中为 Telegram)发送请求时,它会等待回复。由于数百种原因,回复可能无法到达,从而使 Arduino 处于无限循环中。
为了让您的项目更加稳定,您可以添加一个看门狗。
看门狗是一个必须定期更新的定时器,否则会重启电路板。
您可以使用这两个库为您的项目添加看门狗:
- Adafruit SleepyDog
- Adafruit ASF Core // 必须从 Github 手动下载和安装
EchoBot 示例将如下所示:
#include #include #include #include // 初始化 Wifi 连接到路由器 char ssid[] ="xxxx"; // 您的网络 SSID(名称) char pass[] ="yyyy"; // 你的网络密钥 // 初始化 Telegram BOT const char BotToken[] ="xxxx"; WiFiSSLClient客户端; TelegramBot 机器人(BotToken,客户端);无效设置(){ Serial.begin(115200); while (!Serial) {} 延迟(3000); // 尝试连接到 Wifi 网络: Serial.print("Connecting Wifi:"); Serial.println(ssid); while (WiFi.begin(ssid, pass) !=WL_CONNECTED) { Serial.print(".");延迟(500); Serial.println(""); Serial.println("WiFi 已连接"); bot.begin();看门狗.启用(10000); // 将计时器设置为 10 秒 } void loop() { Watchdog.reset(); // 如果在 10 秒内未调用此函数,则板将自行重置 message m =bot.getUpdates(); // 读取新消息 if ( m.chat_id !=0 ){ // 检查是否有更新 Serial.println(m.text); bot.sendMessage(m.chat_id, m.text); // 用相同的文字回复相同的聊天 } else { Serial.println("no new message"); } }
代码
完成草图
示意图
制造工艺