Como expandir portas de saída do Arduino

Em muitos projetos existem algumas vezes a necessidade de controlar vários dispositivos e não queremos trocar o Arduino UNO pelo Arduino Mega. Algumas vezes, mesmo usando o Arduino Mega, a quantidade de portas e insuficiente. O que fazer? Comprar vários Arduinos até conseguir a quantidade de portas necessárias?

Existem várias maneiras para expandir as portas do Arduino:

  1. Utilizando portas lógicas para selecionar portas diferentes e reaproveitar duplicando ou quadruplicando portas já utilizadas
  2. Utilizando DEMUX
  3. Montando uma matriz de linhas e colunas com opto-acopladores ou CIs similares
  4. Utilizando Shift Register como o 74HC595
    1. Descrição: Utiliza-se 4 pinos do Arduino para o envio dos dados, enviando cada bit, 1 por 1 acompanhado do sinal de clock até que todos estejam posicionados em suas saídas correspondentes. Então, é enviado um sinal para que as saídas sejam atualizadas. Até então, as saídas permanecem no estado anterior. Existe a possibilidade de evitar o uso do terceiro pino, implementando um circuito para atualizar as saídas automaticamente, assim que o último bit é enviado pelo Arduino. O quarto pino é necessário apenas para limpar as saídas ao ligar o Arduino porem é possível realizar esta limpeza automaticamente através de circuito RC. Portanto, podemos considerar que esta solução ocupa apenas 2 saídas do Arduino.Vantagens: Ocupa apenas 2 pinos do Arduino, Solução barata, simples de implementar, expansível até muito mais que 200 portas de saída (de 8 em 8)
    2. Contras: O código do sketch são um pouco mais complicados porém pode usar uma biblioteca para simplificar, utiliza mais ciclos de clock para atualizar as saídas
    3. Um projeto está sendo criado e será disponível brevemente na área de projetos deste site
    4. Explicação do funcionamento do 74xxy595
74HC595
  1. Utilizando expansores de portas pela interface I2C como o PCF8574, MCP23016, MCP23017
  2. Utilizando expansores de portas pela interface SPI como o MCP23S17

Boa sorte!