Dispensador automático de gel Hidroalcohólico con Arduino

prototipo de dispensador automático de gel de hidroalcohol

Introducción

En estos meses el gel hidroalcohólico se ha convertido en indispensable en nuestro día a día. Dos pequeños servos modelo SG90, un sensor de ultrasonidos HC-SR04 y por supuesto un Arduino UNO, son la base de este sencillo y práctico proyecto. Cuando el sensor detecta la cercanía de la mano, pone en marcha los dos pequeños servos, que al girar 90 grados estiran un sedal que empuja la pequeña bomba del dispensador de gel hidroalcohólico, de esta forma evitaremos tocar el envase para su aplicación.

Vídeo y funcionamiento

Para albergar los motores diseñé esta pieza, se podría hacer muy bien usando FreeCad y la imprimí en la impresora 3D, les dejo el fichero stl y el modelo en step al final del artículo. El diámetro de mi bote de gel era de 64 mm.

Observa que pegué con silicona un trozo de neumático de una bici a los hilos de seda, para que al estirar presionarán de manera correcta el empujador del dosificador, de esta forma evité que resbalara.

Galería de fotos

Pieza soporte 3D

Esquema de conexión

Los servomotores los conecté a los pines 9 y 10 de Arduino y los pines del sensor de ultrasonido: Pin Trigger al 3 y el de Echo al pin 11.  Te dejo a continuación el esquema de conexión y el sketch:

Dispensador automático de gel Hidroalcohólico con Arduino- Proyectos, Arduino

Sketch

//www.tecnosalva.com
//Dispensador automático de Gel Hidroalcohólico

#include <Servo.h>


int trigPin = 3;   // Elegimos el pin 3 para Trig
int echoPin = 11;  // Elegimos el pin 11 para Echo
int MotI= 10; //pin del motor izquierdo
int MotD=9;//pin del motor derecho

Servo m1;  //declaramos los dos servos
Servo m2;

float duracion; 
int distancia;


void setup(){
    Serial.begin(9600);
    
    pinMode(trigPin, OUTPUT);  //Definimos inputs y outputs
    pinMode(echoPin, INPUT);
    
    m1.attach(MotD); //derecho motor1
    m2.attach(MotI); //izquierdo motor 2
    
    m2.write(90); //posicionamos ambos servos en su posición media, 90ª
    m1.write(90);
  }

void loop(){
delay(50);

digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
delayMicroseconds(15);

duracion = pulseIn(echoPin, HIGH);
distancia = (duracion/2)/29.2;

//por si se engancha el SR04, que es frecuente que falle

if (distancia == 0 && digitalRead(echoPin) == LOW) {
    pinMode(echoPin, OUTPUT);
    digitalWrite(echoPin, LOW);
    delay(100);
    pinMode(echoPin, INPUT);   
  }

Serial.print(distancia); //mostramos en pantalla la distancia, mera comprobación
Serial.println("cm");

 if (distancia >=5 && distancia <=30)
 {
    m1.write(0);
    m2.write(180);
    delay(500);
    m1.write(90);
    m2.write(90);
    delay(500);
  }

}

Archivos adjuntos

Deja un comentario