Problema con activación Relé en bucles de control

Hola buenas tardes a todos,soy nuevo por estos sitios,aunque tengo alguna que otra experiencia con Arduino.

Estoy desarrollando una aplicación donde controlo mediante Relé una válvula de 24Vcd la cual yo abro y cierro para inyectar aire a presión a un sistema.

Estoy en fase de pruebas,pero he querido implementar un bucle While para que me active y desactive la electrovalvula 5 veces y me encuentro con que cuando alimento a 24Vdc la electrovalvula, sólo realiza el bucle While 1 vez y no las 5 que he programado.

Antes de pasar por aquí y preguntar,he probado a simular el programa sin los 24Vdc,es decir,he intentado ver si el relé se activaba y desactivaba 5 veces y así a sido,incluso he mostrado el valor de la variable que aumenta por el puerto serie para ver si se aumentaba y es correcto,pero a la hora de conectar a 24Vdc y cerrar el relé me encuentro con que esta variable que evalúo ( en mi código se denomina x) no aumenta y se sale con valor 1 sin llegar a 5.

Una de las posibilidades que he valorado es la de que exista ruido en el sistema,pero si pruebo abrir y cerrar el relé sin bucle (While,for,…) si funciona todo perfecto.Por tanto el error solo se da cuando intento que el código este en el interior de un bucle de condición.

Sobre el montaje,indicar que esta todo correcto,masas de la electrovalvula y de arduino juntas,etc. Es más,como he dicho anteriormente si el proceso lo hago manual mediante un botón el sistema funciona correcto.

Adjunto código simplificado del proceso.Mil gracias y si cometo algún error grave,pedir perdón.

const int valvula = 7;
 const int boton=4;
 int x=0;
 
void setup() {
  Serial.begin(9600);    //iniciar puerto serie
  pinMode(valvula, OUTPUT);  //definir pin como salida
  pinMode(boton,INPUT);
}
 
void loop(){
 x=0;
 bool val=digitalRead(boton);

 if(val==HIGH){

  while(x<5){

  digitalWrite(valvula, HIGH);   // poner el Pin en HIGH
  delay(1000);               // esperar un segundo
  digitalWrite(valvula, LOW);    // poner el Pin en LOW
  delay(2000);               // esperar 2 segundo
  x++;
 }

}
}

Lo que ocurre que tu válvula al acionarse esta haicendo que tu Arduino se reinicie.
Haz esto para verificarlo.
En el setup agrega una linea que diga... "Arduino arrancando" por ejemplo.
Haz la prueba y mira a ver si luego del primer ciclo vuelve a aparecer "Arduino arrancando".

Si es asi, coloca un diodo en inversa con la electroválvula. Un diodo 1n4002 a 7 cualquiera estará bien.
Catodo a positivo, y anodo al otro extremo de la válvula y seguramente donde lo conectas con el rele.

Aunque no esta hecho con un rele imagina que el transitor lo es y es exactamente igual.

Muchas gracias,probaré mañana y te comentaré si se ha solucionado el problema.Una duda que seguro que sabes aclararme,¿a que se debe este fallo que necesitamos incluir un diodo para evitar la tensión introducida en el sistema?¿es un problema común en sistemas que alimentamos y activamos mediante Relés? alguna vez he probado con motores también de 24 en continua y no he necesitado esta solución.

Muchas gracias.

El fallo se debe a que la electroválvula genera una oposición a los cambios electricos, cuando alimentas o cuando cortas su energía. Esto provoca un transitorio que puede ser el responsable de lo que cuentas.
Ese transistorio puede ser que viaje de la valvula a la red y a tu arduino y lo apague o sea en forma de pulso electromágnético y tmb provoque ese fallo.
Estas cosas hay que comprobarlas pero lo que cuentas luce como si estuviera pasando.
El diodo tal vez lo resuelva.

Buenas tardes Surbyte. Probé esta mañana la solución que me propusiste y el sistema funciona correcto.Muchas gracias por tu ayuda.

Agrega [SOLUCIONADO] al titulo.