Despachador de agua automatico con sensor

Este proyecto tiene como objetivo crear un dispensador de agua automático utilizando un sensor ultrasónico y una placa Arduino. El sistema activa una bomba de agua cuando detecta la proximidad de un objeto (como una mano) a una distancia específica, proporcionando agua de manera higiénica y sin contacto.
despTexto preformateado

  • Arduino Uno: Unidad central de control.
  • Sensor Ultrasónico HC-SR04: Para detectar la proximidad de un objeto.
  • Relé: Actúa como un interruptor controlado electrónicamente para la bomba de agua.
  • Bomba de Agua: Para dispensar agua cuando se activa.
  • Fuente de Alimentación: Para proporcionar energía al Arduino, al relé y a la bomba de agua.
  • Protoboard y Cables de Conexión: Para realizar las conexiones eléctricas.

Conexiones

Sensor Ultrasónico HC-SR04

  • VCC del HC-SR04 a 5V del Arduino.
  • GND del HC-SR04 a GND del Arduino.
  • Trig del HC-SR04 al pin 9 del Arduino.
  • Echo del HC-SR04 al pin 10 del Arduino.

Módulo Relé

  • VCC del módulo relé a 5V del Arduino.
  • GND del módulo relé a GND del Arduino.
  • IN del módulo relé al pin 7 del Arduino.

Bomba de Agua

  • Cable positivo de la bomba al COM del módulo relé.
  • NO (Normally Open) del módulo relé a la fuente de alimentación positiva para la bomba.
  • Cable negativo de la bomba a la fuente de alimentación negativa.
// Definimos los pines del sensor ultrasónico HC-SR04
const int trigPin = 9; // Pin para el Trigger del sensor
const int echoPin = 10; // Pin para el Echo del sensor

// Definimos el pin para el módulo relé
const int relayPin = 7; // Pin para el control del módulo relé

void setup() {
  // Iniciamos la comunicación serial para la depuración
  Serial.begin(9600);

  // Configuramos los pines del sensor ultrasónico
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);

  // Configuramos el pin del módulo relé
  pinMode(relayPin, OUTPUT);
  digitalWrite(relayPin, HIGH); // Aseguramos que el relé esté apagado al inicio (activo bajo)
}

void loop() {
  // Variables para la duración y la distancia
  long duration;
  int distance;

  // Enviamos un pulso de 10 microsegundos por el pin Trigger
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);

  // Leemos el tiempo que tarda el pulso en volver al Echo
  duration = pulseIn(echoPin, HIGH);

  // Calculamos la distancia en centímetros
  distance = duration * 0.034 / 2;

  // Imprimimos la distancia en el monitor serial
  Serial.print("Distance: ");
  Serial.print(distance);
  Serial.println(" cm");

  // Si la distancia es menor o igual a 15 cm, encendemos el relé (activo bajo)
  if (distance <= 15) {
    digitalWrite(relayPin, LOW);
  } else {
    digitalWrite(relayPin, HIGH);
  }

  // Esperamos 100 ms antes de la siguiente medición
  delay(100);
}`

Hummm......... :thinking::thinking:

¿Con ese relé no tienes en todo el código intercambiados los HIGH y LOW que lo controlan?

Pero en el comentario aclara que es activo bajo, o sea que se activa con LOW

digitalWrite(relayPin, HIGH); // Aseguramos que el relé esté apagado al inicio (activo bajo)

Para mí está correcto.

utiliza un relé de "activo bajo," lo que significa que el relé se enciende cuando la señal es LOW y se apaga cuando la señal es HIGH. Esto se refleja en la configuración inicial y en la lógica del bucle principal.

Vamos a desglosar el funcionamiento del código en relación con el control del relé:

  1. Configuración inicial:

cpp

Copiar código

// Configuramos el pin del módulo relé
pinMode(relayPin, OUTPUT);
digitalWrite(relayPin, HIGH); // Aseguramos que el relé esté apagado al inicio (activo bajo)

Aquí se configura el pin del relé como salida y se establece en HIGH para asegurarse de que el relé esté apagado al iniciar.
2. Lógica del bucle principal:

cpp

Copiar código

if (distance <= 15) {
  digitalWrite(relayPin, LOW); // Encender el relé (activo bajo)
} else {
  digitalWrite(relayPin, HIGH); // Apagar el relé
}

Aquí, el relé se enciende (LOW) si la distancia medida es menor o igual a 15 cm y se apaga (HIGH) si la distancia es mayor.

Dado que el relé es de "activo bajo," los niveles HIGH y LOW están configurados correctamente. No tienes intercambiados los HIGH y LOW, ya que el código se ajusta a la lógica de funcionamiento de un relé activo bajo. El relé se enciende cuando se establece en LOW y se apaga cuando se establece en HIGH.

En resumen, el código parece estar correcto en cuanto al control del relé, asumiendo que efectivamente estás utilizando un relé de "activo bajo."

ChatGPT?

Dije lo mismo en el post anterior sin tanta vuelta. :grimacing:

a