Almohada IoT "Te Quiero": Abrazos Remotos con Arduino MKR Bundle
Componentes y Suministros
| Componente | Descripción | Cantidad |
|---|---|---|
| Arduino MKR IoT Bundle | Incluye MKR1000, sensores, actuadores, componentes varios | 1 |
Aplicaciones y Servicios Online
- Telegram - App mensajería para bots
Sobre el Proyecto
Nota: Este tutorial podría estar desactualizado. Visitar enlace actualizado para versión más reciente.
Todos sabemos lo difícil que es estar lejos de esa persona especial. ¿Y si pudieras enviar amor y afecto remotamente por Internet simplemente abrazando una almohada?
No podemos enviar abrazos reales... pero podemos enviar un dulce emoji por app de mensajería, activado al abrazar la almohada.
Al abrazar la Almohada "Te Quiero", oirás latidos de corazón desde el zumbador interno. Según la duración del abrazo, se enviará un emoji diferente desde un Bot de Telegram al chat que elijas.
¡Mantén el contacto con tu ser querido con este dispositivo abrazable!
En Pocas Palabras
Usaremos papel de aluminio para crear un sensor capacitivo DIY que detecte abrazos.
Componentes necesarios:
- Zumbador (buzzer)
- Papel de aluminio
- Resistencia 5M ohm
- Protoboard
- Cables
Objetivos de Aprendizaje
- Introducción a Bots de Telegram
- Gestión de sensores capacitivos
- Bots Telegram y chats grupales #ProTips
- Buenas prácticas WiFi #ProTips
Pro Tips: pasos útiles pero no estrictamente necesarios que añaden complejidad.
¿Quieres Saber Más?
Este tutorial forma parte de una serie de experimentos para familiarizarse con MKR1000 e IoT. Todos usan componentes del MKR IoT Bundle:
- Almohada "Te Quiero" (I Love You Pillow)
- Caja Puzle (Puzzle Box)
- Gato de Pavlov (Pavlov's Cat)
- El Friki (The Nerd)
- Comunicador de Plantas (Plant Communicator)
Introducción a Bots de Telegram
Telegram es app de mensajería popular (móvil/desktop) que permite crear chatbots potentes. Un chatbot es un contacto con el que chateas, pero detrás hay una máquina que responde según tu código. La librería TelegramBot para Arduino facilita la lógica del bot.
Crear Tu Bot
¡Muy fácil! Sigue estos pasos o consulta la documentación:
- Buscar @BotFather en Telegram
- Enviar /newbot
- Dar nombre y username (debe terminar en 'bot')
- Recibir token API (guardar de forma segura)
- Configurar privacidad: /setprivacy -> disabled (para leer mensajes en grupos)
Configurar la Placa
Primero, instalar librerías necesarias:
- WiFi101
- TelegramBot
- ArduinoJson
- CapacitiveSensor
Para usar API de Telegram, subir certificados al MKR1000 (aplica a la mayoría de APIs online). Subir ejemplo Firmware Updater de WiFi101 y añadir api.telegram.org a dominios. En Arduino Web Editor no implementado; usar Arduino Desktop IDE.
Abrir ejemplo EchoBot de librería TelegramBot, rellenar credenciales WiFi y token API, ¡subir! Ya tienes un bot que repite tus mensajes.
EchoBot y Emojis
Los emojis están en todas partes. Los usaremos para enviar amor/abrazos. EchoBot muestra cómo el bot lee emojis.
Importante: La forma en que el bot recibe emojis NO es la misma para enviarlos. Para enviar, usar caracteres UNICODE. Ej: corazón = \U00002764. Lista completa: unicode emoji codes.
Ejemplo bot que responde a corazón con corazón:
void loop() {
message m = bot.getUpdates();
if (m.chat_id != 0) {
Serial.println(m.text);
if(m.text == "\u2764\ufe0f") { // Recibe corazón
bot.sendMessage(m.chat_id, "\U00002764"); // Responde corazón
}
}
}
Sensor Capacitivo
La librería CapacitiveSensor convierte dos o más pines Arduino en sensor capacitivo, detectando capacitancia eléctrica del cuerpo humano. Solo necesita resistencia valor medio/alto y papel aluminio.
En máxima sensibilidad, detecta mano/cuerpo a pulgadas de distancia y a través de materiales. Esconderemos el sensor dentro de la almohada.
Subir sketch ejemplo, conectar cables y ver resultado en consola:
#include <CapacitiveSensor.h>
CapacitiveSensor foil = CapacitiveSensor(5,4); // 10M entre pines 5 y 4, pin 4 sensor
void setup() {
foil.set_CS_AutocaL_Millis(0xFFFFFFFF); // Desactivar autocalibrado
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);
}
Usaremos sensor_value como umbral para detectar abrazos.
El Latido del Corazón
Cuanto más abraces, más latidos oyes. Más latidos = más amor (y diferentes emojis).
Emular sonido latido con zumbador:
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);
}
Para uso avanzado del zumbador: ejemplos > Digital > ToneMelody.
#ProTip: Chat-ID y Chat Grupal
Para enviar mensajes, el bot necesita chat-id (identificador único de chat usuario-bot). Para que el bot envíe a persona específica, esta debe escribir al bot primero y guardar su chat-id. En este proyecto, el bot responde solo a la última persona que le escribió.
Los bots son públicos, cualquiera puede escribirles.
Para incluir bot en grupo: desactivar modo privacidad (sino solo detecta comandos con /).
#ProTip: Buenas Prácticas WiFi
WiFi puede ser inestable (cortes aleatorios). Problema: Arduino suele conectar WiFi solo al inicio. Servicios online también fallan (peticiones sin respuesta → bucle infinito).
Solución: Watchdog (perro guardián). Timer que debe actualizarse periódicamente, sino reinicia la placa.
Librerías: Adafruit SleepyDog y Adafruit ASF Core (instalar manual desde GitHub).
EchoBot con 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("Conectando WiFi: "); Serial.println(ssid);
while(WiFi.begin(ssid, pass) != WL_CONNECTED) { Serial.print("."); delay(500); }
Serial.println(""); Serial.println("WiFi conectado");
bot.begin();
Watchdog.enable(10000); // Timer 10 seg
}
void loop() {
Watchdog.reset(); // Si no se llama en 10s -> reset placa
message m = bot.getUpdates();
if(m.chat_id != 0) {
Serial.println(m.text);
bot.sendMessage(m.chat_id, m.text);
} else { Serial.println("sin nuevos mensajes"); }
}
Código
Sketch Completo
Código final integrando sensor capacitivo, latido corazón, WiFi, TelegramBot y envío de emojis según duración del abrazo.
Esquemáticos
Proceso de manufactura
- Dominar la Forja de Cuchillos: 9 Pasos Expertos para Hojas Duraderas
- Dominando la Planificación de BOM: Guía Paso a Paso para Optimizar Costes de Producto
- Elegir el Sitio de Desarrollo Adecuado: Makerspaces, Aceleradoras y Socios de Producción
- Guía esencial de marcado de piezas: 3 métodos probados para calidad y seguridad
- Micrómetro Explicado: Cómo Leer y Usar una Herramienta de Medición de Precisión
- Centros de Mecanizado Horizontal Esenciales para Fabricación de Alta Precisión
- Beneficios de Usar una Cizalla Mecánica (Ironworker) para Fabricación de Precisión de Metales
- Explora las Mejores Unidades de Desbarbado para Cada Necesidad de Fabricación
- Descubre el Hierro Fundido Blanco: Propiedades, Usos y Beneficios
- Dominando la Electroerosión por Hundimiento (Plunge EDM): Guía Definitiva de Mecanizado por Descarga Eléctrica de Precisión
- Ventajas de las prensas servo pequeñas para conformado de precisión