Aprenda a Utilizar o Módulo Multiplexador (MUX) com Arduino
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
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:
- Arduino UNO.
- Protoboard 400 pontos (ou outras).
- Módulo Multiplexador CD74HC4067 16 Canais.
- Barra Gráfica Bargraph com 10 LEDs (pode ser substituído por LEDs comuns, usei a barra para facilitar na montagem).
- Resistores 1/4W de 220Ω ou mais.
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.
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); } [...]
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.