Arduino Nano - Optoacoplador PC817: Monitore um Sinal de Entrada DC de 12V/24V
Este tutorial ensina como usar o Arduino Nano com um módulo optoacoplador PC817 para descobrir se um dispositivo de 12V ou 24V está ligado neste momento, sem nenhuma conexão elétrica entre esse dispositivo e a placa. Em detalhes, vamos aprender:
- Qual dos três módulos optoacopladores PC817 - 3-5V, 12V ou 24V - deve ser comprado para o sinal que você quer observar
- Como ligar um módulo optoacoplador PC817 ao Arduino Nano
- Como saber se o seu módulo é ativo em LOW ou ativo em HIGH, e como inverter o código com uma única edição
- Como derivar o módulo em paralelo com uma lâmpada, uma bobina ou um motor para que o Arduino Nano acompanhe o estado real de ligado/desligado dele
- Como programar o Arduino Nano para ler a entrada digital isolada
- Por que o terra do circuito de 12V/24V deve ficar separado do GND do Arduino Nano
- Como montar a mesma coisa a partir do chip PC817 de 4 pinos solto, se você preferir

Como o Arduino Nano é pequeno o bastante para ficar escondido dentro de uma caixa compacta ou atrás do painel de um veículo, ele costuma ser instalado bem ao lado de circuitos que funcionam com tensões muito acima dos seus 5V. Dois trabalhos aparecem sempre, e os dois são, na verdade, a mesma pergunta: aquele dispositivo está ligado ou desligado neste momento?
- Verificar se um circuito de 12V de um veículo está ativo - a linha da ignição, os faróis ou um interruptor de porta - para que um registrador ou alarme baseado em Nano saiba quando o carro está em uso.
- Observar um solenoide, contator ou bobina de relé de 24V em um painel de máquina para confirmar que ele realmente foi energizado e contar as horas em que ficou assim.
Nos dois casos, o Arduino Nano nunca pode encostar nessa tensão. O PC817 fica no meio e deixa a informação passar enquanto a eletricidade fica para trás. Uma instalação em veículo é o exemplo usado em todo este tutorial, por isso o módulo de 12V é o que aparece nos diagramas - os módulos de 24V e de 3-5V são ligados exatamente da mesma forma.
Nós sugerimos:
- Usar um relé se você quer acionar uma carga de 12V ou 24V em vez de detectar uma. Um PC817 apenas lê um sinal, ele não consegue acionar uma carga.
- Usar um sensor de tensão se você precisa do valor real de uma tensão DC em vez de um simples estado presente/ausente.
Hardware Necessário
Or you can buy the following kits:
| 1 | × | DIYables Sensor Kit (18 sensors/displays) |
As linhas de módulo acima são alternativas, não uma lista de compras - compre apenas o módulo que corresponde à tensão do sinal que você pretende observar.
Sobre o Módulo Optoacoplador PC817
O PC817 é um optoacoplador de 4 pinos, também chamado de fotoacoplador ou opto-isolador. Dentro do corpo de plástico há um LED infravermelho voltado para um fototransistor, separados por um vão isolante. Quando a corrente passa pelo LED, a luz dele liga o transistor, então o sinal atravessa como luz em vez de eletricidade. Essa é a razão de os dois lados permanecerem eletricamente separados: nada conduz de um lado para o outro.
Um módulo optoacoplador PC817 coloca esse chip em uma pequena PCB junto com o resistor em série de que o LED dele precisa, um LED de status, bornes de parafuso para a fiação externa e um conector para a placa. Para um Arduino Nano, isso significa que uma linha de 12V ou 24V pode ser detectada como uma entrada digital comum, enquanto o Nano mantém o seu próprio mundo de 5V intacto, e nada precisa ser soldado ou calculado.

