Site icon AranaCorp

Utilisation d’un multiplexer avec Arduino

Le multiplexer est un circuit intégré constitué de circuits logiques permettant de concentrer plusieurs signaux sur une même sortie (mutiplexage ou mux) ou, encore, de connecter une entrée sur une de ses N sorties (demultiplexage ou demux). Dans ce tutoriel, nous allons voir l’utilisation du circuit intégré CD4051 qui peut être utilisé comme multiplexer et demultiplexer d’une à huit voies. Il peut permettre de piloter des LED ou encore de récupérer l’état de plusieurs capteurs.

Matériel

Principe de fonctionnement

Le multiplexer/demultiplexer est un composant électronique contenant un circuit logique permettant la sélection parmi 8 voies. Si le miltiplexer est activé, le commun (IN/OUT) est relié directement à la voie sélectionnée.

Schéma

Le multiplexer nécessite 3 broches de sortie d’un microcontrôleur. Plus une voie pour activer ou désactiver le ciruit intégré. Il est possible de connecter ce signal à la masse si le multiplexer est toujours connecté à une voie.

Pour augmenter encore le nombre d’entrée-sortie, il est possible de brancher un autre multiplexer en parallèle (plusieurs montages sont possibles).

Code

Pour sélectionner les voies du multiplexer, il nous faut activer le circuit intégré en envoyant un état BAS sur la broche INH puis envoyer un état haut ou bas aux voies A,B et C en suivant la table logique du composant.

//Constants
#define number_of_mux 1
#define numOfMuxPins number_of_mux * 8
#define enPin 2
#define channelA 4
#define channelB 7
#define channelC 8

//Parameters
const int comPin  = 3;

void setup(){
//Init Serial USB
Serial.begin(9600);
Serial.println(F("Initialize System"));
//Init CD4051B
  pinMode(channelA, OUTPUT);
  pinMode(channelB, OUTPUT); 
  pinMode(channelC, OUTPUT); 
  pinMode(enPin, OUTPUT);
  digitalWrite(channelA, LOW);
  digitalWrite(channelB, LOW);
  digitalWrite(channelC, LOW);
  digitalWrite(enPin, LOW);
}

void loop(){
MuxLED();
}

void selectChannel(int chnl){/* function selectChannel */ 
//// Select channel of the multiplexer 
  int A = bitRead(chnl,0); //Take first bit from binary value of i channel.
  int B = bitRead(chnl,1); //Take second bit from binary value of i channel.
  int C = bitRead(chnl,2); //Take third bit from value of i channel.
  digitalWrite(channelA, A);
  digitalWrite(channelB, B);
  digitalWrite(channelC, C);
  
  Serial.print(F("channel "));Serial.print(chnl);Serial.print(F(" : "));
  Serial.print(C);
  Serial.print(F(","));
  Serial.print(B);
  Serial.print(F(","));
  Serial.print(A);
  Serial.println();
}

void MuxLED(){/* function MuxLED */ 
//// blink leds 
for(int i = 0; i <  numOfMuxPins; i++){
    selectChannel(i);
    Serial.print(F("LED "));Serial.print(i);Serial.println(F(" HIGH"));
    analogWrite(comPin,200);
    delay(200);
    Serial.print(F("LED "));Serial.print(i);Serial.println(F(" LOW"));
    analogWrite(comPin,0);
      }
}

Résultat

Il est possible de multiplier le nombre d’entrée sortie à l’aide de ce simple composant électronique. D’autres montages et codes peuvent être imaginés pour vous permettre de développer vos propres fonctionnalités. Gardez bien en mémoire, que vous ne pouvez piloter qu’une voie à la fois. Il faut donc prendre garde à ce que le composant corresponde bien à votre besoin.

Applications du multiplexer

Sources

Retrouvez nos tutoriels et d’autres exemples dans notre générateur automatique de code
La Programmerie

Quitter la version mobile