Font Size

Oi pessoal, tudo bem? No post de hoje vamos trabalhar com um componente que vai ajudar muito na hora de criar projetos um pouco maiores. Conforme a ideia vai crescendo, podemos encontrar a limitação do número de portas de um controlador (foco para o Arduino UNO e NANO). Sendo sincero, existem muitas formas de resolver esse problema. Hoje trabalharemos uma delas, a aplicação de um módulo Multiplexador (MUX) com as portas do Arduino.

O que significa multiplexar?

A expressão multiplexar está muito ligada à área de telecomunicações, pois consiste em intercalar vários dados e sinais em um mesmo canal de comunicação. O que isso significa? De forma simples, conseguimos controlar várias saídas a partir de um único fio, apenas apontando antes qual saída vamos usar.

Imagem 01: Multiplexador genérico

Lógica por trás de um MUX
Multiplexador com 4 canais.

Conforme explica a figura acima, as entradas de controle podem variar de modo digital (ou seja: 0 ou 1). E de acordo com essa variação, será possível escolher para qual dos 4 canais o sinal irá sair. O controle entre esses canais de saídas pode ser comutado em altíssimas velocidades, o que permite transitar entre as saídas conforme desejado.

Como utilizar + Aplicação do MUX nas portas do Arduino

Para a aplicação de hoje, vamos construir um circuito multiplexador para controlar até 16 LEDs com apenas 4 entradas de controle. Então vamos para a lista de materiais:

Multiplexador
MUX 16 Canais

 

Conforme visto, o multiplexador utilizado foi o CD74HC4067 de 16 canais (indo de C0 ao C15), que necessita de apenas 4 entradas de controle, podendo variar entre ‘0000’ e ‘1111’ para selecionar qual dos canais estará acionado.

portas do Arduino
Multiplexador atuando em display Bargraph através das portas do arduino.

Em primeiro lugar, alguns detalhes precisam ser ditos sobre o circuito. Desde que vá ser utilizado por um longo período, é interessante que cada LED tenha um resistor individual de 220Ω ou 330Ω. Como ele foi construído só pra mostrar o funcionamento do MUX com o Arduino, foi interessante simplificar com um resistor no negativo apenas.

Em suma, o código utilizado é bem simples e tranquilo, ele cria uma função que irá comutar para estados dos canais de saída pré-definidos.

void setup() 
{
  pinMode (2, OUTPUT); //configuração das portas
  pinMode (3, OUTPUT);
  pinMode (4, OUTPUT);
  pinMode (5, OUTPUT);
  #define s0 5 //declaração das variáveis
  #define s1 4 //cada variável equivale a um bit dos 4 de controle
  #define s2 3
  #define s3 2
}

void modos(int modo) //criando a função para comutar entre os leds
{
  if (modo == 1)
  {
    digitalWrite(s0, LOW);
    digitalWrite(s1, LOW);
    digitalWrite(s2, LOW);
    digitalWrite(s3, LOW);
    delay(1);
  }
  else if (modo == 2)
  {
    digitalWrite(s0, LOW);
    digitalWrite(s1, HIGH);
    digitalWrite(s2, LOW);
    digitalWrite(s3, LOW);
    delay(1);
  }
  else if (modo == 3)
  {
    digitalWrite(s0, LOW);
    digitalWrite(s1, LOW);
    digitalWrite(s2, HIGH);
    digitalWrite(s3, LOW);
    delay(1);
  }
  else if (modo == 4)
  {
    digitalWrite(s0, LOW);
    digitalWrite(s1, LOW);
    digitalWrite(s2, LOW);
    digitalWrite(s3, LOW);
    delay(1);
  }
  else
  {
    delay(1);
  }
  return;
}
void loop() 
{
  modos(1); //aqui são feitas as comutações, caso reduza o tempo de atraso,
  delay(1000); //poderá ver mais de um LED por vez.
  modos(2);
  delay(1000);
  modos(3);
  delay(1000);
  modos(4);
  delay(1000);
}

Conforme trabalhado, mas agora com um ajuste, podemos diminuir o atraso entre as comutações, e então acionar vários LEDs “ao mesmo tempo”:

[...]
void loop() 
{
  modos(1); //modos trabalhados antes, mas com um delay muito menor.
  delay(5); //imperceptível ao olho humano.
  modos(2);
  delay(5);
  modos(3);
  delay(5);
  modos(4);
  delay(5);
}
[...]
Bom, agora vamos ver o nosso circuito em funcionamento:

 

Como enxergamos vários LEDs acionados por vez?

Em primeiro lugar, o segredo para acionar mais de um LED “ao mesmo tempo” é alternar entre as configurações de controle muito rápido, de modo invisível ao olho humano. A aplicação é apenas um exemplo simples com o que pode ser feito, mas podemos estender para o processo inverso. Da mesma forma, o Arduino pode trabalhar como saída, ele pode realizar a leitura de vários sensores por uma única porta, através do modo demultiplexador do componente.

As luzes das nossas casas, por exemplo, oscilam 60 vezes dentro do período de um segundo, o que chamamos de 60Hz (frequência). Sendo assim, ao atribuir uma rápida comutação entre qual das saídas possíveis irá receber o sinal do nosso Arduino, conseguimos replicar esse mesmo efeito, tornando a comutação imperceptível ao olho humano.

Por fim, espero que tenham gostado da aplicação e convido vocês à testarem o componente, que tem muito para agregar aos projetos! Fiquem à vontade para tirar eventuais dúvidas sobre o componente e como ele funciona.

4.43 avg. rating (88% score) - 7 votes