IoT-подушка «Любовь»: удаленные объятия с Arduino MKR и Telegram
Компоненты и материалы
| Компонент | Описание | Кол-во |
|---|---|---|
| Arduino MKR IoT Bundle | Включает MKR1000, датчики, провода, фольгу, резисторы, макетку | 1 |
Приложения и сервисы
- Telegram — мессенджер для ботов
О проекте
Примечание: урок может быть устаревшим, актуальная версия здесь.
Расставание с любимым человеком тяжело. А что, если можно отправлять любовь через интернет, просто обнимая подушку?
Настоящие объятия передать нельзя, но можно отправить милый эмодзи в Telegram, сжав подушку. При объятии звучит сердечный биение (buzzer). Длительность объятия определяет, какой эмодзи отправит бот в выбранный чат.
Оставайтесь на связи с этим обнимательным устройством!
В двух словах
Создадим DIY емкостной датчик из фольги для обнаружения объятий.
Нужно:
- Buzzer
- Алюниевая фольга
- Резистор 5 МОм
- Макетная плата
- Провода


Цели обучения
- Знакомство с Telegram-ботами
- Работа с емкостными датчиками
- Telegram-боты и групповые чаты #ProTips
- Лучшие практики WiFi #ProTips
Pro Tips — полезные, но не обязательные шаги, добавляющие сложность.
Хотите узнать больше?
Серия экспериментов с MKR1000 и IoT (все компоненты в MKR IoT Bundle):
- I Love You Pillow (этот)
- Puzzle Box
- Pavlov's Cat
- The Nerd
- Plant Communicator
Telegram-боты: введение
Telegram — популярный мессенджер с поддержкой ботов. Бот — это контакт, за которым стоит код, а не человек. Библиотека TelegramBot для Arduino упрощает логику.
Создание бота
- Напишите @BotFather в Telegram.
- Команда
/newbot, задайте имя и username (на _bot). - Получите API токен — сохраните его.
- Опционально: настройте аватар, описание, команды.





Настройка платы
Библиотеки: WiFi101, TelegramBot, ArduinoJson, CapacitiveSensor. Установка через Library Manager.
Для работы с Telegram API нужно загрузить сертификаты на MKR1000 (актуально для большинства онлайн-сервисов). В примере FirmwareUpdater (WiFi101) добавьте домен api.telegram.org. В Arduino Web Editor пока недоступно — используйте Desktop IDE.



Откройте пример EchoBot (TelegramBot), введите WiFi-crediantials и токен, залейте. Бот эхо-отвечает на сообщения.
EchoBot и эмодзи
Эмодзи везде! Бот получает их в одном формате, а отправлять нужно в UNICODE. Сердце: \U00002764. Полный список: Unicode Emoji.
Пример бота, отвечающего сердцем на сердце:
void loop() {
message m = bot.getUpdates();
if (m.chat_id != 0) {
Serial.println(m.text);
if(m.text == "\u2764\ufe0f") {
bot.sendMessage(m.chat_id, "\U00002764");
}
}
}

Емкостной датчик
Библиотека CapacitiveSensor превращает два пина в датчик емкости тела. Нужен резистор (среднее/высокое значение) и фольга. На максимальной чувствительности срабатывает на расстоянии дюймов через материалы. Спрячем в подушку!
Пример теста:
#include <CapacitiveSensor.h>
CapacitiveSensor foil = CapacitiveSensor(5,4); // 10М между 5 и 4, пин 4 - сенсор
void setup() {
foil.set_CS_AutocaL_Millis(0xFFFFFFFF);
Serial.begin(9600);
}
void loop() {
long start = millis();
long sensor_value = foil.capacitiveSensor(30);
Serial.print(millis() - start); Serial.print("\t");
Serial.print(sensor_value); Serial.println("\t");
delay(500);
}


Значение sensor_value используем как порог обнаружения объятия.
Сердцебиение
Чем дольше обнимаешь — больше ударов сердца, больше любви (и разных эмодзи).
int Buzzer = 8;
void setup() {}
void loop() { HeartBeat(); delay(1000); }
void HeartBeat() {
tone(Buzzer, 31, 200); delay(200);
tone(Buzzer, 31, 400); delay(200);
noTone(Buzzer); delay(1000);
}
Для сложных мелодий: Examples → Digital → ToneMelody.
#ProTip: Chat ID и групповые чаты
Боту нужен chat_id для отправки. Уникален для пары пользователь-бот. Чтобы бот писал конкретному человеку — тот должен первым написать боту, сохранить его chat_id. В проекте бот отвечает последнему написавшему.
Боты публичны — может написать любой. Для группового чата: отключите Privacy Mode в @BotFather (иначе бот видит только команды /).



#ProTip: WiFi Best Practices
WiFi может отваливаться. Онлайн-сервисы могут не отвечать. Для стабильности добавьте watchdog (сторожевой таймер) — перезагружает плату, если цикл завис.
Библиотеки: Adafruit_SleepyDog, Adafruit_ASF_Core (ручная установка с GitHub).
Пример с watchdog:
#include <WiFi101.h> #include <SPI.h> #include <TelegramBot.h> #include <Adafruit_SleepyDog.h>
char ssid[] = "xxxx"; char pass[] = "yyyy";
const char BotToken[] = "xxxx";
WiFiSSLClient client; TelegramBot bot(BotToken, client);
void setup() {
Serial.begin(115200); while(!Serial) {} delay(3000);
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);
}
void loop() {
Watchdog.reset();
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"); }
}
Код
Полный скетч
(В оригинале раздел пуст — код собирается из примеров выше: CapacitiveSensor + TelegramBot + HeartBeat + WiFi + Watchdog)
Схемы
Производственный процесс
- Мастерство ковки ножей: 9 экспертных шагов к созданию прочных лезвий
- Мастерство планирования BOM: пошаговое руководство по оптимизации затрат на продукт
- Выбор правильного места разработки: мейкерспейсы, акселераторы и производственные партнеры
- Основное руководство по маркировке деталей: 3 проверенных метода для качества и безопасности
- Микрометр: как читать и пользоваться инструментом точных измерений
- Незаменимые горизонтально-шлифовальные центры для высокоточного производства
- Преимущества механического металлопресса (Ironworker) для точной металлообработки
- Обзор лучших дебарринговых установок для любых производственных задач
- Белый чугун (White Cast Iron): свойства, применение и преимущества
- Освоение проникающего ЭРС: полное руководство по точной электроэрозионной обработке