Dosificador Acuario



Este dispositivo que vamos a construir es para automatizar la alimentación de los peces en un acuario. También puede servir para otros animales que consuman un alimento dosificable con este aparato, como pueden ser pequeñas tortugas en un terrario.


Siempre tuve el problema de alimentar a mis peces al salir varios días por vacaciones, por esto se me ocurrió hacer este aparatillo. Normalmente los alimento personalmente para que me cojan cariño. 😄

El aparato consta básicamente de un tolva para almacenar el alimento, que se dosifica a través de una abertura mediante un sinfín en la parte inferior.


Este sinfín se mueve mediante un motor paso a paso, que está controlado por un Arduino Nano programado para realizar una dosificación diaria de alimento.

Pues para empezar tenemos que imprimir las piezas que lo componen.


Tenéis los archivos aquí: Piezas del dosificador en Thingiverse

Son piezas que se imprimen fácilmente por separado sin apenas soportes. Las cajas para los componentes se pegan después en su sitio, por ejemplo, con cianocrilato. Se incluye aun así un archivo de la tolva con las cajas incluidas pero necesita más soportes y utiliza más material.

También necesitaremos estos componentes para fabricar todo el sistema:

- Arduino Nano:

- Motor paso a paso 28BYJ-48 con su placa controladora (driver):


- Potenciómetro de 3 pines mini de 50 K (de 10 K a 50 K valdrían):


- Mini pulsador :

- Una resistencia de 10K, cables, etc...

Para montar el motor introducimos primero la pieza del sinfín con la parte que encaja en el eje del motor hacia él. Una vez hecho así, colocamos el motor encajándolo en la pieza y lo atornillamos a la tolva. Finalmente colocamos el "tapón" del eje en el otro lado. No apretéis en exceso los tornillos ya que el motor puede presionar demasiado dificultando el giro.


El esquema para el conexionado de todos los componentes es el siguiente.
Se alimenta con un simple cargador de móvil conectado al USB del Arduino. El conector es del tipo B, que suele proporcionarse con la placa.

El potenciómetro regula la cantidad que se dosifica, haciendo girar el motor más o menos pasos cada vez que se activa.

El pulsador reinicia el tiempo y realiza una dosificación. La siguiente dosificación sería en ese mismo momento del día siguiente. La pulsación ha de ser al menos de un segundo.

La instalación de los componentes no es complicada. Está un poco justo para no hacerlo muy voluminoso, pero cabe todo bien. Las placas entran en las guías y sólo tienen una posición posible. En la imagen se aprecia como tienen que quedar. Es importante a la hora de pegar las piezas para que no queden al revés.



El Arduino lleva los cables soldados sin los pines para ahorrar espacio. También los de la placa driver, salvo el conector del motor, que va pinchado en su sitio.

Los cables van envueltos en termoretráctil.

También se han acortado los cables del motor, ya que vienen demasiado largos.


Visto desde los laterales con el soporte encajado quedaría así:


Y este es el código para hacerlo funcionar.

Hay que instalar las librerías Time y TimeAlarms para el control del tiempo.

// Dosificador para Acuario * Antonio Naharro * 26/04/2021 #include <Time.h> // Importamos las librerías para control del tiempo #include <TimeAlarms.h> String tiempo; // Cadena que almacena el valor del tiempo en curso String seg; String mint; String hora; String programa; // Cadena con el valor de la programación int pot = analogRead(A0); // Entrada analógica para el potenciómetro // Indicamos a que pines vamos a conectar cada terminal de las bobinas del motor #define IN1 8 #define IN2 9 #define IN3 10 #define IN4 11 int numero_pasos; boolean Direccion = true; int Pasos = 0; //Define el paso actual de la secuencia // Define la secuencia de activación de las bobinas int Paso [ 8 ][ 4 ] = { {1, 0, 0, 0}, {1, 1, 0, 0}, {0, 1, 0, 0}, {0, 1, 1, 0}, {0, 0, 1, 0}, {0, 0, 1, 1}, {0, 0, 0, 1}, {1, 0, 0, 1} }; void setup() { Serial.begin(115200); pinMode(2, INPUT); // Define pin de entrada para el pulsador pinMode(IN1, OUTPUT); pinMode(IN2, OUTPUT); pinMode(IN3, OUTPUT); pinMode(IN4, OUTPUT); // Configurar la fecha / hora cada vez que se reinicia el arduino // Configurar al 01 de enero de 2020 a las 00:00:02 setTime(00, 00, 02, 01, 01, 20); programa = "0:0:1"; // Define la programación del evento de activación } void loop() { // Mostrar el reloj en el monitor serie digitalClockDisplay(); seg = second(); mint = minute(); hora = hour(); tiempo = (hora + ":" + mint + ":" + seg); pot = analogRead(A0); Serial.println(pot); // Al activar el pulsador se reinicia el tiempo if (digitalRead(2) == HIGH) { setTime(00, 00, 00, 01, 01, 20); Serial.println("pulsado"); } // Cuando coincide el tiempo en curso con el del programa se activa el evento if (programa == tiempo) { Evento(); } // Esperar 1 segundo y procesar los eventos mientras tanto Alarm.delay(1000); } void Evento() { Serial.println("Evento de las 0:00:01"); numero_pasos = pot * 4; // Configura el giro del motor en función al potenciómetro // Giro del motor while (numero_pasos > 0) { paso_A_Paso() ; // Avanza un paso numero_pasos-- ; // Un paso menos delay (1) ; Serial.println(numero_pasos); } delay(1000); //Pequeña pausa // Desconecta las bobinas al terminar digitalWrite(8, LOW); digitalWrite(9, LOW); digitalWrite(10, LOW); digitalWrite(11, LOW); Serial.println("Fin serie"); } // Funciones para la impresion del reloj en monitor serie de arduino void digitalClockDisplay() { Serial.print(hour()); printDigits(minute()); printDigits(second()); Serial.println(); } void printDigits(int digits) { Serial.print(":"); if (digits < 10) Serial.print('0'); Serial.print(digits); } void paso_A_Paso() //Avanza un paso { //Usamos la variable Pasos para saber //en cuál de los 8 estados posibles de //la matriz estamos y escribimos en las //bobinas los valores que corresponden a esa situación. digitalWrite( IN1, Paso[Pasos][0] ); digitalWrite( IN2, Paso[Pasos][1] ); digitalWrite( IN3, Paso[Pasos][2] ); digitalWrite( IN4, Paso[Pasos][3] ); direccion_Giro(); } void direccion_Giro() { if (Direccion) Pasos++; else Pasos--; Pasos = (Pasos + 8) % 8 ; }

Finalmente, aquí tenéis un pequeño video de la prueba del aparato.


Espero que os guste y os resulte de utilidad, o como base para otros proyectos.

Un saludo a vosotros y a vuestras mascotas.

No hay comentarios:

Publicar un comentario