O que é um optoacoplador? Isolação com PC817 e 4N35 no Arduino
O que é um optoacoplador e como ele funciona? Pinagem do PC817 e do 4N35, CTR e cálculo de resistores, leitura de sinais de 12/24 V, detecção da rede elétrica (H11AA1), relés e MOC3021.
Um optoacoplador (também chamado de optoisolador ou fotoacoplador) é um pequeno chip que leva um sinal de um circuito a outro usando apenas luz, sem nenhuma conexão elétrica entre eles. Dentro dele há um LED infravermelho e um fototransistor de frente para ele: quando o circuito de um lado acende o LED, o transistor do outro lado conduz. Como não existe um único fio entre os dois lados, picos de tensão e ruídos não chegam ao seu microcontrolador quando você liga ao Arduino um sensor industrial de 24 V, a linha de 12 V de um carro ou um driver de motor.
Neste post você vai aprender passo a passo o que há dentro de um optoacoplador, por que a isolação galvânica é importante, os pinos e as especificações dos dois modelos mais comuns, o PC817 e o 4N35, o conceito de CTR e como calcular os resistores. Depois, vai ver como isolar uma saída do Arduino, ler sinais de 12/24 V com segurança, usar o componente com ESP32 e Raspberry Pi Pico, as regras de segurança para detectar a rede elétrica (H11AA1), o optoacoplador dos módulos relé e como acionar um triac com o MOC3021.
O que é um optoacoplador e como ele funciona?
Dentro do encapsulamento do optoacoplador há dois chips, um de frente para o outro. No lado da entrada fica um LED infravermelho, que funciona com corrente como qualquer LED comum. No lado da saída fica um fototransistor cuja base é sensível à luz; em vez de injetar corrente na base, você joga luz sobre ela. Entre os dois chips há uma camada de plástico transparente, mas isolante do ponto de vista elétrico. Essa camada é projetada para suportar milhares de volts.
- O circuito do lado da entrada faz passar alguns miliampères pelo LED através de um resistor.
- O LED emite luz infravermelha; essa luz atravessa a camada isolante e chega ao fototransistor.
- A luz age como a corrente de base do fototransistor e permite que a corrente circule entre coletor e emissor; o transistor fecha como uma chave.
- Quando o LED apaga, a luz some, o transistor volta a bloquear e o circuito de saída abre. O sinal atravessou sem fios, usando apenas luz.
Existem tipos diferentes de optoacopladores, conforme o que fica no lado da saída. Projetos de hobby usam principalmente os modelos com fototransistor, mas detectar sinais AC, disparar um triac ou isolar uma linha de dados rápida exige tipos especiais:
| Tipo | Modelos de exemplo | Saída | Uso típico |
|---|---|---|---|
| Com fototransistor | PC817, EL817, 4N35, 4N25 | Fototransistor NPN | Isolação de sinais digitais, leitura de entradas de 12/24 V, módulos relé |
| Saída Darlington | 4N33, H11B1 | Transistor Darlington | Corrente de saída alta com corrente de LED muito baixa (porém mais lento) |
| Entrada AC | H11AA1, PC814 | Dois LEDs em antiparalelo + fototransistor | Detecção da rede elétrica, detecção de passagem por zero |
| Saída triac | MOC3021, MOC3041, MOC3063 | Fototriac | Disparo de triac, controle de cargas AC, SSRs |
| Lógica de alta velocidade | 6N137, 6N138 | Fotodiodo + porta lógica ou transistor | Isolação de MIDI, UART e linhas digitais rápidas |
Por que a isolação galvânica é necessária?
Isolação galvânica significa que não existe um caminho condutor direto entre dois circuitos: não há GND comum, não há fio em comum, e a energia e a informação são transmitidas de outra forma (luz, campo magnético). Os pinos do Arduino suportam no máximo 5 V (3,3 V no ESP32 e no Pico). Os 24 V de um sensor industrial, os picos curtos de centenas de volts que um motor gera ao chavear ou o ruído induzido em cabos longos podem chegar direto ao microcontrolador por um GND comum. O optoacoplador corta esse caminho fisicamente.
- Proteção: mesmo que algo falhe no lado de alta tensão, o estrago fica no optoacoplador; o Arduino, a porta USB do computador e você continuam seguros.
- Ruído e loops de terra: motores, relés e cabos longos geram ruído na linha de GND. Quando os terras são separados, esse ruído não entra na linha de sinal; falamos em detalhes sobre GND comum no post O que é GND?.
- Níveis de tensão diferentes: como o transistor de saída é alimentado por fora, um sinal de 24 V vira facilmente 3,3 V, e um de 5 V vira 12 V. O optoacoplador também é um conversor de nível lento, mas robusto.
- Normas de segurança: em aparelhos ligados à rede elétrica, o lado do usuário precisa ser isolado da rede; componentes como o PC817 passam em um teste de isolação de 5000 V rms.
Pinagem e especificações do PC817 e do 4N35
| Pino | PC817 (DIP-4) | 4N35 (DIP-6) |
|---|---|---|
| 1 | Ânodo (LED +) | Ânodo (LED +) |
| 2 | Cátodo (LED −) | Cátodo (LED −) |
| 3 | Emissor | Não conectado |
| 4 | Coletor | Emissor |
| 5 | Não existe | Coletor |
| 6 | Não existe | Base (geralmente deixada aberta) |
| Parâmetro | PC817 | 4N35 |
|---|---|---|
| Tensão direta do LED (VF) | Típ. 1,2 V, máx. 1,4 V (a 20 mA) | Cerca de 1,2–1,3 V |
| Corrente máxima do LED | 50 mA | 60 mA |
| Tensão reversa do LED | Máx. 6 V | Máx. 6 V |
| CTR | 50–600% (a 5 mA, 5 V; depende da classe) | No mínimo 100% (a 10 mA, 10 V) |
| Tensão coletor-emissor (VCEO) | 35 V | 70 V |
| Corrente de coletor | Máx. 50 mA | Máx. 50 mA |
| Tempo de chaveamento | Típ. 3–4 µs (com resistor de carga baixo) | Cerca de 10 µs |
| Tensão de isolação | 5000 V rms | 5000 V rms |
No PC817, o pino 1 é marcado com um ponto; a letra A, B, C ou D depois de “PC817” no encapsulamento indica a classe de CTR. Componentes como EL817, LTV817 e KP1010 são equivalentes do PC817 com a mesma pinagem. O 4N35 tem seis terminais, então o pino da base fica acessível; normalmente você o deixa aberto, e em ambientes muito ruidosos um resistor de valor alto (por exemplo, 1 MΩ) entre base e emissor pode acelerar o desligamento.
O que é CTR e como calcular os resistores?
CTR (Current Transfer Ratio, razão de transferência de corrente) é a razão entre a corrente de coletor que o transistor de saída consegue conduzir e a corrente do LED: CTR = IC / IF × 100%. Por exemplo, num optoacoplador com CTR de 100%, se você passar 5 mA pelo LED, pode puxar no máximo cerca de 5 mA da saída. O CTR muda com a temperatura, cai ao longo dos anos conforme o LED envelhece e varia bastante até entre peças do mesmo modelo. Por isso, você sempre projeta com base no valor mais baixo do datasheet.
| Classe do PC817 | Faixa de CTR (IF = 5 mA) | Corrente de saída com 5 mA no LED |
|---|---|---|
| PC817A | 80–160% | 4–8 mA |
| PC817B | 130–260% | 6,5–13 mA |
| PC817C | 200–400% | 10–20 mA |
| PC817D | 300–600% | 15–30 mA |
| Sem letra | 50–600% | 2,5–30 mA (considere o pior caso) |
Resistor do LED: o lado da entrada é calculado exatamente como um LED: R = (Valim − VF) / IF. Para passar 10 mA a partir do pino de 5 V de um Arduino Uno, você obtém (5 − 1,2) / 0,010 = 380 Ω; um resistor padrão de 330 Ω dá cerca de 11,5 mA, e um de 390 Ω, cerca de 9,7 mA. No ESP32, (3,3 − 1,2) / 0,010 = 210 Ω, então você usa 220 Ω. Os pinos do Raspberry Pi Pico vêm configurados por padrão com capacidade de corrente de 4 mA; aqui, cerca de 4,5 mA com 470 Ω é suficiente. Se não quiser fazer a conta à mão, use a ferramenta Resistor para LED.
Resistor de saída (pull-up): para o transistor conduzir totalmente (saturar), a corrente puxada pelo pull-up precisa ser menor do que o CTR permite. Um pull-up de 10 kΩ ligado a 5 V precisa de apenas 0,5 mA. Num PC817 sem letra, o CTR no pior caso é 50%, então 1 mA no LED bastaria para 0,5 mA; usando 5–10 mA, você deixa uma margem de pelo menos cinco vezes. O pull-up interno do Arduino (cerca de 20–50 kΩ) também é ideal para isso. Um pull-up menor deixa o sinal mais rápido, mas exige mais corrente; um maior exige menos corrente, mas faz o transistor desligar mais devagar.
| Caso | Tensão de alimentação | Corrente desejada no LED | Resistor sugerido | Potência do resistor |
|---|---|---|---|---|
| Acionando por um pino do Arduino Uno | 5 V | ~10 mA | 330 Ω | 1/4 W é suficiente |
| Acionando por um pino do ESP32 | 3,3 V | ~10 mA | 220 Ω | 1/4 W é suficiente |
| Acionando por um pino do Raspberry Pi Pico | 3,3 V | ~4,5 mA | 470 Ω | 1/4 W é suficiente |
| Leitura de sinal de 12 V | 12 V | ~5 mA | 2,2 kΩ | 1/4 W (dissipa 0,05 W) |
| Leitura de sinal de 24 V | 24 V | ~5 mA | 4,7 kΩ | 1/4 W (dissipa 0,11 W) |
Tabela de ligação: Arduino Uno, ESP32 e Raspberry Pi Pico
| Pino do PC817 | Função | Arduino Uno | ESP32 | Raspberry Pi Pico |
|---|---|---|---|---|
| 1 (Ânodo), isolação de saída | A placa aciona o LED | D9 → 330 Ω → pino 1 | GPIO 25 → 220 Ω → pino 1 | GP15 → 470 Ω → pino 1 |
| 2 (Cátodo), isolação de saída | Retorno do LED | GND | GND | GND |
| 4 (Coletor), leitura de entrada | A placa lê o sinal | D2 (INPUT_PULLUP) | GPIO 27 (INPUT_PULLUP) | GP14 (PULL_UP) |
| 3 (Emissor), leitura de entrada | GND do lado da leitura | GND | GND | GND |
| 1 e 2, leitura de entrada | Sinal externo (12/24 V) | Vai para a fonte externa, não para a placa | Vai para a fonte externa, não para a placa | Vai para a fonte externa, não para a placa |
Isolando uma saída do Arduino
Nesta montagem, o Arduino acende o LED do optoacoplador, e o transistor de saída fecha a entrada de outro circuito como uma chave. Assim você pode acionar com segurança, por exemplo, a entrada de “disparo” de um aparelho de 12 V, a entrada de disparador remoto de uma câmera, uma entrada de CLP ou outro microcontrolador que funcione em outra tensão. Como o transistor de saída é limitado a 35 V e 50 mA, ele não consegue acionar diretamente a bobina de um relé, um motor ou uma fita de LED; para cargas assim, você usa um transistor ou um MOSFET do outro lado.
1// PC817 ile yalıtılmış çıkış / Isolated output with a PC817
2// D9 -> 330 ohm -> PC817 pin 1 (anot / anode), pin 2 (katot / cathode) -> Arduino GND
3// Pin 4 ve 3 diğer devrenin girişini kısa devre eder (kuru kontak gibi)
4// Pins 4 and 3 short the other circuit's input (like a dry contact)
5const int OPTO_LED_PIN = 9;
6const unsigned long ON_MS = 2000;
7const unsigned long OFF_MS = 3000;
8
9bool isOn = false;
10unsigned long lastSwitch = 0;
11
12void setup() {
13 pinMode(OPTO_LED_PIN, OUTPUT);
14 digitalWrite(OPTO_LED_PIN, LOW);
15}
16
17void loop() {
18 unsigned long waitTime = isOn ? ON_MS : OFF_MS;
19 if (millis() - lastSwitch >= waitTime) {
20 lastSwitch = millis();
21 isOn = !isOn;
22 digitalWrite(OPTO_LED_PIN, isOn ? HIGH : LOW); // HIGH: optokuplör iletir / HIGH: optocoupler conducts
23 }
24}No lado da saída, você liga o coletor (pino 4) ao lado positivo ou à entrada do outro circuito e o emissor (pino 3) ao GND desse circuito; se a polaridade estiver invertida, o transistor não conduz. Como o PC817 leva de alguns a algumas dezenas de microssegundos para ligar e desligar, um sinal PWM que passa por ele começa a se deformar acima de alguns kHz. Para sinais rápidos (UART, MIDI, PWM de alta frequência), prefira optoacopladores de alta velocidade como o 6N137 ou CIs isoladores digitais.
Lendo sinais de 12/24 V com segurança
Você não pode ligar diretamente a um pino do Arduino os sinais de sensores indutivos industriais, saídas de CLP, contatos de porta, a chave de ignição de um carro ou um botão de campainha de 12 V. A solução é fazer o sinal passar pelo LED do optoacoplador: você coloca um resistor de 4,7 kΩ em série com o LED para 24 V e de 2,2 kΩ para 12 V, e o transistor de saída trabalha com o pull-up interno do Arduino. Quando há tensão, o LED acende, o transistor conduz e o pino do Arduino lê LOW. Ou seja, a lógica é invertida, e você leva isso em conta no código.
- Ligue o positivo da fonte de 24 V ao pino 1 (ânodo) do PC817 através de um resistor de 4,7 kΩ.
- Ligue o negativo da fonte do sinal (GND de 24 V) ao pino 2 (cátodo). Não ligue esse GND ao Arduino.
- Se quiser, coloque um diodo 1N4148 invertido entre os pinos 1 e 2 (cátodo no pino 1); ele protege contra ligação invertida.
- Ligue o pino 4 (coletor) do PC817 ao pino D2 do Arduino e o pino 3 (emissor) ao GND do Arduino.
- Carregue o código abaixo e abra o Monitor Serial a 9600 baud. Ao aplicar 24 V, você deve ver “24V VAR / present”.
1// PC817 ile 12/24 V sinyal okuma / Reading a 12/24 V signal with a PC817
2// PC817 pin 4 (kolektör / collector) -> D2, pin 3 (emetör / emitter) -> Arduino GND
3const int OPTO_PIN = 2;
4const unsigned long DEBOUNCE_MS = 20; // kontak sıçramasına karşı / against contact bounce
5
6int lastReading = HIGH;
7int stableState = HIGH;
8unsigned long lastChange = 0;
9unsigned long pulseCount = 0;
10
11void setup() {
12 Serial.begin(9600);
13 pinMode(OPTO_PIN, INPUT_PULLUP); // dahili pull-up yeterli / internal pull-up is enough
14}
15
16void loop() {
17 int reading = digitalRead(OPTO_PIN);
18 if (reading != lastReading) { // değişim var, zamanı başlat / change seen, start the timer
19 lastChange = millis();
20 lastReading = reading;
21 }
22 if (millis() - lastChange > DEBOUNCE_MS && reading != stableState) {
23 stableState = reading;
24 // Mantık ters: 24 V varsa LED yanar, transistör iletir, pin LOW olur
25 // Inverted logic: with 24 V present the LED is on, the transistor conducts, the pin reads LOW
26 if (stableState == LOW) {
27 pulseCount++;
28 Serial.print("24V VAR / present, sayac / count: ");
29 Serial.println(pulseCount);
30 } else {
31 Serial.println("24V YOK / absent");
32 }
33 }
34}O código inclui um debounce simples que só aceita leituras que permanecem iguais por 20 ms; isso é obrigatório para sinais vindos de contatos mecânicos ou relés. Como lemos com millis() em vez de delay(), o Arduino pode fazer outras coisas enquanto isso. Na parte elétrica de um carro, a linha de 12 V sobe para 14,4 V com o motor ligado e aparecem picos curtos e altos; aumentar o resistor para 3,3 kΩ e adicionar um diodo TVS na entrada é uma boa precaução nesse caso.
Optoacopladores com ESP32 e Raspberry Pi Pico
Como o ESP32 e o Pico funcionam com 3,3 V, eles não devem ser ligados diretamente nem a sinais de 5 V. Aí está a beleza do optoacoplador: o transistor de saída é de coletor aberto, então a tensão de saída é definida apenas pela tensão à qual o pull-up está ligado. Com o pull-up interno, a saída fica automaticamente em 3,3 V; mesmo com 24 V no lado da entrada, chegam no máximo 3,3 V ao ESP32. O código de ESP32 abaixo conta, com uma interrupção, os pulsos de um sensor indutivo ou de um medidor de vazão de 24 V:
1// ESP32: 24 V endüstriyel sensörden darbe sayma / counting pulses from a 24 V industrial sensor
2// PC817 pin 4 -> GPIO 27, pin 3 -> ESP32 GND
3const int OPTO_PIN = 27;
4
5volatile unsigned long pulseCount = 0;
6volatile unsigned long lastPulseUs = 0;
7
8void IRAM_ATTR onPulse() {
9 unsigned long now = micros();
10 if (now - lastPulseUs > 2000) { // 2 ms'den kısa parazitleri yok say / ignore glitches shorter than 2 ms
11 pulseCount++;
12 lastPulseUs = now;
13 }
14}
15
16void setup() {
17 Serial.begin(115200);
18 pinMode(OPTO_PIN, INPUT_PULLUP);
19 attachInterrupt(digitalPinToInterrupt(OPTO_PIN), onPulse, FALLING); // 24 V gelince pin düşer / pin falls when 24 V arrives
20}
21
22void loop() {
23 static unsigned long lastPrint = 0;
24 if (millis() - lastPrint >= 1000) {
25 lastPrint = millis();
26 noInterrupts();
27 unsigned long count = pulseCount;
28 pulseCount = 0;
29 interrupts();
30 Serial.printf("Saniyedeki darbe / Pulses per second: %lu\n", count);
31 }
32}O IRAM_ATTR antes da função de interrupção coloca o código na memória rápida; ele é recomendado para funções de interrupção no ESP32. O filtro de 2 ms elimina pulsos falsos causados pelo desligamento lento do optoacoplador ou por ruído no cabo. Para saber mais sobre interrupções, dê uma olhada no post interrupções no Arduino. No Raspberry Pi Pico, você faz o mesmo com MicroPython assim; enquanto lê a entrada, este exemplo também envia um sinal isolado para o outro lado através de um segundo PC817:
1# Raspberry Pi Pico: PC817 ile yalıtılmış giriş / isolated input with a PC817
2# PC817 pin 4 -> GP14, pin 3 -> Pico GND, LED sürme / LED drive: GP15 -> 470 ohm -> pin 1
3from machine import Pin
4import time
5
6opto_in = Pin(14, Pin.IN, Pin.PULL_UP) # dahili pull-up / internal pull-up
7opto_out = Pin(15, Pin.OUT) # ikinci PC817'nin LED'i / LED of a second PC817
8
9last_state = opto_in.value()
10while True:
11 state = opto_in.value()
12 if state != last_state:
13 time.sleep_ms(20) # sıçramayı bekle / wait out the bounce
14 state = opto_in.value()
15 if state != last_state:
16 last_state = state
17 if state == 0: # ters mantık: 0 = gerilim var / inverted: 0 = voltage present
18 print("24V VAR / present")
19 opto_out.value(1) # karşı tarafa yalıtılmış sinyal / isolated signal to the other side
20 else:
21 print("24V YOK / absent")
22 opto_out.value(0)
23 time.sleep_ms(5)Detecção da rede elétrica: H11AA1 e segurança
Para saber se uma tomada ou um circuito de lâmpada está energizado, ou para encontrar os instantes de passagem por zero da rede, usam-se optoacopladores com entrada AC, como o H11AA1. Dentro dele há dois LEDs ligados em antiparalelo, então ele gera luz nos dois semiciclos da corrente alternada e não tem problema de tensão reversa. Para 230 V rms, colocam-se dois resistores de 47 kΩ em série com a entrada: pelo total de 94 kΩ passam cerca de 2,4 mA rms (3,5 mA no pico) e cada resistor dissipa cerca de 0,28 W. Por isso, escolha resistores de pelo menos 0,5 W, de preferência 1 W; usar dois resistores também divide pela metade a tensão sobre cada um. No lado da saída, com um pull-up de 10 kΩ ligado a 5 V, o transistor conduz na maior parte do tempo enquanto há tensão; só perto das passagens por zero, quando os LEDs apagam, aparece um pulso HIGH curto. Numa rede de 50 Hz, você verá cerca de 100 pulsos por segundo.
1// H11AA1 ile şebeke gerilimi var mı? / Is mains voltage present? (H11AA1)
2// H11AA1 pin 5 (kolektör / collector) -> D2, pin 4 (emetör / emitter) -> GND, 10k pull-up -> 5V
3const int AC_PIN = 2;
4const unsigned long TIMEOUT_MS = 40; // 50 Hz'de 2 tam periyot / 2 full cycles at 50 Hz
5
6volatile unsigned long pulses = 0;
7unsigned long lastLowSeen = 0;
8unsigned long lastReport = 0;
9
10void onZeroCross() {
11 pulses++; // her sıfır geçişinde bir darbe / one pulse per zero crossing
12}
13
14void setup() {
15 Serial.begin(9600);
16 pinMode(AC_PIN, INPUT); // harici 10k pull-up kullanılıyor / external 10k pull-up in use
17 attachInterrupt(digitalPinToInterrupt(AC_PIN), onZeroCross, RISING);
18}
19
20void loop() {
21 if (digitalRead(AC_PIN) == LOW) {
22 lastLowSeen = millis(); // gerilim varken çıkış çoğunlukla LOW / output is mostly LOW while voltage is present
23 }
24 bool mainsOn = (millis() - lastLowSeen) < TIMEOUT_MS;
25
26 if (millis() - lastReport >= 1000) { // saniyede bir rapor / report once per second
27 lastReport = millis();
28 noInterrupts();
29 unsigned long count = pulses;
30 pulses = 0;
31 interrupts();
32 Serial.print(mainsOn ? "Sebeke VAR / Mains ON" : "Sebeke YOK / Mains OFF");
33 Serial.print(" sifir gecisi / zero crossings: ");
34 Serial.print(count); // 50 Hz'de yaklaşık 100 / about 100 at 50 Hz
35 Serial.print(" frekans / frequency: ");
36 Serial.print(count / 2);
37 Serial.println(" Hz");
38 }
39}O código fornece duas informações: se a saída foi a LOW pelo menos uma vez nos últimos 40 ms, a rede está presente; e metade dos pulsos contados pela interrupção dá a frequência da rede. Pontos de atenção em módulos prontos e na sua própria placa: deixe pelo menos 6–8 mm de distância (distância de escoamento) entre as trilhas da rede e o lado de baixa tensão, coloque um fusível na entrada da rede, nunca passe uma trilha entre os dois lados do optoacoplador e use o circuito dentro de uma caixa fechada.
O optoacoplador dos módulos relé e o jumper JD-VCC

