Go Down

Topic: Problema con relés de persianas (ayudaaa) (Read 795 times) previous topic - next topic

Elmeti

Hola buenas, estoy haciendo uno de mis primeros proyectos de Arduino y es posible que me haya embarcado en un proyecto mas dificil de lo que me pensaba jeje.

Resulta que tengo un problemón y no se como solucionarlo, la verdad es que ya estoy bastante bloqueado, mi idea era la de unas persianas automáticas con 3 modos de funcionamiento, manual(con 2 pulsadores uno subida y otro bajada), modo verano(en el que mediante una LDR se bajase la persiana cuando hiciese sol y subiese cuando oscureciese) y modo invierno (en el que se bajase la persiana cuando hiciese oscuridad y subiese cuando hiciese sol), pues bien no se por que razón las persianas no funcionan, los relés se activan pero la fuerza no les llega a las persianas, y , si he conectado bien la conexión de las persianas.

Una cosa que me mosquea es que cuando enciendo y apago el interruptor de alimentación del Arduino (Arduino Leonardo) los dos relés se me encienden durante un instante , no deberia de preocupar mucho en ciertos proyectos, pero en este preocupa bastante ya que es un inversor de giro y seguramente sea por eso por lo que no me funciona el motor de las persianas... porque al encenderse los dos relés a la vez estos han hecho corto y me han fogueado los contactos de los relés...

Pido a algún alma caritativa si puede tener una idea de por que se encienden por favor que lo comparta, esto ya me esta volviendo loco y no se por que razón puede ser jeje. Por cierto dejo adjunto el programa para que se pueda mirar si es algún problema de programación.

Saludos y espero encontrar la solución porque , en serio me esta volviendo loco jeje

Jopapa

Para empezar en el setup yo pondría las dos salidas a nivel bajo (K1 y K2)

Además, no se si has escrito todo el código de tirón, pero depurarlo así para un novato puedes ser arduo.
Empieza con un código mínimo con solo los dos pulsadores y ver si los reles funciona correctamente. Después añades mas lineas por partes y siempre comprobando el valor de las variables con Serial.print en el monitor y ver que hace el programa, usando delays() temporales para ralentizar el programa.

Espero te sirva.
Jopapa
www.jopapa.me

Elmeti

Gracias Jopapa, hare lo que me has dicho de poner a 0 los relés antes de nada, y, si lo he ido haciendo por apartados, primero hice el apartado manual, luego invierno y luego verano, que son iguales casi jeje.

La verdad es que funciona correctamente el programa con los relés, el unico problema que encuentro es ese que mencione , los reles se ponen a 1 en cuanto enciendo el Arduino, y cuando lo apago se vuelven a poner a 1 sin motivo aparente.

Muchas gracias

surbyte

Los reles trabajan invertidos a lo que habitualmente usamos.

0 o LOW los activa
1 o HIGH los desactiva.

Elmeti

ya lo tuve en cuenta, el programa lo tengo hecho basandome en eso, lo que necesitaria saber es por que al encender y apagar el Arduino se encienden las señales de los relés durante un instante.

Gracias y saludos ;)

surbyte

#5
Nov 03, 2017, 12:08 am Last Edit: Nov 03, 2017, 12:11 am by surbyte
Ahh tienes código? Como no vi ninguno posteado, no he prestado atención a lo que mencionas.

Si colocas un código y no supera 9000 cararcteres, debe verse en el post.
Lee las normas del foro y usa etiquetas para postearlo debidamente. Esta es la etiqueta </>


Tu código arranca asi

Code: [Select]
pinMode(K1subida, OUTPUT); //DECLARAMOS RELE K1
pinMode(K2bajada, OUTPUT); //DECLARAMOS RELE K1
digitalWrite(K1subida, HIGH);
digitalWrite(K2bajada, HIGH);


Y debería trabajar bien

Elmeti

