Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

DIY Automatische Kattenvoeder

Componenten en benodigdheden

Timer mechanische uitlaat
× 1
Stappenmotor
× 1
Stappenmotorstuurprogramma L9110S
× 1
Lineaire asondersteuning SHF8
× 1
USB-wandoplader
× 1
SparkFun Arduino Pro Mini 328 - 5V/16MHz
× 1
Mannelijke USB-connectoren naar DIP-adapter
× 1
USB-verlengkabel
× 1
Beugels hoeksteun
× 1

Over dit project

Als ik een paar dagen van huis ga, is het voeren van mijn kat altijd een enorme uitdaging. Ik moet vrienden of familie vragen om voor mijn kat te zorgen. Ik zocht op internet naar een oplossing en vond veel voerdispensers voor huisdieren, maar ik vond ze niet lekker. Ten eerste zijn ze erg duur. Ten tweede zijn ze alleen geschikt voor het hanteren van droog kattenvoer (mycat eet meestal natvoer). Ten slotte zijn ze te groot, ik heb niet veel ruimte in mijn flat. Dus besloot ik een compacte, automatische, voor natvoer geoptimaliseerde kattenvoederbak te bouwen. Het probleem met natvoer is dat het heel snel bederft. Ik realiseerde me dat ik na het openen van een blikvoer voor katten, ik maximaal 1 dag heb om het te gebruiken. Om ruimte te besparen en de voedselkwaliteit te behouden en dit project zo goedkoop en eenvoudig mogelijk te maken, heb ik een machine ontworpen die slechts één maaltijd aan het huisdier kan geven. Het geeft me twee dagen afwezigheid van mijn kattenvoertaken (vrijheid:)).

De feeder werkt heel eenvoudig. Ik vul de voedselcontainer (lege yoghurtdoos) met voedsel, sluit de deur van de container, en sluit de kabel met een stopcontacttimer aan op het 230VAC-netwerk. Ik heb de timer zo ingesteld dat hij na een dag de feeder aanzet. Wanneer het instrument is ingeschakeld, wordt de voedselcontainer geopend door een servomotor. Na een dag gaat de deur open en kan de kat lekker eten. Als ik thuiskom, verwijder ik de voedselcontainer en ruim ik eventuele restjes op en vul ik met vers voedsel, dan zet ik het terug en sluit de bovenkant van de doos en de cyclus kan opnieuw beginnen.…

Alle belangrijke stappen zijn te zien in deze video:

Code

  • Automatic_cat_feeder arduino-code
