Etiquetas: ,
0
(0)

En esta serie de tutoriales, veremos cómo manejar una multitud de relés con un microcontrolador NodeMCU32S y registros de desplazamiento 74HC595. A continuación, veremos cómo abordar cada relé individualmente. Por último, crearemos una interfaz web para controlar cada relé a través de Internet. Este proyecto es una buena base para desarrollar un sistema de domótica para su hogar.

Este tutorial se puede aplicar a cualquier microcontrolador. Tendrá que tener cuidado de modificar el esquema de conexión y el código para que se ajuste a su uso.

Hardware

  • NodeMCU 32S
  • Breadboard
  • Jumper cable
  • Módulo de 8 relés
  • Registro de desplazamiento 74hc595

Principio

Para controlar el módulo de 8 relés, hay que reservar 8 salidas digitales del microcontrolador. Para ahorrar el número de entradas/salidas del microcontrolador, se pueden utilizar diferentes circuitos integrados. En particular, el registro de desplazamiento. El registro de desplazamiento 74HC595 tiene 8 salidas programables, que se pueden ajustar a 0 o 5V y sólo requiere 3 salidas digitales. Por lo tanto, esta solución es ideal para permitirnos controlar los relés y mantener las salidas para otras funciones.

Esquema

Para controlar el registro de desplazamiento, la NodeMCU se conecta de la siguiente manera:

  • GND tierra del circuito integrado
  • Pin de alimentación Vdc. Normalmente se conecta a 5V
  • SH_CP o RCLK conectado al pin 33
  • ST_CP o SRCLK conectado al pin 32
  • DS o SER conectado al pin 25

Las salidas del circuito integrado 74HC595 (Q0-Q7) se conectan directamente a las entradas del módulo de 8 relés. En este tutorial, no utilizamos los pines Enable (OE) y Reset (MR).

  • OE Habilitación de la salida, activar LOW. Pin conectado a GND para activar las salidas.
  • MR Reinicio maestro, activar LOW. Clavija de reinicio. Conectado a 5V

Attention: Les sorties d’un microcontrôleur sont limités en courant. Pour piloter autant de relais, il est fortement conseillé d’utiliser une source extérieure de tension.

NodeMCU32S ESP32, shift register 74HC595 and 8 relays module schematics

Código

En el siguiente código, primero definiremos las funciones básicas para gestionar el registro de desplazamiento. A continuación, vamos a operar los relés uno por uno utilizando un bucle for.

//Constants
#define number_of_74hc595s 1
#define numOfRegisterPins number_of_74hc595s * 8
#define SER_Pin 25
#define RCLK_Pin 33
#define SRCLK_Pin 32

//Variables
boolean registers [numOfRegisterPins];

void setup(){
//Init Serial USB
Serial.begin(115200);
Serial.println(F("Initialize System"));
//Init register
pinMode(SER_Pin, OUTPUT);
pinMode(RCLK_Pin, OUTPUT);
pinMode(SRCLK_Pin, OUTPUT);
clearRegisters();
writeRegisters();
delay(500);
}

void loop(){
writeGrpRelay();
}

void clearRegisters(){/* function clearRegisters */ 
//// Clear registers variables 
for(int i = numOfRegisterPins-1; i >=  0; i--){
  registers[i] = HIGH;//LOW;
}}

void writeRegisters(){/* function writeRegisters */ 
//// Write register after being set 
digitalWrite(RCLK_Pin, LOW);
 for(int i = numOfRegisterPins-1; i >=  0; i--){
  digitalWrite(SRCLK_Pin, LOW); int val = registers[i];
  digitalWrite(SER_Pin, val);
  digitalWrite(SRCLK_Pin, HIGH);
}
  digitalWrite(RCLK_Pin, HIGH);
}

void setRegisterPin(int index,int value){/* function setRegisterPin */ 
////Set register variable to HIGH or LOW
registers[index] = value;
}

void writeGrpRelay(){/* function writeGrpRelay */ 
for(int i = numOfRegisterPins-1; i >=  0; i--){
   Serial.print(F("Relay "));Serial.print(i);Serial.println(F(" HIGH"));
   setRegisterPin(i, LOW);
   writeRegisters();
   delay(200); 
   Serial.print(F("Relay "));Serial.print(i);Serial.println(F(" LOW"));
   setRegisterPin(i, HIGH);
   writeRegisters();
  delay(500); 
      
}
}

Resultado

Una vez conectados correctamente los componentes y cargado el código en el microcontrolador, los relés deberían activarse uno tras otro.

Bonus: Controla 16 relés con dos registros de desplazamiento.

Esquema

NodeMCU32S ESP32, shift registers 74HC595 and 16 relays module schematics

Código

Lo bueno de este código es que para hacerlo funcionar con un segundo registro de desplazamiento sólo hay que cambiar el parámetro:

#define number_of_74hc595s 2

Resultado

Próximos pasos

Fuentes

¿De cuánta utilidad te ha parecido este contenido?

¡Haz clic en una estrella para puntuar!

Promedio de puntuación 0 / 5. Recuento de votos: 0

Hasta ahora, ¡no hay votos!. Sé el primero en puntuar este contenido.

Ya que has encontrado útil este contenido...

¡Sígueme en los medios sociales!

¡Siento que este contenido no te haya sido útil!

¡Déjame mejorar este contenido!

Dime, ¿cómo puedo mejorar este contenido?