Problema con relés de persianas (ayudaaa)

Vale, parece que ese tema he conseguido que no me de problemas con un enclavamiento en la salida de los relés, un poco cutre pero funciona xD, ahora me surge otro problemón:

  • Cuando pruebo el programa con todo montado pero sin potencia en las salidas de los relés este funciona perfectamente

-Cuando pruebo el programa metiendole potencia y conectando los motores de las persianas se vuelve totalmente loco el programa, me activa la subida cuando no debe, y la bajada me la corta...

Tendriais idea de que podria ser? He estado mirando posts y he oído hablar de transitorios y esos temas , pero... mis relés estan totalmente separados de la potencia¡¡ , uso un modulo de 4 relés alimentados con la placa Arduino, sin fuente de alimentación externa pero estos llevan su optoacoplador y su diodo de protección correspondiente que podria estar pasando chicos??

Muchas gracias y saludos

Adjunto el código del programa por si queréis verlo, pero parece no ser de ese tema, al menos, bajo mi humilde opinión pienso eso.

int pulsadorbajada=0;
int pulsadorsubida=0;
int conmutadorinvierno=0;
int conmutadorverano=0;
int conmutadormanual=0;
int K1subida=9;
int K2bajada=8;
int luxes;
int memoria1=0;//ESTA MEMORIA HACE QUE SOLO SE LEA UNA VEZ LA ORDEN DE MARCHA DE LAS PERSIANAS EN MODO INVIERNO

// LOS RELES FUNCIONAN CON LÓGICA INVERSA

void setup() {
pinMode(K1subida, OUTPUT); //DECLARAMOS RELE K1
pinMode(K2bajada, OUTPUT); //DECLARAMOS RELE K2
pinMode(4, INPUT); // DECLARAMOS LA ENTRADA DEL PULSADOR DE SUBIDA
pinMode(2, INPUT); // DECLARAMOS EL CONMUTADOR EN POSICIÓN INVIERNO
pinMode(3, INPUT); // DECLARAMOS LA ENTRADA DEL PULSADOR DE BAJADA
pinMode(5, INPUT); // DECLARAMOS EL CONMUTADOR EN POSICIÓN VERANO
}


void loop() {
luxes=analogRead(0);
conmutadorinvierno=digitalRead(2);
conmutadorverano=digitalRead(5);
if ((conmutadorinvierno==LOW)&&(conmutadorverano==LOW)){
  conmutadormanual=HIGH;}
  else{
    conmutadormanual=LOW;
  }
// CONMUTADORES DEFINIDOS A PARTIR DE AQUI: POSICIÓN VERANO, INVIERNO Y MANUAL
pulsadorbajada=digitalRead(3);
pulsadorsubida=digitalRead(4);



//WHILE DE CONMUTADOR EN MODO MANUAL (COMPLETADO)



while(conmutadormanual==HIGH)
{
  if ((pulsadorbajada==HIGH)&&(pulsadorsubida==LOW)){
  digitalWrite(K2bajada, LOW);
  digitalWrite(K1subida, HIGH);}
  else if ((pulsadorbajada==LOW)&&(pulsadorsubida==HIGH)){
    digitalWrite(K1subida, LOW);
  digitalWrite(K2bajada, HIGH);}
  else if ((pulsadorbajada==LOW)&&(pulsadorsubida==LOW)){//
    digitalWrite(K1subida, HIGH);
  digitalWrite(K2bajada, HIGH);}


  //  DEFINICION DE CONMUTADORES: POSICIÓN VERANO, INVIERNO Y MANUAL Y PULSADORES DE SUBIDA Y BAJADA, YA QUE AL ENTRAR EN ESTE BUCLE UNICAMENTE SE EJECUTA ESTE WHILE
  conmutadorinvierno=digitalRead(2);
conmutadorverano=digitalRead(5);
pulsadorbajada=digitalRead(3);
pulsadorsubida=digitalRead(4);
if ((conmutadorinvierno==LOW)&&(conmutadorverano==LOW)){
  conmutadormanual=HIGH;}
  else{
    conmutadormanual=LOW;
  }
  if(conmutadormanual==LOW){            //HACE QUE AL SALIR DEL BLOQUE WHILE LOS RELÉS SE APAGUEN
   digitalWrite(K1subida, HIGH);
  digitalWrite(K2bajada, HIGH);}
  }




  //WHILE DE CONMUTADOR EN MODO INVIERNO (CASI COMPLETO)



while(conmutadorinvierno==HIGH)
{
  if ((memoria1==0)&&(luxes>=700)){
  digitalWrite(K2bajada, HIGH);
  digitalWrite(K1subida, LOW);
  delay(10000);
  digitalWrite(K2bajada, HIGH);
  digitalWrite(K1subida, HIGH);
  memoria1=1;
  }
  else if ((memoria1==1)&&(luxes<=300)){
    digitalWrite(K1subida, HIGH);
  digitalWrite(K2bajada, LOW);
  delay(10000);
  digitalWrite(K2bajada, HIGH);
  digitalWrite(K1subida, HIGH);
   memoria1=0;}
  else if ((K1subida==LOW)&&(K2bajada==LOW)){//
    digitalWrite(K1subida, HIGH);
  digitalWrite(K2bajada, HIGH);}


  //  DEFINICION DE CONMUTADORES: POSICIÓN VERANO, INVIERNO Y PULSADORES DE SUBIDA Y BAJADA, YA QUE AL ENTRAR EN ESTE BUCLE UNICAMENTE SE EJECUTA ESTE WHILE
  luxes=analogRead(0);
  conmutadorinvierno=digitalRead(2);
  if(conmutadorinvierno==LOW){            //HACE QUE AL SALIR DEL BLOQUE WHILE LOS RELÉS SE APAGUEN
   digitalWrite(K1subida, HIGH);
  digitalWrite(K2bajada, HIGH);
  memoria1=0;}
  }


 //WHILE DE CONMUTADOR EN MODO VERANO (CASI COMPLETO)

while(conmutadorverano==HIGH)
{
  if ((memoria1==0)&&(luxes<=300)){
  digitalWrite(K2bajada, HIGH);
  digitalWrite(K1subida, LOW);
  delay(10000);
  digitalWrite(K2bajada, HIGH);
  digitalWrite(K1subida, HIGH);
  memoria1=1;
  }
  else if ((memoria1==1)&&(luxes>=700)){
    digitalWrite(K1subida, HIGH);
  digitalWrite(K2bajada, LOW);
  delay(10000);
  digitalWrite(K2bajada, HIGH);
  digitalWrite(K1subida, HIGH);
   memoria1=0;}
  else if ((K1subida==LOW)&&(K2bajada==LOW)){//
    digitalWrite(K1subida, HIGH);
  digitalWrite(K2bajada, HIGH);}


  //  DEFINICION DE CONMUTADORES: POSICIÓN VERANO, INVIERNO Y PULSADORES DE SUBIDA Y BAJADA, YA QUE AL ENTRAR EN ESTE BUCLE UNICAMENTE SE EJECUTA ESTE WHILE
  luxes=analogRead(0);
  conmutadorverano=digitalRead(5);
  if(conmutadorverano==LOW){            //HACE QUE AL SALIR DEL BLOQUE WHILE LOS RELÉS SE APAGUEN
   digitalWrite(K1subida, HIGH);
  digitalWrite(K2bajada, HIGH);
  memoria1=0;}
  }
}