Electroválvula por Impulsos

Buenos días a todos, necesito urgentemente que me echeis una mano.

Tengo una electroválvula controlada por un relé con arduino que se activa al dar un impulso (6v.) y se desactiva con otro impulso (conectada a otra entrada). El problema es que los cables que dan los impulsos tienen un voltaje residual continuo (por llamarle de alguna manera) de unos 0.02 voltios, sufiente para activar el relé involuntariamente. Mi pregunta es si hay alguna manera de programar el arduino que hasta que supere, por ejemplo, 2 voltios no active el relé.

Muchas gracias de antemano.

int valvula = 10; // señal a relé
int inputPin1 = 8; // impulso de paro
int inputPin2 = 9; // impulso de inicio

void setup() {

pinMode(valvula, OUTPUT);
pinMode(inputPin1, INPUT);
pinMode(inputPin2, INPUT);
digitalWrite (valvula,HIGH);
}

void loop(){

if (digitalRead(inputPin1) == HIGH) {
digitalWrite(valvula, HIGH);

}
else if (digitalRead(inputPin2) == HIGH) {
digitalWrite(valvula, LOW);

}

}

Comienza explicando que entrega esa tensión de 6 volts a la que haces referencia y como esta cableada tu entrada.
6V no pueden ingresar a una entrada digital. Que los resista no significa que este bien.
Basta con poner una resistencia y un zener de 5.1 para proteger la entrada y restringirla a 5V.
Ahora bien, tus 0.02 volts no disparan involuntariamente la entrada, lo que lo hace es el loop de tierra que seguramente tienes.
Eso ocurre porque no se conectan debidamente las entradas
Un método que funciona y soluciona los dos problemas en uno es usar una entrada optoacoplada.
Un optoacoplador es un diodo emisor de luz que va conectado a esos 6V. Cuando estan presentes hacen circular la I necesaria para que encienda el diodo del opto. Luego en la salida un fototransistor con emisor a tierra del arduino y colector a una R generalmente 10k a +5V del arduino
Del colector conectas a la entrada anterior la misma que tenias puesta la entra, la que dispara.
Haces lo mismo con la que detiene.
entonces te quedan dos circuitos aislados, el que dispara y detiene y el arduino. Sin masas en común,

Olvida que la iamgen dice linea de salida y de entrada
Si tomas el de la izq (el de la derecha es igual)
Veras que tu entrada con los 6V iran entre D0 y GND y tu salida será Vout con +5 y GND del Arduino. Tu Vout va a la entrada de disparo
Y repitas para la de STOP o DETENCION.

Gracias por responder surbyte, pondré en práctica lo que me dices a ver si funciona.

Muchas gracias :wink:

agregale un retardo para confirmar que realmente se produjo el cambio y se mantiene durante unos 50mseg al menos.
algo asi, este es general aplicalo a tu caso

byte buttonPin = 7;
boolean currentState = LOW;        // almacena el estado de la entrada actual
boolean lastState = LOW;                            // almacena el ultimo estado de la entrada 
boolean debouncedState = LOW;            // estado del rebote
int debounceInterval =50;                         // espera  50 ms para el establecimiento del boton
unsigned long timeOfLastButtonEvent = 0;//almacena lo milis del cambio de estado del boton

void setup(){
  pinMode(buttonPin, INPUT);  // boton como entrada
   Serial.begin(9600);                     // 
}

void loop(){
  
  currentState = digitalRead(buttonPin);
  unsigned long currentTime = millis();
  
  if (currentState != lastState) {
    timeOfLastButtonEvent = currentTime;
  }
 if (currentTime - timeOfLastButtonEvent > debounceInterval) {  // si suficiente tiempo ha pasado
     if (currentState != debouncedState){   // si el estado actual es aun diferente del ultimo rebote almacenado
      debouncedState = currentState;           // actualizo el esado del rebote
      
      // disparo el evento
      if (debouncedState == HIGH){
        Serial.println("Presionado");
      } else {
        Serial.println("Liberado");
      }
    }
  }