Construire un Distributeur Automatique pour Chat Fiable – Projet DIY pour une Garde Sereine
Composants et Fournitures
| Composant | Quantité |
|---|---|
| Minuterie Mécanique (prise programmable) | 1 |
| Moteur Pas à Pas (Stepper) | 1 |
| Pilote de Moteur Pas à Pas L9110S | 1 |
| Support d'Arbre Linéaire SHF8 | 1 |
| Chargeur USB Mural (5V) | 1 |
| Arduino Pro Mini 328 - 5V/16MHz (SparkFun) | 1 |
| Adaptateur USB Male vers DIP | 1 |
| Rallonge USB | 1 |
| Équerres de Fixation (Cornières) | 1 |
À Propos du Projet
Lorsqu'il faut s'absenter quelques jours, nourrir son chat devient un casse-tête : il faut demander à des proches de passer, ou investir dans des distributeurs commerciaux souvent onéreux, volumineux et conçus uniquement pour les croquettes. Mon chat mange principalement de la pâtée, qui se gâte en 24h une fois la boîte ouverte.
J'ai donc conçu un distributeur compact, économique et optimisé pour la nourriture humide, capable de délivrer un seul repas après un délai programmé. Cela me offre deux jours d'autonomie.
Principe de Fonctionnement
- Remplir le contenant (une boîte de yaourt vide) avec la pâtée.
- Fermer le couvercle du contenant.
- Brancher l'ensemble sur une minuterie de prise programmée sur le secteur 230V.
- Régler la minuterie pour qu'elle alimente le distributeur au moment souhaité (ex: 24h plus tard).
- À la mise sous tension, l'Arduino pilote le moteur pas à pas qui ouvre le couvercle via l'arbre linéaire.
- Le chat accède à son repas frais.
- Au retour, on retire le contenant, on nettoie, on recharge en pâtée fraîche, on referme et le cycle repart.
Toutes les étapes majeures sont visibles dans cette vidéo : Lien vers la vidéo
Code Arduino
Le firmware est téléversé sur l'Arduino Pro Mini via l'IDE Arduino, un adaptateur FTDI et un câble Mini-B USB. Tutoriel de téléversement.
Le code est simple : au démarrage (setup), le moteur effectue une rotation complète pour ouvrir le couvercle. Dans la boucle principale (loop), le système attend l'appui sur un bouton (simulant la fin de course ou un test manuel) pour refermer ou réouvrir.
// Distributeur automatique pour chat par J. Rundhall
// Code original stepper par R. Jordan Kreindler (octobre 2016)
float RPM;
boolean isButtonPressed = false;
unsigned long timee;
// Affectation des broches
int buttonPIN = 6;
int aPin = 4; // IN1
int bPin = 3; // IN2
int aPrimePin = 5; // IN3
int bPrimePin = 2; // IN4
int one = aPin, two = bPin, three = aPrimePin, four = bPrimePin;
int degrees = 0;
int delay1 = 5; // délai entre demi-pas (ms)
int delay2 = 200; // délai après tour complet (ms)
int count = 0;
int numberOfRotations = 1;
void setup() {
Serial.begin(9600);
pinMode(6, INPUT_PULLUP); // Bouton
pinMode(aPin, OUTPUT);
pinMode(bPin, OUTPUT);
pinMode(aPrimePin, OUTPUT);
pinMode(bPrimePin, OUTPUT);
Serial.println(" Clockwise");
// Allumer toutes les bobines à LOW au départ
digitalWrite(aPin, LOW);
digitalWrite(bPin, LOW);
digitalWrite(aPrimePin, LOW);
digitalWrite(bPrimePin, LOW);
// 20 demi-tours initiaux (ouverture)
for(int ii = 0; ii < 20; ii++) doTurn();
}
void loop() {
int sensorVal = digitalRead(6);
// Logique inversée par pull-up : LOW = appuyé
if (sensorVal == LOW) {
isButtonPressed = true;
} else {
if (isButtonPressed) {
isButtonPressed = false;
doTurn(); // Effectuer un tour (fermeture/réouverture)
// Couper l'alimentation des bobines
digitalWrite(aPin, LOW);
digitalWrite(bPin, LOW);
digitalWrite(aPrimePin, LOW);
digitalWrite(bPrimePin, LOW);
}
}
}
void doTurn() {
// Séquence demi-pas (half-step) pour moteur bipolaire
// 1. aPin HIGH
digitalWrite(aPin, HIGH); digitalWrite(bPin, LOW); digitalWrite(aPrimePin, LOW); digitalWrite(bPrimePin, LOW); delay(delay1);
// 2. aPin + bPin HIGH
digitalWrite(aPin, HIGH); digitalWrite(bPin, HIGH); digitalWrite(aPrimePin, LOW); digitalWrite(bPrimePin, LOW); delay(delay1);
// 3. bPin HIGH
digitalWrite(aPin, LOW); digitalWrite(bPin, HIGH); digitalWrite(aPrimePin, LOW); digitalWrite(bPrimePin, LOW); delay(delay1);
// 4. bPin + aPrimePin HIGH
digitalWrite(aPin, LOW); digitalWrite(bPin, HIGH); digitalWrite(aPrimePin, HIGH); digitalWrite(bPrimePin, LOW); delay(delay1);
// 5. aPrimePin HIGH
digitalWrite(aPin, LOW); digitalWrite(bPin, LOW); digitalWrite(aPrimePin, HIGH); digitalWrite(bPrimePin, LOW); delay(delay1);
// 6. aPrimePin + bPrimePin HIGH
digitalWrite(aPin, LOW); digitalWrite(bPin, LOW); digitalWrite(aPrimePin, HIGH); digitalWrite(bPrimePin, HIGH); delay(delay1);
// 7. bPrimePin HIGH
digitalWrite(aPin, LOW); digitalWrite(bPin, LOW); digitalWrite(aPrimePin, LOW); digitalWrite(bPrimePin, HIGH); delay(delay1);
// 8. bPrimePin + aPin HIGH
digitalWrite(aPin, HIGH); digitalWrite(bPin, LOW); digitalWrite(aPrimePin, LOW); digitalWrite(bPrimePin, HIGH); delay(delay1);
count += 8;
degrees = (360.0 * (count / 400.0));
if ((numberOfRotations % 2) == 1) {
Serial.println(" Clockwise ");
Serial.println(degrees);
} else {
Serial.println(" Anti-Clockwise ");
degrees = 360 - degrees;
Serial.print("-");
Serial.println(degrees);
}
if (count == 160) { // Un tour complet (160 demi-pas = 20 pas * 8)
numberOfRotations++;
timee = millis();
RPM = timee / numberOfRotations;
RPM = (60000.00 / RPM);
if (numberOfRotations >= 10) {
Serial.print("RPM:");
Serial.println(round(RPM));
}
delay(delay2);
count = 0;
// Inverser le sens à chaque tour
if ((numberOfRotations) % 2 == 0) {
aPin = four; bPin = three; aPrimePin = two; bPrimePin = one;
} else {
aPin = one; bPin = two; aPrimePin = three; bPrimePin = four;
}
digitalWrite(aPin, LOW);
digitalWrite(bPin, LOW);
digitalWrite(aPrimePin, LOW);
digitalWrite(bPrimePin, LOW);
}
}
Schéma de Câblage et Assemblage Mécanique
1. Câblage électronique : Souder uniquement les fils d'alimentation sur l'adaptateur USB. Avant de brancher sur le 230V, tester avec une alimentation de laboratoire (limite de courant) pour éviter d'endommager les composants. La consommation totale doit rester < 1A à 5V.
2. Assemblage mécanique : Fixer les équerres, percer et adapter la boîte de yaourt, puis la solidariser à la structure porteuse.
Points Clés pour la Réussite
- Utiliser une boîte de yaourt propre et sèche comme contenant jetable/recyclable.
- La minuterie mécanique isole galvaniquement le secteur de l'électronique basse tension.
- Le moteur pas à pas + arbre linéaire assure une ouverture précise et reproductible.
- Le code gère l'inversion de sens automatique à chaque cycle (ouverture/fermeture).
- Coût total très faible (composants récupérés ou quelques euros).
Processus de fabrication
- Thermocam DIY : de l'idée en classe au produit mondial
- Guide complet des chargeurs de barres automatiques : caractéristiques, avantages et meilleures pratiques
- Comprendre les presses automatiques : fonctionnement, avantages et applications
- Comprendre les alimentateurs de presse : mécanisme, fonction et applications industrielles
- Chargeurs de barres pneumatiques : solution économique pour l'automatisation des tours CNC
- Comprendre les cintreuses automatiques : fonctions, avantages et applications
- Comprendre les tables rotatives automatiques : précision et efficacité en métallurgie
- Guide complet des systèmes de transmission automatique
- Systèmes de lubrification centralisée automatique : types, composants et bénéfices