Voici mon nourrisseur de chat à faible coût, automatique et "intelligent".
Caractéristiques :
- nourrissez votre chat deux fois par jour.
- ne livrer que la ration "recommandée".
- détecter que votre chat est en train de manger et recevoir une notification sur votre téléphone.
- voir votre chat en train de manger.
Spécifications :
- un conteneur pour croquettes pour chats de grande capacité (environ 1 mois)
- système anti-brouillage.
- système anti-fourmis.
- système anti-débordement.
Prix: moins de 40€ (oui, bien sûr... voir le fichier BoM)
Aperçu
En 2017, j'ai publié lepremière itération de ce projet.. Et depuis, le nourrisseur de chats a fonctionné quotidiennement. La mécanique est toujours la même et a prouvé sa fiabilité au fil des années.
Le logiciel a changé, on a commencé par utiliser l'IA (un échec à l'époque), puis on a utilisé un vieux smartphone comme webcam. Et maintenant, on utilise une solution beaucoup plus compacte et moins chère !
Voici à quoi ça ressemblait en 2017 :
Malheureusement, Chicha (mon chat dans la vidéo) est mort l'année dernière et ne sera pas là pour une autre vidéo aujourd'hui...
Les leçons apprises.
Voici les leçons apprises au cours de 8 années d'opérations quotidiennes :
- Les fourmis adorent les jouets pour chats... Quand le bol est sur le sol, le lendemain, il sera plein de fourmis. Donc le bol doit "flotter" dans les airs.
- Le chat est un chasseur, il préfère toujours les écureuils, les oiseaux ou les souris aux chatons. Si vous lui donnez la même quantité de nourriture, le lendemain, le plat déborderra (et nourrira les fourmis !)
- Les croquettes sont comme un "jeu de Tetris en 3D". Elles ont tendance à tomber et à s'emmêler, bloquant ainsi l'alimentateur. Une fonction anti-bourrage fiable est indispensable.
- Les mangeoires à grande capacité sont indispensables pour prendre un mois de vacances, par exemple... Mais il est également nécessaire de détecter que la mangeoire est vide.
- La notification que votre chat est en train de manger est amusante, mais elle ne devrait intervenir que lorsque votre chat est en train de manger et non lorsque quelqu'un est devant l'assiette !
- Voir votre chat manger est une fonctionnalité intelligente, pas vraiment obligatoire, mais tellement amusante !
Nous verrons comment ces préoccupations ont été abordées.
Conception mécanique.
La conception mécanique est basée sur une trémie pyramidale qui dépose les croquettes sur une grande vis sans fin.
La vis à vermeille est entraînée par un servo RC à 360° et deux engrenages.
Un servomoteur à 360° permet une rotation continue dans les deux sens, sens horaire ou sens anti-horaire.
Et utilisez quelques vis pour fixer le couvre-moteur afin de maintenir les engrenages en place !
Antiblocage :
Pour empêcher le blocage de l'engrenage à vis, le mouvement est contrôlé dans les deux sens par un logiciel (jetez un œil à la première vidéo). Cela va "secouer" les croquettes et les aider à tomber de la trémie dans l'engrenage à vis.
Pour éviter de bloquer le pignon à vis dans le "mouvement vers l'avant", une lèvre en caoutchouc est collée dans la trémie sur son côté avant. Cette lèvre souple absorbera toutes les contraintes et, conjointement avec le mouvement de va-et-vient, empêchera tout blocage. Croyez-moi, ça marche !
Comme vous pouvez le voir sur cette photo, un tuyau en PVC est inséré autour de l'engrenage hélicoïdal et une fente est coupée au-dessus de celui-ci pour permettre aux croquettes de tomber dans l'engrenage hélicoïdal.
Le PVC est parfait pour permettre un mouvement sans friction dans le tuyau. Il est solide, très doux et naturellement brillant (presque "huilé").
Peser le plat.
Peser le plat est une idée qui résout beaucoup de problèmes expliqués ci-dessus !
- Le plat "flottera" au-dessus du sol, empêchant les fourmis de manger les croquettes.
- Quand le chat mange, le poids de l'assiette diminue. C'est une manière élégante de détecter l'événement "le chat qui mange".
- Quand les croquettes tombent, nous pouvons mesurer la ration exacte que nous voulons donner au chat et arrêter le mouvement de la vis de vermifugation.
- Si le plat n'est pas vide, nous le remplissons uniquement avec la ration exacte, évitant ainsi un "débordement".
- Si les croquettes ne tombent pas, c'est soit une situation de blocage, soit une vidange de la trémie. Une notification peut être envoyée sur votre smartphone.
- Enfin, le plat vert de la vidéo est placé au-dessus de celui imprimé en 3D. Vous pouvez le retirer facilement pour le laver et le garder propre.
Donc, une cellule de charge est ajoutée sous la trémie, elle agit comme une balance de cuisine !
Assemblage des murs extérieurs.
Enfin, comme le montre l'image, des murs en bois sont ajoutés autour de la trémie. Ils sont fixés ensemble à l'aide de pieds imprimés en 3D et de vis en bois de 5 mm. Les dimensions pour couper le contreplaqué de 18 mm sont données dans le paquet de pièces imprimées en 3D (fichiers .dxf).
Voici une vue éclatée : L'assemblage de toutes ces pièces est assez facile et simple.
Comme vous pouvez le voir, des trous sont percés dans le mur avant pour accueillir la caméra et le détecteur de mouvement (capteur infrarouge).
Imprimer le distributeur de nourriture pour chats.
La plupart des pièces sont imprimées avec du filament PLA.
Le plus grand est la trémie ! Il peut cependant être imprimé directement sur mon imprimante Prusa i3 Mk2 sans aucun support.
L'hélice doit être aussi forte que possible et aussi lisse que possible. Pour ces raisons, elle est imprimée avec du filament ABS.
Pour le rendre plus fort et éviter les supports, l'auger est imprimé coupé en deux moitiés horizontalement. Puis il est collé avec de l'acétone. Et il est également lissé avec de l'acétone (voirVoici comment le faire.)
Imprimer toutes les autres pièces est simple et n'a pas besoin d'un support non plus !
Le grand engrenage est également imprimé en ABS, puis vissé et collé à l'hélice.
Attention, l'impression d'ABS n'est pas totalement facile et nécessite que votre imprimante soit placée dans un boîtier pour éviter les déformations. Voir ici.Ce lien pour en faire un simple.!
Le couvre-feu est également imprimé en PLA. Il est coupé en 4 parties pour s'adapter à ma Prusa i3 mk2.S, puis les parties sont collées ensemble à l'époxy sur une surface plane.
Pour imprimer toutes les pièces : Ouvrez les fichiers .3mf, changez le filament si vous le souhaitez (le PETG peut être un bon choix si vous n'avez pas d'ABS ou de PLA), si nécessaire, changez le diamètre de la buse (j'utilise une buse de 0,6 mm, c'est plus rapide pour imprimer les pièces) et imprimez !
Quand tout ça sera fait, votre mangeoire pour chats sera presque terminée... Il manque encore quelques éléments électroniques !
Électronique.
Schémas
Micro-contrôleur.
Le cœur du système est un...Le microcontrôleur ESP32-CAM d'Ai-Thinker.. C'est un microcontrôleur 32 bits à double cœur bon marché mais puissant que vous pouvez programmer facilement avecL'IDE d'Arduino.
Ce MCU a une minuscule caméra OV2640 de 2xMPixels qui sera parfaite pour surveiller notre chat !
Quelques broches d'entrée
J'ai utilisé la plupart d'entre eux !
- IO12 et IO13 pour contrôler le pilote de la cellule de charge HX711.
- IO15 pour contrôler le servo RC.
- IO12 pour obtenir le signal du capteur PIR.
- IO1, IO2 et IO0 pour flasher le micrologiciel.
- IO14 pour configurer le WiFi et calibrer la cellule de charge.
Les capteurs utilisés.
Servomoteur 360° :
Un servomoteur à 360° permet une rotation continue dans les deux sens, horaire ou anti-horaire. Le signal PWM permet uniquement de contrôler la direction et la vitesse de la rotation (pas la position).
Ces servomoteurs sont faciles à trouver :Servo sur Aliexpress.
Leurs dimensions sont standard : 40,8*20,2*28,5 mm.
Un modèle avec des engrenages métalliques et un couple > 10 kg.cm est nécessaire. L'engrenage à vis peut appliquer beaucoup de force aux croquettes en cas de blocage...
Un capteur PIR.
Le MCU va dormir la plupart du temps pour économiser de l'énergie.
Il sera réveillé par un capteur infrarouge via un signal d'interruption.
Le modèle que j'ai choisi est le moins cher :HC-SR501
Le radôme blanc peut être enlevé, de sorte que le capteur s'adaptera à la partie imprimée en 3D et regardera le chat de l'intérieur de la paroi frontale.
Chaque fois que quelque chose passe devant la mangeoire, la sortie du capteur PIR passe à "haut" et réveille l'ESP32.
Cellule de charge
La cellule de charge mesurera le poids de la nourriture.
J'ai choisi une cellule de charge de 1 kg. Cet appareil a besoin d'un amplificateur HX711 pour adapter sa valeur.
La connexion entre la cellule de charge et l'amplificateur suit ce schéma :
Programmer l'ESP32-CAM.
Malheureusement, ce MCU n'est pas équipé d'un adaptateur USB vers série intégré. Nous devrons utiliser un adaptateur externe pour programmer notre catFeeder.
Beaucoup de solutions existent. J'ai choisi celle-ci :CP2102 USB vers série.
Nous verrons plus tard comment l'utiliser.
PCB
J'ai conçu une carte de circuit imprimé agréable et compacte permettant d'adapter l'ESP32 et de connecter tous les capteurs.
Ma première version n'utilisait pas de PCB, tout était câblé "en direct" ! Plusieurs utilisateurs m'ont demandé d'en construire un. C'est maintenant fait et beaucoup plus simple à assembler, je dois l'admettre !
Le PCB a été aimablement sponsorisé par PCBWay et est, comme d'habitude, d'excellente qualité.
Vous pouvez l' commander ici :Projet partagé par PCBWay.. C'est pas cher, livré très rapidement et d'une apparence tellement professionnelle !
Et si vous êtes nouveau sur PCBWay, veuillez utiliser ce lien affilié :https://pcbway.com/g/o35z4O
Cette carte électronique expose tous les connecteurs natifs des différents modules utilisés. Il est très très facile de la souder !
Seul le connecteur USB est "difficile" à souder, mais ce n'est pas nécessaire (voir ci-dessous).
La liste complète des matériaux est disponible dans la section "fichiers" de ce site.
Des considérations de pouvoir.
Le panneau utilise une alimentation électrique de 5V DC pour l'ESP32 et tous les capteurs. Le servo est également alimenté à 5V et peut consommer 1 ampère ou plus de courant. Vous pouvez donc alimenter le système avec un chargeur de smartphone, à condition qu'il puisse fournir plus de 1A. (2A est un choix parfait).
Vous pouvez brancher les 5V directement sur le connecteur USB (PW) ou sur les broches (PW1) de la carte de circuit imprimé.
Logiciel : firmware ESP32.
Le firmware pour le catFeeder est disponible surMes pages Github.
Vous y trouverez tout ce qui est nécessaire pour compiler et configurer votre catFeeder.
Installation d'Arduino.
Vous aurez besoin d'installer Aduino IDE :https://www.arduino.cc/en/software
Ensuite, vous devriez ajouter une référence à votre carte ESP32. Il suffit d'ouvrir les préférences et d'ajouter ce lien aux "URLs du gestionnaire de cartes supplémentaires" :https://espressif.github.io/arduino-esp32/package_esp32_index.json
Ensuite, vous devriez voir votre carte ESP32 dans le menu du gestionnaire de cartes.
L'installation des libraires.
Vous devrez installer quelques bibliothèques avant de compiler votre CatFeeder... La plupart d'entre elles sont installées via le Gestionnaire de bibliothèques.
Tickerutilisé pour le contrôle servo
WifiManagerpour configurer vos identifiants Wi-Fi.
Le temps.pour la synchronisation horaire NTP.
URLencodepour la notification WhatsApp.
Tout cela étant fait, vous devriez être en mesure de compiler votre catfeeder sans erreur !
Décompressez leProjet GitHub.et ouvrez-le dans l'IDE.
Vous devriez voir 5 fichiers ouverts.
Je n'ai modifié que le fichier .ino. Les 4 autres sont des fichiers originaux provenant duLe référentiel d'AI-thinker.. Ce sont peut-être des versions "anciennes", mais elles fonctionnent avec ma carte !
Tu peux essayer de le compiler, ça devrait fonctionner, mais nous devons aller dans le code source pour changer certains paramètres.
Et je dois toujours expliquer comment flasher le firmware...
Flasher le firmware.
Connectez votre dongle USB à série à votre mangeoire pour chats. N'oubliez pas de relier le cavalier JP1. Cela forcera GIO0 à la masse et permettra à l'ESP32 de démarrer en mode chargeur d'amorçage.
Ne connectez pas les 5V ni les +3,3V sur le dongle (mais bien sûr, branchez-le sur le port USB de votre PC !). Au lieu de cela, branchez le +5V sur votre carte et cliquez maintenant sur le bouton Compiler. Quelques secondes après, le firmware sera téléchargé.
Enlevez le cavalier sur JP1 et réinitialisez l'ESP32 (ou déconnectez/reconnectez le +5V). Votre nourrisseur de chat va démarrer !
Configurer le wifi.
Pour configurer le wifi, suivez simplement cette procédure :
J'ai utilisé leLa bibliothèque WifiManager d'ESP32.Des capacités pour saisir les identifiants Wi-Fi sur la carte ESP32.
Donc, si vous démarrez la carte (ou la réinitialisez avec le bouton de réinitialisation)Tout en touchant le pavé tactile "CAL50" sur le PCB,Ensuite, l'ESP32 expose un point d'accès Wi-Fi nommé "JP eCatfeeder" sur lequel vous pouvez connecter n'importe quel smartphone (ou PC).
Se connecter à cela ouvrira automatiquement une fenêtre de configuration.
Cliquez sur le bouton "Configurer le Wi-Fi" pour choisir un réseau Wi-Fi existant pour lequel vous avez les informations d'identification et saisissez-les ! L'ESP32 redémarrera et se connectera à votre routeur.
Votre carte ESP32 est maintenant configurée pour fonctionner avec le wifi et vous aimeriez surveiller votre chat et recevoir des notifications !
Si vous n'avez pas de wifi, pas de problème, votre mangeoire pour chats fonctionnera toujours, mais sans les "fonctions intelligentes" !
Les notifications de WhatsApp.
Tu peux faire en sorte que ton chat t'envoie des notifications WhatsApp !
C'est facile... J'ai utilisé le service CallMeBot pour envoyer des notifications de texte sur mon téléphone.
Aller à laLa page de CallMeBot.et suivez les instructions en utilisant WhatsApp sur votre téléphone.
Vous recevrez un message avec la clé d'API.
Une fois que vous avez autorisé CallMeBot à vous envoyer des notifications, vous devez ensuite configurer votre numéro de téléphone et votre clé API dans le code source (ligne 145).
//Bot d'appel WhatsApp :https://www.callmebot.com/blog/free-api-whatsapp-messages/
// +code de pays international + numéro de téléphone
// France +33, exemple : +36010100101
String phoneNumber = "+TON_TELEPHONE";
String apiKey = "VOTRE_CLÉ_API";
Maintenant, vous pouvez à nouveau compiler votre code et vous devriez être en mesure de recevoir des messages de votre chat !
Calibration de la ration quotidienne.
Comme pour n'importe quelle balance, votre mangeoire pour chat doit être calibrée :
- La pesée à vide doit être effectuée avec une assiette vide sur la balance. Donc, faites fonctionner le distributeur de nourriture pour chats, laissez-le démarrer et avant qu'il n'entre en veille profonde (40 secondes), touchez le pavé tactile CAL50 sur le PCB pendant 4 secondes (plus de 3 secondes et moins de 6 secondes). C'est aussi simple que ça !
- La ration quotidienne doit être calibrée après que la pesée en tare ait été effectuée. Déposez les croquettes que vous voulez dans l'assiette, faites fonctionner le distributeur de nourriture pour chats, laissez-le démarrer et appuyez sur la tablette tactile CAL50 pendant 7 secondes (plus de 6 secondes).
Pour chacune de ces actions, vous recevrez une notification WhatsApp pour confirmer les calibrages.
Les heures d'alimentation sont fixées dans le code, mais vous pouvez les changer facilement (ligne 255/256).
FeedHour1 = preferences.getInt("FeedHour1", 7);
FeedHour2 = préférences.getInt("FeedHour2", 20);
Je nourris mon chat à 7 heures du matin et à 20 heures du soir ! Cela signifie que le distributeur de nourriture pour chats synchronisera son horloge avec l'heure NTP (regardez le code, vous le trouverez !)
Vous remarquerez peut-être aussi que j'ai calibré ma mangeoire avec une ration de 50 g. Mais comme le poids n'est jamais affiché, vous pouvez mettre la ration que vous voulez, le calibrage fonctionnera aussi bien même si vous dites que 80 g c'est 50 g :-)
Voir votre chat quand il mange.
Si vous êtes ici, à la fin de cette longue description, alors vous voulez être récompensé et voir votre chat manger.
Comment ça marche ?
1)Le capteur PIR détecte quelque chose et démarre votre ESP32.
Cela est fait par 2 lignes de code !
Tu définis un masque binaire pour ton GPIO :
#define PIR_PIN_BITMASK 0x4 // 2^2 (l'exposant est le numéro de la broche GPIO) en hexadécimal.
et vous activez les interruptions externes pour réveiller l'ESP32 de son état de veille profonde lorsque cette broche GPIO passe à l'état "high".
esp_sleep_enable_ext1_wakeup(PIR_PIN_BITMASK, ESP_EXT1_WAKEUP_ANY_HIGH); //ce sera le code pour entrer en veille profonde et se réveiller lorsque la broche GPIO2 est à haut niveau.
2)L'ESP32 est maintenant démarré et entre dans la routine d'installation.
3)Ainsi, vous pesez l'assiette.juste après le temps de démarrage dans la routine d'installation.
Poids moyen = Obtenir le poids brut();
Poids moyen = CalibZero - Poids moyen ;
Poids moyen = Poids moyen * 50,0 / Calibre ;
Poids en temps réel = Poids moyen ;
4)Tu fais la même chose de manière répétitive à l'intérieur de la routine de boucle.
Et si vous détectez une variation de poids, alors votre chat (ou celui du voisin !) est en train de manger.
si ((abs(Poids moyen - Poids en temps réel) > 10.0) et (SendEating == true)) // si le poids a changé de plus de 10g, alors le chat est en train de manger {
SendAlarm = vrai ;
Mess = "Le chat est en train de manger. Le stream en direct est ici \n\"http://";
Mess += IpAddress2String(WiFi.localIP());
Mess += ":81/stream\"";
SendEating = false ; // efface le drapeau pour n'envoyer qu'une seule notification ! }
Poids en temps réel = Poids moyen ; // et mettez à jour le poids en temps réel.
5)Le nourrisseur de chat enverra une notification.(une seule fois)
6) Et si vous suivez l'URL.Vous aurez accès au flux en direct de votre chat.:
Comme je l'ai dit, Chicha, mon chat, est mort, alors j'ai filmé la première photo que j'ai trouvée sur Internet (et je l'ai un peu floutée pour éviter les problèmes de droits d'auteur !)... Désolé Joseph !
Notez que l'URL est locale. Si vous voulez voir votre chat depuis Internet n'importe où dans le monde, alors je devrai l'appliquer.réacheminement de port.Sur votre routeur wifi, pour exposer cette adresse à l'extérieur de votre maison. (C'est facile, mais ça dépend de votre routeur, donc je ne vais pas l'expliquer ici !)
7) Enfin, à la fin de la boucle,L'ESP32 va entrer en veille profonde.Si vous n'êtes pas connecté au livestream (délai de 50 secondes) et si rien ne bouge devant le capteur PIR.
L'ESP32 se réveillera soit avec le capteur PIR, soit aux heures exactes choisies pour nourrir votre chat !
si ((millis() - Timeout) > 50000) //si plus de 40 secondes sans connexion, alors dormez {
#si défini DEBUG_OUT
Serial.println("Délai de connexion dépassé --> arrêtez maintenant");
#endif
doStop = 1 ; // forcer l'arrêt
si ((doStop == 1) et (digitalRead(PIR_PIN) == LOW)) {
float hourDec = heure() + float(minute()) / 60. + float(seconde()) / 3600.;
float timeToSleepDec ;
si (hourDec > FeedHour2) timeToSleepDec = 24 + FeedHour1 - hourDec ;
autrement, si (hourDec < FeedHour1), timeToSleepDec = FeedHour1 - hourDec ;
Sinon, timeToSleepDec sera égal à FeedHour2 - hourDec.
Serial.print("va dormir (heure) : ");
Serial.println(timeToSleepDec);
timeToSleep = 3600 * timeToSleepDec ;
Serial.print("va dormir (secondes) : ");
Serial.println(timeToSleep);
esp_sleep_enable_timer_wakeup(timeToSleep * uS_TO_S_FACTOR); // permet au timer d'entrer en mode veille profonde.
Serial.println("Je vais dormir maintenant");
délai(200);
esp_deep_sleep_start(); // entrer en mode de sommeil profond si le capteur PIR est désactivé et que le délai d'attente a expiré.
)
Etiquetas
Fuente del modelo