Qual Módulo Optoacoplador PC817 Eu Preciso?
Esta é a única decisão que precisa ser tomada antes de fazer o pedido, porque o resistor em série do módulo já vem instalado e é dimensionado para uma única tensão de entrada. Por isso, os módulos são vendidos como três variantes separadas, e elas não são intercambiáveis:
- Módulo optoacoplador de 12V - o usado em todo este tutorial. Serve para um fio de ignição, um circuito de faróis, uma linha de interruptor de porta, uma bobina de relé de 12V e qualquer outra coisa que funcione com a bateria de um carro ou moto.
- Módulo optoacoplador de 24V - para sinais DC de 24V: uma bobina de contator ou solenoide em um painel de máquina, uma saída de CLP, o sistema elétrico de um caminhão ou ônibus.
- Módulo optoacoplador de 3-5V - para sinais de nível lógico, tanto de 3,3V quanto de 5V. É o que se deve comprar quando o objetivo é quebrar um loop de terra entre duas placas, e não suportar uma tensão alta.
Cada variante também é vendida em versões de 1, 2, 4 e 8 canais, então um Nano escondido atrás de um painel pode observar várias linhas com uma única PCB pequena - desde que todas as linhas nessa PCB funcionem na tensão do módulo.
WARNING
Não use um módulo fora da tensão para a qual ele foi feito. Um módulo de 12V alimentado por uma linha de 24V recebe aproximadamente o dobro da corrente que o LED interno dele foi projetado para suportar, e será danificado. Um módulo de 24V alimentado por uma linha de 12V fica subalimentado: a saída dele pode comutar tarde, comutar só às vezes ou nunca comutar. Escolher a variante é a versão do módulo para dimensionar um resistor, e é igualmente implacável.
Especificações
Estes são os números do chip PC817 que fica no centro dos três módulos:
| Parâmetro | Valor |
|---|---|
| Encapsulamento | DIP de 4 pinos, pino 1 marcado por um ponto ou um entalhe |
| Tensão direta do LED (Vf) | cerca de 1,2V típica, 1,4V máx. |
| Corrente direta do LED (If) | 20mA contínuos máx., 5-20mA normal, 10mA é um bom alvo |
| Tensão coletor-emissor (VCEO) | 35V máx. |
| Corrente de coletor (IC) | 50mA máx. |
| Dissipação de potência do coletor | 150mW |
| Tensão de isolação | 5000Vrms por 1 minuto |
| Razão de Transferência de Corrente (CTR) | 50% a 600% dependendo da classe (A 80-160%, B 130-260%, C 200-400%, D 300-600%) |
| Velocidade de comutação | tempo de subida cerca de 4us, tempo de descida cerca de 3us |
| Temperatura de operação | -30°C a +100°C |
Pinagem do Módulo Optoacoplador PC817
Um módulo de um canal tem dois bornes de parafuso no lado de entrada isolado e um conector de três pinos no lado do Arduino Nano.
- Borne IN+ (ou +): o positivo do lado de entrada. O sinal de 12V ou 24V deve ser conectado a este borne. Nenhum resistor em série é adicionado aqui - o módulo já traz o que corresponde à sua variante.
- Borne IN- (ou -): o negativo do lado de entrada. Ele deve ser conectado ao terra do circuito de 12V/24V, NÃO ao GND do Arduino Nano.
- Pino VCC: deve ser conectado ao pino 5V do Arduino Nano.
- Pino GND: deve ser conectado a um pino GND do Arduino Nano.
- Pino OUT: a saída isolada, chamada de DO ou OUT1..OUTn nas placas de vários canais. Ele deve ser conectado a um pino de entrada digital do Arduino Nano.
WARNING
O borne IN- e o pino GND parecem combinar, mas nunca devem ser unidos. O IN- pertence ao circuito de 12V/24V e o GND pertence ao Arduino Nano. Ligar os dois terras juntos elimina o isolamento, e o vão entre eles é exatamente o que protege a placa.
※ Nota:
A disposição dos pinos em um módulo de isolamento PC817 pode variar de um fabricante para outro. Sempre confie nos rótulos impressos no módulo, e não na posição de um pino. Olhe com atenção antes de ligar!
Como o Arduino Nano Lê o Sinal Isolado
O pino OUT do módulo vai para um pino de entrada digital do Arduino Nano configurado com o pull-up interno. Um resistor externo de 10 kΩ para 5V faria o mesmo trabalho, mas o pull-up interno é mais simples e não custa nada - o mesmo truque usado no tutorial Arduino Nano - Botão.
Dentro do módulo, o fototransistor fica entre esse pino e o terra. Quando o sinal externo energiza o LED de entrada, o transistor conduz e puxa o pino para baixo contra o pull-up:
| Sinal externo de 12V/24V | LED interno | Fototransistor | O pino do Arduino Nano lê |
|---|---|---|---|
| Presente | aceso | conduzindo | LOW |
| Ausente | apagado | não conduzindo | HIGH |
Então um LOW no pino significa que o sinal externo ESTÁ presente. Isso é o oposto do que a maioria dos iniciantes espera, e precisa ser invertido no código. Isso é física consolidada para um fototransistor ligado direto ao pino, que é exatamente como o chip solto se comporta - mas um módulo pode acrescentar uma surpresa, o que nos leva à próxima seção.
Módulo Optoacoplador PC817: Ativo em HIGH ou Ativo em LOW?
A tabela acima descreve o fototransistor puro. Muitos módulos o deixam exatamente assim, mas alguns fabricantes adicionam um estágio inversor na placa, de modo que o pino OUT passa a seguir a entrada e lê HIGH enquanto o sinal está presente. Os dois tipos são vendidos com as mesmas fotos de produto, e nenhuma leitura do anúncio resolve isso. A forma confiável é gastar um minuto medindo o seu próprio módulo:
- Ligue o módulo ao Arduino Nano como mostrado abaixo, faça o upload do sketch deste tutorial e abra o Serial Monitor.
- Deixe os bornes IN+ e IN- desconectados e observe o que é impresso.
- Agora aplique o sinal de 12V ou 24V nesses bornes e observe o que muda.
- A leitura que aparecer enquanto o sinal está presente é o nível ativo do seu módulo. Se for LOW, o seu módulo é ativo em LOW; se for HIGH, ele é ativo em HIGH.
- Use o LED de status do módulo como segunda opinião. Esse LED é acionado pelo lado da entrada, então ele acende sempre que os bornes de entrada estão energizados. Se o LED está aceso e o Serial Monitor ainda diz OFF, a polaridade está ao contrário, e não a ligação.
Corrigir isso é uma única edição. O sketch guarda a polaridade em uma constante perto do início:
Deixe como true para um módulo ativo em LOW, que é o tipo mais comum e o padrão aqui, e mude para false para um ativo em HIGH. Nada mais no código precisa ser alterado.
Montando a Partir do Chip PC817 Solto
Se você preferir soldar o chip solto de 4 pinos na sua própria placa perfurada, tudo o que foi dito acima ainda vale, exceto que o resistor em série agora precisa ser instalado por você.

