Arduino e ULN2803: controlando circuitos de maior tensão com um chip fácil de lidar

O CI ULN2803 é barato, fácil de conectar e programar, e permite que o Arduino controle de maneira simples 8 portas de um circuito de até 50V.

Para controlar no Arduino componentes que exigem maior tensão ou corrente, como leds de alta potência, relés, solenóides, motores DC unidirecionais e outros, é necessário recorrer a intermediários capazes de fazer a ligação entre a baixa capacidade de tensão e corrente do Arduino, e as demandas do circuito que está sendo controlado.

Anteriormente já vimos como fazer isso usando os baratíssimos transistores NPN e também usando um chip L239D, e agora chegou o momento de ver como fazer isso com o chip ULN2803.

Usarei novamente o meu exemplo de aplicação: um piano automático em que um conjunto de solenóides como o da imagem abaixo fazem o papel de dedos do pianista, acionando as teclas quando o Arduino comandar.

No artigo “Solenoides no Arduino com o chip driver L293D” eu já expliquei a situação: os solenóides exigem mais tensão e corrente do que o Arduino pode entregar diretamente, e assim precisam de um intermediário que possa ser controlado pelo Arduino para então acioná-los. Esses intermediários conseguem gerenciar para estar ao mesmo tempo no nível de tensão do Arduino e dos solenóides, sem colocar essas tensões em contato entre si.

Naquele artigo eu controlei 4 solenóides com um chip L293D, que realiza a função de intermediário descrita acima ao atuar na forma de uma Ponte H Dupla, que é um circuito capaz de controlar 2 motores DC permitindo definir o sentido do seu movimento – em outras palavras, se o motor estiver conectado às rodas de um carrinho, a Ponte H permite definir se ele vai andar para a frente ou para trás.

Diferentemente dos motores DC, os solenóides só têm o estado aberto e o fechado, não é possível inverter seu sentido. É por isso que o L293D, capaz de gerenciar 2 motores DC, consegue acionar 4 solenóides. Mas também é por isso que o uso de um chip de Ponte H para acionar solenóides é um certo desperdício de capacidade, e assim procurei outra alternativa.

E essa alternativa veio na forma do chip ULN2803, que não oferece uma Ponte H, é consideravelmente mais barato que o L293D (R$ 1,85 contra R$ 9,89, na loja de eletrônica da esquina), e tem o dobro dos pinos de controle disponíveis: dá para acionar até 8 solenóides diretamente conectados a ele.

ULN2803: como funciona

Os detalhes técnicos sobre o chip ULN2803 estão na sua datasheet, mas para mim o essencial é que ele é capaz de ser gerenciado diretamente pelo Arduino e tem 8 pinos de controle para gerenciar 8 dispositivos externos, e os 12V/500mA dos meus solenóides estão tranquilamente dentro da sua faixa de atuação (que vai até 50V).

Não é necessário entender o conceito para usar o chip, mas vale o registro: o ULN2803 funciona como se fosse uma matriz de 8 pares Darlington em configuração NPN, cada um incluindo um diodo para se proteger contra retornos de corrente típicos do acionamento de motores, solenóides, relés e outros componentes indutores.

As consequências das definições acima são importantes: por ser Darlington, o chip permite que a pequena corrente do Arduino controle correntes maiores; por ser NPN, sabemos que o que deve ser conectado ao chip é o negativo/terra dos componentes que forem ser controlados por ele; e por incluir o diodo, sabemos que não precisamos nos encarregar de colocar essa usual segurança adicional no circuito.

ULN2803 e Arduino: como conectar

Conectar os pinos do ULN2803 ao Arduino é bem simples:

Como você pode ver na imagem acima, ele tem 18 pinos, 9 de cada lado. Olhando-o na posição da imagem, note que os 8 pinos superiores de cada lado são pares entre si: 1B com 1C, 2B com 2C, etc., até 8B com 8C.

Basicamente eu conectei cada pino "B" (os da esquerda na imagem) a um pino de saída do Arduino, e cada pino "C" (os da direita na imagem) ao negativo de um relé – poderia ser ao negativo ou terra de um led, de um motor ou do que eu fosse controlar, desde que dentro dos parâmetros de operação do chip.

Como é o negativo do relé que está conectado ao chip, naturalmente o seu positivo deverá ser conectado à fonte de alimentação adequada. Quando um pino do Arduino que está conectado a um pino "B" do ULN2803 recebe HIGH, o pino "C" correspondente abre conexão com o terra, e o relé conectado a ele será acionado. Quando o mesmo pino do Arduino receber LOW, a conexão do relé com o terra será encerrada.

Restam os 2 pinos inferiores: GND e COM. O GND (esquerda no diagrama) deve ser conectado ao terra do circuito, e o COM deve ser conectado à fonte de alimentação do circuito controlado – no meu caso, uma fonte de 12V capaz de alimentar os solenóides.

É só isso: pinos de entrada com pinos de saída, mais terra e fonte:

O diagrama simplificado acima demonstra as conexões de pinos para 2 solenóides. Note que:

  1. Cada um dos solenóides tem 2 fios, sendo que o terra é conectado a uma porta "C" do ULN2803, e o outro fio (positivo) é conectado aos 12V da fonte externa1.
  2. Cada um dos pinos "B" correspondentes aos pinos "C" onde há solenóides está conectado a um pino de saída do Arduino.
  3. Para finalizar, o pino 9 (GND) do ULN2803 está conectado ao terra, e o pino 10 (COM) do ULN2803 está conectado aos 12V da fonte externa.

Arduino e ULN2803: como programar

Se você achou simples a conexão física dos pinos, saiba que a programação é mais simples ainda: basta configurar (com pinMode()) para OUTPUT os pinos do Arduino que estiverem conectados aos pinos "B" do ULN2803, e aí enviar (com digitalWrite()) os valores HIGH e LOW para esses pinos quando quiser que os circuitos correspondentes sejam ligados ou desligados, respectivamente.

Para o diagrama de conexão apresentado acima, uma inicialização típica seria:

void setup() {
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);
}

Para ativar e desativar, alternadamente, os 2 solenóides, eu poderia usar uma rotina como esta:

void loop() {
  digitalWrite(8,HIGH);
  delay(100);
  digitalWrite(8,LOW);
  delay(100);
  digitalWrite(9,HIGH);
  delay(100);
  digitalWrite(9,LOW);
  delay(100);
}

Fora isso, é acrescentar a complexidade que a aplicação exigir ;-)

 
  1.  Na prática, estes solenóides não têm polaridade, então tanto faz qual dos seus 2 fios é conectado ao chip ou à fonte. A distinção pode ser importante caso você esteja conectando componentes com polaridade, como alguns motores, os leds ou os relés, por exemplo.

Comentar

Dos leds ao Arduino, ESP8266 e mais

Aprenda eletrônica com as experiências de um geek veterano dos bits e bytes que nunca tinha soldado um led na vida, e resolveu narrar para você o que descobre enquanto explora esse universo – a partir da eletrônica básica, até chegar aos circuitos modernos.

Por Augusto Campos, autor do BR-Linux e Efetividade.net.

Recomendados

Livro recomendado


Artigos já disponíveis

Comunidade Arduino

O BR-Arduino é integrante da comunidade internacional de entusiastas do Arduino, mas não tem relação com os criadores e distribuidores do produto, nem com os detentores das marcas registradas.

Livros recomendados