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);
}
}
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.
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.