O pino 1 é o mais próximo do ponto ou do entalhe. Pino 1 - Anodo (A) e Pino 2 - Catodo (K) formam o lado de entrada: o sinal deve ser conectado ao pino 1 por meio do resistor em série, e o pino 2 ao terra desse circuito. O Pino 4 - Coletor (C) deve ser conectado ao pino de entrada do Arduino Nano, e o Pino 3 - Emissor (E) ao GND do Arduino Nano. A mesma regra vale aqui: o pino 2 e o pino 3 nunca devem ser unidos.
O valor do resistor vem de R = (Vin - 1.2) / 0.01, visando 10mA no LED interno, cuja tensão direta é cerca de 1,2V:
| Tensão de entrada | Resistor a usar | Potência nominal |
|---|---|---|
| 3.3V | 220Ω | 1/4W |
| 5V | 390Ω | 1/4W |
| 12V | 1 kΩ | 1/4W |
| 24V | 2.2 kΩ | 1/2W |
Deixar um resistor de 1 kΩ em uma linha de 24V faz passar cerca de 22,8mA pelo LED, acima do limite de 20mA do PC817. 3,3V é o piso prático, já que o LED consome 1,2V disso sozinho. Um chip solto é sempre ativo em LOW, então MODULE_ACTIVE_LOW continua true.
Diagrama de Ligação
Ligando o Módulo Optoacoplador PC817 ao Arduino Nano
O sinal de 12V ou 24V e o terra dele vão para os bornes de parafuso IN+ e IN-, enquanto os pinos VCC, GND e OUT do conector vão para o 5V, o GND e o pino 2 do Arduino Nano.

