我们都知道,在你的生活中没有那个特别的人可能会很困难,但是如果你可以通过互联网远程发送爱和感情,只需拥抱一个枕头呢?现在,我们不能真正发送拥抱……但我们可以通过消息应用程序发送一个甜蜜的表情符号,由你给枕头一个拥抱触发。当你拥抱我爱你枕头时,你会听到里面的蜂鸣器发出心跳的声音。根据您拥抱的长度,Telegram Bot 将向您选择的任何聊天发送不同的表情符号。使用这款可拥抱的设备与您所爱的人保持联系!
在这个实验中,我们将使用铝箔制作一个 DIY 电容传感器,用于检测拥抱。为了创建我们的拥抱发送设备,我们需要以下组件:
专业提示是有用但并非绝对必要的步骤,它们会为项目增加一层复杂性。
本教程是让您熟悉 MKR WiFi 1010 和 IoT 的一系列实验的一部分。所有实验都可以使用 MKR IoT Bundle 中包含的组件构建。
Telegram是一款流行的移动和桌面消息传递应用程序。除了让我们与朋友聊天之外,它还允许我们创建方便且强大的聊天机器人!
聊天机器人只不过是您可以与之聊天的联系人,而是它背后的人,有一台机器可以相应地回复您编写的代码。
Arduino的 TelegramBot 库为我们提供了一种简单的方法来实现聊天机器人背后的逻辑。
创建一个机器人是如此简单!只需按照这几个简单的步骤或在此处查看文档。
首先确保我们拥有所有需要的库。这是我们需要的所有库的列表:
您可以按照这个简单的指南轻松安装它们。
为了使用 Telegram 的 API,我们首先需要在 MKR WiFi 1010 上上传证书。这适用于大多数在线服务和 API!
从 WiFiNINA 库上传固件更新程序示例并将 api.telegram.org 添加到域。这些是要遵循的步骤:
让魔法发生!
打开 TelegramBot 库中的 EchoBot 示例,填写您的 WiFi 凭据和您从 BotFather 收到的 API 令牌并上传!
> 示例 > TelegramBot > EchoBot
您刚刚创建了一个回显所有消息的机器人。
表情符号无处不在!我们将用它们来传递我们的爱和拥抱。使用 EchoBot 示例是查看机器人如何读取您的表情符号的简单方法。
不幸的是,机器人接收表情符号的方式与发送它们的方式不同。为了发送表情符号,我们需要使用UNICODE字符。
例如,要发送一个心形表情符号,我们将使用: \U00002764
您可以在此处查看unicode 表情符号代码的完整列表。为了创建一个用另一个心脏表情符号回复心脏表情符号的机器人,我们将使用如下代码:
void loop() {
message m = bot.getUpdates(); // Read new messages
if ( m.chat_id != 0 ) { // Check if there are some updates
Serial.println(m.text); // print the message received
if (m.text == "u2764ufe0f") { //check if it received an heart emoji
bot.sendMessage(m.chat_id, "\U00002764");
// Reply to the same chat with the heart emoji
}
}
}
结果将是:
Telegram 够了,让我们开始构建我们的 DIY 电容式传感器吧!
CapacitiveSensor库将两个或多个 Arduino 引脚变成一个电容传感器,可以感应人体的电容。
传感器设置所需的只是一个中值到高值的电阻器和一块铝箔。
在最敏感的情况下,传感器将开始感应距离传感器几英寸的手或身体,并通过不同种类的材料。我们将把传感器藏在枕头里!
上传示例草图,连接电线并在控制台上查看结果:
#include
CapacitiveSensor foil = CapacitiveSensor(5, 4);
// 10M resistor between pins 5 & 4, pin 4 is sensor pin, add a wire and or foil
void setup()
{
foil.set_CS_AutocaL_Millis(0xFFFFFFFF); // turn off autocalibrate
Serial.begin(9600);
}
void loop()
{
long start = millis();
long sensor_value = foil.capacitiveSensor(30);
Serial.print(millis() - start); // check on performance in milliseconds
Serial.print("\t"); // tab character for debug windown spacing
Serial.print(sensor_value); // print sensor output
Serial.println("\t"); // print sensor output 3
delay(500); // arbitrary delay to limit data to serial port
}
接线和结果
我们将sensor_value
用作检测拥抱的阈值!
拥抱的时间越长,听到的心跳声就越多。心跳越多,您发送的爱就越多(以及不同的表情符号)。
我们将使用蜂鸣器和几行简单的代码来模拟心跳的声音。
int Buzzer = 8; // Pin attached to the buzzer
void setup() {}
void loop() {
HeartBeat();
delay(1000);
}
void HeartBeat() {
tone(Buzzer, 31, 200); // tone(Pin, Note, Duration);
delay(200);
tone(Buzzer, 31, 400);
delay(200);
noTone(Buzzer);
delay(1000);
}
要更复杂地使用蜂鸣器和音调功能,请查看下拉菜单示例并查找 Digital > ToneMelody
为了发送消息,机器人需要一个聊天 ID。聊天 id 是某人和机器人之间聊天的唯一标识符。为了让机器人向特定的人发送消息,您首先需要该人向机器人发送短信并保存该特定聊天的聊天 ID。
在这个项目中,机器人只会回复最后一个发短信的人,不管那是谁。
机器人是公开的,每个人都可以给机器人发短信!
如果您想将机器人包含在群聊中,您需要禁用隐私模式以允许机器人阅读所有消息,否则它将只能检测以开头的命令/:
WiFi 可能很棘手。有时它只是关闭几秒钟,显然没有任何理由。这对您的 Arduino 来说可能是个问题,因为大多数时候我们只在草图的开头运行 WiFi 连接功能。
在线服务也可能很棘手,当 Arduino 向服务器(在本例中为 Telegram)发送请求时,它会等待回复。由于数百个原因,回复可能无法到达,使 Arduino 处于无限循环中。
为了让你的项目更稳定,你可以添加一个看门狗。看门狗是一个必须定期更新的计时器,否则它将重新启动威廉希尔官方网站 板。
您可以使用这两个库向您的项目添加看门狗:
EchoBot 示例将如下所示:
#include <WiFi101.h>
#include <SPI.h>
#include <TelegramBot.h>
#include <Adafruit_SleepyDog.h>
// Initialize Wifi connection to the router
char ssid[] = "xxxx"; // your network SSID (name)
char pass[] = "yyyy"; // your network key
// Initialize Telegram BOT
const char BotToken[] = "xxxx";
WiFiSSLClient client;
TelegramBot bot (BotToken, client);
void setup() {
Serial.begin(115200);
while (!Serial) {}
delay(3000);
// attempt to connect to Wifi network:
Serial.print("Connecting Wifi: ");
Serial.println(ssid);
while (WiFi.begin(ssid, pass) != WL_CONNECTED) {
Serial.print(".");
delay(500);
}
Serial.println("");
Serial.println("WiFi connected");
bot.begin();
Watchdog.enable(10000); // set the timer to 10 sec
}
void loop() {
Watchdog.reset(); // if this function is not called within 10 seconds the board will reset itself
message m = bot.getUpdates(); // Read new messages
if ( m.chat_id != 0 ) { // Checks if there are some updates
Serial.println(m.text);
bot.sendMessage(m.chat_id, m.text); // Reply to the same chat with the same text
} else {
Serial.println("no new message");
}
}
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
全部0条评论
快来发表一下你的评论吧 !