Encender una bomba y electrovalvulas de 12v por medio de sensores de humedad

Soy nuevo realizando proyectos con Arduino, el proyecto es sobre un sistema de riego, tengo tres sensores de humedad que controlan la humedad de una área en especifico, lo que quiero hacer es que cada uno de los sensores funcione de manera independiente por medio de las electroválvula, la idea es que si algún sensor detecta que el suelo esta con falta de humedad y la bomba ya ha sido activada por otro sensor, solo se active esa electroválvula, del mismo modo pasaría para apagarse el sistema. Tengo el siguiente código pero no se hasta que punto este bien esta lógica

//Declaración de variables
int soilMoistureValue = 0;
int soilMoistureValue2 = 0;
int soilMoistureValue3 = 0;
int sensor1 = 0;
int sensor2 = 0;
int sensor3 = 0;

//Inicialización de las salidas
void setup() {
  pinMode(3,OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  Serial.begin(9600);
}

//Inicialización del ciclo
void loop() {
//Parametros para sensor 1
soilMoistureValue = analogRead(A0);
Serial.println(sensor1);
sensor1 = map(soilMoistureValue, 490, 1023, 100, 0);

//Parametros para sensor 2
soilMoistureValue2 = analogRead(A1);
Serial.println(sensor2);
sensor2 = map(soilMoistureValue2, 490, 1023, 100, 0);

//Parametros para sensor 3
soilMoistureValue3 = analogRead(A2);
Serial.println(sensor3);
sensor3 = map(soilMoistureValue3, 490, 1023, 100, 0);

//Condición para encender sistema
if(sensor1 < 40 || sensor2 < 40 || sensor3 < 40){
  Serial.println("Bomba encendida");
  digitalWrite(3,LOW);
  if (sensor1 < 40){
    Serial.println("Electrovalvula 1 encendida");
    digitalWrite(4, LOW);
  }else if (sensor2 < 40){
    Serial.println("Electrovalvula 2 encendida");
    digitalWrite(5, LOW);
  }else if (sensor3 < 40){
    Serial.println("Electrovalvula 3 encendida");
    digitalWrite(6, LOW);
  }
}

//Condición para apagar sistema

if (sensor1 > 80){
   Serial.println("Electrovalvula 1 apagada");
   digitalWrite(4,HIGH);
}else if (sensor2 > 80){
   Serial.println("Electrovalvula 2 apagada");
   digitalWrite(5,HIGH);
}else if (sensor3 > 80){
   Serial.println("Electrovalvula 3 apagada");
   digitalWrite(6,HIGH);
}else if(sensor1 > 80 || sensor2 > 80 || sensor3 > 80){
  Serial.println("Bomba apagada");
  digitalWrite(3,HIGH);
}
}


Este es casi el diseño que estoy usando solo que el Arduino esta alimentado con 5v y la bomba y las electrovalvulas están conectadas aparte con 12v

hola

por favor, explique cómo funciona el code ahora y en qué se diferencia de lo que esperaba

Para que tus electrovalvula funcionen de forma independiente no puedes utilizar la estructura " if else if ". Tal como lo tienes si el primer sensor se activa no se producen las dos siguientes comparaciones. Tines que separar cada sensor con su "if - else" independientes y no anidados entre si como esta ahora.

void loop() {
  //Parametros para sensor 1
  soilMoistureValue = analogRead(A0);
  Serial.println(sensor1);
  sensor1 = map(soilMoistureValue, 490, 1023, 100, 0);

  //Parametros para sensor 2
  soilMoistureValue2 = analogRead(A1);
  Serial.println(sensor2);
  sensor2 = map(soilMoistureValue2, 490, 1023, 100, 0);

  //Parametros para sensor 3
  soilMoistureValue3 = analogRead(A2);
  Serial.println(sensor3);
  sensor3 = map(soilMoistureValue3, 490, 1023, 100, 0);

  //Condición para encender la bomba
  if (sensor1 < 40 || sensor2 < 40 || sensor3 < 40) {
    Serial.println("Bomba encendida");
    digitalWrite(3, LOW);
  }
  else {
    Serial.println("Bomba apagada");
    digitalWrite(3, HIGH);
  }

  //Condición para encender la Electrovalvula 1
  if (sensor1 < 40) {
    Serial.println("Electrovalvula 1 encendida");
    digitalWrite(4, LOW);
  }
  else {
    Serial.println("Electrovalvula 1 apagada");
    digitalWrite(4, HIGH);
  }
  
  //Condición para encender la Electrovalvula 2
  if (sensor2 < 40) {
    Serial.println("Electrovalvula 2 encendida");
    digitalWrite(5, LOW);
  }
  else {
    Serial.println("Electrovalvula 2 apagada");
    digitalWrite(5, HIGH);
  }
  
  //Condición para encender la Electrovalvula 3
  if (sensor3 < 40) {
    Serial.println("Electrovalvula 3 encendida");
    digitalWrite(6, LOW);
  }
  else {
    Serial.println("Electrovalvula 3 apagada");
    digitalWrite(6, HIGH);
  }
}

¿ Con esto quieres decir que lo estas conectando asi:?

¿Verdad?.

para los 12v solo va conectado a la bomba y a las electrovalvulas, dentro del arduino solo se manejaran los 5v que entran por el usb

El if que sigue no está bien construido, como bien indica @gonpezzi .

Y para decidir cuándo apagar la bomba, puedes tener un contador de válvulas abiertas. Este contador se incrementa en 1 cada vez que abres una válvula y se decrementa cuando la cierras. La operación de cada válvula es totalmente independiente de las otras.

Si ese contador es 0, se apaga la bomba. Si es >0, se enciende la bomba.


Evita cosas como ésta:

Usa algo como

int pinBomba = 3;
...
pinMode(pinBomba,OUTPUT);
...
digitalWrite(pinBomba,HIGH);

Esto hace tu código más legible y por lo tanto más fácil de depurar, corregir y cambiar.

Finalmente, aquí estás escribiendo el valor del sensor antes de darle valor. Así no funciona correctamente.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.