This image is created using Fritzing. Click to enlarge image
Veja A melhor forma de alimentar o Arduino Nano e outros componentes.
Ligando o Chip PC817 Solto ao Arduino Nano
Na montagem opcional com o chip solto, o sinal chega ao pino 1 por meio do resistor em série, o terra desse circuito retorna ao pino 2 e, do outro lado, o pino 4 do chip vai ao pino 2 do Arduino Nano, enquanto o pino 3 do chip vai ao GND do Arduino Nano.
Ligando o PC817 em Paralelo com um Dispositivo para Monitorá-lo Ligado ou Desligado
Os dois diagramas acima supõem que um sinal é entregue a você em um par de fios conveniente. Dentro de um veículo, isso nunca acontece. Um farol, um fio de ignição, uma linha de interruptor de porta ou uma bobina de contator de 24V não tem uma saída sobrando para ler, então o Arduino Nano precisa se conectar ao próprio dispositivo.
A entrada do módulo deve ser conectada através do dispositivo, em paralelo com ele. Ela nunca deve ser colocada em série com ele. Em série, toda a corrente de trabalho do dispositivo - quatro ou cinco ampères para um farol - seria forçada pelo minúsculo LED dentro do PC817, e a peça seria destruída no instante em que o circuito fosse ligado. Em paralelo, nada na fiação existente é cortado, aberto ou desviado; dois fios são simplesmente adicionados a bornes que já estão lá.
Tomando como exemplo o fio de um farol de 12V, com o módulo de 12V:
- O borne positivo chaveado da lâmpada deve ser conectado ao borne de parafuso IN+ do módulo.
- O borne negativo, de retorno, da mesma lâmpada deve ser conectado ao borne de parafuso IN-.
- No lado isolado nada muda: o OUT deve ser conectado ao pino 2 do Arduino Nano, o VCC ao 5V do Arduino Nano e o GND ao GND do Arduino Nano.
Nenhum resistor em série é instalado em nenhum desses dois fios - é exatamente isso que a compra da variante correspondente à linha paga. A derivação consome cerca de 10mA. Ao lado dos 4 a 5A de um farol, ou dos poucos centenas de miliampères de uma bobina de solenoide, isso não é nada - a lâmpada se comporta exatamente como antes, e a medição continua sendo somente de leitura. Como a derivação fica diretamente através do dispositivo, a leitura segue o estado real desse dispositivo, e não um comando enviado a ele: ela fica ativa quando o motorista aciona o interruptor, quando um relé do módulo de carroceria fecha por conta própria, e continua inativa quando a lâmpada foi solicitada mas nunca acendeu. É isso que torna possível um contador de horas de funcionamento, um registro de tempo ocioso ou um alerta de "ele realmente ligou?" em uma placa tão pequena.
Uma limitação honesta: isso informa que o dispositivo está energizado, não que ele está fazendo o seu trabalho. Um motor de ventilador travado, ou um elemento de aquecimento com enrolamento aberto, ainda tem a tensão total nos seus terminais e ainda será reportado como ON.
Três pontos decidem se a derivação funciona de primeira:
- Polaridade. O lado de entrada do PC817 é um LED, então ele conduz em uma única direção. Troque IN+ e IN- e nada acontece - o LED nunca acende, o LED de status do módulo permanece apagado e o pino do Arduino Nano nunca muda. Veículos estão cheios de circuitos com negativo chaveado, então confirme qual dos dois bornes é o positivo antes de fixar qualquer coisa.
- Cargas indutivas precisam de um diodo de proteção. Uma bobina de relé, um solenoide, um contator, uma válvula ou um motor pequeno joga um grande pico de tensão reversa de volta nos próprios terminais no instante em que é desligado. O LED de entrada do PC817 suporta apenas 6V em reverso, então esse pico é suficiente para matá-lo. Instale um diodo comum em anti-paralelo diretamente nos dois bornes de entrada - catodo do diodo no IN+, anodo do diodo no IN-. Em operação normal ele fica polarizado reversamente e não faz nada; durante um pico ele conduz e mantém a tensão reversa bem abaixo de um volt. Um 1N4148 atende uma derivação pequena, um 1N4007 uma mais pesada.
- Um driver com fuga reporta um falso ON. Muito pouco em um veículo moderno ainda é chaveado por um contato mecânico simples - um driver de estado sólido faz o trabalho, e muitos deles deixam passar uma pequena corrente mesmo quando estão desligados. O mesmo vale para saídas a transistor de CLP, saídas a triac e drivers de lâmpadas LED. Uma fuga suficiente acende parcialmente o LED do PC817, e o Arduino Nano então reporta o dispositivo como ON enquanto ele está desligado. O sintoma é inconfundível: uma leitura que nunca volta a inativa. A solução é um resistor de descarga de cerca de 4,7 kΩ a 10 kΩ instalado em paralelo com a entrada do módulo, para que a fuga flua pelo resistor em vez de pelo LED.
※ Nota:
Este método é somente para DC. A entrada do PC817 é um único LED e, portanto, responde a uma só polaridade, o que o torna a peça errada para detectar uma linha AC. Esse trabalho pertence a um optoacoplador cujo estágio de entrada tem dois LEDs ligados em oposição.
Como Programar o Optoacoplador PC817
O primeiro passo é especificar o pino do Arduino Nano que está conectado ao pino OUT do módulo optoacoplador PC817. O pino 2 é usado neste tutorial:
O próximo passo é indicar em que sentido o módulo comuta. A maioria dos módulos puxa a saída para LOW enquanto o sinal de entrada está presente, então isto fica como true, a menos que o teste descrito acima diga o contrário:
Esse pino é então configurado como entrada com pull-up interno usando a função pinMode():
O estado do pino é lido usando a função digitalRead():
O último passo é transformar essa leitura bruta em uma resposta de sim ou não, usando a constante para que um módulo de qualquer polaridade seja tratado pela mesma linha:
Nenhuma biblioteca é necessária para este projeto.
Código Arduino Nano para o Optoacoplador PC817
Passos Rápidos
- Ligue os componentes como mostrado no diagrama.
- Conecte a placa Arduino Nano ao seu computador usando um cabo USB.
- Abra a Arduino IDE no seu computador.
- Selecione a placa e a porta corretas.
- Copie o código acima e cole na Arduino IDE.
- Clique no botão Upload da Arduino IDE para compilar e fazer upload do código para o Arduino Nano.
- Abra o Serial Monitor.
- Aplique o sinal de 12V ou 24V nos bornes de entrada e depois remova-o novamente.
- Veja o resultado no Serial Monitor.
Se o Serial Monitor mostrar ENERGIZED enquanto nada está aplicado e OFF enquanto o sinal está aplicado, o seu módulo é do tipo ativo em HIGH. Defina MODULE_ACTIVE_LOW como false no código acima e faça o upload novamente.
Vídeo
Conhecimento Adicional
Depois que o módulo foi escolhido em vez do chip solto, resta uma pergunta, e ela precisa ser respondida antes de fazer o pedido: qual das três variantes pertence a esta instalação específica? A tensão do sinal decide a maior parte, mas não tudo - o que acontece quando chega a variante errada e quantas linhas precisam ser observadas também importam.
| Módulo de 3-5V | Módulo de 12V | Módulo de 24V | |
|---|---|---|---|
| Sinal que espera | lógica de 3,3V e 5V | 12V DC | 24V DC |
| Fonte típica em uma instalação com Nano | uma segunda placa, uma placa de sensor com alimentação própria, um chicote longo de baixa tensão | fio de ignição, faróis, interruptor de porta, bobina de relé de 12V | bobinas de contator e solenoide, saídas de CLP, sistemas de caminhões e ônibus |
| Motivo do isolamento | quebrar um loop de terra, não suportar uma tensão | o terra do veículo é ruidoso e compartilhado com o motor de partida | o terra do painel carrega picos de chaveamento de outras cargas |
| Se alimentado com tensão maior que a esperada | danificado por qualquer coisa bem acima do nível lógico | danificado em uma linha de 24V, com cerca do dobro da corrente prevista no LED | nada maior é normalmente encontrado nessas instalações |
| Se alimentado com tensão menor que a esperada | - | pouco confiável em um sinal de nível lógico | falha silenciosa em uma linha de 12V, comutando tarde ou nunca |
| Adequado para uma instalação com Nano escondido | trabalho de bancada e com várias placas, raramente o painel | a escolha padrão atrás de um painel | painéis de máquinas, onde o espaço de montagem não é escasso |
É evidente que a variante de 12V é a que se deve escolher na instalação em veículo em torno da qual este tutorial foi construído, que a variante de 24V pertence ao painel de máquina onde ficam as bobinas, e que a variante de 3-5V é comprada por um motivo completamente diferente - não porque a tensão é perigosa, mas porque o terra é. Quando várias linhas precisam ser observadas por um único Nano escondido, uma placa de vários canais da variante correta é mais barata e mais organizada do que várias de um canal, desde que todas as linhas nela funcionem na mesma tensão; um Nano observando tanto um interruptor de porta de 12V quanto uma bobina de 24V precisa de dois módulos, não de um.