Le Chat de Pavlov : minuteur IoT pour dresser votre chat
Composants et fournitures
| Kit Arduino MKR IoT Bundle | ×1 |
Applications et services en ligne
- Telegram
À propos du projet
Note : Ce tutoriel pourrait être obsolète, consultez ce lien pour une version plus récente.
Si vous avez déjà essayé de dresser un chat, vous savez à quel point c'est difficile. Les chats sont leurs propres maîtres, mais maintenant vous avez la chance de les faire obéir grâce à cet appareil IoT.
Bienvenue dans l'expérience du Chat de Pavlov !
Dans ce projet, vous apprendrez à enseigner à votre chat quand c'est (et quand ce n'est pas) l'heure du dîner, en utilisant uniquement les composants du MKR IoT Bundle et du carton. Et on sait tous que les chats adorent les boîtes en carton !
À chaque fois que le chat entend une certaine mélodie, il reçoit de la nourriture. Un capteur de lumière détecte la présence du chat. Une autre mélodie ne fait rien. Voyez le principe ?
Vous pourrez suivre la progression de votre chat dans le temps, et régler le taux de distribution de nourriture depuis votre téléphone. Une fois des statistiques satisfaisantes atteintes, le capteur peut être transformé en dispositif portable. Votre chat devrait alors vous suivre si vous émettez ce bip sonore.
Avertissement : Aucun chat n'a été blessé pendant le développement de cette expérience. Aucune garantie que le chat mangera la nourriture, mais vous avez compris l'idée, non ?
En résumé
Vous construirez votre propre distributeur de nourriture en suivant ces instructions simples. C'est essentiellement du carton et un servomoteur avec un peu de magie Arduino.
Via le service de messagerie Telegram, vous pouvez régler la quantité de nourriture distribuée et déclencher les mélodies jouées par le buzzer.
Un capteur de lumière (phototransistor) détecte si le chat a réagi à la mélodie et s'est approché de la nourriture.
Astuce Pro : Vous pouvez héberger une page web sur le MKR1000 et afficher les données collectées dans un tableau pratique.
Composants du distributeur
- Servomoteur
- Phototransistor
- Résistance 220 Ω
- Buzzer
Objectifs d'apprentissage
- Gérer des bots Telegram avec un clavier personnalisé
- Configurer et gérer la fonctionnalité de serveur web depuis le MKR1000 lui-même #AstucePro
Astuces Pro : étapes utiles mais non strictement nécessaires, ajoutant une couche de complexité.
Envie d'en savoir plus ?
Ce tutoriel fait partie d'une série d'expériences pour se familiariser avec le MKR1000 et l'IoT. Tous les projets utilisent les composants du MKR IoT Bundle :
- Oreiller "Je t'aime"
- Boîte à énigmes
- Chat de Pavlov
- Le Geek
- Communicateur de plantes
Telegram et Arduino
Telegram est une appli de messagerie populaire (mobile et desktop) qui permet de créer de puissants chat-bots ! La bibliothèque TelegramBot pour Arduino offre un moyen facile d'implémenter la logique du bot.
Pour apprendre à créer un bot et gérer les fonctions de base, voir le tutoriel "Oreiller Je t'aime".
Créer votre clavier personnalisé
Telegram permet de créer un clavier personnalisé pour des réponses rapides. Quand vous parlez au bot, une sélection de boutons s'affiche au lieu du clavier par défaut. Vous pouvez personnaliser ces boutons pour améliorer l'expérience utilisateur.
Notre clavier personnalisé :
- Ligne 1 : 🎶 + 🍪 (Musique + Nourriture) / 🎶 NO 🍪 (Musique SANS nourriture)
- Ligne 2 : 🐈 (1 portion) / 🐈🐈 (2 portions) / 🐈🐈🐈 (3 portions)
La première ligne déclenche la mélodie et la distribution, la seconde règle la vitesse du servo (donc la quantité).
Création du clavier dans le code :
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);
Les émojis s'envoient en UNICODE, ex: cœur = \U00002764. Liste complète ici.
const char* MusicAndFood = "\U0001F3B6 + \U0001F36A"; // Note + Cookie
const char* MusicNoFood = "\U0001F3B6 NO \U0001F36A"; // Note NO Cookie
const char* OnePortion = "\U0001F408"; // Chat
const char* TwoPortion = "\U0001F408 \U0001F408"; // 2 Chats
const char* ThreePortion = "\U0001F408 \U0001F408 \U0001F408"; // 3 Chats
Sketch complet (base)
#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");
// Définition émojis et clavier (voir ci-dessus)
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);
}
Important : Le format des émojis reçus diffère de celui envoyé. Utilisez l'exemple EchoBot pour voir comment les recevoir. Exemples reçus :
ud83cudfb6– Mélodieud83cudf6a– Cookieud83dudc08– Chat
Détecter le chat !
On utilise un phototransistor (avec résistance 220 Ω) pour mesurer l'intensité lumineuse et détecter un passage.
Lecture simple : analogRead(A6).
Logique de détection (uniquement après la mélodie, pendant 2 minutes max) :
unsigned long timer;
bool startDetecting = true;
int threshold = 200; // valeur arbitraire
void setup() {
timer = millis();
Serial.begin(9600);
}
void loop() {
if (startDetecting) {
int value = analogRead(A6);
if (value < threshold) {
Serial.println("chat détecté !");
startDetecting = false;
} else if (millis() - timer > 120000) {
Serial.println("pas de chat détecté dans les 2 dernières minutes");
startDetecting = false;
}
}
}
On utilise millis() pour le timer (temps en ms depuis le démarrage). Le seuil est arbitraire, à ajuster selon vos conditions d'éclairage.
Jouer la mélodie
Utilisez le buzzer et la fonction tone(). Basé sur l'exemple standard toneMelody (Fichiers > Exemples > Digital > toneMelody), légèrement modifié.
Ajouter le servomoteur
Le servo ouvre la boîte pour distribuer la nourriture. Variable int PortionAmount = 1; pour régler le temps d'ouverture (90°). Cette valeur sera modifiable via Telegram.
Servo sur broche 7. Code de test :
#include <Servo.h>
Servo myservo;
int pos = 0;
int PortionAmount = 1;
void setup() { myservo.attach(7); }
void loop() { moveServo(); delay(2000); }
void moveServo() {
Serial.println("moving servo");
for (pos = 0; pos <= 90; pos += 1) { myservo.write(pos); delay(15); }
delay(PortionAmount * 300); // temps d'ouverture selon portions
for (pos = 90; pos >= 0; pos -= 1) { myservo.write(pos); delay(15); }
}
#AstucePro : Ajouter un serveur web
Le MKR1000 supporte le mode Point d'Accès (AP) : héberger une page web accessible via l'IP de la carte sur le même réseau.
On l'utilise pour afficher les données collectées. Déclenché par l'envoi du mot "Server" au bot Telegram, qui répond avec le lien. Le client Telegram se déconnecte, le serveur web démarre.
else if (m.text == "Server") {
IPAddress ip = WiFi.localIP();
web_server_mode = true;
String message = "To see the webpage go to https://" + IpToString(ip);
bot.sendMessage(m.chat_id, message, keyboard_one);
telegram_client.stop();
delay(1000);
server.begin(); // démarre serveur web sur port 80
}
La page web inclut un bouton pour quitter le mode serveur et revenir au bot Telegram. Chaque fin de détection ajoute une cellule au tableau de données : nourriture distribuée ? chat venu ? temps de réaction.
AddTableCell(food/noFood, Yes/No, TimeValue);
table_cells += cell;
html = html_1 + table_cells + html_2;
Connaissances de base HTML/CSS requises (ou confiance dans l'exemple). Voir exemple de base : Exemples > WiFi101 > AP_SimpleWebServer.
Astuce : Pour que les données survivent à un reset, regardez la bibliothèque FlashStorage ou le projet "Le Geek" !
Code
- Sketch complet
- Sketch complet avec #AstucesPro
Pièces personnalisées et boîtiers
Carton 2 mm : pavlovcase_ShVm1OJRIF.dxf
Schématiques
Schéma de câblage joint dans les fichiers du projet.
Processus de fabrication
- La science et l'industrie des légumes surgelés : de la récolte à l'assiette
- Les plats cuisinés surgelés : histoire, production et innovations futures
- Scanners CT (CAT) : Évolution, Conception et Avenir de l'Imagerie Médicale 3D
- Histoire et impact de la litière pour chat : de l'argile à l'industrie
- Le guide complet des aliments lyophilisés : conservation, production et tendances futures
- Shop.Cat.Com : Votre ressource unique pour équipements, accessoires et outils
- Optimiser machines Cat® : guide ultime My.Cat.com
- Distributeurs alimentaires polyvalents : des snacks aux sandwichs frais
- Accélérer la production alimentaire en toute sécurité grâce à l'automatisation