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:
- 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.
- Cada um dos pinos "B" correspondentes aos pinos "C" onde há solenóides está conectado a um pino de saída do Arduino.
- 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 ;-)
- 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