Réalisation d'un cat feeder contrôlé par Arduino

Bonjour à tous,
Aujourd'hui je vous propose de réaliser un distributeur de croquettes automatiques pour votre chat (cat feeder en anglais) contrôlé par Arduino Uno.

h Pour cette réalisation, vous allez avoir besoin de :

  • 1 Arduino Uno
  • 1 bouton poussoir
  • 1 transformateur 12V CC
  • 1 panneau de contreplaqué 260 x 610 mm de 10mm d'épaisseur
  • 1 tube de PVC ø 40mm
  • 1 prise alimentation femelle type jack
  • 1 prise alimentation mâle type jack
  • 1 tige filetée en métal ø 5mm
  • 1 moteur CC à faible vitesse de rotation (30 tours/min par ex)
  • 1 équerre d'assemblage (à adapter en fonction du moteur)
  • 2 charnières 19 mm
  • de la pâte fimo
  • visserie
  • SINTOFER
  • fils

J'ai acheté mon moteur sur ebay, pour le reste, tout se trouve en magasin de bricolage.

Ce tutoriel est à cheval entre l'électronique et le bricolage. Étant donné que le gros du travail concerne la partie bricolage, je l'ai placé dans cette catégorie.

1. Le principe

Avant de me lancer dans les explications, voici une vue en coupe du distributeur.

Vue en coupe du distributeur
Vue en coupe du distributeur

Le principe de fonctionnement est assez simple : le déplacement des croquettes va être assuré grâce à la vis d'Achimède (aussi appelée vis sans fin). Les croquettes présentent dans le réservoir tombent par gravité dans le tube. Lorsque la vis tourne, elle pousse une quantité limitée de croquettes vers l'aute extrémité du tube. Les croquettes tombent alors du tube, glissent dans la goutière et attérissent dans la gamelle.

La rotation de la vis est assurée grâce à un moteur à courant continu dont la vitesse et la durée de rotation sont contrôlées par l'Arduino. Ce dernier va envoyer à intervalles réguliers un signal permettant de faire tourner le moteur pendant une durée déterminée. Vous pourrez d'ailleurs paramétrer cette durée selon la quantité de croquettes que vous souhaitez délivrer par distribution.

Bien évidemment, l'Arduino ne contrôlera pas directement le moteur, il faudra utiliser un montage intermédiaire (driver) mais nous y reviendrons plus tard.

Enfin, on peut noter la présence d'un bouton poussoir sur le haut de la boite qui permet d'activer manuellement la distribution de croquettes tant qu'on reste appuyé.

Maintenant qu'on a les idées claires sur le fonctionnement global, nous allons pouvoir passer à la réalisation.

2. Réalisation

2.1 La vis d'Archimède

Ici, deux choix s'offrent à vous : soit vous disposez d'une imprimante 3D et vous imprimez votre vis sans fin, soit vous la réaliser à la main.

En ce qui me concerne, je l'ai faite à la main, voici comment procéder :

Pour commencer, serrez fortement deux boulons sur une rondelle au centre de votre tige filetée de cette manière :

Boulons sur tige filetée
Boulons sur tige filetée

A quoi ça sert de mettre deux écrous sur la tige filetée ?

En cas de contraite trop forte (blocus de croquettes), la pâte fimo bloquerait mais la tige filletée continuerait à tourner, faisant ainsi avancer progressivement la pâte fimo sur son axe, jusqu'à venir s'écraser contre le fond du tube. Avec les écrous, la pâte aura une bonne prise et sera solidaire de la tige filletée. Ainsi, en cas de forçage, le moteur ralentira mais tous les élements continueront de tourner ensemble.

Ça peut parraître accessoire mais je vous assure que c'est indispensable et franchement, c'est pas pour le prix que coûtent 2 boulons et une rondelle ;) D'ailleurs, rien ne vous empêche d'en mettre plusieurs.

Ensuite, enroulez la pâte fimo autour de cette manière :

Vis étape 2
Vis étape 2

Préparez des ficelles de pâte et enroulez-les autour de la tige en essayant de conserver un angle de 45° (à peu près) :

Vis étape 3
Vis étape 3

Attention à ne pas faire une vis trop fine qui risquerait de casser en cas de forçage.

Voici ce que vous devez obtenir :

Vis étape 4
Vis étape 4

Maintenant que la forme de la vis vous convient, placez le tout 30 minutes au four à 130°C.
Une fois la pâte cuite et refroidie, assurez-vous que la vis rentre dans le tube de PVC et qu'elle peut tourner sans résistance. Si vous êtes obligé de forcer pour la faire tourner, un petit coup de ponçage (à la Dremel c'est plus facile) sur le pas de la vis devrait suffir à rectifier la forme.

Votre vis est maintenant prête, passons au tube.

2.2 Le tube

