Nota

¡Hola, bienvenido a la comunidad de entusiastas de SunFounder Raspberry Pi & Arduino & ESP32 en Facebook! Profundiza en Raspberry Pi, Arduino y ESP32 con otros aficionados.

Why Join?

  • Expert Support: Resuelve problemas posventa y desafíos técnicos con la ayuda de nuestra comunidad y equipo.

  • Learn & Share: Intercambia consejos y tutoriales para mejorar tus habilidades.

  • Exclusive Previews: Obtén acceso anticipado a anuncios de nuevos productos y avances exclusivos.

  • Special Discounts: Disfruta de descuentos exclusivos en nuestros productos más recientes.

  • Festive Promotions and Giveaways: Participa en sorteos y promociones festivas.

👉 ¿Listo para explorar y crear con nosotros? Haz clic en [aquí] y únete hoy mismo!

Lección 39: Dispensador automático de jabón

El proyecto del Dispensador Automático de Jabón utiliza una placa Arduino Uno junto con un sensor infrarrojo de evitación de obstáculos y una bomba de agua. El sensor detecta la presencia de un objeto, como una mano, lo que activa la bomba de agua para dispensar jabón.

Componentes Necesarios

Para este proyecto, necesitaremos los siguientes componentes.

Es definitivamente conveniente comprar un kit completo, aquí está el enlace:

Nombre

ELEMENTOS EN ESTE KIT

ENLACE

Kit Universal de Sensores para Creadores

94

BUY

También puedes comprarlos por separado en los siguientes enlaces.

Introducción del Componente

Enlace de Compra

Arduino UNO R3 o R4

Comprar

Módulo Sensor de Evitación de Obstáculos IR

Comprar

Bomba Centrífuga

-

Módulo Driver de Motor L9110

-

Módulo de Fuente de Alimentación

-

Placa de Pruebas

Comprar

Cableado

../_images/Lesson_39_Automatic_soap_dispenser_uno_bb.png

Código

Análisis del Código

La idea principal detrás de este proyecto es crear un sistema de dispensación de jabón sin contacto. El sensor infrarrojo de evitación de obstáculos detecta cuando un objeto (como una mano) está cerca. Al detectar un objeto, el sensor envía una señal al Arduino, que a su vez activa la bomba de agua para dispensar jabón. La bomba permanece activa durante un breve período, dispensando jabón, luego se apaga.

  1. Definición de los pines para el sensor y la bomba

    En este fragmento de código, definimos los pines de Arduino que se conectan al sensor y a la bomba. Definimos el pin 7 como el pin del sensor y usaremos la variable sensorValue para almacenar los datos leídos de este sensor. Para la bomba de agua, usamos dos pines, el 9 y el 10.

    const int sensorPin = 7;
    int sensorValue;
    const int pump1A = 9;
    const int pump1B = 10;
    
  2. Configuración del sensor y la bomba

    En la función setup(), definimos los modos para los pines que estamos usando. El pin del sensor se establece como INPUT ya que se utilizará para recibir datos del sensor. Los pines de la bomba se configuran como OUTPUT ya que enviarán comandos a la bomba. Aseguramos que el pin pump1B comience en estado LOW (apagado), y comenzamos la comunicación serial con una tasa de baudios de 9600.

    void setup() {
      pinMode(sensorPin, INPUT);
      pinMode(pump1A, OUTPUT);
      pinMode(pump1B, OUTPUT);
      digitalWrite(pump1B, LOW);
      Serial.begin(9600);
    }
    
  3. Verificación continua del sensor y control de la bomba

    En la función loop(), el Arduino lee constantemente el valor del sensor utilizando digitalRead() y lo asigna a sensorValue(). Luego imprime este valor en el monitor serial para propósitos de depuración. Si el sensor detecta un objeto, sensorValue() será 0. Cuando esto sucede, pump1A se establece en HIGH, activando la bomba, y un retraso de 700 milisegundos permite que la bomba dispense jabón. La bomba se desactiva luego estableciendo pump1A en LOW, y un retraso de 1 segundo da tiempo al usuario para mover la mano antes de que el ciclo se repita.

    Nota

    Si el sensor no funciona correctamente, ajusta el transmisor y receptor IR para que estén paralelos. Además, puedes ajustar el rango de detección usando el potenciómetro incorporado.

    void loop() {
      sensorValue = digitalRead(sensorPin);
      Serial.println(sensorValue);
      if (sensorValue == 0) {
        digitalWrite(pump1A, HIGH);
        delay(700);
        digitalWrite(pump1A, LOW);
        delay(1000);
      }
    }