Construye un Comedero Automático para Gatos Fiable – Proyecto DIY para Cuidado Sin Estrés
Componentes y Suministros
| Componente | Cantidad |
|---|---|
| Temporizador Mecánico de Enchufe | 1 |
| Motor Paso a Paso (Stepper) | 1 |
| Controlador de Motor Paso a Paso L9110S | 1 |
| Soporte de Eje Lineal SHF8 | 1 |
| Cargador USB de Pared | 1 |
| SparkFun Arduino Pro Mini 328 - 5V/16MHz | 1 |
| Adaptador USB Macho a DIP | 1 |
| Cable de Extensión USB | 1 |
| Escuadras de Refuerzo (Corner Braces) | 1 |
Sobre el Proyecto
Cuando me ausento de casa unos días, alimentar a mi gato siempre es un gran reto. Tengo que pedir a amigos o familiares que se ocupen de él. Busqué soluciones en internet y encontré muchos dispensadores automáticos, pero ninguno me convencía: son caros, solo sirven para pienso seco (mi gato come principalmente comida húmeda) y ocupan demasiado espacio en mi piso.
Decidí construir mi propio comedero compacto, automático y optimizado para comida húmeda. El problema de la comida húmeda es que se estropea rápido: una vez abierta la lata, tengo como máximo un día para usarla. Para ahorrar espacio, mantener la calidad del alimento y hacer el proyecto lo más barato y simple posible, diseñé una máquina que dispensa una sola ración. Esto me da dos días de libertad respecto a la alimentación del gato.
Funcionamiento
El funcionamiento es muy sencillo: lleno el recipiente (una caja de yogur vacía) con comida, cierro la tapa y conecto el cable con el temporizador de enchufe a la red de 230 VAC. Programo el temporizador para que al día siguiente alimente al gato. Cuando el dispositivo recibe corriente, el recipiente se abre mediante el motor paso a paso. Tras un día, la compuerta se abre y el gato puede comer. A mi vuelta, retiro el recipiente, limpio los restos, lo relleno con comida fresca, lo coloco de nuevo, cierro la tapa y el ciclo puede reiniciarse.
Todos los pasos principales pueden verse en este video:
Código
Código para Arduino (C/C++)
El firmware se sube a la placa Arduino Pro Mini usando el IDE de Arduino (arduino.cc), un adaptador FTDI y un cable Mini-B USB. Aquí hay un video sobre cómo hacerlo: YouTube.
El código es simple: en el setup gira el motor paso a paso y en el loop espera a que se pulse el botón para girar de nuevo.
// Comedero automático para gatos por: J. Rundhall
// Código original para stepper por: R. Jordan Kreindler, octubre 2016
float RPM;
boolean isButtonpressed = false;
unsigned long timee;
// Asignación de pines
int buttonPIN = 6;
int aPin = 4; // IN1: extremo bobina a
int bPin = 3; // IN2: extremo bobina b
int aPrimePin = 5; // IN3: otro extremo bobina a
int bPrimePin = 2; // IN4: otro extremo bobina b
int one = aPin;
int two = bPin;
int three = aPrimePin;
int four = bPrimePin;
int degrees = 0;
int delay1 = 5; // Retardo entre pasos (ms)
int delay2 = 200; // Retardo tras vuelta completa (ms)
int count = 0;
int numberOfRotations = 1;
void setup() {
Serial.begin(9600);
pinMode(6, INPUT_PULLUP); // Botón
pinMode(aPin, OUTPUT);
pinMode(bPin, OUTPUT);
pinMode(aPrimePin, OUTPUT);
pinMode(bPrimePin, OUTPUT);
Serial.println(" Clockwise");
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);
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() {
// Método de medio paso (8 pasos por ciclo)
// 1. aPin HIGH
digitalWrite(aPin, HIGH); digitalWrite(bPin, LOW); digitalWrite(aPrimePin, LOW); digitalWrite(bPrimePin, LOW); delay(delay1);
// 2. aPin y 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 y 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 y 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 y 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) { // Vuelta completa
numberOfRotations++;
timee = millis();
RPM = timee / numberOfRotations;
RPM = (60000.00 / RPM);
if (numberOfRotations >= 10) {
Serial.print("RPM:");
Serial.println(round(RPM));
}
delay(delay2);
count = 0;
// Invertir dirección tras cada vuelta
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);
}
}
Esquemáticos y Montaje
Primero realicé el cableado de la electrónica. Solo usé el soldador dos veces para conectar los cables de alimentación al PCB del adaptador USB. Antes de conectar a la red de 230V, recomiendo usar una fuente de laboratorio con control de corriente para verificar el cableado; si algo está mal, esto puede evitar daños. El consumo total debe ser inferior a 1 Amperio a 5 Voltios.
Después, ensamblé las escuadras de refuerzo, modifiqué la caja y la fijé a la estructura de la máquina.
Proceso de manufactura
- Cafetera de goteo automática: historia, diseño y tendencias futuras
- Thermocam DIY: de idea en el aula a producto global
- Guía completa de alimentadores de barras automáticos: Características, beneficios y mejores prácticas
- Máquinas de Prensa Automáticas: Funcionamiento, Beneficios y Aplicaciones
- Entendiendo los Alimentadores de Prensa: Mecanismo, Función y Aplicaciones Industriales
- Comprender las Prensas de Potencia Automáticas: Características, Beneficios y Aplicaciones
- Alimentadores de barras neumáticos: solución rentable para automatización de tornos CNC
- Entendiendo las Curvadoras de Tubos Automáticas: Funciones, Beneficios y Aplicaciones
- Entendiendo las Mesas Rotativas Automáticas: Precisión y Eficiencia en Metalmecánica
- Guía Completa de Sistemas de Transmisión Automática
- Sistemas de Lubricación Automática: Cómo Funcionan y Por Qué Son Importantes