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

Selbstgemachter Katzenfutterautomat

Komponenten und Verbrauchsmaterialien

Mechanischer Auslasstimer
× 1
Schrittmotor
× 1
Schrittmotortreiber L9110S
× 1
Linearwellenstütze SHF8
× 1
USB-Ladegerät
× 1
SparkFun Arduino Pro Mini 328 - 5V/16MHz
× 1
USB-Stecker an DIP-Adapter
× 1
USB-Verlängerungskabel
× 1
Brackets Eckstrebe
× 1

Über dieses Projekt

Wenn ich für ein paar Tage von zu Hause weggehe, ist das Füttern meiner Katze immer eine große Herausforderung. Ich muss Freunde oder Verwandte bitten, auf meine Katze aufzupassen. Ich habe im Internet nach einer Lösung gesucht und viele Futterspenderprodukte für Haustiere gefunden, die mir aber nicht gefallen haben. Erstens sind sie sehr teuer. Zweitens sind sie nur für den Umgang mit Katzentrockenfutter geeignet (mycat frisst meistens Nassfutter). Schließlich sind sie zu groß, ich habe nicht so viel Platz in meiner Wohnung. Also beschloss ich, einen kompakten, automatischen, nassfutteroptimierten Katzenfutterautomat zu bauen. Das Problem mit Nassfutter ist, dass es sehr schnell schlecht wird. Mir wurde klar, dass ich nach dem Öffnen eines Dosenfutters für Katzen maximal 1 Tag Zeit habe, es zu verwenden. Um Platz zu sparen und die Futterqualität beizubehalten und dieses Projekt so kostengünstig und einfach wie möglich zu gestalten, habe ich eine Maschine entwickelt, die dem Haustier nur eine Mahlzeit geben kann. Es gibt mir zwei Tage Abwesenheit von meinen Katzenfütterungsaufgaben (Freiheit:)).

Der Feeder funktioniert sehr einfach. Ich fülle den Lebensmittelbehälter (leere Joghurtbox) mit Lebensmitteln auf, schließe die Behältertür und stecke das Kabel mit einer Steckdosenschaltuhr an das 230VAC Netz. Ich habe den Timer so eingestellt, dass er nach einem Tag den Feeder hochfährt. Beim Einschalten des Instruments wird der Lebensmittelbehälter durch einen Servomotor geöffnet. Nach einem Tag öffnet sich die Tür und die Katze kann gut essen. Wenn ich zu Hause ankomme, entferne ich den Futterbehälter und entferne alle Reste und fülle mit frischen Lebensmitteln auf, dann stelle ich ihn zurück und schließe den Deckel der Kiste und der Zyklus kann von vorne beginnen.…

Alle wichtigen Schritte sind in diesem Video zu sehen:

Code

  • Automatic_cat_feeder Arduino-Code
