fbpixel
Etiquetas: ,

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 entradas digitales. Por lo tanto, esta solución es ideal para permitirnos controlar los relés y mantener las salidas del microcontrolador 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.

esp32_74HC595x1_8relays_bb-1280x1082 Accionamiento de 8 relés con ESP32 y registro de desplazamiento

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.

nodemcu32s-74hc595-8relays-monitor Accionamiento de 8 relés con ESP32 y registro de desplazamiento

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

Esquema

esp32_74HC595x2_16relays_bb-1280x662 Accionamiento de 8 relés con ESP32 y registro de desplazamiento

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

nodemcu32s-74hc595-16relays-monitor Accionamiento de 8 relés con ESP32 y registro de desplazamiento

Próximos pasos

Fuentes