A maioria dos módulos relé de 1, 2, 4 e 8 canais à venda tem um PC817 na entrada de cada canal. A corrente do pino VCC passa por um resistor e por um LED indicador até o LED do optoacoplador; quando o pino IN vai a LOW, o circuito se fecha e o relé arma. Por isso, esses módulos geralmente funcionam ativos em LOW. Porém, como saem de fábrica, o jumper JD-VCC vem colocado e a bobina do relé é alimentada pelos mesmos VCC e GND: o optoacoplador está lá, mas não há isolação. Você encontra o básico sobre módulos relé no post O que é um módulo relé?.
| Configuração | Ligação | Isolação |
|---|---|---|
| Jumper JD-VCC colocado | Arduino 5V → VCC, GND → GND, pino → IN | Nenhuma; o ruído da bobina do relé entra na alimentação do Arduino |
| Jumper removido | Arduino 5V → VCC, pino → IN; GND do Arduino não ligado. Fonte de 5 V separada → JD-VCC e GND | Total; a única coisa que os dois lados compartilham é a luz dentro do optoacoplador |
Uma observação sobre acionar um triac com o MOC3021
Se você quer uma chave AC silenciosa e sem faíscas no lugar de um relé, usa um triac (por exemplo, BT136) e um optoacoplador com saída triac para acioná-lo. O MOC3021 é de fase aleatória: ele dispara o triac no instante em que o LED acende, então, junto com um detector de passagem por zero, serve para montar um dimmer. O MOC3041 e o MOC3063 são modelos com circuito de passagem por zero; só disparam quando a tensão passa por zero, geram menos interferência em aplicações de liga/desliga, mas não podem ser usados como dimmer. O LED do MOC3021 pode precisar de até 15 mA para disparar; a 5 V, 220 Ω (cerca de 17 mA) é um valor adequado, enquanto 330 Ω pode não bastar para algumas peças. Como nos datasheets, coloca-se um resistor de cerca de 360 Ω entre o gate do triac e o MOC3021, e, para cargas indutivas como motores, adiciona-se um snubber RC sobre o triac. Os módulos SSR (relé de estado sólido) prontos têm exatamente essa estrutura por dentro.
Ideias de projetos com optoacoplador
- Leitor de sensor industrial: conte produtos numa esteira com um sensor de proximidade indutivo de 24 V e mostre a contagem num display LCD.
- Detector de ignição do carro: acorde o ESP32 quando a ignição for ligada e inicie a câmera do carro ou um registrador de dados.
- Alarme de falta de energia: com um módulo de detecção AC pronto, toque um buzzer ou envie uma notificação ao celular quando a energia cair.
- Detector de campainha: leia de forma isolada a linha de campainha de 12 V que já existe e envie uma notificação quando ela tocar.
- Placa de relé isolada: controle uma lâmpada de 230 V com um módulo relé cujo jumper JD-VCC você removeu e que alimenta com uma fonte separada.
- Entrada MIDI: leia no Arduino as notas MIDI de um instrumento eletrônico com um 6N138.
Erros comuns e como corrigi-los
| Sintoma | Causa provável | Solução |
|---|---|---|
| A saída nunca muda | LED ligado invertido, ou ligado sem resistor e queimado | Confira se o pino 1 é o marcado com o ponto; teste o LED na escala de diodo do multímetro |
| A lógica funciona invertida | O pino vai a LOW quando há tensão; isso é normal | Trate LOW como “presente” no código |
| A saída não vai totalmente a LOW (fica em 1–2 V) | Corrente do LED muito baixa, CTR insuficiente ou pull-up pequeno demais | Diminua o resistor do LED ou aumente o pull-up (por exemplo, 10 kΩ) |
| O sinal PWM se deforma | O PC817 é lento demais acima de alguns kHz | Diminua o pull-up ou use um optoacoplador rápido como o 6N137 |
| O Arduino reinicia mesmo com isolação | Os GNDs dos dois lados foram unidos | Separe o GND do lado da entrada do Arduino; remova o jumper JD-VCC do módulo relé |
| Disparos falsos aleatórios | Cabo longo, ruído, repique dos contatos | Faça debounce no software, encurte o cabo, coloque um capacitor de 100 nF sobre o LED |
O optoacoplador é o jeito mais barato de tirar um projeto Arduino da mesa e deixá-lo conversar com segurança com os sinais de 12 V, 24 V e 230 V do mundo real: um componente que custa centavos separa sua placa e seu computador da alta tensão. No app BlueGrays você encontra os projetos de controle de uma lâmpada de 230 V com relé, iluminação inteligente e irrigação, passo a passo, com esquemas do circuito e código.
Perguntas frequentes
Para que serve um optoacoplador?
O optoacoplador leva um sinal de um circuito a outro com luz, sem nenhuma conexão elétrica. Assim, ele isola um circuito de alta tensão ou ruidoso de um microcontrolador sensível como o Arduino. É usado na leitura de sensores industriais, em módulos relé e em circuitos de detecção da rede elétrica.
Qual é a pinagem do PC817?
O PC817 tem quatro terminais: o pino 1, no canto com o ponto, é o ânodo do LED, e o pino 2 é o cátodo. Do lado oposto, o pino 3 é o emissor do fototransistor e o pino 4 é o coletor.
Que resistor devo usar com um optoacoplador?
O resistor é calculado com R = (tensão de alimentação − 1,2 V) / corrente do LED. Bons valores iniciais são 330 Ω para um pino de 5 V do Arduino, 220 Ω para o ESP32, 2,2 kΩ para um sinal de 12 V e 4,7 kΩ para um sinal de 24 V.
O que é CTR num optoacoplador?
CTR (razão de transferência de corrente) é a razão entre a corrente que o transistor de saída consegue conduzir e a corrente do LED. Num optoacoplador com CTR de 100%, 5 mA no LED permitem puxar no máximo cerca de 5 mA da saída. Sempre projete com base no menor CTR do datasheet.
Qual é a diferença entre o PC817 e o 4N35?
Os dois são optoacopladores com saída por fototransistor. O PC817 tem quatro terminais e é barato, com CTR de 50–600% conforme a classe. O 4N35 tem seis terminais, deixa o pino da base acessível e suporta tensões de coletor de até 70 V.
Um optoacoplador consegue detectar a rede de 230 V?
Sim, optoacopladores com entrada AC, como o H11AA1, com resistores em série de potência adequada, conseguem detectar a tensão da rede e as passagens por zero. Mas a tensão da rede pode matar; se você não tem experiência, use módulos de detecção AC prontos e fechados.
Projetos para montar depois desta leitura
Ver todos os projetos
Acender uma lâmpada de 220V com botão de pressão
Enquanto você mantém o botão pressionado, uma lâmpada de 220 volts fica acesa e apaga assim que você solta. O sinal fraco do Arduino não consegue acender a lâmpada diretamente, então um relé, que é um

