Site icon AranaCorp

Usar um multiplexador com o Arduino

O multiplexador é um circuito integrado composto por circuitos lógicos que permitem concentrar vários sinais na mesma saída (mutiplexagem ou mux) ou ligar uma entrada em uma de suas N saídas (demultiplexagem ou demux). Neste tutorial, veremos o funcionamento do circuito integrado IC CD4051, que pode ser utilizado como multiplexador e demultiplexador de um a oito canais. Com ele, é possível controlar LEDs ou obter o estado de vários sensores.

Material

Princípio de funcionamento

O multiplexador/demultiplexador é um componente eletrônico contendo um circuito lógico que permite selecionar entre 8 canais. Se o multiplexador for ativado, o common (IN/OUT) liga-se diretamente ao canal selecionado.

Esquema

O multiplexador requer 3 pinos de saída de um microcontrolador, e mais um canal para ativar ou desativar o circuito integrado. Este sinal pode ser ligado à terra se o multiplexador estiver sempre conectado a um canal.

Para aumentar ainda mais o número de entradas e saídas, é possível ligar outro multiplexador em paralelo (há várias montagens possíveis).

Código

Para selecionar os canais do multiplexador, temos de ativar o circuito integrado enviando um estado LOW para o pino INH e depois enviar um estado alto ou baixo para os canais A, B e C, seguindo a tabela lógica do componente.

//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);
      }
}

Resultado

É possível multiplicar o número de entradas e saídas com este simples componente eletrônico. Experimente outras montagens e códigos para desenvolver as suas próprias funcionalidades. Tenha em mente que só se pode controlar um canal de cada vez, então certifique-se de que o componente corresponde à sua necessidade.

Aplicações

Fontes

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

Exit mobile version