Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Manufacturing Technology >> Processus de fabrication

Chat Pavlov

Composants et fournitures

Arduino MKR IoT Bundle
× 1

Applications et services en ligne

Telegram

À propos de ce projet

Remarque :Ce tutoriel est peut-être obsolète, veuillez y aller ici 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 vous avez maintenant la possibilité de laisser les chats faire vos enchères en utilisant cet appareil compatible IoT.

Bienvenue dans l'expérience du chat de Pavlov !

Dans ce projet, vous apprendrez comment enseigner à votre chat quand c'est (et ce n'est pas) l'heure du dîner en utilisant uniquement les composants du MKR IoT Bundle et du carton.

Et nous savons tous que les chats aiment déjà 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 d'un chat. Une autre mélodie ne fait rien. Voyez-vous comment cela fonctionnera ?

Vous pourrez suivre la progression de votre chat au fil du temps et régler le débit de distribution de nourriture depuis votre téléphone. Une fois que vous avez atteint des statistiques satisfaisantes, il est temps de transformer le capteur en un appareil portable. Votre chat devrait désormais vous suivre si vous faites ce bip.

Avertissement :aucun chat n'a été blessé lors du développement de cette expérience. De plus, aucune garantie que le chat mangera la nourriture, mais vous voyez l'image, n'est-ce pas ?

En bref

Vous pourrez construire votre propre distributeur de nourriture en suivant ces instructions simples étape par étape. Le distributeur n'est essentiellement que du carton et un servomoteur avec un peu de magie Arduino ajoutée.

À l'aide d'un service de messagerie appelé Telegram, vous pouvez définir la quantité de nourriture à distribuer et déclencher les mélodies jouées avec le buzzer.

Un capteur de lumière est utilisé pour détecter si le chat a réagi à la mélodie et est arrivé à la nourriture.

Conseil de pro : Vous pouvez héberger une page Web sur le MKR1000 et afficher les données collectées dans un tableau pratique.

Composants

  • Servomoteur
  • Phototransistor
  • Résistance 220 ohms
  • Sonnerie

Objectifs d'apprentissage

Dans cette expérience, vous apprendrez à :

  • Gérer les Telegram Bots avec un clavier personnalisé
  • Configurez et gérez les fonctionnalités du serveur Web à partir du MKR1000 lui-même. #ProTip

Conseils de pro sont des étapes utiles mais pas strictement nécessaires qui ajoutent une couche de complexité au projet.

Vous voulez en savoir plus ?

Ce tutoriel fait partie d'une série d'expériences qui vous familiarisent avec le MKR1000 et l'IoT. Toutes les expériences peuvent être construites à l'aide des composants contenus dans le MKR IoT Bundle.

  • Je t'aime oreiller
  • Boîte à énigmes
  • Le chat de Pavlov
  • Le nerd
  • Communicateur d'usine

Télégramme et Arduino

Telegram est une application de messagerie populaire pour mobile et ordinateur de bureau. En plus de nous permettre de discuter avec nos amis, cela nous permet également de créer des chatbots pratiques et puissants !

La bibliothèque TelegramBot pour Arduino nous offre un moyen simple d'implémenter la logique derrière le chat-bot.

Pour apprendre à créer un Bot et à gérer les fonctionnalités de base, consultez le didacticiel I Love You Pillow.

Créez votre clavier personnalisé

Telegram nous permet de créer un clavier personnalisé pour des réponses rapides. Cela signifie que lorsque vous parlez à un bot, une certaine sélection de boutons s'affichera à la place du clavier par défaut. Vous pouvez facilement personnaliser ces boutons et améliorer l'expérience utilisateur de votre appareil.

Notre clavier personnalisé ressemble à ceci :

Nous utiliserons la première rangée de boutons pour jouer la mélodie et distribuer les aliments, tandis que la deuxième rangée de boutons sera utilisée pour régler la vitesse du servomoteur et donc la quantité de nourriture à distribuer.

Pour créer un clavier personnalisé, nous devons d'abord le déclarer :

TelegramKeyboard keyboard_one ;  

Ensuite, définissez les lignes :

 const char* row_one[] ={MusicAndFood, MusicNoFood} ; const char* row_two[] ={OnePortion, TwoPortion, ThreePortion} ;  

Et enfin, attribuez les lignes au clavier :

keyboard_one.addRow(row_one, 2); // assigne une ligne à un ou plusieurs claviers keyboard_one.addRow(row_two, 3); // le deuxième argument est la longueur de la ligne  