Un simple tube de PVC d'environ 10 cm de longueur suffit.

Percez deux trous aux extrémités pour l'entrée/sortie des croquettes, comme ceci :

Tube de PVC percé Tube de PVC percé
Tube de PVC percé

N'aillez pas peur de faire des trous trop larges, sinon les croquettes risquent de bourrer et plus aucune ne tombera dans le tube.

Pour boucher les extrémités du tube, j'ai utilisé deux bouchons plastique de bouteilles de lait, percés au centre pour laisser passer la tige de la vis.

Tube de PVC percé Tube de PVC percé Tube de PVC percé
Tube de PVC percé

A ce stade, la vis doit tourner parfaitement sans rencontrer de résistance :

Puis-ce qu'on est dans la découpe du PVC, découpons dès maintenant la goutière qui servira à faire glisser les croquettes directement dans la gamelle du chat. Pour ça, découpez un tube de PVC de 7cm de long, toujours de diamètre 40. Découpez le ensuite en 2 dans le sens de la longueur. Nettoyez les bavures de découpes avec du papier des verre et mettez cette pièce de côté, nous nous en reservirons plus tard.

Goutière terminée
Goutière terminée

2.3 La boite

Maintenant que le combo vis/tube est opérationnel, passons à la boite. Voici les dimensions de la mienne :

Dimensions de la boîte
Dimensions de la boîte

Et le schéma d'assemblage

Dimensions de la boîte
Dimensions de la boîte

Pour info, j'en ai eu pour 5€ découpe comprise en magasin de bricolage.

Sur la planche qui sera le haut de votre boîte (pièce 3 sur le schéma), percez un trou en son centre du diamètre de celui que vous avez fait dans votre tube de PVC. C'est par ce trou que les croquettes tomberont du réservoir dans la vis sans fin.

Perçage de la plaque supérieure
Perçage de la plaque supérieure

Percez un second trou pour passer le bouton poussoir, adaptez en fonction de la taille de votre interrupteur.

C'est sur le côté de la boite (pièce 1) que se trouvera la prise d'alimentation, percez donc un trou au diamètre du connecteur.

