Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Manufacturing Technology >> Processo de manufatura

Alimentador automático para gatos faça você mesmo

Componentes e suprimentos

Temporizador de tomada mecânica
× 1
Motor de passo
× 1
Motor de passo L9110S
× 1
Suporte de eixo linear SHF8
× 1
Carregador de parede USB
× 1
SparkFun Arduino Pro Mini 328 - 5 V / 16 MHz
× 1
Conectores USB Macho para Adaptador DIP
× 1
Cabo de extensão USB
× 1
Suportes de canto, colchetes
× 1

Sobre este projeto


Quando saio de casa por alguns dias, alimentar meu gato é sempre um grande desafio. Tenho que pedir a amigos ou parentes que cuidem do meu gato. Procurei uma solução na internet e encontrei muitos dispensadores de comida para animais de estimação, mas não gostei. Em primeiro lugar, são muito caros. Em segundo lugar, eles são adequados apenas para lidar com comida seca de gato (o mycat come comida úmida na maioria das vezes). Por último, são muito grandes, não tenho muito espaço no meu apartamento. Portanto, decidi construir um comedouro compacto, automático e otimizado para alimentos úmidos para gatos. O problema com a comida molhada é que estraga muito rapidamente. Percebi, que depois de abrir uma ração enlatada para gatos, tenho no máximo 1 dia para usá-la. Para economizar espaço e manter a qualidade da comida e tornar este projeto o mais rápido e simples possível, desenvolvi uma máquina, que pode dar apenas uma refeição ao animal. Isso me dará dois dias de ausência de minhas tarefas de alimentação de gatos (liberdade :)).

O alimentador opera de forma muito simples. Encho o recipiente de comida (caixa de iogurte vazia) com comida, fecho a porta do recipiente e ligo o cabo com um temporizador de saída à rede 230VAC. Eu configurei o cronômetro para que depois de um dia ele ligue o alimentador. Quando o instrumento é ligado, o recipiente do alimento é aberto por um servo motor. Depois de um dia, a porta se abrirá e o gato poderá fazer uma boa refeição. Quando chego em casa, retiro o recipiente de comida e limpo o que sobrar e encho com comida fresca, coloco de volta e fecho a tampa da caixa e o ciclo pode começar de novo.…





Todas as etapas principais podem ser vistas neste vídeo:


Código

  • Código arduino Automatic_cat_feeder