N'oubliez pas qu'un emoji doit être envoyé en utilisant UNICODE. Par exemple, pour envoyer un emoji coeur, nous utiliserons :\U00002764

Vous pouvez voir la liste complète des codes emoji unicode ici. Cela signifie que pour définir nos boutons, nous utiliserons ceci :

 const char* MusicAndFood ="\U0001F3B6 + \U0001F36A"; // Note + Cookie const char* MusicNoFood ="\U0001F3B6 NO \U0001F36A"; // Remarque NO Cookie const char* OnePortion ="\U0001F408"; // CAT const char* TwoPortion ="\U0001F408 \U0001F408"; // 2 CATS const char* ThreePortion ="\U0001F408 \U0001F408 \U0001F408"; // 3 CHATS  

Voici le croquis complet :

#include  #include  #include  const char* ssid =SECRET_SSID; // votre réseau SSID (nom) const char* mot de passe =SECRET_PSWD; // votre mot de passe réseau const char BotToken[] =SECRET_BOT_TOKEN; Client WiFiSSLClient ; Bot TelegramBot (BotToken, client); TelegramKeyboard keyboard_one; Chaîne OldChatId =""; void setup() { Serial.begin(115200); retard (3000); // tentative de connexion au réseau Wifi :Serial.print("Connexion Wifi :"); Serial.println(ssid); while (WiFi.begin(ssid, mot de passe) !=WL_CONNECTED) { Serial.print("."); retard (500); } Serial.println(""); Serial.println("Wi-Fi connecté"); // choisissez l'emoji que vous aimez en utilisant UNICODE // voici la liste https://unicode.org/emoji/charts/full-emoji-list.html const char* MusicAndFood ="\U0001F3B6 + \U0001F36A"; // Note + Cookie const char* MusicNoFood ="\U0001F3B6 NO \U0001F36A"; // Remarque NO Cookie const char* OnePortion ="\U0001F408"; // CAT const char* TwoPortion ="\U0001F408 \U0001F408"; // 2 CATS const char* ThreePortion ="\U0001F408 \U0001F408 \U0001F408"; // 3 CATS // définissez le const char* de votre ligne row_one[] ={MusicAndFood, MusicNoFood}; const char* row_two[] ={OnePortion, TwoPortion, ThreePortion} ; keyboard_one.addRow(row_one, 2); // attribuer une ligne à un ou plusieurs claviers keyboard_one.addRow(row_two, 3); // le deuxième argument est la longueur de la ligne bot.begin(); } boucle vide() { message m =bot.getUpdates(); // Lire les nouveaux messages if ( m.chat_id !=0 ) { // Vérifie s'il y a des mises à jour OldChatId =m.chat_id; Serial.println(m.text); bot.sendMessage(m.chat_id, "Bonjour !", keyboard_one); } délai(1000); }  

Malheureusement, la façon dont le bot envoie les emojis n'est pas la même que celle utilisée pour les recevoir. L'utilisation de l'exemple EchoBot est un moyen simple de voir comment les bots reçoivent les emoji.

Par exemple, les emoji que nous utiliserons sont reçus comme ceci :

ud83cudfb6 // Mélodie ud83cudf6a // Cookieud83dudc08 // Chat 

Détectez le chat !

Afin de détecter la présence du chat, nous utiliserons un phototransistor, qui est capable de mesurer l'intensité lumineuse et donc si quelqu'un est passé à proximité.

Notez que nous avons utilisé une résistance de 220 ohms.

Pour lire les valeurs du capteur, nous n'aurons besoin que d'un analogRead(A6).

Puisque nous sommes intéressés à détecter la présence du chat uniquement après la mélodie, et juste pendant un certain temps, nous pouvons utiliser la logique suivante :

long timer non signé ;bool startDetecting =true ;int threshold=200 ; // valeur arbitraire void setup(){timer=millis()Serial.begin(9600);} void loop(){if (startDetecting) { int value =analogRead(A6); if (valeur  120000) { Serial.println("aucun chat détecté au cours des deux dernières minutes"); startDetecting =false; } } } 

Notez que nous utilisons le millis() fonction pour régler une minuterie . Millis() nous donne le temps en millisecondes depuis que la carte est opérationnelle. Nous pouvons l'utiliser pour définir des minuteries et déclencher des événements après un certain temps.

Nous utilisons également un seuil pour déterminer si le chat a été détecté. Ce seuil est arbitraire, vous pouvez le régler en fonction de vos conditions d'éclairage.

Jouez la chanson

Pour jouer la chanson nous utiliserons le buzzer et le tone() fonction.

