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.