Dispensador Automático de Gel Higienizante Inteligente – Higiene Sin Contacto con Arduino
Componentes y materiales
| Componente | Cantidad | Notas |
|---|---|---|
| Arduino Nano R3 | 1 | |
| Driver DRV8825 para motor paso a paso | 1 | Para motor bipolar |
| Cables jumper | 1 set | |
| Protoboard (2 mini protoboards recomendadas) | 1 | Por espacio limitado |
| Batería 9V + conector | 1 | |
| Resistencia 1kΩ | 1 | Para fin de carrera |
| Condensador electrolítico 100µF | 1 | Estabilización alimentación |
| Motor paso a paso 28BYJ-48 5V (modificado a bipolar) | 1 | Ver paso 6 |
| Tornillos M3 (8-20mm) | 19 | |
| Sensor IR evitación obstáculos | 1 | Detecta mano |
| Fin de carrera KW12-3 (micro con palanca) | 1 | Posición inicial |
| Acoplamiento rígido aluminio 5mm a 8mm | 1 | Motor - husillo |
| Husillo trapezoidal T8 300mm (paso 2mm) + tuerca latón | 1 | Movimiento lineal |
| Interruptor on-off | 1 | |
| Gel higienizante / jabón (cualquier envase) | 1 | |
| Rodamiento 688zz 8x16x5mm | 1 | Soporte husillo |
| Rodamiento lineal LM8UU 8x15x24mm | 1 | Guía prensador |
| Bridas de velcro (2 unidades) | 1 set | Sujeción al dispensador |
Herramientas necesarias
- Impresora 3D (ej. Creality Ender 3 V2)
- Soldador (opcional)
- Sierra de calar/metales (para cortar husillo T8)
Software y servicios
- Arduino IDE
- Programa diseño 3D (opcional, usado Onshape)
- Ultimaker Cura (slicer)
Sobre el proyecto
Durante la pandemia COVID-19, la OMS recomienda lavado constante de manos con gel o jabón. Pero tocar el dispensador anula el propósito y crea riesgo de contagio. Yo, un chico de 14 años, decidí crear una solución con Arduino Nano que fuera barata, universal y fácil de acoplar a casi cualquier dispensador, volviéndolo 100% automático y sin contacto.
Paso 1: Entender el mecanismo
Un motor paso a paso conectado mediante acoplamiento a un husillo trapezoidal. El prensador (impreso en 3D) va roscado en la tuerca del husillo por un lado y guiado por una varilla (también impresa) por el otro. La varilla impide que el prensador gire, forzando movimiento lineal. Así controlamos dirección, velocidad y distancia exacta.
Paso 2: Funcionamiento del dispositivo
- Al encender: el prensador sube hasta activar el fin de carrera (auto-calibración).
- Sensor IR (en soporte impreso) detecta mano a pocos cm → prensador baja distancia fija (aprieta dispensador), espera 2s, sube hasta fin de carrera.
- Cinchas de velcro ajustan el dispensador elegido firmemente.
Paso 3: Componentes
Todos los enlaces en la sección "Things" (Componentes).
Paso 4: Diseño de piezas 3D
Diseñadas en Onshape. Archivos .stl disponibles en "Attachments". Incluyen: base principal, prensador, tapa, carcasa electrónica, soporte sensor IR, varilla guía, garras velcro.
Paso 5: Impresión 3D
Impreso en PLA gris/blanco, 0.2mm altura, 20% relleno. Si no tienes impresora, podrías usar cartón o madera.
Paso 6: Modificación del motor 28BYJ-48 (unipolar → bipolar)
El 28BYJ-48 original es unipolar (~300 g·cm). Convertirlo a bipolar multiplica el par a 800+ g·cm:
- Quita la tapa azul (destornillador).
- Corta la pista central que va al cable rojo (cúter).
- Corta el cable rojo por ambos lados.
- Vuelve a poner la tapa (quizás recortar pestañas).
Ahora necesitas driver bipolar (DRV8825). El motor bipolar aguanta bien los 8.4V mínimos del driver aunque sea motor 5V.
Paso 7: Cinchas velcro DIY (x2)
Corta tiras velcro: una larga (30-40cm) y una corta (4-7cm). Engrapa extremos del mismo tipo (rugoso con rugoso o suave con suave). Necesitas dos unidades.
Paso 8: Circuito electrónico
- Batería 9V → condensador 100µF (línea blanca = GND) → GND Arduino. Positivo → interruptor on-off → Vin Arduino (en anode del condensador).
- Sensor IR: VCC→5V, GND→GND, OUT→D9.
- Fin de carrera: común→5V, normalmente abierto→D8 y a GND vía 1kΩ.
- DRV8825 en protoboard: VMOT→Vin Arduino, GND→GND, DIR→D2, STEP→D3, EN→D4, RST y SLP puenteados.
- Motor 28BYJ-48 modificado: azul→A2, amarillo→A1, naranja→B1, rosa→B2.
Paso 9: Programación
El código (comentado línea a línea en el original) hace:
setup(): configura pines, habilita driver, sube prensador hasta fin de carrera (antihorario), deshabilita driver.loop(): si sensor IR detecta obstáculo (LOW) → habilita driver, gira horario 6000 pasos (baja prensador), espera 2s, gira antihorario paso a paso hasta fin de carrera, deshabilita driver.
const int dirPin = 2, stepPin = 3, enablePin = 4;
const int stepsPerRevolution = 6000; // 2048 = 360°
int endStop = 8, irSensor = 9;
void setup() {
pinMode(endStop, INPUT); pinMode(irSensor, INPUT);
pinMode(stepPin, OUTPUT); pinMode(dirPin, OUTPUT); pinMode(enablePin, OUTPUT);
digitalWrite(enablePin, LOW);
while (digitalRead(endStop) == LOW) {
digitalWrite(dirPin, HIGH); // antihorario
digitalWrite(stepPin, HIGH); delayMicroseconds(2000);
digitalWrite(stepPin, LOW); delayMicroseconds(2000);
}
digitalWrite(enablePin, HIGH);
}
void loop() {
if (digitalRead(irSensor) == 0) { // mano detectada
digitalWrite(enablePin, LOW);
digitalWrite(dirPin, LOW); // horario
for (int x = 0; x < stepsPerRevolution; x++) {
digitalWrite(stepPin, HIGH); delayMicroseconds(2000);
digitalWrite(stepPin, LOW); delayMicroseconds(2000);
}
delay(2000);
while (digitalRead(endStop) == LOW) {
digitalWrite(dirPin, HIGH); // antihorario
digitalWrite(stepPin, HIGH); delayMicroseconds(2000);
digitalWrite(stepPin, LOW); delayMicroseconds(2000);
}
digitalWrite(enablePin, HIGH);
}
}
Paso 10: Montaje final
- Tapa: coloca cincha velcro en ranura, pon soporte encima, atornilla (x2).
- Prensador: inserta rodamiento lineal LM8UU en agujero central, atornilla tuerca T8 (4 tornillos).
- Carcasa electrónica: mete circuito, pasa cables por orificio.
- Soporte sensor IR: atornilla sensor, usa tuerca para ajustar posición.
- Ensamblaje final: inserta rodamiento 688zz en base, coloca husillo T8 (70-82mm, recortar si hace falta) + prensador. Aprieta acoplamiento motor-husillo, atornilla motor (2 tornillos). Coloca fin de carrera. Atornilla tapa a base (5 tornillos). Atornilla soporte IR a frontal (2 tornillos). Atornilla carcasa electrónica a tapa (3 tornillos). ¡Listo!
Conclusión
Accesorio universal que convierte casi cualquier dispensador de gel/jabón en automático y sin contacto. ¡Proyecto terminado!
Código completo (Automatic_Hand_Sanitizer_Transformer.code)
// Definición de pines y pasos por vuelta
const int dirPin = 2;
const int stepPin = 3;
const int enablePin = 4;
const int stepsPerRevolution = 6000; // 2048 = 360°
int endStop = 8;
int irSensor = 9;
void setup() {
pinMode(endStop, INPUT);
pinMode(irSensor, INPUT);
pinMode(stepPin, OUTPUT);
pinMode(dirPin, OUTPUT);
pinMode(enablePin, OUTPUT);
digitalWrite(enablePin, LOW); // Habilita driver
while (digitalRead(endStop) == LOW) { // Auto-calibración al encender
digitalWrite(dirPin, HIGH); // Antihorario (sube)
for (int x = 0; x < 1; x++) {
digitalWrite(stepPin, HIGH); delayMicroseconds(2000);
digitalWrite(stepPin, LOW); delayMicroseconds(2000);
}
}
digitalWrite(enablePin, HIGH); // Deshabilita driver para ahorrar corriente
}
void loop() {
if (digitalRead(irSensor) == 0) { // Mano detectada
digitalWrite(enablePin, LOW);
digitalWrite(dirPin, LOW); // Horario (baja)
for (int x = 0; x < stepsPerRevolution; x++) {
digitalWrite(stepPin, HIGH); delayMicroseconds(2000);
digitalWrite(stepPin, LOW); delayMicroseconds(2000);
}
delay(2000); // Espera 2s dispensando
while (digitalRead(endStop) == LOW) { // Sube hasta fin de carrera
digitalWrite(dirPin, HIGH); // Antihorario
for (int x = 0; x < 1; x++) {
digitalWrite(stepPin, HIGH); delayMicroseconds(2000);
digitalWrite(stepPin, LOW); delayMicroseconds(2000);
}
}
digitalWrite(enablePin, HIGH);
}
}
Piezas personalizadas (impresión 3D)
- Base principal del dispositivo
- Prensador (aprieta el dispensador)
- Tapa del dispositivo
- Carcasa electrónica
- Mecanismo de cincha velcro (necesitas 2)
- Varilla soporte prensador
- Soporte sensor IR
- Garras velcro para tapa (necesitas 2)
Esquemático
Ver imagen del esquema en sección "Schematics".
Proceso de manufactura
- Construye tu Juego "UFO Attack" con Arduino UNO y Pantalla MAX7219
- Control Automático de Tren DIY con Arduino: Simple, Fiable y Personalizable
- Reloj 3D RGB Arduclock – Bluetooth, LED NeoPixel y RTC
- Monitor de Salud Fluvial: Sistema de Calidad de Agua con Arduino
- Construye un Iron Man animado con Arduino: componentes, sensores y guía paso a paso
- Juego interactivo con joystick analógico y LEDs en Arduino
- Find Me: Localizador Inteligente de Objetos con Arduino y Bluetooth
- Controlador de Humidificador DIY con Arduino y Relé: Configuración Segura de Alto Voltaje
- Pequeño Rover con Arduino: Construye tu Robot Autónomo Evita Obstáculos
- Construye un volante joystick personalizado con Arduino para gaming
- Arduino 101: Construye un Podómetro con Sensor DHT11 y Pantalla LCD