Más ShiftRegister, ¿Para los Relés?

Pues después de resolver el tema del software (en la otra sección, gracias a los compañeros!) para encender 16 diodos leds como pilotos de actividad (control de un acuario de 500 litros) se me ha ocurrido que podría utilizar también con los Shift Register 595 para activar los 14 Relés que programan el funcionamiento diario de los distintos aparatos y mecanismos del acuario. En principio los Relés son de este tipo:

Relé chino

Por la parte "del otro lado", la de los mecanismos que se encienden no hay problema, de hecho llevan año y medio funcionando todos con relojes programadores diarios.

La idea es controlar 16 Relés con dos 595 utilizando 3 pines del Mega (otros 13 pines ahorrados, para poder utilizarlos con el TFT) La pregunta es si no hay problemas de amperaje activándolos a través de los registros de desplazamieto, las regletas de relés las alimentaré a través de una fuente de alimentación de 12v DC 20A (excepto la pantalla de leds de alta potencia que tienen su fuente de alimentación propia todo el resto incluido el Arduino Mega se alimentará de esa fuente de alimentación). Parece que el amperaje es de 6 mA por cada una de las salidas y si bien la regleta se alimentará de la fuente de 20A pues la duda es que falle, o que en algunos mecanismos que se mantienen activados hasta 12 horas diarias en algún momento se desconecten.

Si los reles que vas a usar son los del enlace, no tendras problemas comandando a traves de los 595.
La entrada de los reles esta optoacoplada. El led no consume mas de 10mA. Asi que despreocupate.

El unico punto a tener en cuenta es que estos reles funcionan al reves o con lógica inversa.

Si le das un 1 se apagan y si le das un 0 se encienden.
Asi que en tus 595, cuando tengas 0b0000 0000 estaran todos prendidos y cuando le envies 0b1111 1111 todos apagados.

Ok.

Tiene sentido ponerle un transistor a cada salida, por ejemplo uno de esos 2N2222? Sería como para asegurar una salida más estable?

Con un transitor sea 2n2222 o un MOSFET (mas de mi agrado), no logras mas estabilidad, solo logras poder comandar cosas que requieren mas corriente que lo que pueda entregar el 595.

Y no se trata justamente de eso, el 595 entrega creo 6 mV, no sería una manera de asegurar una salida mayor?

En lo hoja de datos leo 20mA por salida y no superar 500mW en todo el dispositivo. No se que son 6mV para ti?

Ya te dije que para comandar los reles que indicas no tienes ningun problema.

He hecho una prueba con una regleta de 4 reles, activándola el Arduino cada 10 segundos (durante otros 10 segundos) los 4 relés, todo alimentado con una fuente de alimentación de 5 voltios y 5 amperes. Primero le conecté un bombillo led de 10 wars y funcionó sin problema, luego le conecté un segundo bombillo led y comenzó a fallar, a veces no enciende ninguno de los relés, a veces uno solo. Con un multimetro medí el voltaje de salida del Arduino y es de 5 voltios, cero cuando activa los relés.

Veamos. 1ro arduino entrega sufiente corriente para comandar los optoacopladores de los reles. Te lo aseguro. 2do. que la fuente sea de 5A no cambia nada. Arduino no consumirá mas ni menos. Y no se como has conectado todo. La lampara debería tener un circuito a traves del contacto del rele asi que no tiene porque haber problemas con 1 o 8 lamparas. No se como lo has conectado. Veo que sigues sin poner un esquema y estaremos debatiendo esto hasta el cansancio.

|500x285 No me gustan estos esquemas pero son los que entiende la mayoría.

Espero que lo tengas conectado asi. Aca el sitio con un código para que pruebes. Olvida los 595 verifica los reles.

Pues he quitado del circuito el 595.

Primero conecté los relés SIN fuente externa, el Arduino conectado por USB. Funcionó sin problemas, incluso en lugar de 2 bombillos led, en una de las salidas del relé le conecté un secador de cabello de 1000 watts.