Automatic_cat_feeder arduino-codeC/C++
Arduino firmware broncode. Ik heb de code geüpload naar het Arduino pro mini-bord met behulp van Arduino IDE-software (https://www.arduino.cc/en/Main/Software), en FTDI-adapter en een Mini-B USB-kabel. Hier is een video over hoe u dit proces kunt doen:https://www.youtube.com/watch?v=78HCgaYsA70
De code is eenvoudig. In de setup zal hij de stepper draaien dan in de hoofdlus hij wacht tot de knop wordt ingedrukt en dan zal hij weer bewegen.
// Automatische kattenvoeder gemaakt door:J. Rundhall//Originele code voor steper van:Schets door R. Jordan Kreindler, geschreven in oktober 2016, om zwevende RPM te roteren;boolean isButtonpressed =false;unsigned long timee;// Pintoewijzingenint buttonPIN =6;int aPin =4; //IN1:spoel a één endint bPin =3; //IN2:spoel b een endint aPrimePin =5; //IN3:spoel aPrime andere kant van spoel is niet bPrimePin =2; //IN4:spoel bPrime andere uiteinde van spoel bint een =aPin;int twee =bPin;int drie =aPrimePin;int vier =bPrimePin;int graden =0;//int vertraging1 =20; // De vertraging tussen elke stap in milliseconden vertraging1 =5; // De vertraging tussen elke stap in milliseconden//int delay2 =50; // De vertraging na elke volledige omwenteling, in milliseconden vertraging2 =200; // De vertraging na elke volledige omwenteling, in millisecondentelling =0; // Het aantal stepsint numberOfRotations =1; // Het aantal keren dat de rotor// 360 graden is gedraaid.void setup() {// Stel alle pinnen in als uitvoer om uitgangssignalen van de Arduino// UNO naar de spoelwikkelingen van de statorSerial.begin (9600) te sturen; // opent seriële poort, stelt datasnelheid in op 9600 bps pinMode (6, INPUT_PULLUP); //ButtonpinMode(aPin, OUTPUT);pinMode(bPin, OUTPUT);pinMode(aPrimePin, OUTPUT);pinMode(bPrimePin, OUTPUT);Serial.println("Met de klok mee");// Begin met alle spoelen offdigitalWrite(aPin, LOW );digitalWrite(bPin, LOW);digitalWrite(aPrimePin, LOW);digitalWrite(bPrimePin, LOW);for(int ii=0;ii<20;ii++) doTurn();}void loop() { //lees de drukknopwaarde in een variabele int sensorVal =digitalRead (6); // Houd er rekening mee dat de pull-up betekent dat de logica van de drukknop omgekeerd is. Het gaat // HOOG wanneer het open is, en LAAG wanneer het wordt ingedrukt. Zet pin 13 aan als de //-knop wordt ingedrukt, en uit als dat niet het geval is:if (sensorVal ==LOW) { isButtonpressed =true; } else { if(isButtonpressed) { isButtonpressed =false; doTurn(); digitalWrite(aPin, LAAG); digitalWrite(bPin, LAAG); digitalWrite(aPrimePin, LAAG); digitalWrite(bPrimePin, LAAG); } }}void doTurn(){ // Stuur stroom naar // 1. De aPin // 2. De aPin en de bPin // 3. De bPin // 4. Dan naar de bPin en de aPrimePin // 5. Dan naar de aPrimePin // 6. Dan naar de aPrimePin en de bPrime Pin // 7. Dan naar de bPrimePin // 8. Dan de bPrimePin en de aPin. // Dus stappen produceren met behulp van de halve stapmethode // 1. Stel de aPin High digitalWrite(aPin, HIGH) in; digitalWrite(bPin, LAAG); digitalWrite(aPrimePin, LAAG); digitalWrite(bPrimePin, LAAG); // Laat enige vertraging tussen het bekrachtigen van de spoelen om // de stappenrotor de tijd te geven om te reageren. vertraging (vertraging1); // Dus, delay1 // 2. Activeer aPin en bPin naar HIGH digitalWrite (aPin, HIGH); digitalWrite(bPin, HOOG); digitalWrite(aPrimePin, LAAG); digitalWrite(bPrimePin, LAAG); // Laat enige vertraging tussen het bekrachtigen van de spoelen om // de stappenrotor de tijd te geven om te reageren. vertraging (vertraging1); // Dus vertraging 1 milliseconden // 3. Stel de bPin in op High digitalWrite (aPin, LOW); digitalWrite(bPin, HOOG); digitalWrite(aPrimePin, LAAG); digitalWrite(bPrimePin, LAAG); // Laat enige vertraging tussen het bekrachtigen van de spoelen om // de stappenrotor de tijd te geven om te reageren. vertraging (vertraging1); // Dus vertraging 1 milliseconden // 4. Stel de bPin en de aPrimePin in op HOOG digitalWrite (aPin, LAAG); digitalWrite(bPin, HOOG); digitalWrite(aPrimePin, HOOG); digitalWrite(bPrimePin, LAAG); // Laat enige vertraging tussen het bekrachtigen van de spoelen om // de stappenrotor de tijd te geven om te reageren. vertraging (vertraging1); // Dus vertraging 1 milliseconden // 5. Stel de aPrime Pin in op high digitalWrite (aPin, LOW); digitalWrite(bPin, LAAG); digitalWrite(aPrimePin, HOOG); digitalWrite(bPrimePin, LAAG); // Laat enige vertraging tussen het bekrachtigen van de spoelen om // de stappenrotor de tijd te geven om te reageren. vertraging (vertraging1); // Dus vertraging 1 milliseconden // 6. Stel de aPrimePin en de bPrime Pin in op HOOG digitalWrite (aPin, LAAG); digitalWrite(bPin, LAAG); digitalWrite(aPrimePin, HOOG); digitalWrite(bPrimePin, HOOG); // Laat enige vertraging tussen het bekrachtigen van de spoelen om // de stappenrotor de tijd te geven om te reageren. vertraging (vertraging1); // Dus vertraging 1 milliseconden // 7. Stel de bPrimePin in op HOOG digitalWrite (aPin, LAAG); digitalWrite(bPin, LAAG); digitalWrite(aPrimePin, LAAG); digitalWrite(bPrimePin, HOOG); // Laat enige vertraging tussen het bekrachtigen van de spoelen om // de stappenrotor de tijd te geven om te reageren. vertraging (vertraging1); // Dus vertraging 1 milliseconden // 8. Stel de bPrimePin en de aPin in op HOOG digitalWrite (aPin, HOOG); digitalWrite(bPin, LAAG); digitalWrite(aPrimePin, LAAG); digitalWrite(bPrimePin, HOOG); // Laat enige vertraging tussen het bekrachtigen van de spoelen om // de stappenrotor de tijd te geven om te reageren. vertraging (vertraging1); // Dus, vertraging 1 milliseconden tellen =tellen + 8; graden =(360,0 * (telling / 400,0)); if ((numberOfRotations % 2) ==1) { // Controleer of het aantal omwentelingen even is Serial.println(" Clockwise "); Serial.println(graden); // Print de hoekpositie in graden } else { // If numberOfRotations is een oneven nummer Serial.println(" Anti-Clockwise "); graden =360 - graden; Serieel.print(" -"); // Druk een minteken af ​​Serial.println (graden); // Print de hoekpositie in graden } if (count ==160) { // Een volledige omwenteling van de stepper numberOfRotations =++numberOfRotations; tijd =millis(); RPM =timee / numberOfRotations; // Gemiddelde tijd van een rotatie RPM =(60000.00 / RPM); // Aantal omwentelingen per minuut if (numberOfRotations>=10) { Serial.print("RPM:"); Serial.println(ronde (RPM)); // Print RPM als geheel getal} vertraging (vertraging 2); // vertraging2/1000 seconde(n) na elke volledige rotatietelling =0; // Reset stappenteller naar nul // Omgekeerde richting na elke draai if ((numberOfRotations) % 2 ==0) { // Controleer of het aantal omwentelingen even is // zo ja omgekeerde richting aPin =vier; bPin =drie; aPrimePin =twee; bPrimePin =één; } else { // Als het aantal omwentelingen een oneven getal is aPin =één; bPin =twee; aPrimePin =drie; bPrimePin =vier; } digitalWrite(aPin, LAAG); digitalWrite(bPin, LAAG); digitalWrite(aPrimePin, LAAG); digitalWrite(bPrimePin, LAAG); } }

Schema's

Eerst deed ik de bekabeling van de elektronica. Ik heb maar twee keer mijn soldeerbout gebruikt om de stroomkabels op de USB-adapterprint aan te sluiten. Voor aansluiting op het 230V-netwerk raad ik aan om een ​​laboratoriumbankvoeding met stroomregeling en stroommeting te gebruiken. als u iets verkeerd bekabeld heeft, kan deze controle u schade aan de adapter of aan een ander onderdeel voorkomen. Het totale verbruik moet minder zijn dan 1 Amper bij 5 Volt.
Ten tweede heb ik de hoeksteunen gemonteerd, vervolgens de doos aangepast en aan de structuur van de machine bevestigd.

Productieproces

  1. Automatisch koffiezetapparaat
  2. Bouw een doe-het-zelf Thermocam
  3. De ins en outs van automatische staafaanvoer
  4. Wat is een automatische persmachine?
  5. Wat is een persfeeder?
  6. Wat is een automatische powerpers?
  7. Wat is een pneumatische staafaanvoer?
  8. Wat is een automatische pijpenbuiger?
  9. Wat is automatische draaitafel?
  10. Automatisch transmissiesysteem begrijpen
  11. Automatisch smeersysteem begrijpen