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

Bouw een Betrouwbare Automatische Kattenvoerautomaat – DIY-project voor Zorgenvrije Kattenzorg

Onderdelen en Benodigdheden

Mechanische Stopcontacttimer × 1
Stappenmotor × 1
Stappenmotordriver L9110S × 1
Lineaire Assteun SHF8 × 1
USB-ladesteekker × 1
SparkFun Arduino Pro Mini 328 - 5V/16MHz × 1
USB-mannelijke Connector naar DIP-adapter × 1
USB-verlengkabel × 1
Hoekeisen / Montagewinkels × 1

Over dit Project

Als ik voor een paar dagen weg ben, is het voeren van mijn kat altijd een grote uitdaging. Ik moet vrienden of familie vragen om op mijn kat te letten. Ik zocht een oplossing op internet en vond veel voerdispensers voor huisdieren, maar geen beval me. Ten eerste zijn ze erg duur. Ten tweede zijn ze alleen geschikt voor droogvoer (mijn kat eet voornamelijk natvoer). Ten derde zijn ze te groot – ik heb niet zoveel ruimte in mijn appartement. Daarom besloot ik een compacte, automatische, op natvoer geoptimaliseerde kattenvoerautomaat te bouwen.

Het probleem met natvoer is dat het erg snel bedorven gaat. Na het openen van een blik kattenvoer heb ik maximaal 1 dag om het te gebruiken. Om ruimte te besparen, de voedselkwaliteit te bewaren en dit project zo goedkoop en simpel mogelijk te maken, ontwierp ik een machine die slechts één maaltijd kan serveren. Dat geeft mij twee dagen vrijheid van mijn voerplichten.

De voerautomaat werkt heel simpel. Ik vul de voerbak (een lege yoghurtpot) met voer, sluit het deksel en steek de stekker met de stopcontacttimer in het 230V-net. Ik stel de timer in zodat deze na een dag de voerautomaat onder spanning zet. Zodra het apparaat stroom krijgt, opent een servomotor het deksel van de voerbak. Na een dag opent het deksel en kan de kat een goed maaltijd genieten. Wanneer ik thuiskom, haal ik de voerbak eruit, maak eventuele resten schoon, vul hem met vers voer, zet hem terug, sluit het deksel en de cyclus kan opnieuw beginnen.

Bouw een Betrouwbare Automatische Kattenvoerautomaat – DIY-project voor Zorgenvrije Kattenzorg

Alle belangrijke stappen zijn in deze video te zien:

Code

Automatische_kattenvoerautomaat Arduino-code (C/C++)

De firmware is geüpload naar de Arduino Pro Mini via de Arduino IDE, een FTDI-adapter en een Mini-B USB-kabel. Hier is een video over hoe dit proces werkt: YouTube.

De code is simpel. In de setup() draait de stappenmotor een keer; in de loop() wacht het tot de knop wordt ingedrukt en draait de motor vervolgens opnieuw.

// Automatische kattenvoerautomaat gemaakt door: J. Rundhall
// Oorspronkelijke code voor stappenmotor van: R. Jordan Kreindler, oktober 2016

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

// Pin-toewijzingen
int buttonPIN = 6;
int aPin = 4;      // IN1: spoel a ene uiteinde
int bPin = 3;      // IN2: spoel b ene uiteinde
int aPrimePin = 5; // IN3: spoel aPrime ander uiteinde van spoel a
int bPrimePin = 2; // IN4: spoel bPrime ander uiteinde van spoel b

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

int degrees = 0;
int delay1 = 5;    // Vertraging tussen stappen in ms
int delay2 = 200;  // Vertraging na volledige rotatie in ms
int count = 0;
int numberOfRotations = 1;

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

void loop() {
  int sensorVal = digitalRead(6);
  // Pull-up logica: HIGH = open, LOW = ingedrukt
  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() {
  // Half-stap methode: 8 stappen per cyclus
  // 1. aPin HIGH
  digitalWrite(aPin, HIGH); digitalWrite(bPin, LOW); digitalWrite(aPrimePin, LOW); digitalWrite(bPrimePin, LOW);
  delay(delay1);
  // 2. aPin en 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 en 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 en 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 en 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) { // Volledige rotatie
    numberOfRotations++;
    timee = millis();
    RPM = timee / numberOfRotations;
    RPM = (60000.00 / RPM);
    
    if (numberOfRotations >= 10) {
      Serial.print("RPM:");
      Serial.println(round(RPM));
    }
    delay(delay2);
    count = 0;
    
    // Richting omkeren na elke draai
    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);
  }
}

Schema's

Eerst heb ik de elektronica bekabeld. Ik heb mijn soldeerbout twee keer gebruikt om de voedingskabels aan de USB-adapterprint te verbinden. Voordat je verbindt met het 230V-net, raad ik aan om een labvoeding met stroombegrenzing en stroommeting te gebruiken. Als er iets verkeerd is aangesloten, kan deze controle schade aan de adapter of andere componenten voorkomen. De totale verbruik zou minder dan 1 Ampère op 5 Volt moeten zijn.

Vervolgens monteerde ik de hoekwinkels, bewerkde de doos en bevestigde deze aan de structuur van de machine.

Bouw een Betrouwbare Automatische Kattenvoerautomaat – DIY-project voor Zorgenvrije Kattenzorg

Productieproces

  1. Automatische Druppelkoffiezetapparaat: Geschiedenis, Ontwerp en Toekomstige Trends
  2. DIY Thermocam: Van Klaslokaal Idee Tot Globaal Product
  3. Uitgebreide gids voor automatische staafvoeders: Kenmerken, voordelen en best practices
  4. Automatische Persmachines: Functie, Voordelen en Toepassingen Begrijpen
  5. Persvoeders: Werking, Functies en Industriële Toepassingen
  6. Automatische krachtpressen: kenmerken, voordelen en toepassingen
  7. Pneumatische Stavenvoeders: De Kosten-Effectieve Oplossing voor CNC Draaibank Automatisering
  8. Automatische Buigmachines Begrijpen: Functies, Voordelen en Toepassingen
  9. Automatische Draaitafels Begrijpen: Precisie & Efficiëntie in Metaalbewerking
  10. Uitgebreide Gids voor Automatische Transmissiesystemen
  11. Automatische smeringssystemen: Hoe ze werken en waarom ze belangrijk zijn