Luego conecté una fuente externa de 5 volts y 5 amperes, alimentando la regleta de relés y por la entrada "VIN" del Arduino los 5 volts y el GND al GND del Arduino y funciona sin problemas, con el bombillo led y el secador de cabello de 1000 watts.

Entiendo que el problema puede estar:

1.- las salidas del 595 no tienen suficiente amperaje y en ocasiones no son capaces de activar el relé.

2.- he hecho mal las conexiones del circuito, en el senido que tal vaz algún cablecillo no haga contacto eficiente, o sea, un problema físico del circuito?

|375x500

uego conecté una fuente externa de 5 volts y 5 amperes, alimentando la regleta de relés y por la entrada "VIN" del Arduino los 5 volts y el GND al GND del Arduino y funciona sin problemas, con el bombillo led y el secador de cabello de 1000 watts.

VIN requiere 6.5V minimo por eso arduino falla.

No se cuando lo hace.. pero no debes alimentar con 5V x VIN. Yo he probado un NANO con una bateria cuando esta se descarga y sigue funcionando mas alla de los 5V aun cuando requiere 5 para funcionar. Pero luego hace cosas raras y es obvio que lo haga.

De acuerdo, pero considera que cuando lo alimenté con 5 voltios y sin el 595 no dio fallo, incluso conectado al USB del ordenador, que trabaja a 5 voltios, pero bueno, probaré volver a conectar el 595 alimentándolo con mayor voltaje, imagino que la regleta de relés no irá también con tensiones mayores, solo con 5 voltios.

nooooooooooooooooooo!!!

595 se alimenta con 5V El VIN va con 6.5V. Se cuidadoso please.

Yo no hable de los 595. Son TTL como mucho soportan 5.5V y luego se queman.

Edito Perdon por el nooooooooo pero me preocupa que quemes algo.

:) :) Jaja!! que miedo!! :) :)

1.- Rehice todo el circuito con los 2 74HC595, y lo hice de manera de asegurarme que no quede algún contacto mal hecho.

2.- Con una fuente de alimentación de 12v 20A DC preparé dos salidas, una de 6,5 voltios para el Arduino UNO y 5 voltios para los Relés.

Aquí una foto del circuito:

|500x304

Este es el Relé, pone que necesita 15 a 20 mA por entrada:

|500x438

Programé el Arduino UNO para que encienda 10 segundos y luego apague otros 10 segundos. Cada 3 o 4 ciclos falla, no enciende generalmente ninguno de los dos Relés. Te recuerdo que conecté un bombillo led de 10 watts y un secador de calello de 1000 watts (por supuesto con alimentación independiente de 220 voltios AC) y que en una prueba anterior SIN el 74HC595, conectada la regleta de relés directamente al Arduino no falla.

Por las dudas pongo foto de los reductores de voltaje:

|500x367

Repasemos el código que usas, algo se nos escapa. Vuelvelo a postear

Ok.

/********************************************************************************
 *  Programa que controla 16 Relés utilizando
 *  dos ShiftRegister 74HC595. Los Relés TIENEN LOGICA INVERSA
 *  Primero se declaran las 3 variables para el 74HC595 y luego las dos variables
 *  que llevan la secuencia de Relés encendidos o apagados (1/0)
 ********************************************************************************/

byte RelayDatos = 2;
byte RelayReloj = 3;
byte RelayGatillo = 4;
byte SeqRelay1 = 0b11111111;
byte SeqRelay2 = 0b11111111;

void setup()
{
    pinMode(RelayDatos, OUTPUT);       //Se configuran los tres pines del
    pinMode(RelayGatillo, OUTPUT);     //74HC595 como salidas
    pinMode(RelayReloj, OUTPUT);
}

