Go Down

Topic: Problema con relé de doble canal (Read 364 times) previous topic - next topic

Leandro65

May 10, 2018, 05:26 am Last Edit: May 10, 2018, 05:28 am by Leandro65
Hola gente, muy buenas noches, soy nuevo en el foro y nuevo en esto de la programación, espero poder aprender bastante y algún día poder ayudar a los demás, quiero saber si me pueden ayudar con un problema que estoy teniendo con un relé de doble canal



El problema es que cuando quiero controlar el relé2 para que encienda unos cooler cuando el relé1 encienda se quedan las luces del in1 y el in2 encendidas y no pasa de eso,no se si es porque intento hacerlo con un if o no se, pero lo que se me ocurrió hacer por mientras es este código hasta encontrar una solución, los coolers mientras el relé1 esta apagado se enciendan cada media hora y no que estén encendidos 24hs como van a ver en el código

Code: [Select]
int RELE1 = A0;  //Relé que controla LEDs
int RELE2 = A1;  //Relé que controla coolers
void setup() {
 pinMode(RELE1, OUTPUT);
pinMode(RELE2, OUTPUT);

digitalWrite(RELE1, HIGH);
Serial.begin(9600);

}

void loop() {
  apago();
  delay(7200000);     //Acá de alguna manera puse que se enciendan las luces 15hs y se apaguen 9hs
  enciendo();
  delay(54000000);  //Lo escribí de esta manera porque me quede hasta las 4 de la mañana probando
  apago();
  delay(25200000);
}

void enciendo(){
  digitalWrite(RELE1, LOW);
  digitalWrite(RELE2, LOW);
}
void apago(){
  digitalWrite(RELE1, HIGH);
  digitalWrite(RELE2, LOW);
 }


Espero que alguien me pueda dar una mano con esto, muchas gracias  :)

Tato84

Esos rele estan normalmente abiertos o cerrados?

Leandro65

Esos rele estan normalmente abiertos o cerrados?
Hola buenas, son normalmente abiertos

surbyte

Si todo lo conectas del modo tradicional los reles funcionarán con LOGICA INVERSA.
Es decir un digital(pin, HIGH) lo desenergiza y un digital(pin, LOW) lo energiza.

Hablo de una conexión Pin de salida de arduino a INX y GND conectados, ademas de 5V por supuesto.


Kike_GL

Los LED se encienden cuando la bobina esta energizada. Cada rele tiene 3 salidas el común, el normal abierto y un normal cerrado.
Saludos, Kike_GL

Esfinterman

No entiendo muy bien la consulta. Entiendo que se te quedan los indicadores de los relés encendidos pero no hace nada, ¿correcto? Puede deberse a una mala conexión. Te dejo un código para diagnosticar rápidamente el módulo de relés. Por cierto, tengo exactamente el mismo módulo :D

Code: [Select]
void setup() {
 
pinMode(12, OUTPUT);
pinMode(13, OUTPUT);
}

void loop() {
 
digitalWrite (12, 0);
delay(1000);
digitalWrite (13, 0);
delay(1000);
digitalWrite (12, 1);
digitalWrite (13, 1);
delay(1000);
}


Están asignados los pines 12 y 13 para probar el módulo. Conecta la corriente a corriente, masa a masa (nada nuevo) y las entradas del módulo de relés, a los pines 12 y 13 indistintamente. Deben activarse y desactivarse regularmente en el tiempo. Si no es así, el problema está en el cableado, placa o módulo de relés.

Si el problema está en que quieres desactivar el relé pero se enciende, es porque es un módulo de LÓGICA INVERSA, como ya te han dicho. Este programa te permite verlo. Cuando se activa la salida 13 y su correspondiente LED, el relé que hayas asignado al pin 13 se desactivará. Para ello, tendrás que usar un transistor entre la placa y el pin de entrada del módulo de relés. Yo lo solucioné con un 2N2222 y una resistencia de 2200Ω para su base. ;)

surbyte

No hace falta usar ningún transistor para volverlo LOGICA DIRECTA, solo conectar todo de modo diferente.

