Dispensador de gel automático con Arduino
Introducción
El objetivo de esta práctica es diseñar e implementar un sistema empotrado y de tiempo real.
Para cumplir dicho objetivo, nuestro equipo ha diseñado e implementado un dispensador de jabón automático. La idea surge a partir de la situación actual relativa a la pandemia provocada por el COVID-19, ya que nos parece deseable que existan este tipo de dispensadores automáticos que no obligan a que las personas deban presionarlo y mantener un contacto con el mismo que pueda suponer un riesgo de contagio (sobre todo, si el dispensador está colocado en un sitio público).
Descripción del proyecto
Nuestro proyecto consiste en una estructura que actúa como soporte de un dispensador de jabón líquido. Puede ser un dispensador cualquiera siempre y cuando cumpla con las dimensiones del soporte. Dicho soporte cuenta con un circuito incorporado que automatiza el funcionamiento de un pistón que presiona automáticamente la boquilla del dispensador cuando los sensores detectan que una persona acerca sus manos para recibir gel. Además, el soporte cuenta con dos luces LED, una verde y otra roja, que indican cuándo el mecanismo está listo para funcionar y expulsar gel (verde) o cuándo hay que esperar (rojo).
Materiales empleados
A continuación, se proporcionan fotografías de algunos de los materiales destacados empleados:
- Tablero, bote de jabón, pistón, tapón PVC
- Relés
- Tubo de PVC de 160 mm de diámetro
Herramientas empleadas
- TACKLIFE Mini Amoladora (mini dremel)
- Pistola de calor
- Segueta, soldador de estaño, alicates
- Serrucho, pistola de silicona caliente, papel de lija, lija eléctrica
Presupuesto
Los materiales que ya poseíamos no se han contabilizado en el presupuesto, aunque sí que se enumeran.
Herramientas
Unidades | Nombre del producto | Precio (€/unidad) |
1 | Soldador de estaño tipo lápiz de 30W | 8,90 |
1 | TACKLIFE Mini Amoladora (mini dremel) | – |
1 | Segueta | – |
1 | Alicates | – |
1 | Serrucho | – |
1 | Pistola de calor | – |
1 | Papel de lija | – |
1 | Lija eléctrica | – |
Total | 8,90 |
Materiales
Unidades | Nombre del producto | Precio (€/unidad) |
1 | Placa Arduino UNO | – |
1 | Sensor de ultrasonidos | – |
1 | Led verde | – |
1 | Led rojo | – |
2 | Resistencia (220KΩ) | – |
2 | Breadboard (pequeño) | – |
1 | Actuador lineal: Hilitand 35mm Stroke Heavy Duty 1000N Actuador eléctrico Motor de elevación eléctrico DC 12V Empuje eléctrico Rod | 28,99 |
2 | Relé de un canal de 5V | 2,90 |
1 | Tubo de estaño (20 g) | 2,00 |
1 | Tubo PVC multicapa (Ø160 mm) | 15,90 |
1 | Limpiador desengrasante tuberías PVC (500 ml) | 3,80 |
1 | Adhesivo PVC para plásticos rígidos (125 ml) | 1,55 |
1 | Tapón PVC ciego (Ø160 mm) | 2,45 |
1 | mtn Spray Hardcore azul avatar (400 ml) | 5,95 |
1 | mtn Spray Hardcore blanco divinidad (400 ml) | 5,95 |
1 | Tablero contrachapado 80 cm x 40 cm x 5 mm | 4,89 |
– | Componentes reciclados varios | – |
– | Cinta de doble cara | – |
– | Cinta de carrocero | – |
Total | 77,28 |
Total: 86,18 €
Diseño del circuito
El circuito se planteó en dos partes: por una parte, tenemos el sensor de distancia que tomará la distancia hasta el objeto más cercano y los LEDs que indicarán la disponibilidad del sistema (si está disponible o no para expulsar jabón); por otra parte, tenemos el circuito del actuador: cuenta con dos relés que nos permiten invertir la polaridad de los cables del pistón para que se contraiga o se extienda según se detecta o no un objeto a menos distancia de la determinada.
Montaje del soporte
En esta sección se mostrarán los pasos seguidos para montar la estructura del dispensador de gel de forma resumida, el montaje del soporte se describe más detalladamente en el vídeo.
0. Planteamiento inicial
1. Construcción de la base y la estructura exterior
2. Incorporación del circuito
3. Agujeros y mecanizados
4. Pegado
5. Montaje del pulsador
6. Pintura
Código
#define PIN_TRIG 12
#define PIN_ECHO 11
const int pinRelayA = 8;
const int pinRelayB = 9;
const int ledRojo = 4;
const int ledVerde = 6;
long duracion,cm;
//Encender el relay A y apagar el B
//esto extenderá el actuador
void extendActuator()
{
digitalWrite(pinRelayB, LOW);
delay(250);
digitalWrite(pinRelayA, HIGH);
}
//Apagar el relay A y encender el B
//esto retraerá el actuador
void retractActuator()
{
digitalWrite(pinRelayA, LOW);
delay(250);
digitalWrite(pinRelayB, HIGH);
}
//Apagar ambos relays
//Esto frena el actuador
void stopActuator()
{
digitalWrite(pinRelayA, LOW);
digitalWrite(pinRelayB, LOW);
}
void setup(){
Serial.begin(9600);//Se habilita el monitor serie
pinMode(PIN_TRIG,OUTPUT);//Se define el puerto de salida hacia el HC SR 04
pinMode(PIN_ECHO,INPUT);//Se define el puerto de entrada desde el HC SR 04
// establecer los pines de los relays
pinMode(pinRelayA, OUTPUT);
pinMode(pinRelayB, OUTPUT);
// establecer los relays a LOW
digitalWrite(pinRelayA, LOW);
digitalWrite(pinRelayB, LOW);
// inicializar leds
pinMode(ledVerde, OUTPUT);
pinMode(ledRojo, OUTPUT);
digitalWrite(ledRojo, LOW);
digitalWrite(ledVerde, HIGH);
}
void loop(){
digitalWrite(PIN_TRIG,LOW);
delayMicroseconds(5);
digitalWrite(PIN_TRIG,HIGH); // Se lanza una ráfaga de ultrasonidos por el sensor de ultrasonidos
delayMicroseconds(10);
digitalWrite(PIN_TRIG,LOW);
duracion = pulseIn(PIN_ECHO,HIGH); // Devuelve el tiempo que ha tardado en volver la ráfaga
cm = (duracion/2)/29.1; // Convertir el tiempo en distancia hasta el objeto cercano
Serial.println(cm); // Mostramos la distancia por el monitor serie para hacer pruebas
if(cm <= 5){
// Se ha detectado una mano cerca
digitalWrite(ledVerde, LOW); // apagar el led verde
digitalWrite(ledRojo, HIGH); // encender el led rojo: el sistema está funcionando
retractActuator(); // El pistón se contrae y aprieta el bote
delay(15000); // Tiempo que tarda en contraerse el actuador hasta la posición deseada
stopActuator(); // El pistón deja de contraerse
extendActuator(); // El pistón se extiende para volver a su posición inicial
delay(17000); // Tiempo que tarda en extenderse el actuador
stopActuator();
delay(1000);
digitalWrite(ledRojo, LOW); // apagar el led rojo
digitalWrite(ledVerde, HIGH); // encender el led verde: el sistema está listo de nuevo
}
}
Posibles mejoras
Debido a las limitaciones encontradas en lo relativo a la capacidad de Arduino UNO para incorporar un gran número de componentes, nos hemos visto obligados a descartar algunas funcionalidades de nuestro proyecto. Estas ideas se enumerarán a continuación a modo de posible mejora en un proyecto futuro que contase con una placa más avanzada (por ejemplo, la placa Arduino MEGA 2560):
- Circuito con un contador incorporado que contase la cantidad de veces que se ha accionado el mecanismo y cuántas veces más se puede accionar sin que el contenido del dispensador se vacíe. Además, se podría incorporar un pequeño altavoz o zumbador que avisasen cuando esto pasase.
Además, la estructura y funcionamiento del sistema también se puede mejorar incorporando los siguientes cambios:
- Conseguir un pistón más pequeño y fuerte para presionar más rápido el disipador.
- Conseguir componentes específicos, circuitos integrados personalizados o ASICs de tal forma que se pueda reducir el espacio que ocupan los circuitos en nuestro proyecto actual, y que el tamaño general de la estructura sea menor.
- Mejorar el sistema de ventilación.
Vídeo
En este vídeo, describimos en profundidad el proyecto: circuito, software y montaje. Además, mostramos el sistema funcionando y como puede ser usado por una persona real.