Ligar e desligar uma lâmpada de 220V com botão
Quer ligar e desligar uma lâmpada de casa com um pequeno botão? Ao pressionar o botão, o Arduino aciona um relé e a lâmpada acende; ao pressionar novamente, ela apaga. O relé funciona como intermediár

Acender uma lâmpada de 220V com controle remoto
Ligue e desligue uma lâmpada de casa com o controle da TV, sem sair do sofá. O Arduino lê o sinal de luz invisível do controle; o botão de ligar aciona o relé e acende a lâmpada, e o botão de silencia

Iluminação inteligente de escadas e corredores
Ao entrar na escada ou no corredor, as luzes acendem uma a uma no sentido em que você caminha. Há um sensor de distância em cada extremidade; ao passar por um deles, os oito LEDs acendem a partir daqu

Iluminação inteligente com ESP32 (PIR + LDR + relé + OLED)
Transforme a iluminação do corredor, banheiro ou despensa em iluminação inteligente com ESP32! Com um sensor de movimento PIR, um sensor de luz LDR e um módulo relé, montamos o cenário clássico de "acender a luz ao detectar movimento no escuro" — se o ambiente já estiver claro, o movimento NÃO aciona a luz, economizando energia durante o dia. A luz fica acesa por 30 segundos; se o movimento continuar, o temporizador reinicia e a luz permanece acesa por mais tempo.

Estação de irrigação inteligente
Um jardineiro que rega suas plantas sozinho para que elas não sequem enquanto você está de férias. Um sensor de umidade do solo mede o quanto a terra está úmida; quando ela seca, o Arduino aciona a bo

Iluminação automática com ESP32 e sensor de movimento PIR
Neste projeto, usaremos o sensor de movimento PIR HC-SR501 para detectar quando alguém entra no cômodo e acender o LED automaticamente. Acompanharemos o tempo em que o LED fica aceso com millis(). Cada leitura HIGH do sensor atualizará o instante do último movimento, e o LED apagará pelo menos 10 segundos após a última leitura HIGH. O código atual também espera 50 ms em cada ciclo com delay(50), portanto o laço da aplicação não é totalmente livre de bloqueios.
Mais artigos
App BlueGrays
Monte este circuito passo a passo pelo celular
Esquema do circuito, código e lista de componentes em uma só tela. Mais de 200 projetos com Arduino, ESP32 e Pico prontos para montar.
Escaneie com seu celular
Aponte a câmera para o código para abrir a loja de aplicativos do seu celular.
ou abrir a loja

