fbpixel
Etiquetas: ,

Nesta série de tutoriais, veremos como controlar uma grande quantidade de relés utilizando um microcontrolador NodeMCU32S e registos de deslocamento 74HC595. Em seguida, veremos como endereçar cada relé individualmente. Finalmente, criaremos uma interface Web para controlar cada relé através da Internet. Este projeto é uma boa base para desenvolver um sistema de domótica para a sua casa.

Este tutorial pode ser aplicado a qualquer microcontrolador. Terá de ter o cuidado de modificar o diagrama de ligação e o código para se adequar à sua utilização.

Hardware

  • NodeMCU 32S
  • Prancheta
  • Cabo de ligação
  • Módulo de 8 relés
  • 74hc595 registo de deslocação

Princípio

Para acionar o módulo de 8 relés, é necessário reservar 8 saídas digitais no microcontrolador. Para economizar no número de entradas

Diagrama

Para acionar o registo de deslocação, o NodeMCU é ligado da seguinte forma

  • GND Terra do circuito integrado
  • Pino de alimentação Vdc. Normalmente ligado a 5V
  • SH_CP ou RCLK ligado ao pino 33
  • ST_CP ou SRCLK ligado ao pino 32
  • DS ou SER ligado ao pino 25

As saídas do circuito integrado 74HC595 (Q0-Q7) são ligadas diretamente às entradas do módulo de 8 relés. Neste tutorial, não utilizamos os pinos Enable (OE) e Reset (MR).

  • OE Habilitação de saída, ativo BAIXO. Pino ligado a GND para ativar as saídas.
  • MR Rearme principal, ativo em BAIXO. Pino de reinicialização. Ligado 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 Controle 8 relés com um ESP32 e um registo de deslocamento

Código

No código seguinte, começamos por definir as funções básicas para gerir o registo de deslocações. Depois, activamos os relés um a um utilizando um ciclo 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);
  pinMode(OUT_Pin, INPUT);
  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);

  }
}

Resultados

Depois de os componentes terem sido ligados corretamente e o código carregado no microcontrolador, os relés devem ativar-se um após o outro.

nodemcu32s-74hc595-8relays-monitor Controle 8 relés com um ESP32 e um registo de deslocamento

Bónus: Controlo de 16 relés com dois registos de deslocamento

Diagrama

esp32_74HC595x2_16relays_bb-1280x662 Controle 8 relés com um ESP32 e um registo de deslocamento

Código

A vantagem deste código é que, para o fazer funcionar com um segundo registo de deslocação, basta alterar o parâmetro:

#define number_of_74hc595s 2

Resultados

nodemcu32s-74hc595-16relays-monitor Controle 8 relés com um ESP32 e um registo de deslocamento

Próximas etapas

Fontes