Código arduino Automatic_cat_feeder C / C ++
Código-fonte do firmware Arduino. Fiz upload do código para a miniplaca Arduino pro com a ajuda do software Arduino IDE (https://www.arduino.cc/en/Main/Software) e um adaptador FTDI e um cabo USB Mini-B. Aqui está um vídeo sobre como fazer este processo:https://www.youtube.com/watch?v=78HCgaYsA70
O código é simples. Na configuração, ele irá girar o stepper do que no loop principal ele espera até que o botão seja pressionado, então ele se moverá novamente.
 // Alimentador automático de gatos feito por:J. Rundhall // Código original para steper de:Esboço de R. Jordan Kreindler, escrito em outubro de 2016, para rotatefloat RPM; boolean isButtonpressed =false; unsigned long timee; // Pin assignmentsint buttonPIN =6; int aPin =4; // IN1:bobina a um endint bPin =3; // IN2:bobina b um endint aPrimePin =5; // IN3:bobina aPrime outra extremidade da bobina aint bPrimePin =2; // IN4:bobina bPrime outra extremidade da bobina bint one =aPin; int two =bPin; int three =aPrimePin; int four =bPrimePin; int degrees =0; // int delay1 =20; // O atraso entre cada etapa em milissegundos delay1 =5; // O atraso entre cada etapa em milissegundos // int delay2 =50; // O atraso após cada revolução completa, em milissegundos delay2 =200; // O atraso após cada revolução completa, em milissegundos contagem =0; // O número de etapasint numberOfRotations =1; // O número de vezes que o rotor // girou 360 graus.void setup () {// Definir todos os pinos como saída para enviar sinais de saída do Arduino // UNO para os enrolamentos da bobina do statorSerial.begin (9600); // abre a porta serial, define a taxa de dados para 9600 bps pinMode (6, INPUT_PULLUP); // ButtonpinMode (aPin, OUTPUT); pinMode (bPin, OUTPUT); pinMode (aPrimePin, OUTPUT); pinMode (bPrimePin, OUTPUT); Serial.println ("Clockwise"); // Comece com todas as bobinas offdigitalWrite (aPin, LOW ); digitalWrite (bPin, LOW); digitalWrite (aPrimePin, LOW); digitalWrite (bPrimePin, LOW); for (int ii =0; ii <20; ii ++) doTurn ();} void loop () {// ler o valor do botão em uma variável int sensorVal =digitalRead (6); // Lembre-se de que o pull-up significa que a lógica do botão está invertida. Ele vai // HIGH quando é aberto e LOW quando é pressionado. Ligue o pino 13 quando o // botão estiver pressionado e desligue-o quando não estiver: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 () {// Enviar corrente para // 1. O aPin // 2. O aPin e o bPin // 3. O bPin // 4. Em seguida, para o bPin e o aPrimePin // 5. Depois, para aPrimePin // 6. Depois, para aPrimePin e bPrime Pin // 7. Depois, para bPrimePin // 8. Depois, para bPrimePin e aPin. // Produzindo assim as etapas usando o método de meia etapa // 1. Defina o aPin High digitalWrite (aPin, HIGH); digitalWrite (bPin, LOW); digitalWrite (aPrimePin, LOW); digitalWrite (bPrimePin, LOW); // Permita algum atraso entre a energização das bobinas para permitir // o tempo de resposta do rotor de passo. atraso (atraso1); // Então, delay1 // 2. Energize aPin e bPin para HIGH digitalWrite (aPin, HIGH); digitalWrite (bPin, HIGH); digitalWrite (aPrimePin, LOW); digitalWrite (bPrimePin, LOW); // Permita algum atraso entre a energização das bobinas para permitir // o tempo de resposta do rotor de passo. atraso (atraso1); // Então, delay1 milissegundos // 3. Defina o bPin como High digitalWrite (aPin, LOW); digitalWrite (bPin, HIGH); digitalWrite (aPrimePin, LOW); digitalWrite (bPrimePin, LOW); // Permita algum atraso entre a energização das bobinas para permitir // o tempo de resposta do rotor de passo. atraso (atraso1); // Então, delay1 milissegundos // 4. Defina o bPin e o aPrimePin para HIGH digitalWrite (aPin, LOW); digitalWrite (bPin, HIGH); digitalWrite (aPrimePin, HIGH); digitalWrite (bPrimePin, LOW); // Permita algum atraso entre a energização das bobinas para permitir // o tempo de resposta do rotor de passo. atraso (atraso1); // Então, delay1 milissegundos // 5. Defina o Pin aPrime para alto digitalWrite (aPin, LOW); digitalWrite (bPin, LOW); digitalWrite (aPrimePin, HIGH); digitalWrite (bPrimePin, LOW); // Permita algum atraso entre a energização das bobinas para permitir // o tempo de resposta do rotor de passo. atraso (atraso1); // Então, delay1 milissegundos // 6. Defina o aPrimePin e o Pin bPrime como HIGH digitalWrite (aPin, LOW); digitalWrite (bPin, LOW); digitalWrite (aPrimePin, HIGH); digitalWrite (bPrimePin, HIGH); // Permita algum atraso entre a energização das bobinas para permitir // o tempo de resposta do rotor de passo. atraso (atraso1); // Então, delay1 milissegundos // 7. Defina o bPrimePin como HIGH digitalWrite (aPin, LOW); digitalWrite (bPin, LOW); digitalWrite (aPrimePin, LOW); digitalWrite (bPrimePin, HIGH); // Permita algum atraso entre a energização das bobinas para permitir // o tempo de resposta do rotor de passo. atraso (atraso1); // Então, delay1 milissegundos // 8. Defina o bPrimePin e o aPin como HIGH digitalWrite (aPin, HIGH); digitalWrite (bPin, LOW); digitalWrite (aPrimePin, LOW); digitalWrite (bPrimePin, HIGH); // Permita algum atraso entre a energização das bobinas para permitir // o tempo de resposta do rotor de passo. atraso (atraso1); // Então, delay1 milissegundos contagem =contagem + 8; graus =(360,0 * (contagem / 400,0)); if ((numberOfRotations% 2) ==1) {// Verifique se o número de rotações é par Serial.println ("Sentido horário"); Serial.println (graus); // Imprime a posição angular em graus} else {// Se numberOfRotations for um número ímpar Serial.println ("Anti-Clockwise"); graus =360 - graus; Serial.print ("-"); // Imprime um sinal de menos Serial.println (degrees); // Imprime a posição angular em graus} if (count ==160) {// Uma revolução completa do stepper numberOfRotations =++ numberOfRotations; tempo =milis (); RPM =timee / numberOfRotations; // Tempo médio de uma rotação RPM =(60000,00 / RPM); // Número de rotações por minuto if (numberOfRotations> =10) {Serial.print ("RPM:"); Serial.println (redondo (RPM)); // Imprimir RPM como inteiro} delay (delay2); // atraso2 / 1000 segundo (s) após cada rotação completa count =0; // Redefine o contador de passos para zero // Direção reversa após cada volta if ((numberOfRotations)% 2 ==0) {// Verifique se o número de rotações é par // se for assim, direção reversa aPin =four; bPin =três; aPrimePin =dois; bPrimePin =um; } else {// Se o número de rotações for um número ímpar aPin =um; bPin =dois; aPrimePin =três; bPrimePin =quatro; } digitalWrite (aPin, LOW); digitalWrite (bPin, LOW); digitalWrite (aPrimePin, LOW); digitalWrite (bPrimePin, LOW); }} 

Esquemas

Primeiro, fiz o cabeamento da parte eletrônica. Usei apenas duas vezes o meu ferro de soldar para conectar os cabos de alimentação ao PCB do adaptador USB. Antes de conectar à rede de 230 V, eu recomendo usar uma fonte de alimentação de bancada de laboratório com controle e medição de corrente. se você cabear algo incorretamente, esta verificação pode evitar danos ao adaptador ou a outro componente. O consumo total deve ser inferior a 1 Amper a 5 Volt.
Em segundo lugar, montei as braçadeiras de canto, depois modifiquei a caixa e fixei na estrutura da máquina.

Processo de manufatura

  1. Construa uma Thermocam DIY
  2. Os prós e contras dos alimentadores automáticos de barras
  3. O que é uma máquina de prensa automática?
  4. O que é um alimentador de prensa?
  5. O que é uma prensa automática de energia?
  6. O que é um alimentador de barras pneumático?
  7. O que é um dobrador de tubos automático?
  8. O que é mesa rotativa automática?
  9. Entendendo o sistema de transmissão automática
  10. Entendendo o sistema de lubrificação automática