Nous utiliserons une version légèrement modifiée de l'exemple standard toneMelody. Vous pouvez le trouver dans le menu déroulant :

exemples> numérique> toneMelody. 

Ajouter le servomoteur

Le servo est utilisé pour ouvrir la boîte et livrer de la nourriture.

Notez que nous utilisons une variable int PortionAmount =1; pour régler la durée pendant laquelle le servo doit rester tourné à 90 degrés. Nous pourrons modifier sa valeur via Telegram.

Attachez le servo à la broche 7 et téléchargez ce croquis pour le voir fonctionner.

#include  Servo myservo ; // crée un objet servo pour contrôler un servo int pos =0; // variable pour stocker la position du servo int PortionAmount =1; // Définir la quantité de nourriture par défaut sur 1 portion void setup() { myservo.attach(7); // attache le servo sur la broche 6 à l'objet servo } void loop() { moveServo(); retard (2000); } void moveServo() { Serial.println("moving servo"); for (pos =0; pos <=90; pos +=1) { // passe de 0 degrés à 90 degrés myservo.write(pos); // dit au servo de se positionner dans la variable 'pos' delay(15); // attend 15 ms que le servo atteigne la position } delay(PortionAmount * 300); // garde la boîte ouverte pendant un intervalle de temps basé sur la quantité de nourriture que vous souhaitez livrer (pos =90; pos>=0; pos -=1) { // passe de 90 degrés à 0 degrés myservo.write( pos); / dire au servo d'aller en position dans le délai variable 'pos' (15); // attend 15ms que le servo atteigne la position } }  

#Astuce de pro :ajoutez un serveur Web

L'une des fonctionnalités les plus puissantes du MKR1000 est le mode point d'accès.

Il nous permet d'héberger une page Web sur le MKR1000 à laquelle nous pouvons accéder en utilisant l'adresse IP de la carte et en étant connecté au même réseau .

Nous utiliserons cet outil pour imprimer les données collectées par le distributeur de nourriture.

Cette étape nécessite des connaissances de base en HTML et CSS (ou beaucoup de confiance dans l'exemple d'esquisse. Vous pouvez consulter l'exemple de serveur Web de base à l'adresse :

> exemple> WiFi101> AP_SimpleWebServer 

Nous déclencherons le mode point d'accès en envoyant un mot spécifique à notre Telegram Bot, qui répondra avec le lien pour atteindre la page Web. Ensuite, le client télégramme sera déconnecté et le serveur Web sera démarré.

else if(m.text =="Server"){ IPAddress ip =WiFi.localIP(); web_server_mode=true ; String message ="Pour voir la page Web, allez sur http://"+IpToString(ip); bot.sendMessage(m.chat_id, message , keyboard_one); telegram_client.stop(); retard(1000); serveur.begin(); // démarre le serveur web sur le port 80 }  

La page Web comprend un bouton qui désactive le mode serveur Web et revient en tant que client de télégramme :

if (currentLine.endsWith("GET /BACKBUTTON")) { // si le bouton est enfoncé web_server_mode=false ; client.stop(); retard(1000); bot.begin(); bot.sendMessage(OldChatId, "Retour en ligne !", keyboard_one); }  

Chaque fois que la détection de chat est terminée, une nouvelle cellule du tableau est ajoutée avec les données recueillies :si de la nourriture a été livrée, si le chat s'est présenté dans les deux minutes et combien de temps a-t-il fallu pour atteindre le distributeur.

AddTableCell(food/noFood, Yes/No, TimeValue);  

Ensuite, la chaîne contenant toutes les cellules du tableau est mise à jour et intégrée dans le reste du code html principal.

 table_cells+=cell; // ajoute une nouvelle cellule html =html_1 + table_cells + html_2; // ajoute des cellules au html principal 

Consultez l'exemple Pro final pour voir comment intégrer toutes ces nouvelles fonctionnalités !

Conseil : si vous voulez que vos données survivent à une réinitialisation de la carte, jetez un œil à la bibliothèque Flash Storage ou consultez le projet Nerd !

Code

Esquisse complète
Croquis complet de #ProTips

Pièces et boîtiers personnalisés

Carton 2 mm pavlovcase_ShVm1OJRIF.dxf

Schémas


Processus de fabrication

  1. Légumes surgelés
  2. Dîner télévisé
  3. Scanner CAT
  4. Litière pour chat
  5. Aliments lyophilisés
  6. Votre guide de Shop.Cat.Com
  7. Démarrer avec My.Cat.com
  8. Distributeurs automatiques de nourriture – Polyvalence des produits
  9. Les aliments sont devenus plus rapides