Automatic_cat_feeder Arduino-CodeC/C++
Arduino-Firmware-Quellcode. Ich habe den Code mit Hilfe der Arduino IDE-Software (https://www.arduino.cc/en/Main/Software) und dem FTDI-Adapter und einem Mini-B-USB-Kabel auf das Arduino Pro Mini-Board hochgeladen. Hier ist ein Video zu diesem Vorgang:https://www.youtube.com/watch?v=78HCgaYsA70
Der Code ist einfach. Im Setup wird der Stepper gedreht, in der Hauptschleife wartet er bis der Knopf gedrückt wird und bewegt sich dann wieder. Skizze von R. Jordan Kreindler, geschrieben im Oktober 2016, um RPM zu drehen;boolean isButtonpressed =false;unsigned long timee;// Pin-Zuweisungenint buttonPIN =6;int aPin =4; // IN1:Spule a one endint bPin =3; // IN2:Spule b ein Endeint aPrimePin =5; // IN3:Spule aPrime anderes Ende der Spule aint bPrimePin =2; //IN4:Spule bPrime anderes Ende der Spule bint one =aPin;int two =bPin;int three =aPrimePin;int four =bPrimePin;int degree =0; //int delay1 =20; // Die Verzögerung zwischen jedem Schritt in Millisekundenint delay1 =5; // Die Verzögerung zwischen jedem Schritt in Millisekunden //int delay2 =50; // Die Verzögerung nach jeder vollen Umdrehung in Millisekundenint delay2 =200; // Die Verzögerung nach jeder vollen Umdrehung in Millisekundenint count =0; // Die Anzahl der Schritteint numberOfRotations =1; // Die Anzahl der Umdrehungen des Rotors // um 360 Grad.void setup () {// Alle Pins als Ausgang setzen, um Ausgangssignale vom Arduino // UNO an die Spulenwicklungen des StatorSerial.begin (9600) zu senden; // öffnet den seriellen Port, setzt die Datenrate auf 9600 bps pinMode (6, INPUT_PULLUP); //ButtonpinMode(aPin, OUTPUT);pinMode(bPin, OUTPUT);pinMode(aPrimePin, OUTPUT);pinMode(bPrimePin, OUTPUT);Serial.println(" Clockwise"); // Start mit allen Spulen offdigitalWrite(aPin, LOW );digitalWrite(bPin, LOW);digitalWrite(aPrimePin, LOW);digitalWrite(bPrimePin, LOW);for(int ii=0;ii<20;ii++) doTurn();}void loop() { //Lesen Sie die Drucktastenwert in eine Variable int sensorVal =digitalRead(6); // Denken Sie daran, dass das Pull-up bedeutet, dass die Logik der Drucktaste invertiert ist. Es geht // HIGH, wenn es geöffnet ist, und LOW, wenn es gedrückt wird. Schalten Sie Pin 13 ein, wenn die Taste // gedrückt ist, und deaktivieren Sie sie, wenn dies nicht der Fall ist:if (sensorVal ==LOW) { isButtonpressed =true; } else { if(isButtonpressed) { isButtonpressed =false; doTurn(); digitalWrite (aPin, LOW); digitalWrite (bPin, LOW); digitalWrite (aPrimePin, LOW); digitalWrite (bPrimePin, LOW); } }}void doTurn(){ // Strom senden an // 1. Den aPin // 2. Den aPin und den bPin // 3. Den bPin // 4. Dann den bPin und den aPrimePin // 5. Dann zum aPrimePin // 6. Dann zum aPrimePin und zum bPrime Pin // 7. Dann zum bPrimePin // 8. Dann zum bPrimePin und zum aPin. // So werden Schritte mit der Halbschrittmethode erzeugt // 1. Setzen Sie aPin High digitalWrite (aPin, HIGH); digitalWrite (bPin, LOW); digitalWrite (aPrimePin, LOW); digitalWrite (bPrimePin, LOW); // Lassen Sie eine gewisse Verzögerung zwischen dem Erregen der Spulen zu, damit // der Schrittmotor reagiert. Verzögerung (Verzögerung1); // Also, delay1 // 2. aPin und bPin auf HIGH erregen digitalWrite (aPin, HIGH); digitalWrite (bPin, HIGH); digitalWrite (aPrimePin, LOW); digitalWrite (bPrimePin, LOW); // Lassen Sie eine gewisse Verzögerung zwischen dem Erregen der Spulen zu, damit // der Schrittmotor reagiert. Verzögerung (Verzögerung1); // Also, delay1 Millisekunden // 3. Setzen Sie den bPin auf High digitalWrite (aPin, LOW); digitalWrite (bPin, HIGH); digitalWrite (aPrimePin, LOW); digitalWrite (bPrimePin, LOW); // Lassen Sie eine gewisse Verzögerung zwischen dem Erregen der Spulen zu, damit // der Schrittmotor reagiert. Verzögerung (Verzögerung1); // Also, delay1 Millisekunden // 4. Setzen Sie den bPin und den aPrimePin auf HIGH digitalWrite (aPin, LOW); digitalWrite (bPin, HIGH); digitalWrite (aPrimePin, HIGH); digitalWrite (bPrimePin, LOW); // Lassen Sie eine gewisse Verzögerung zwischen dem Erregen der Spulen zu, damit // der Schrittmotor reagiert. Verzögerung (Verzögerung1); // Also, delay1 Millisekunden // 5. Setzen Sie den aPrime Pin auf hoch digitalWrite (aPin, LOW); digitalWrite (bPin, LOW); digitalWrite (aPrimePin, HIGH); digitalWrite (bPrimePin, LOW); // Lassen Sie eine gewisse Verzögerung zwischen dem Erregen der Spulen zu, damit // der Schrittmotor reagiert. Verzögerung (Verzögerung1); // Also, delay1 Millisekunden // 6. Setzen Sie den aPrimePin und den bPrime Pin auf HIGH digitalWrite (aPin, LOW); digitalWrite (bPin, LOW); digitalWrite (aPrimePin, HIGH); digitalWrite (bPrimePin, HIGH); // Lassen Sie eine gewisse Verzögerung zwischen dem Erregen der Spulen zu, damit // der Schrittmotor reagiert. Verzögerung (Verzögerung1); // Also, delay1 Millisekunden // 7. Setzen Sie den bPrimePin auf HIGH digitalWrite (aPin, LOW); digitalWrite (bPin, LOW); digitalWrite (aPrimePin, LOW); digitalWrite (bPrimePin, HIGH); // Lassen Sie eine gewisse Verzögerung zwischen dem Erregen der Spulen zu, damit // der Schrittmotor reagiert. Verzögerung (Verzögerung1); // Also, delay1 Millisekunden // 8. Setzen Sie den bPrimePin und den aPin auf HIGH digitalWrite (aPin, HIGH); digitalWrite (bPin, LOW); digitalWrite (aPrimePin, LOW); digitalWrite (bPrimePin, HIGH); // Lassen Sie eine gewisse Verzögerung zwischen dem Erregen der Spulen zu, damit // der Schrittmotor reagiert. Verzögerung (Verzögerung1); // Also, delay1 Millisekunden count =count + 8; Grad =(360,0 * (Zählung / 400,0)); if ((numberOfRotations % 2) ==1) {// Überprüfen Sie, ob die Anzahl der Umdrehungen gerade ist Serial.println (" Im Uhrzeigersinn "); Serial.println (Grad); // Winkelposition in Grad ausgeben} else {// Wenn numberOfRotations eine ungerade Zahl ist Serial.println("Anti-Clockwise"); Grad =360 - Grad; Serial.print(" -"); // Drucken Sie ein Minuszeichen Serial.println (Grad); // Winkelposition in Grad ausgeben } if (count ==160) { // Eine volle Umdrehung des Steppers numberOfRotations =++numberOfRotations; timee =millis(); RPM =timee / numberOfRotations; // Durchschnittliche Zeit einer Umdrehung RPM =(60000.00 / RPM); // Anzahl der Umdrehungen pro Minute if (numberOfRotations>=10) {Serial.print("RPM:"); Serial.println (rund (RPM)); // RPM als Integer drucken} delay(delay2); // Verzögerung 2 / 1000 Sekunde (n) nach jeder vollen Umdrehungszählung =0; // Schrittzähler auf Null zurücksetzen // Drehrichtung umkehren nach jeder Umdrehung if ((numberOfRotations) % 2 ==0) { // Prüfen, ob Anzahl der Umdrehungen gerade ist // wenn ja Drehrichtung umkehren aPin =four; bPin =drei; aPrimePin =zwei; bPrimePin =eins; } else { // Wenn die Anzahl der Umdrehungen eine ungerade Zahl ist aPin =eins; bPin =zwei; aPrimePin =drei; bPrimePin =vier; } digitalWrite (aPin, LOW); digitalWrite (bPin, LOW); digitalWrite (aPrimePin, LOW); digitalWrite (bPrimePin, LOW); } }

Schaltpläne

Zuerst habe ich die Verkabelung der Elektronik gemacht. Ich habe nur zweimal meinen Lötkolben verwendet, um die Stromkabel mit der USB-Adapterplatine zu verbinden. Vor dem Anschluss an das 230V Netz empfehle ich ein Labortischnetzteil mit Stromregelung und Strommessung zu verwenden. Wenn Sie etwas falsch verkabelt haben, können Sie durch diese Überprüfung Schäden am Adapter oder an einer anderen Komponente vermeiden. Der Gesamtverbrauch sollte bei 5 Volt weniger als 1 Ampere betragen.
Zweitens habe ich die Eckstreben montiert, dann die Box modifiziert und an der Struktur der Maschine befestigt.

Herstellungsprozess

  1. Bauen Sie eine DIY-Thermocam
  2. Die Vor- und Nachteile automatischer Stangenlader
  3. Was ist eine automatische Pressmaschine?
  4. Was ist ein Pressefeeder?
  5. Was ist eine automatische Kraftpresse?
  6. Was ist ein pneumatischer Stangenlader?
  7. Was ist ein automatischer Rohrbieger?
  8. Was ist ein automatischer Drehtisch?
  9. Automatikgetriebe verstehen
  10. Verständnis des automatischen Schmiersystems