Percez les deux derniers trous au moins à 10mm du bord (épaisseur d'une planche), sinon vous serez bloqué lors de l'assemblage de la boite.

2.4 Assemblage

Fixez le combo tube/vis à la planche au pistolet à colle en prenant soin de bien aligner les trous.

 

Vous pouvez constater qu'il y a un jour entre le tube et la planche de bois, les croquettes risquent donc de tomber à côté. Vous pouvez utiliser ce qu'il vous reste de pâte Fimo pour combler les trous :

 

A présent, nous allons fixer le bouton poussoir qui servira au mode manuel. Soudez une bonne longueur de fil sur chaque patte de l'interrupteur, vous pourrez toujours les raccourcir plus tard.

 

Passez le tout dans le trou prévu et fixez au pistolet à colle.

Tant que le fer est chaud, profitez-en pour soudez deux fils sur les broches du moteur.

Arrive maintenant le temps de fixer le moteur. Pour se faire, j'ai utilisé une équerre s'assemblage, il se trouve que l'espace entre 2 trous fait pile la bonne taille :

Fixation du moteur
Fixation du moteur

Placez maintenant le moteur et sa fixation sur la planche de manière à ce que l'axe moteur et la tige filetée soient parfaitement alignés. Appliquez-vous, plus les axes seront alignés et plus vous limiterez les torsions lors de la rotation. N'hésitez pas à utiliser des rondelles ou des calles.

Une fois que l'alignement vous convient, vous n'avez plus qu'à visser pour fixer le support moteur à la planche.

Pour fixer l'axe moteur à la tige filetée, j'ai d'abord utilisé de la gaine thermorétractable et du scotch, mais lors de mon premier test avec croquettes, ces dernières ont bloqué la rotation de la vis et la gaine s'est finalement déchirée. J'ai donc du trouver quelque chose de plus résistant : le SINTOFER ! C'est un genre de pâte à modeler que l'on malaxe pour lui donner la forme que l'on veut et qui devient dur comme du fer une fois sèche.

Afin que le pâte ait une bonne prise sur la tige filetée, là encore j'ai vissé deux boulons en les serrant à fond.

Voici à quoi ressemble ma fixation :

Fixation de l'axe moteur à la tige filetée Fixation de l'axe moteur à la tige filetée
Fixation de l'axe moteur à la tige filetée

L'essentiel est maintenant en place, c'est le moment de faire un premier test.
Mettez un tas de croquettes dans le trou de la planche et alimentez le moteur pour le faire tourner (inversez les polarités s'il ne tourne pas dans le bon sens). Les croquettes doivent avancer lentement dans le tube et resortir à son extrémité.
Ce test vous permet de vérifier l'alignement de l'axe moteur avec la vis sans fin et de vérifier que le moteur ne calle pas en cas de contrainte trop forte.

Maintenant que le coeur du catfeeder est en place, vous pouvez fixer les côtés de votre boite (pièce 1 et 2 sur le schéma).

Placez la face avant (sans la fixer) de votre boite, positionnez la goutière sous le trou de chutte du combo tube/vis et notez l'emplacement de la goutière sur la face avant. Percez le trou et vérifiez que la goutière passe bien. Vous pouvez maintenant fixer la face avant de la boite ainsi que la goutière.

Positionnement de la goutière Positionnement de la goutière Positionnement de la goutière Positionnement de la goutière
Positionnement de la goutière

Afin que l'Arduino ne se balade pas trop dans la boite, vous pouvez planter des petits clous sur le fond (pièce 4 sur le schéma) pour le caler.

2.5 Câblage et branchements

Je vous en parlais au début du tuto, nous n'allons pas brancher la sortie de l'Arduino directement sur le moteur, elle partirait en fumée dès que le moteur se mettrait à tourner. Nous allons donc utiliser un petit montage driver à base de MOSFET pour contrôler le moteur. Voyez plutôt :

Schéma électrique
Schéma électrique du driver moteur

Pour ceux qui souhaitent réaliser un circuit imprimé, voici une archive contenant le typon, le schéma électrique et le placement des composants.

Notez dans un coin de votre tête que le driver de MOSFET est un inverseur. Un niveau 0 issue de l'Arduino fera donc tourner le moteur à plein régime. Cette information nous sera utile lors de la programmation de l'Arduino.

Nous allons maintenant relier tous les éléments de connectique entre eux :

Schéma connectique
Schéma connectique

Commencez par souder les fils sur les connecteurs. Ensuite, placez la prise d'alimentation femelle dans le trou que vous avez percé sur la face 1 et fixez-la au pistolet à colle.

Nous allons utiliser l'interrupteur pour actionner manuellement le moteur lorsqu'on en aura besoin. L'Arduino va "écouter" une de ses broches qui, à l'état de repos du bouton poussoir, sera reliée au VCC (état logique 1 ou HIGH). Lorsqu'on appuie sur le BP, la broche sera reliée à la masse (état logique 0 ou LOW), l'Arduino actionnera alors le moteur.

Pourquoi relier à l'état logique 1 lorsque l'interrupteur est au repos, ça ne serait pas plus logique de faire l'inverse ?

Effectivement ça serait plus logique, mais c'est l'Arduino Uno qui nous impose ça : vous verrez par la suite que j'utilise les interruptions dans mon code pour "écouter" l'interrupteur, or la fonction attachInterrupt n'accepte le mode HIGH que pour l'Arduino Due, que je ne possède pas. La seule solution restante est donc d'utiliser le mode LOW.

2.6 Programmation de l'Arduino

Nous approchons de la fin ! Sans plus attendre, voici le code de l'Arduino :


//------------------
//- Çat Feeder 1.0 -
//- www.firediy.fr -
//------------------
/**
 * Le TC4429 est un driver INVERSEUR. Le moteur tournera donc à l'inverse du rapport cyclique.
 * 255 => le moteur ne tourne pas
 * 0   => le moteur tourne à plein régime
 */

// Déclaration des variables globales
int pinMot               = 5;     // Broche de sortie du signal de contrôle moteur
int bp                   = 2;     // Broche d'entrée du bouton poussoir
int duty                 = 0;     // Rapport cyclique du signal de contrôle du moteur
int duree                = 7;     // Nombre de sec pendant lesquelles le moteur va tourner pour une distribution : à adapter selon la longueur du tube et la vitesse de rotation du moteur
unsigned long dureeCycle = 14400; // Nombre de sec séparant 2 distributions, équivaut ici à 4h


/**
 * Fonction d'initialisation
 */
void setup(void)
{
    pinMode(bp, INPUT);

    // L'interruption int.0 écoute la broche 2 de l'Arduino Uno
    // Déclenche une interruption lorsque le signal bp est à l'état BAS (bouton poussoir appuyé)
    attachInterrupt(0, startMoteur, LOW);

    // Initialise la commande moteur
    analogWrite(pinMot, 255);
}


/**
 * Boucle principale
 */
void loop()
{
    // Attente jusqu'au prochain cycle de distribution (ici 4h)
    attendre(dureeCycle);
    actionnerMoteur();
}

/**
 * Fait tourner le moteur pendant 'duree' millisecondes
 */
void actionnerMoteur()
{
    analogWrite(pinMot, duty);
    attendre(duree);
    digitalWrite(pinMot, HIGH);
}

/**
 * Actionne le moteur et l'arrête si le bouton poussoir est relâché
 */
void startMoteur()
{
    analogWrite(pinMot, duty);

    // Si on arrête d'appuyer sur le bouton
    if (digitalRead(bp) == HIGH) {
        digitalWrite(pinMot, HIGH);
    }
}

/**
 * Attendre n secondes
 * @param unsigned long duree : nombre de secondes à attendre
 * @return void
 */
void attendre(int duree)
{
    int loops;
    int count = 30;
    int reste = (duree%count);
    
    loops = floor(duree/count);

    for (int i=0; i < loops; i++) {
       delay(count*1000); 
    }

    delay(reste*1000);
}

Si vous avez suivi scrupuleusement le câblage à l'étape précédente, vous pouvez balancer directement le code dans votre Arduino sans vous poser de question, ça fonctionnera :)

Pourquoi tu as fais une fonction attendre() au lieu d'utiliser directement delay() ?

Pour commencer, je vous annonce d'amblée qu'utiliser des delay() pour faire "attendre" le code est une mauvaise pratique. Un delay() bloque le traitement dans le sens où le code situé après ne s'exécutera pas tant que le delay() n'est pas terminé. Donc si vous souhaitez effectuer des traitements en parallèle de l'attente, c'est impossible avec cette méthode.

Dans notre cas, le problème ne se pose pas vraiment étant donné qu'on ne souhaite rien faire d'autre qu'attendre.

La fonction attendre() que j'ai écrite repose sur une succession de delay() tout simplement parce qu'un seul delay de $4 \times 3600 \times 1000$ ne fonctionne pas. Eh oui, le paramètre d'entrée de cette fonction est un temps exprimé en millisecondes, 4h ça fait donc beaucoup de millisecondes, trop en fait, on se retrouve donc face à un phénomène d'overflow.

Pour le reste rien de bien compliqué. Vous pouvez remarquer que j'utilise les interruptions pour déclencher la rotation du moteur lorsqu'on appuie sur le bouton poussoir.

Allez, c'est le moment de tester que ça fonctionne. Envoyez le code dans votre Arduino, alimentez le tout et commencez par tester le mode manuel.

C'est bon le moteur tourne ? Parfait ! Il ne vous reste plus qu'à attendre 4h la prochaine distribution, ou alors réduire la durée du cycle à quelques secondes, c'est vous qui voyez ;)

2.7 Finitions

Toutes les parties du ditributeur sont maintenant fonctionnelles, vous pouvez fermer la boîte. Afin de ne pas la condamner définitivement, j'ai placé deux charnières sur le dernier côté de manière à pouvoir l'ouvrir à volonté et avoir accès à ce qu'elle contient, notamment l'Arduino (avouez que pour le reprogrammer c'est plus pratique).

Ajout de charnières
Ajout de charnières

Il ne reste plus qu'à fixer le réservoir. Là, plusieurs choix s'offrent à vous : utiliser une bouteille en plastique, faire un réservoir en bois, utiliser un tupperware, un tube de PVC ...etc, c'est selon ce que vous avez sous la main et la qualité que vous voulez obtenir !

En ce qui me concerne, j'ai utilisé une boite de gateaux apéro à 70 centimes trouvable en grande surface. Elle a l'avantage d'avoir un bon volume, un couvercle, d'être pas chère, transparente (utile pour voir le niveau de croquettes) et suffisamment rigide pour ne pas se déformer comme une banale bouteille d'eau. J'ai découpé le fond avec une lame chauffée au briquet et collé le tout au pistolet à colle :

Distributeur terminé
Distributeur terminé

Comme on aime faire les choses jusqu'au bout, un coup de vernis sur la boîte afin de sublimer tout ça !

3. Améliorations

Bien que très simpliste, le distributeur de croquettes est maintenant opérationnel ! Cependant, il est perfectible sous beaucoup d'aspects, voici quelques idées d'améliorations pour ceux qui souhaiteraient aller plus loin :

  • Utiliser une vis à double pas pour distribuer des croquettes aux deux extrémités du tube (si vous avez 2 chats)
  • Inclure un système d'horloge nucléaire pour connaître l'heure même après une coupure de courant et ainsi distribuer à des heures fixes
  • Inclure une balance numérique permettant de connaitre la quantité de croquettes distribuée/restante
  • Inclure un système permettant de savoir lorsque le réservoir est vide et arrêter les cycles de distrubtion en conséquence
  • ...

C'est tout pour ce tutoriel, j'espère qu'il vous aura plus, n'hésitez pas à donner votre avis et à partager vos réalisations sur le forum !

Vos réactions (0) :

  1. Sois le/la premier(e) à commenter cet article !
Tu as besoin d'aide ? Utilise le Forum plutôt que les commentaires.

Un commentaire ?

* Champs obligatoires
Utilisation des données

Afin d'améliorer ton expérience utilisateur, nous utilisons des cookies 🍪