void loop()
{
    bitWrite(SeqRelay1,7,0);              //Enciende el SEGUNDO 595
    bitWrite(SeqRelay2,1,0);              //Enciende el PRIMER 595)
    Relay595(SeqRelay1,SeqRelay2);        //Llama a la función Relay595
    delay(10000);
    bitWrite(SeqRelay1,7,1);              //Apaga el SEGUNDO 595
    bitWrite(SeqRelay2,1,1);              //Apaga el PRIMER 595)
    Relay595(SeqRelay1,SeqRelay2);        //Llama a la función Relay595
    delay(10000);
}
void Relay595(byte Primero,byte Segundo) 
{
    digitalWrite(RelayGatillo, 0);        //Desactiva el 74HC595         
    shiftOut(RelayDatos, RelayReloj, MSBFIRST, Primero);  //Entran los
    shiftOut(RelayDatos, RelayReloj, MSBFIRST, Segundo);  //datos al 595
    digitalWrite(RelayGatillo, 1);        //Ahora activa el 74HC595
    delay(500);                           //Aguarda medio segundo
}

Me parece saber donde esta el problema. Dejame probar algo y te hago el comentario que estoy suponiendo.
Ciclo1
595ciclo1.png
Ciclo2
595ciclo2.png

corresponden a este código levemente modificado

/********************************************************************************
 *  Programa que controla 16 Relés utilizando
 *  dos ShiftRegister 74HC595. Los Relés TIENEN LOGICA INVERSA
 *  Primero se declaran las 3 variables para el 74HC595 y luego las dos variables
 *  que llevan la secuencia de Relés encendidos o apagados (1/0)
 ********************************************************************************/

byte RelayDatos = 2;
byte RelayReloj = 3;
byte RelayGatillo = 4;
byte SeqRelay1 = 0b11111111;
byte SeqRelay2 = 0b11111111;

void setup()
{
    pinMode(RelayDatos, OUTPUT);       //Se configuran los tres pines del
    pinMode(RelayGatillo, OUTPUT);     //74HC595 como salidas
    pinMode(RelayReloj, OUTPUT);
    Serial.begin(9600);
}

void loop()
{
    Serial.println("Ciclo 1");
    bitWrite(SeqRelay1,7,0);              //Enciende el SEGUNDO 595
    bitWrite(SeqRelay2,1,0);              //Enciende el PRIMER 595)
    Relay595(SeqRelay1,SeqRelay2);        //Llama a la función Relay595
    delay(1000);
    Serial.println("Ciclo 2");
    bitWrite(SeqRelay1,7,1);              //Apaga el SEGUNDO 595
    bitWrite(SeqRelay2,1,1);              //Apaga el PRIMER 595)
    Relay595(SeqRelay1,SeqRelay2);        //Llama a la función Relay595
    delay(1000);
}
void Relay595(byte Primero,byte Segundo) 
{
    digitalWrite(RelayGatillo, 0);        //Desactiva el 74HC595         
    shiftOut(RelayDatos, RelayReloj, MSBFIRST, Primero);  //Entran los
    shiftOut(RelayDatos, RelayReloj, MSBFIRST, Segundo);  //datos al 595
    digitalWrite(RelayGatillo, 1);        //Ahora activa el 74HC595
    delay(500);                           //Aguarda medio segundo
}

Verás que funciona perfectamente. Asi que tienes un problema de hardware en tu montaje.

Gracias, lo miraré para ver las diferencias con el circuito que he hecho yo:

|500x336

En cuanto mire las diferencias comento.

Pues como diferencias entre ambos circuitos entiendo que en el circuito que tu has puesto tiene solo un pin positivo en cada 595 y un pin negativo en cada 595, y las resistencias puestas en la entrada negativa, por lo demás las conexiones Data, Clock y Latch son las mismas, lo mismo que las salidas para los relés.
Estos días no puedo probar el circuito, pero de todas formas me podrías decir si lo que veo es correcto?

PD: recordar que el circuito que he hecho (posteado en la sección Software) con las mismas conexiones para los leds piloto funciona sin problemas.

En el programa Proteus, no se visualizan VCC y GND de los integrados a menos que lo pidas especificamente.

Asi que los esquemas deben ser iguales.

El circuito que yo hice funciona sin poblemas.