Lo he probado y sigue pasandome lo mismo :( , he hecho pruebas y creo que en parte puede ser del sistema de alimentación. Lo tengo puesto con un cargador de 9V al jack de alimentación y me he fijado que a diferencia de los cargadores de 5 V normales este al desconectarlo o apagarlo corta la tensión instantáneamente y hace una especie de pico en los relés que los enciende, sin embargo con un cargador de movil de 5 v por ejemplo conectado al USB almacena cierta energia al desconectarlo y hace que no se activen las salidas de los relés al apagarse poco a poco por la acción de un condensador supongo.

Lo que también he visto es que sin siquiera tener programa las salidas del relé se me activan al meter tensión al arduino, durante un minimo instante, pero es algo que me mosquea... eso lo he visto alimentandolo tanto con la fuente de alimentación de 9V al jack de alimentación y con el cargador de movil USB a 5V.

Lo que he pensado que podria funcionar es : -en las salidas del arduino que van a los relés meterles unos condensadores intermedios para que mientras que estos no se carguen no sean capaces de encenderse los relés, si creeis que es buena idea... 1º que capacidad deberian tener esos condensadores y 2º ¿la tension?, supongo que eso dará igual siempre y cuando sea superior a 5 V la tension del condensador.

Al final parece ser que es algo mas de hardware que de software :S ...

Saludos y gracias por la ayuda ;)

surbyte

Quote
Lo que también he visto es que sin siquiera tener programa las salidas del relé se me activan al meter tensión al arduino, durante un minimo instante, pero es algo que me mosquea... eso lo he visto alimentandolo tanto con la fuente de alimentación de 9V al jack de alimentación y con el cargador de movil USB a 5V.
Esto es algo que no debe preocuparte. Si el Arduino no tiene programa que importa que hace? Hace lo que ocurre cuando un micro sin programa propone en cada pin.
No tienes control sobre esta situación.

Si tienes controlo sobre un arduino programado.


Si crees que la solución es tener un capacitor, entonces coloca un capacitor de 470 a 1000 uF x tensión mayor a 5V entre 5V y GND y tendras entonces una especie de backup que demorará el apagado.

Prueba a ver.

Elmeti

voy a probarlo ahora, gracias ;) , y , poner un condensador entre la salida del Arduino y la entrada de señal del relé haria algo?, quiero decir, que cuando el Arduino me mande la señal de encender el relé , si es una señal continua se almacene en el condensador y pase la señal al relé, sin embargo, si esta es una señal indeseada y momentanea el condensador la absorbera sin llegar a encender el relé, seria buena idea??

surbyte

Lo que va a hacer ese condensador es que cuando lo desenergices sostendrá unos milisegundos la tensión pero nada mas. Trabaja cuando esta cargado y luego no hace nada. Al arrancarlo no hara nada.

Elmeti

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.

Code: [Select]


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


surbyte

Creo que ha habido un malentendido.

Quote
y , poner un condensador entre la salida del Arduino y la entrada de señal del relé haria algo?, quiero decir, que cuando el Arduino me mande la señal de encender el relé , si es una señal continua se almacene en el condensador y pase la señal al relé, sin embargo, si esta es una señal indeseada y momentanea el condensador la absorbera sin llegar a encender el relé, seria buena idea??
Desde ya que no!!
Mi respuesta anterior era para el condensador entre 5V y GND. Nada dije de un condensador entre el pin de salida y la entrada del rele.

Asi que esa es la razón de tu problema.

Elmeti

No, no, eso lo pense yo, y al minuto me di cuenta de que era una soberana chorrada xD, ese problema que comnentas no me de mucho problema ya, ahora lo que me da problemas es lo que he comentado arriba, el programa funciona perfectamente sin conectar el circuito de potencia de los relés y hace incoherencias al conectar la potencia de los contactos de los relés :/

tatatronik1981

hola   yo queria  manejarlas con el bluetooth  pero  soy novato  en esto, tengo un  interrurtor  de subida y bajada.
 me podrian  ayudar porfavor  gracias

surbyte

tatatronik1981, el hilo pertenece a Elmeti de modo que aportas dudas/consultas/aportes o bien te limitas a hacerlo en tu hilo. Pero no esperes acá tener una bifurcación a tu tema. No corresponde porque solo lo desvías de su objetivo.

Lee las normas del foro y no uses mayúsculas. Te envié privado para que edites tu hilo.

Go Up