Esperemos que responda y veremos mejor qué sugerirle.

Esfinterman

¿Cómo se conectaría para hacerlo de lógica directa? Teniendo en cuenta que tenemos el mismo módulo de relés que figura en el primer mensaje. Así me ahorro un par de transistores. ;)

surbyte

#8
May 19, 2018, 09:38 pm Last Edit: May 19, 2018, 09:41 pm by surbyte
Y cual es el problema de energizarlo con LOW y desenergizarlo con HIGH.

Tu RELE debe estar mal conectado porque dices que no funciona, o te malinterpreto?

Porque usas A0 y A1 para comandar los relés? No son pines habituales.


Code: [Select]
int RELE1 = A0;  //Relé que controla LEDs
int RELE2 = A1;  //Relé que controla coolers
void setup() {
 pinMode(RELE1, OUTPUT);
pinMode(RELE2, OUTPUT);

digitalWrite(RELE1, HIGH);  // Esto lo apaga Rele1
digitalWrite(RELE2, HIGH);  // Esto lo apaga Rele2
Serial.begin(9600);

}

void loop() {
  apago();
  delay(7200000);     //Acá de alguna manera puse que se enciendan las luces 15hs y se apaguen 9hs
  enciendo();
  delay(54000000);  //Lo escribí de esta manera porque me quede hasta las 4 de la mañana probando
  apago();
  delay(25200000);
}

void enciendo(){
  digitalWrite(RELE1, LOW);
  digitalWrite(RELE2, LOW);
}
void apago(){
  digitalWrite(RELE1, HIGH);
  digitalWrite(RELE2, HIGH);
 }


Recuerda que esto
Code: [Select]
delay(54000000);

Detiene el funcionamiento del programa por ese tiempo que ENORME

Esfinterman

Y cual es el problema de energizarlo con LOW y desenergizarlo con HIGH.
Pues que tienes todo tu programa activando y desactivando salidas y la gran mayoría de componentes, por no decir "la totalidad", se activan con una salida alta, y para activar el relé, te tienes que acordar de que tienes que meter una salida baja, 0 o LOW para ACTIVARLO, y para alguien que está empezando, pues le puede trastornar.

Estuve buscando información por internet cuando me llegó mi módulo de relés para hacerlo de lógica directa y encontré un caso de un proyecto que, tal y como lo tenía montado, le era imposible usarlo con lógica inversa (sus motivos tendrá) y no pudo continuar hasta que vio que con un transistor y una resistencia pudo hacerlo lógica directa. Yo mismo probé ese método y funciona perfecto: salida en 1 o HIGH, relé activado. Fácil, sencillo y para toda la familia. Pero si dices que sabes cómo conectarlo para hacerlo de lógica directa sin necesidad de transistor, pues te agradeceríamos que nos pusieses o dijeses cómo conectarlo porque no veo la forma de conectarlo como lógica directa sin necesidad de dicho transistor. ;)

surbyte

@Esfinterman por favor!!
Esa respuesta no es una persona que ha estudiado Técnicas Digitales y no se si es tu caso, pero espero que no lo sea y no lo digo con un criterio de superioridad sino que simplemente no lo sabes.

Cuando estudias técnicas digitales te enseñas que puedes programar con logica directa o inversa.
Si no te gusta hacerlo de ese modo pues defines al comiendo un par de etiquetas con define de modo que para ti luzca como DIRECTA pero sigue siendo inversa.

Tienes dos modos de hacerlo uno es programas normal y luego le pones el inversor !
Code: [Select]
#define NivelLOW   1
#define NivelHIGH  0


// Energizas
digitalWrite(PinRele, NivelHIGH);

// Desenergizas
digitalWrite(PinRele, NivelLOW);


O usas lo que acostumbras y lo inviertes
Code: [Select]

// Energizas
digitalWrite(PinRele, !HIGH);  // el ! invierte lo que estas ordenando

// Desenergizas
digitalWrite(PinRele, !LOW);

Go Up