El Gato de Pavlov: Temporizador IoT para Entrenar a tu Gato
Componentes y suministros
| Arduino MKR IoT Bundle | × | 1 |
Aplicaciones y servicios en línea
- Telegram
Sobre el proyecto
Nota: Este tutorial podría estar desactualizado, ve aquí para una versión más actual.
Si alguna vez intentaste entrenar a un gato, sabes lo difícil que es. Los gatos son sus propios amos, pero ahora tienes la oportunidad de hacer que los gatos hagan tu voluntad usando este dispositivo habilitado para IoT.
¡Bienvenido al Experimento del Gato de Pavlov!
En este proyecto, aprenderás a enseñar a tu cuándo es (y no es) la hora de la cena usando solo los componentes del MKR IoT Bundle y algo de cartón. ¡Y todos sabemos que a los gatos ya les encantan las cajas de cartón!
Cada vez que el gato oye una cierta melodía, recibe comida. Un sensor de luz detecta la presencia del gato. Otra melodía no hace nada. ¿Ves cómo funcionará? Podrás monitorizar la progresión de tu gato con el tiempo y configurar la tasa de dispensación de comida desde tu teléfono. Una vez alcanzadas estadísticas satisfactorias, es hora de reutilizar el sensor en un wearable. Tu gato debería seguirte a partir de entonces si haces ese sonido.
Descargo de responsabilidad: Ningún gato fue lastimado en el desarrollo de este experimento. Tampoco hay garantía de que el gato coma la comida, pero entiendes la idea, ¿verdad?
En resumen
Podrás construir tu propio dispensador de comida siguiendo estas instrucciones paso a paso. El dispensador es básicamente cartón y un servomotor con algo de magia Arduino. Usando Telegram, puedes configurar la cantidad de comida a dispensar y activar las melodías del buzzer. Un sensor de luz detecta si el gato reaccionó a la melodía y llegó a la comida.
Pro Tip: Puedes alojar una página web en el MKR1000 y mostrar los datos recogidos en una tabla práctica.
Componentes
- Servomotor
- Fototransistor
- Resistencia 220 ohm
- Buzzer
Objetivos de aprendizaje
- Gestionar Bots de Telegram con teclado personalizado
- Configurar y gestionar funcionalidad de servidor web desde el propio MKR1000 #ProTip
Pro Tips son pasos útiles pero no estrictamente necesarios que añaden complejidad.
¿Quieres saber más?
Este tutorial es parte de una serie de experimentos que te familiarizan con el MKR1000 e IoT. Todos se pueden construir con los componentes del MKR IoT Bundle: I Love You Pillow, Puzzle Box, Pavlov's Cat, The Nerd, Plant Communicator.
Telegram y Arduino
Telegram es una app de mensajería popular para móvil y escritorio. Además de chatear con amigos, permite crear chat-bots potentes. La librería TelegramBot para Arduino da una forma fácil de implementar la lógica del bot. Para aprender a crear un Bot y gestionar funcionalidades básicas, mira el tutorial I Love You Pillow.
Crea tu teclado personalizado
Telegram permite crear un teclado personalizado para respuestas rápidas. Cuando hablas con un bot, se muestran ciertos botones en lugar del teclado por defecto. Puedes personalizar esos botones y mejorar la experiencia de usuario.
Nuestro teclado personalizado tiene dos filas: la primera para reproducir melodía y dispensar comida (con/sin comida), la segunda para configurar la velocidad del servo y por tanto la cantidad de comida.
Para crear un teclado personalizado:
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);
Los emojis se envían con UNICODE (ej. corazón: \U00002764). Definición de botones:
const char* MusicAndFood = "\U0001F3B6 + \U0001F36A"; // Nota + Galleta
const char* MusicNoFood = "\U0001F3B6 NO \U0001F36A"; // Nota NO Galleta
const char* OnePortion = "\U0001F408"; // GATO
const char* TwoPortion = "\U0001F408 \U0001F408"; // 2 GATOS
const char* ThreePortion = "\U0001F408 \U0001F408 \U0001F408"; // 3 GATOS
Sketch completo (básico)
#include <WiFi101.h> #include <SPI.h> #include <TelegramBot.h>
const char* ssid = SECRET_SSID; const char* password = SECRET_PSWD;
const char BotToken[] = SECRET_BOT_TOKEN;
WiFiSSLClient client; TelegramBot bot(BotToken, client);
TelegramKeyboard keyboard_one; String OldChatId = "";
void setup() {
Serial.begin(115200); delay(3000);
Serial.print("Connecting Wifi: "); Serial.println(ssid);
while (WiFi.begin(ssid, password) != WL_CONNECTED) {
Serial.print("."); delay(500);
}
Serial.println(""); Serial.println("WiFi connected");
// ... definición de emojis y teclado ...
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, "Hello !", keyboard_one);
}
delay(1000);
}
Lamentablemente, la forma en que el bot envía emojis no es la misma para recibirlos. Usar el ejemplo EchoBot ayuda a ver cómo los recibe. Por ejemplo: ud83cudfb6 (Melodía), ud83cudf6a (Galleta), ud83dudc08 (Gato).
¡Detecta al gato!
Usamos un fototransistor para detectar la presencia del gato midiendo intensidad de luz. Se usa una resistencia de 220 ohm. Para leer el sensor: analogRead(A6).
Solo nos interesa detectar al gato después de la melodía y por un tiempo limitado:
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 < threshold) {
Serial.println("¡gato detectado!");
startDetecting = false;
} else if (millis() - timer > 120000) {
Serial.println("no se detectó gato en los últimos dos minutos");
startDetecting = false;
}
}
}
Usamos millis() para temporizadores y un umbral para determinar detección (ajústalo a tus condiciones de luz).
Reproduce la canción
Usamos el buzzer y la función tone(). Versión modificada del ejemplo estándar toneMelody (Archivo > Ejemplos > Digital > toneMelody).
Añade el servomotor
El servo abre la caja y entrega comida. Usamos variable int PortionAmount = 1; para tiempo que el servo permanece a 90° (cambiable vía Telegram). Conecta servo a pin 7.
#ProTip: Añade un servidor web
Una de las funcionalidades más potentes del MKR1000 es el Modo Punto de Acceso. Permite alojar una página web en el MKR1000 accesible mediante su IP en la misma red. Lo usamos para imprimir datos recogidos por el dispensador.
Activamos el modo AP enviando una palabra específica al Bot de Telegram, que responde con el enlace a la web. Luego el cliente Telegram se desconecta y se inicia el servidor web.
La web incluye un botón para volver al modo cliente Telegram. Cada vez que termina la detección del gato, se añade una celda a la tabla con: si se dio comida, si apareció el gato en 2 min, y cuánto tardó.
Código
Sketch completo y versión #ProTips completa disponibles.
Piezas personalizadas y cajas
Cartón 2mm: pavlovcase_ShVm1OJRIF.dxf
Esquemáticos
Diagrama de conexiones incluido.
Proceso de manufactura
- Shop.Cat.Com: Su Recurso Integral para Equipos, Accesorios y Herramientas
- Optimice su Maquinaria Cat®: Guía Definitiva de My.Cat.com
- La ciencia e industria de las verduras congeladas: de la cosecha a la mesa
- Platos Preparados Congelados: Historia, Producción e Innovaciones Futuras
- Escáneres TC (TAC): evolución, diseño y futuro de la imagen médica 3‑D
- Historia e impacto de la arena para gatos: de la arcilla a la industria
- Guía completa de alimentos liofilizados: conservación, producción y tendencias futuras
- Producción de Alimentos para Mascotas: De Ingredientes a Regulación – Guía Completa
- Máquinas Expendedoras de Alimentos Versátiles: Desde Snacks hasta Sándwiches Frescos
- Acelerando la producción alimentaria de forma segura con automatización
- Plásticos detectables por metal: Mejorando la seguridad alimentaria en la industria