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

UnidadesNombre del productoPrecio (€/unidad)
1Soldador de estaño tipo lápiz de 30W8,90
1TACKLIFE Mini Amoladora (mini dremel)
1Segueta
1Alicates
1Serrucho
1Pistola de calor
1Papel de lija
1Lija eléctrica
Total8,90

Materiales

UnidadesNombre del productoPrecio (€/unidad)
1Placa Arduino UNO
1Sensor de ultrasonidos
1Led verde
1Led rojo
2Resistencia (220KΩ)
2Breadboard (pequeño)
1Actuador lineal: Hilitand 35mm Stroke Heavy Duty 1000N Actuador eléctrico Motor de elevación eléctrico DC 12V Empuje eléctrico Rod28,99
2Relé de un canal de 5V2,90
1Tubo de estaño (20 g)2,00
1Tubo PVC multicapa (Ø160 mm)15,90
1Limpiador desengrasante tuberías PVC (500 ml)3,80
1Adhesivo PVC para plásticos rígidos (125 ml)1,55
1Tapón PVC ciego (Ø160 mm)2,45
1mtn Spray Hardcore azul avatar (400 ml)5,95
1mtn Spray Hardcore blanco divinidad (400 ml)5,95
1Tablero contrachapado 80 cm x 40 cm x 5 mm4,89
Componentes reciclados varios
Cinta de doble cara
Cinta de carrocero
 Total77,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.

También te podría gustar...

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *