fbpixel
Étiquettes : ,
3.7
(3)

Dans cette série de tutoriels, nous allons voir comment piloter une multitude de relais avec un microcontrôleur NodeMCU32S et des registres à décalages 74HC595. Nous allons ensuite voir comment adresser chaque relais individuellement. Enfin, nous allons créer une interface Web pour piloter chaque relais par internet. Ce projet est une bonne base pour développer un système domotique pour chez vous.

Ce tutoriel peut être appliqué à n’importe quel microcontrôleur. Il faudra faire attention à modifier le schéma de connexion et le code pour qu’ils correspondent à votre usage.

Matériel

  • NodeMCU 32S
  • Breadboard
  • Jumper cable
  • Module 8 relais
  • Registre à décalage 74hc595

Principe

Pour piloter le module 8 relais, il faut réserver 8 sorties digitales du microcontrôleur. Afin d’économiser le nombre d’entrée/sortie du microcontrôleur, différent circuit intégrés peuvent être utilisé. Notamment, le registre à décalage (ou shift register). Le registre à décalage 74HC595 possède 8 sorties programmables, pouvant prendre comme valeur 0 ou 5V et ne nécessite que 3 entrées digitales. Cette solution est donc idéale pour nous permettre de piloter les relais et garder les sorties du microcontrôleur pour d’autres fonctionnalités.

Schéma

Pour piloter le registre à décalage, le NodeMCU se connecte de la manière suivante:

  • GND masse du circuit intégré
  • Vcc broche d’alimentation. Généralement connecté à 5V
  • SH_CP ou RCLK relié à la broche 33
  • ST_CP ou SRCLK reliée à la broche 32
  • DS ou SER reliée à la broche 25

Les sorties du circuit intégré 74HC595 (Q0-Q7) sont directement connectés aux entrées du module 8 relais. Dans ce tutoriel, nous n’utilisons pas les broches Enable (OE) et Reset(MR).

  • OE Output enable, active LOW. Broche connectée à GND pour activer les sorties
  • MR Master reset, active LOW. Broche de remise à zéro. Connectée au 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

Code

Dans le code suivant, nous allons tout d’abord définir les fonctions de base pour gérer le registre à décalage. Puis, nous allons actionner les relais un par un en utilisant une boucle 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);

  }
}

Résultat

Une fois les composants branchés correctement et le code chargé dans le microcontrôleur, les relais devrait s’activer les uns à la suite de autres.

Bonus: Contrôler 16 relais avec deux registres à décalage

Schéma

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

Code

La beauté de ce code est que pour le faire fonctionner avec un second registre à décalage il suffit de modifier le paramètre:

#define number_of_74hc595s 2

Résultat

Prochaines étapes

Sources

How useful was this post?

Click on a star to rate it!

Average rating 3.7 / 5. Vote count: 3

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?