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:

Arduino Nano PC817 optocoupler 24V isolated input wiring

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?

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:

Hardware Necessário

1×Official Arduino Nano
1×Alternatively, DIYables Nano V3.0 Development Board
1×Cabo USB A para Mini-B
1×PC817 Optocoupler Module 12V
1×PC817 Optocoupler Module 3-5V
1×Protoboard
1×Fios Jumper
1×(Recomendado) Placa de Expansão com Bornes de Parafuso para Arduino Nano
1×(Recomendado) Placa de Expansão Breakout para Arduino Nano
1×(Recomendado) Divisor de Alimentação para Arduino Nano

Or you can buy the following kits:

1×DIYables Sensor Kit (18 sensors/displays)
Divulgação: Alguns dos links desta seção são links de afiliado da Amazon. Podemos receber uma comissão pelas compras feitas por meio desses links, sem custo adicional para você. Agradecemos o seu apoio.

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.

Arduino Nano PC817 optocoupler isolation module

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:

const bool MODULE_ACTIVE_LOW = true;

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ê.

PC817 optocoupler pinout
image source: diyables.io

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.

The wiring diagram between Arduino Nano and PC817 optocoupler isolation module

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:

#define PC817_PIN 2

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:

const bool MODULE_ACTIVE_LOW = true;

Esse pino é então configurado como entrada com pull-up interno usando a função pinMode():

pinMode(PC817_PIN, INPUT_PULLUP);

O estado do pino é lido usando a função digitalRead():

int input_state = digitalRead(PC817_PIN);

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:

bool line_energized = MODULE_ACTIVE_LOW ? (input_state == LOW) : (input_state == HIGH);

Nenhuma biblioteca é necessária para este projeto.

Código Arduino Nano para o Optoacoplador PC817

/* * Este código de Arduino Nano foi desenvolvido por pt.newbiely.com * Este código de Arduino Nano é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/arduino-nano/arduino-nano-pc817-optocoupler-monitor-12v-24v-dc-input-signal */ #define PC817_PIN 2 // The Arduino Nano pin 2 connected to the PC817 module's OUT pin // Most PC817 optocoupler modules pull the output LOW while the input signal is present. // If your module works the other way round (active-HIGH), change this to false. const bool MODULE_ACTIVE_LOW = true; int input_state; // the current reading from the PC817 output bool line_energized; // true when the external 12V/24V signal is present void setup() { // Initialize the Serial to communicate with the Serial Monitor Serial.begin(9600); // The internal pull-up holds the pin HIGH while the PC817 is not conducting pinMode(PC817_PIN, INPUT_PULLUP); } void loop() { input_state = digitalRead(PC817_PIN); // Turn the raw reading into a yes/no answer according to the module's polarity line_energized = MODULE_ACTIVE_LOW ? (input_state == LOW) : (input_state == HIGH); if (line_energized) Serial.println("External line: ENERGIZED"); else Serial.println("External line: OFF"); delay(500); }

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.
∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Arduino Nano
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Nano' on 'COM15')
New Line
9600 baud
External line: OFF External line: OFF External line: ENERGIZED External line: ENERGIZED External line: ENERGIZED External line: ENERGIZED External line: OFF External line: OFF External line: OFF External line: ENERGIZED
Ln 11, Col 1
Arduino Nano on COM15
2

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.

※ NOSSAS MENSAGENS

  • Fique à vontade para compartilhar o link deste tutorial. Porém, por favor, não use nosso conteúdo em outros sites. Investimos muito esforço e tempo para criar este conteúdo, por favor respeite nosso trabalho!