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

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

  1. Remplir le contenant (une boîte de yaourt vide) avec la pâtée.
  2. Fermer le couvercle du contenant.
  3. Brancher l'ensemble sur une minuterie de prise programmée sur le secteur 230V.
  4. Régler la minuterie pour qu'elle alimente le distributeur au moment souhaité (ex: 24h plus tard).
  5. À la mise sous tension, l'Arduino pilote le moteur pas à pas qui ouvre le couvercle via l'arbre linéaire.
  6. Le chat accède à son repas frais.
  7. Au retour, on retire le contenant, on nettoie, on recharge en pâtée fraîche, on referme et le cycle repart.
Construire un Distributeur Automatique pour Chat Fiable – Projet DIY pour une Garde Sereine
Le distributeur assemblé : boîte de yaourt, mécanisme d'ouverture, électronique de contrôle.

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.

Construire un Distributeur Automatique pour Chat Fiable – Projet DIY pour une Garde Sereine
Schéma de câblage et vue éclatée de la structure.

Points Clés pour la Réussite

Processus de fabrication

  1. Thermocam DIY : de l'idée en classe au produit mondial
  2. Guide complet des chargeurs de barres automatiques : caractéristiques, avantages et meilleures pratiques
  3. Comprendre les presses automatiques : fonctionnement, avantages et applications
  4. Comprendre les alimentateurs de presse : mécanisme, fonction et applications industrielles
  5. Chargeurs de barres pneumatiques : solution économique pour l'automatisation des tours CNC
  6. Comprendre les cintreuses automatiques : fonctions, avantages et applications
  7. Comprendre les tables rotatives automatiques : précision et efficacité en métallurgie
  8. Guide complet des systèmes de transmission automatique
  9. Systèmes de lubrification centralisée automatique : types, composants et bénéfices