fbpixel
Etiquetas: ,
0
(0)

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.

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

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.

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

Diagrama

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

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

Próximas etapas

Fontes

How useful was this post?

Click on a star to rate it!

Average rating 0 / 5. Vote count: 0

No votes so far! Be the first to rate this post.

As you found this post useful...

Follow us on social media!

We are sorry that this post was not useful for you!

Let us improve this post!

Tell us how we can improve this post?