Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

Zuverlässigen automatischen Katzenfütterer bauen – DIY-Projekt für stressfreie Katzenbetreuung

Komponenten und Materialien

Komponente Menge
Mechanischer Steckdosen-Timer 1
Schrittmotor 1
Schrittmotortreiber L9110S 1
Linearwellenlager SHF8 1
USB-Netzteil 1
SparkFun Arduino Pro Mini 328 - 5V/16MHz 1
USB-Stecker auf DIP-Adapter 1
USB-Verlängerungskabel 1
Winkelverbinder 1

Über das Projekt

Wenn ich für einige Tage das Haus verlasse, ist die Fütterung meiner Katze immer eine große Herausforderung. Ich muss Freunde oder Verwandte bitten, sich um mein Tier zu kümmern. Ich habe im Internet nach Lösungen gesucht und viele Futterautomaten für Haustiere gefunden, aber keine hat mir gefallen. Erstens sind sie sehr teuer. Zweitens eignen sie sich nur für Trockenfutter (meine Katze frisst meist Nassfutter). Drittens sind sie zu groß für meine kleine Wohnung.

Also beschloss ich, einen kompakten, automatischen, für Nassfutter optimierten Fütterer zu bauen. Das Problem bei Nassfutter: Es verdirbt sehr schnell. Nach dem Öffnen einer Dose habe ich maximal einen Tag Zeit, sie zu verbrauchen. Um Platz zu sparen, die Futterqualität zu erhalten und das Projekt so günstig und einfach wie möglich zu gestalten, entwarf ich eine Maschine, die nur eine Mahlzeit ausgibt. Das verschafft mir zwei Tage Freiheit von der Fütterungspflicht.

Funktionsweise

Der Fütterer arbeitet denkbar einfach: Ich fülle den Futternapf (ein leerer Joghurtbecher) mit Futter, schließe den Deckel und stecke das Kabel mit dem Steckdosen-Timer in das 230-V-Netz. Ich stelle den Timer so ein, dass er nach einem Tag den Fütterer mit Strom versorgt. Beim Einschalten öffnet der Schrittmotor den Behälterdeckel. Nach einem Tag kann die Katze ihre Mahlzeit genießen. Wenn ich nach Hause komme, nehme ich den Behälter heraus, reinige ihn, fülle frisches Futter ein, setze ihn wieder ein, schließe den Deckel – und der Zyklus beginnt von vorn.

Zuverlässigen automatischen Katzenfütterer bauen – DIY-Projekt für stressfreie Katzenbetreuung

Alle wichtigen Schritte sind in diesem Video zu sehen:

Code

Arduino-Code für den automatischen Katzenfütterer

Der Code wurde mit der Arduino IDE auf den Arduino Pro Mini hochgeladen (FTDI-Adapter und Mini-B-USB-Kabel erforderlich). Hier ist ein Video zum Upload-Prozess: YouTube-Link

Der Code ist simpel: Im Setup dreht sich der Schrittmotor einmal, in der Hauptschleife wartet er auf einen Tastendruck und dreht dann erneut.

// Automatischer Katzenfütterer von J. Rundhall
// Originalcode für Schrittmotor von R. Jordan Kreindler, Oktober 2016

float RPM;
boolean isButtonpressed = false;
unsigned long timee;

// Pin-Belegung
int buttonPIN = 6;
int aPin = 4;      // IN1: Spule A ein Ende
int bPin = 3;      // IN2: Spule B ein Ende
int aPrimePin = 5; // IN3: Spule A' anderes Ende von Spule A
int bPrimePin = 2; // IN4: Spule B' anderes Ende von Spule B

int one = aPin;
int two = bPin;
int three = aPrimePin;
int four = bPrimePin;

int degrees = 0;
int delay1 = 5;    // Verzögerung zwischen Schritten (ms)
int delay2 = 200;  // Verzögerung nach voller Umdrehung (ms)
int count = 0;
int numberOfRotations = 1;

void setup() {
  Serial.begin(9600);
  pinMode(6, INPUT_PULLUP); // Taster
  pinMode(aPin, OUTPUT);
  pinMode(bPin, OUTPUT);
  pinMode(aPrimePin, OUTPUT);
  pinMode(bPrimePin, OUTPUT);
  
  Serial.println("Clockwise");
  
  // Alle Spulen aus
  digitalWrite(aPin, LOW);
  digitalWrite(bPin, LOW);
  digitalWrite(aPrimePin, LOW);
  digitalWrite(bPrimePin, LOW);
  
  // Initial 20 Schritte
  for(int ii=0; ii<20; ii++) doTurn();
}

void loop() {
  int sensorVal = digitalRead(6);
  
  // Pull-up: HIGH = offen, LOW = gedrückt
  if (sensorVal == LOW) {
    isButtonpressed = true;
  } else {
    if(isButtonpressed) {
      isButtonpressed = false;
      doTurn();
      // Alle Spulen aus
      digitalWrite(aPin, LOW);
      digitalWrite(bPin, LOW);
      digitalWrite(aPrimePin, LOW);
      digitalWrite(bPrimePin, LOW);
    }
  }
}

void doTurn() {
  // Halbschritt-Methode: 8 Schritte pro Zyklus
  // 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) { // Volle Umdrehung
    numberOfRotations++;
    timee = millis();
    RPM = timee / numberOfRotations;
    RPM = (60000.00 / RPM);
    
    if (numberOfRotations >= 10) {
      Serial.print("RPM:");
      Serial.println(round(RPM));
    }
    
    delay(delay2);
    count = 0;
    
    // Richtung nach jeder Umdrehung umkehren
    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);
  }
}

Schaltplan

Zuerst wurde die Elektronik verkabelt. Der Lötkolben kam nur zweimal zum Einsatz, um die Stromkabel mit dem USB-Adapter-PCB zu verbinden. Vor dem Anschluss an das 230-V-Netz empfehle ich, ein Labornetzteil mit Strombegrenzung und Strommessung zu verwenden. Falls etwas falsch verkabelt ist, verhindert dieser Test Schäden am Adapter oder anderen Komponenten. Der Gesamtstromverbrauch sollte unter 1 Ampere bei 5 Volt liegen.

Anschließend wurden die Winkelverbinder montiert, der Behälter modifiziert und an der Maschinenstruktur befestigt.

Zuverlässigen automatischen Katzenfütterer bauen – DIY-Projekt für stressfreie Katzenbetreuung

Herstellungsprozess

  1. DIY Thermocam: Vom Klassenraum-Idee zum globalen Produkt
  2. Umfassender Leitfaden zu automatischen Stangenzuführungen: Funktionen, Vorteile & Best Practices
  3. Automatische Pressen verstehen: Funktion, Vorteile und Anwendungen
  4. Pressenzuführungen: Funktionsweise, Typen & Industrielle Anwendung
  5. Automatische Exzenterpressen: Eigenschaften, Vorteile und Anwendungen
  6. Pneumatische Stangenlader: Kosteneffiziente CNC-Drehautomation
  7. Automatische Rohrbiegemaschinen: Funktionen, Vorteile und Anwendungen verstehen
  8. Automatische Rundtische verstehen: Präzision & Effizienz in der Metallbearbeitung
  9. Automatikgetriebe: Umfassender Leitfaden zu Aufbau, Typen & Funktion
  10. Automatische Zentralschmieranlagen: Funktionsweise, Typen & Nutzen