Control de pienso en un silo
Integrantes
César González San Martín
Jesús del Moral Gómez
Sergio de la Garma López
Introducción
Nuestro proyecto va dirigido a uno de los sectores olvidados de nuestra sociedad, el sector primario, y más concretamente al sector porcino de producción intensiva.
España se encuentra como 3º productor mundial de porcino y 2º a nivel europeo, debido a intervenciones gubernamentales y falta de atractivo del sector, el número de productores se reduce año tras año, en cambio el consumo per cápita de carne de cerdo se sostiene y tiende a crecer, lo que hace que este negocio se convierta en un sector rentable a futuro para sus productores, y la inversión en tecnología sea un factor a tener en cuenta para ellos.
Para hacernos una idea de la magnitud del crecimiento del sector, en los últimos 10 años el precio del kilo de cerdo ha llegado a duplicarse y ha pasado de menos de 1euro/kilo el precio de costo en 2015 a llegar en 2024 a los 2euros/kilos.
Objetivo
Nuestro proyecto busca solucionar dos inconvenientes que sufrimos muchos ganaderos día tras día, los cuales están relacionados con la forma en la que debemos alimentar a los animales. A día de hoy las granjas cuentas con silos de pienso conectados por tubos a cada una de las naves y sus respectivos comederos, donde se alimentan los animales. Estos tubos en su interior poseen un sinfín al que le da fuerza un motor y por el cual circula el pienso. Este motor posee una placa de presión en su interior que indica que todas las tolvas de los animales están llenas y por tanto que el proceso ha finalizado.
Durante este proceso surge un problema a tener en cuenta y se trata de que el pienso debido a su composición tiende a compactarse y atascar el silo, por tanto el ganadero debe de encargarse manualmente de desatascar el pienso y si este no se da cuenta, puede enfrentarse a problemas como fundir el motor y que los animales no ingieran alimento hasta el próximo día.
Es aquí donde surge nuestra idea, la cual trata de implantar unos vibradores en la boca del silo que hagan mover el pienso y desatascarlo, esto no solo evita los dos inconvenientes mencionados anteriormente, sino que también liberan al ganadero a desempeñar otras funciones y por tanto aumentar su productividad.
Materiales utilizados
Sensor de distancia analógico IR (ARCELI GP2Y0A21YK0F): Este sensor permite medir distancias entre 10 y 80 cm. Se conecta a la placa Arduino a través de tres pines: Vo (salida de voltaje), GND (tierra) y VCC (alimentación de 5VDC). Es el componente que nos indica si está pasando pienso o no.
Vibradores: Utilizamos cuatro vibradores que operan a una velocidad de aproximadamente 11000 rpm y requieren una alimentación de 3V cada uno. Cada vibrador está conectado a un transistor NPN para su control. Además, todos los vibradores están conectados al pin 8 de la placa Arduino, lo que nos permite apagarlos o encenderlos en función de la señal que recibamos.
Dispensador de pienso: Utilizamos un dispensador de pienso para madres, el cual simula un silo en miniatura y su uso en el día a día es controlar la comida que ingiere cada animal a diario y según sus necesidades.
Botón: Se emplea un botón proporcionado por el kit de Arduino. Este botón se utiliza para activar y desactivar el programa, permitiendo al usuario controlar las acciones del sistema. Se conecta al pin 9 de la placa arduino.
Transistores: Los transistores NPN en este proyecto actúan como interruptores electrónicos controlados por la placa Arduino. Al aplicar un voltaje adecuado a la base del transistor, se permite que una corriente más grande fluya desde el colector hacia el emisor, activando así los vibradores conectados a ellos.
Al conectar los vibradores a los transistores NPN, podemos controlar su funcionamiento en respuesta a las lecturas del sensor de distancia.
Pelota de tenis: La función de la pelota es impedir que se caiga el pienso mientras no estéen funcionamiento el silo, pero una vez pulsamos el botón, se levanta, permitiendo el paso del pienso.
Patas de mueble: Utilizamos 4 patas de longitud de 1 metro atornilladas al dispensador que servía de soporte.
Costes
Vibradores: | 8,19 euros |
Sensor de distancia analógico IR | 8,99 euros |
Dispensador de pienso: | 45,17 euros |
Botón: | 0 euros |
Transistores: | 0,53 euros |
Patas de mueble: | 7,5 euros |
Software
Código:
// Definir los pines
int sensorPin = A0; // Pin del sensor
int transistorMotorPin = 2; // Pin del transistor para el motor
int transistorVibradoresPin = 8; // Pin del transistor para los vibradores
int botonPin = 9; // Pin del botón
boolean programaActivo = false; // Variable para controlar si el programa está activo
boolean primerUso = true; // Variable para identificar si es la primera activación
boolean ultimoEstadoBoton = false; // Variable para almacenar el estado previo del botón
unsigned long tiempoInicio = 0; // Variable para almacenar el tiempo de inicio
void setup() {
pinMode(transistorMotorPin, OUTPUT); // Configura el pin del transistor del motor como salida
pinMode(transistorVibradoresPin, OUTPUT); // Configura el pin del transistor de los vibradores como salida
pinMode(botonPin, INPUT_PULLUP); // Configura el pin del botón como entrada con resistencia de pull-up interna
Serial.begin(9600); // Inicia la comunicación serial
}
void loop() {
// Lee el estado actual del botón
boolean estadoBoton = digitalRead(botonPin) == LOW;
// Verifica si el estado del botón ha cambiado desde el último ciclo
if (estadoBoton != ultimoEstadoBoton) {
delay(50); // Pequeño retraso para evitar el rebote del botón
ultimoEstadoBoton = estadoBoton;
// Cambio en el estado del botón
if (estadoBoton) {
if (!programaActivo) {
programaActivo = true; // Activa el programa
primerUso = true;
tiempoInicio = millis(); // Almacena el tiempo de inicio
digitalWrite(transistorMotorPin, HIGH); // Enciende el motor
Serial.println("Motor activado durante 7 segundos");
} else {
// Termina el programa si ya estaba activo y se vuelve a pulsar el botón
programaActivo = false;
digitalWrite(transistorMotorPin, LOW);
digitalWrite(transistorVibradoresPin, LOW);
Serial.println("Programa terminado y todo apagado");
}
}
}
// Control del motor y los vibradores basado en el tiempo
if (programaActivo && primerUso) {
unsigned long tiempoTranscurrido = millis() - tiempoInicio;
if (tiempoTranscurrido >= 7000) {
digitalWrite(transistorMotorPin, LOW); // Apaga el motor
primerUso = false; // Marca el primer uso como completado
Serial.println("Motor apagado, control pasando a sensor y vibradores");
}
} else if (programaActivo && !primerUso) {
int sensorValue = analogRead(sensorPin); // Lee el valor del sensor
Serial.print("Valor del Sensor: ");
Serial.println(sensorValue);
if (sensorValue > 630) {
digitalWrite(transistorVibradoresPin, HIGH); // Enciende los vibradores si el sensor es alto
Serial.println("Vibradores activados");
} else {
digitalWrite(transistorVibradoresPin, LOW); // Apaga los vibradores si el sensor es bajo
}
}
}
Respecto al código que hemos tenido que realizar, aqui dejamos una breve explicación de él:
-Definición de Pines: Los pines del sensor, el motor, los vibradores y el botón se conectan.
-Configuración Inicial: Los pines del motor y los vibradores se establecen como salidas, mientras que el pin del botón se configura como entrada con una resistencia de pull-up interna. La comunicación serial se inicia también.
-Bucle Principal (loop):
Lectura del Botón: El estado actual del botón se lee.
Detección de Cambio en el Botón: Se comprueba si ha cambiado el estado del botón desde la última iteración. Se introduce una breve demora para prevenir rebotes.
-Acciones según el Estado del Botón:
Si no está activo el programa y se pulsa el botón, entonces se activa el programa. El motor se enciende por 7 segundos.
Si se pulsa el botón y el programa está activo, entonces se termina. El motor y los vibradores se apagan.
-Control del Motor y Vibradores:
Si el programa está en funcionamiento y se está ejecutando por primera vez, el motor permanece encendido durante 7 segundos, mientras que los vibradores y el sensor infrarojos están apagados, hasta que se cumplen los 7 segundos, dando un margen para que no se solapen. Cuando se cumple ese tiempo, los vibradores y el sensor se encienden y el motor se apaga.
Tras la ejecución inicial, el control es transferido al sensor y a los vibradores. Si el sensor tiene un valor alto (más de 630), los vibradores se encienden; de lo contrario, se apagan.
Al pulsar un botón, este programa activa un motor durante cierto tiempo y luego controla vibradores según la lectura de un sensor.
Mejoras y problemas encontrados
Potencia de los vibradores: Debido a las limitaciones de voltaje de la propia placa, los vibradores no debían de tener más de 3V cada uno para no recalentarla y debido a esta limitación surgió un problema relacionado con la falta de potencia, por tanto una mejora a tener en cuenta es el aumento de potencia.
Motor: No se ajusta a las características que necesitábamos, por un lado no encontrábamos un motor con la potencia necesaria para levantar la bola que soportaba, y en segundo lugar que ese motor fuera capaz de mover la bola hacia arriba para comenzar el programa y hacia abajo de nuevo a la hora de finalizar el proceso.
Vídeo funcionamiento
Complementamos el proyecto con un vídeo de su funcionamiento: