Komponen · 12 mnt baca

Apa Itu Optocoupler? Isolasi PC817 dan 4N35 dengan Arduino

Apa itu optocoupler dan bagaimana cara kerjanya? Pinout PC817 dan 4N35, CTR dan hitungan resistor, membaca sinyal 12/24 V, deteksi listrik PLN (H11AA1), relay, dan MOC3021.

Optocoupler (disebut juga optoisolator atau photocoupler) adalah chip kecil yang membawa sinyal di antara dua rangkaian hanya dengan cahaya, tanpa sambungan listrik di antara keduanya. Di dalamnya ada LED inframerah dan fototransistor yang menghadap ke LED itu: ketika rangkaian di satu sisi menyalakan LED, transistor di sisi lain mulai menghantar. Karena tidak ada satu kabel pun di antara kedua sisi, lonjakan tegangan dan derau tidak bisa mencapai mikrokontrolermu ketika kamu menghubungkan sensor industri 24 V, jalur 12 V mobil, atau driver motor ke Arduino-mu.

Di artikel ini kamu akan belajar langkah demi langkah apa isi optocoupler, kenapa isolasi galvanik itu penting, pin dan spesifikasi dua model paling umum, PC817 dan 4N35, konsep CTR, dan cara menghitung resistornya. Setelah itu kamu akan melihat cara mengisolasi output Arduino, membaca sinyal 12/24 V dengan aman, memakainya dengan ESP32 dan Raspberry Pi Pico, aturan keselamatan untuk deteksi listrik PLN (H11AA1), optocoupler di modul relay, serta menggerakkan triac dengan MOC3021.

Apa itu optocoupler dan bagaimana cara kerjanya?

Di dalam kemasan optocoupler ada dua chip yang saling berhadapan. Di sisi input ada LED inframerah yang bekerja dengan arus, persis seperti LED biasa. Di sisi output ada fototransistor yang basisnya peka cahaya; alih-alih mengalirkan arus ke basis, kamu menyinarinya dengan cahaya. Di antara kedua chip ada lapisan plastik yang tembus cahaya tetapi bersifat isolator listrik. Lapisan ini dirancang untuk menahan tegangan ribuan volt.

  1. Rangkaian di sisi input mengalirkan arus beberapa miliampere ke LED melalui sebuah resistor.
  2. LED memancarkan cahaya inframerah; cahaya ini menembus lapisan isolator dan jatuh ke fototransistor.
  3. Cahaya itu berperan seperti arus basis fototransistor dan membuat arus mengalir di antara kolektor dan emitor; transistor menutup seperti sakelar.
  4. Ketika LED padam, cahaya berhenti, transistor kembali menyumbat (tidak menghantar), dan rangkaian output terbuka. Sinyal pun sudah menyeberang tanpa kabel, hanya dengan cahaya.

Tergantung komponen apa yang ada di sisi output, ada beberapa jenis optocoupler. Proyek hobi kebanyakan memakai model fototransistor, tetapi untuk mendeteksi sinyal AC, memicu triac, atau mengisolasi jalur data cepat dibutuhkan jenis khusus:

JenisContoh modelOutputPenggunaan umum
FototransistorPC817, EL817, 4N35, 4N25Fototransistor NPNIsolasi sinyal digital, membaca input 12/24 V, modul relay
Output Darlington4N33, H11B1Transistor DarlingtonArus output besar dari arus LED yang sangat kecil (tetapi lebih lambat)
Input ACH11AA1, PC814Dua LED antiparalel + fototransistorDeteksi listrik PLN, deteksi zero-cross (persilangan nol)
Output triacMOC3021, MOC3041, MOC3063FototriacMemicu triac, kendali beban AC, SSR
Logika kecepatan tinggi6N137, 6N138Fotodioda + gerbang logika atau transistorIsolasi jalur MIDI, UART, dan jalur digital cepat

Kenapa isolasi galvanik dibutuhkan?

Isolasi galvanik berarti tidak ada jalur penghantar langsung di antara dua rangkaian: tidak ada GND bersama, tidak ada kabel bersama, dan energi serta informasi dibawa dengan cara lain (cahaya, medan magnet). Pin Arduino paling tinggi tahan 5 V (3,3 V pada ESP32 dan Pico). Tegangan 24 V dari sensor industri, lonjakan singkat ratusan volt yang muncul ketika motor dihidupmatikan, atau derau yang terinduksi di kabel panjang bisa langsung mencapai mikrokontroler lewat GND bersama. Optocoupler memutus jalur itu secara fisik.

  • Perlindungan: bahkan jika ada yang rusak di sisi tegangan tinggi, kerusakannya berhenti di optocoupler; Arduino, port USB komputermu, dan kamu sendiri tetap aman.
  • Derau dan ground loop: motor, relay, dan kabel panjang menimbulkan derau di jalur GND. Kalau ground-nya terpisah, derau itu tidak masuk ke jalur sinyal; ground bersama kami bahas lengkap di artikel GND dan ground bersama.
  • Level tegangan yang berbeda: karena transistor output diberi daya dari luar, sinyal 24 V dengan mudah menjadi 3,3 V dan sinyal 5 V menjadi 12 V. Optocoupler juga merupakan level shifter yang lambat tetapi tangguh.
  • Standar keselamatan: pada perangkat yang terhubung ke listrik PLN, sisi pengguna harus terisolasi dari jaringan listrik; komponen seperti PC817 lolos uji isolasi 5000 V rms.
Isolasi hanya bekerja selama GND kedua sisi tetap terpisah. Kalau kamu menyambungkan negatif sisi 24 V ke GND Arduino “untuk jaga-jaga”, optocoupler berubah jadi sepotong kabel yang mahal dan perlindungannya hilang sama sekali. Biarkan sisi input berjalan dari catu dayanya sendiri dan sisi output dari Arduino.

Pinout dan spesifikasi PC817 dan 4N35

PinPC817 (DIP-4)4N35 (DIP-6)
1Anoda (LED +)Anoda (LED +)
2Katoda (LED −)Katoda (LED −)
3EmitorTidak terhubung
4KolektorEmitor
5Tidak adaKolektor
6Tidak adaBasis (biasanya dibiarkan terbuka)
ParameterPC8174N35
Tegangan maju LED (VF)Tip. 1,2 V, maks. 1,4 V (pada 20 mA)Sekitar 1,2–1,3 V
Arus maksimum LED50 mA60 mA
Tegangan balik LEDMaks. 6 VMaks. 6 V
CTR50–600% (pada 5 mA, 5 V; tergantung rank)Minimal 100% (pada 10 mA, 10 V)
Tegangan kolektor-emitor (VCEO)35 V70 V
Arus kolektorMaks. 50 mAMaks. 50 mA
Waktu switchingTip. 3–4 µs (dengan resistor beban kecil)Sekitar 10 µs
Tegangan isolasi5000 V rms5000 V rms

Pada PC817, pin 1 ditandai dengan titik; huruf A, B, C, atau D setelah tulisan “PC817” di kemasan menunjukkan kelas (rank) CTR. Komponen seperti EL817, LTV817, dan KP1010 adalah pengganti PC817 dengan susunan pin yang sama. 4N35 punya enam kaki, jadi pin basisnya dikeluarkan; biasanya kamu biarkan terbuka, dan di lingkungan yang sangat berderau, resistor bernilai besar (misalnya 1 MΩ) di antara basis dan emitor bisa mempercepat proses mati (turn-off).

Apa itu CTR dan bagaimana cara menghitung resistornya?

CTR (Current Transfer Ratio) adalah perbandingan arus kolektor yang bisa dialirkan transistor output terhadap arus LED: CTR = IC / IF × 100%. Misalnya, pada optocoupler dengan CTR 100%, kalau kamu mengalirkan 5 mA ke LED, dari output kamu bisa menarik paling banyak sekitar 5 mA. CTR berubah karena suhu, turun seiring tahun karena LED menua, dan sangat bervariasi bahkan di antara komponen dengan model yang sama. Karena itu, selalu rancang berdasarkan nilai terendah di datasheet.

Rank PC817Rentang CTR (IF = 5 mA)Arus output pada arus LED 5 mA
PC817A80–160%4–8 mA
PC817B130–260%6,5–13 mA
PC817C200–400%10–20 mA
PC817D300–600%15–30 mA
Tanpa huruf50–600%2,5–30 mA (anggap kondisi terburuk)

Resistor LED: sisi input dihitung persis seperti LED biasa: R = (Vsupply − VF) / IF. Untuk mengalirkan 10 mA dari pin 5 V Arduino Uno, hasilnya (5 − 1,2) / 0,010 = 380 Ω; resistor standar 330 Ω memberi sekitar 11,5 mA dan 390 Ω sekitar 9,7 mA. Pada ESP32, (3,3 − 1,2) / 0,010 = 210 Ω, jadi kamu pakai 220 Ω. Pin Raspberry Pi Pico secara bawaan diatur ke kekuatan drive 4 mA; di sini sekitar 4,5 mA dengan 470 Ω sudah cukup. Kalau tidak mau menghitung manual, pakai alat Resistor LED.

Resistor output (pull-up): agar transistor menyala penuh (saturasi), arus yang ditarik pull-up harus lebih kecil daripada yang diizinkan CTR. Pull-up 10 kΩ ke 5 V hanya butuh 0,5 mA. Pada PC817 tanpa huruf, CTR terburuknya 50%, jadi 1 mA ke LED sudah cukup untuk 0,5 mA; memberi 5–10 mA menyisakan margin minimal lima kali lipat. Pull-up internal Arduino (sekitar 20–50 kΩ) juga ideal untuk tugas ini. Pull-up yang lebih kecil membuat sinyal lebih cepat tetapi butuh arus lebih besar; yang lebih besar butuh arus lebih kecil tetapi membuat transistor lebih lambat mati.

KasusTegangan catuTarget arus LEDResistor yang disarankanDaya resistor
Digerakkan dari pin Arduino Uno5 V~10 mA330 Ω1/4 W sudah cukup
Digerakkan dari pin ESP323,3 V~10 mA220 Ω1/4 W sudah cukup
Digerakkan dari pin Raspberry Pi Pico3,3 V~4,5 mA470 Ω1/4 W sudah cukup
Membaca sinyal 12 V12 V~5 mA2,2 kΩ1/4 W (membuang 0,05 W)
Membaca sinyal 24 V24 V~5 mA4,7 kΩ1/4 W (membuang 0,11 W)
Kalau kamu perlu membaca 12 V dan 24 V di input yang sama, pilih 4,7 kΩ: pada 24 V mengalir sekitar 4,8 mA dan pada 12 V sekitar 2,3 mA. Bahkan dengan CTR 50%, 2,3 mA masih jauh di atas 0,1–0,25 mA yang dibutuhkan pull-up internal, jadi rangkaian yang sama bekerja andal di kedua tegangan.

Tabel pengkabelan: Arduino Uno, ESP32, dan Raspberry Pi Pico

Pin PC817PeranArduino UnoESP32Raspberry Pi Pico
1 (Anoda), isolasi outputBoard menyalakan LEDD9 → 330 Ω → pin 1GPIO 25 → 220 Ω → pin 1GP15 → 470 Ω → pin 1
2 (Katoda), isolasi outputJalur balik LEDGNDGNDGND
4 (Kolektor), membaca inputBoard membaca sinyalD2 (INPUT_PULLUP)GPIO 27 (INPUT_PULLUP)GP14 (PULL_UP)
3 (Emitor), membaca inputGND sisi pembacaGNDGNDGND
1 dan 2, membaca inputSinyal eksternal (12/24 V)Ke catu daya eksternal, bukan ke boardKe catu daya eksternal, bukan ke boardKe catu daya eksternal, bukan ke board
Kesalahan paling umum adalah menyambungkan LED tanpa resistor: memberi 5 V langsung ke pin 1 dan 2 membakar LED dalam hitungan detik. Kesalahan kedua paling umum adalah memasang komponen terbalik; LED hanya tahan 6 V tegangan balik, jadi 12 V atau 24 V yang tersambung terbalik akan merusaknya. Menambahkan dioda 1N4148 terbalik di input (katoda ke anoda) menghilangkan risiko itu.

Mengisolasi output Arduino

Dalam susunan ini, Arduino menyalakan LED optocoupler, dan transistor output menghubungsingkatkan input rangkaian lain seperti sakelar. Misalnya, dengan cara ini kamu bisa dengan aman menggerakkan input “trigger” perangkat 12 V, input remote shutter kamera, input PLC, atau mikrokontroler lain yang bekerja di tegangan berbeda. Karena transistor output dibatasi 35 V dan 50 mA, ia tidak bisa langsung menggerakkan kumparan relay, motor, atau LED strip; untuk beban seperti itu kamu pakai transistor atau MOSFET di sisi lainnya.

C++ (Arduino IDE)
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}

Di sisi output, hubungkan kolektor (pin 4) ke sisi positif atau input rangkaian lain dan emitor (pin 3) ke GND rangkaian itu; kalau polaritasnya terbalik, transistor tidak akan menghantar. Karena PC817 butuh beberapa sampai beberapa puluh mikrodetik untuk menyala dan mati, sinyal PWM yang melewatinya mulai cacat di atas beberapa kHz. Untuk sinyal cepat (UART, MIDI, PWM frekuensi tinggi), lebih baik pakai optocoupler kecepatan tinggi seperti 6N137 atau chip isolator digital.

Membaca sinyal 12/24 V dengan aman

Sinyal dari sensor induktif industri, output PLC, kontak pintu, kunci kontak mobil, atau tombol bel pintu 12 V tidak bisa kamu sambungkan langsung ke pin Arduino. Solusinya adalah melewatkan sinyal itu ke LED optocoupler: pasang resistor 4,7 kΩ seri dengan LED untuk 24 V dan 2,2 kΩ untuk 12 V, lalu transistor output bekerja dengan pull-up internal Arduino. Ketika ada tegangan, LED menyala, transistor menghantar, dan pin Arduino membaca LOW. Jadi logikanya terbalik, dan kamu memperhitungkannya di kode.

  1. Hubungkan positif catu 24 V lewat resistor 4,7 kΩ ke pin 1 (anoda) PC817.
  2. Hubungkan negatif sumber sinyal (GND 24 V) ke pin 2 (katoda). Jangan sambungkan GND ini ke Arduino.
  3. Kalau mau, tambahkan dioda 1N4148 terbalik di antara pin 1 dan 2 (katoda ke pin 1); dioda ini melindungi dari sambungan terbalik.
  4. Hubungkan pin 4 (kolektor) PC817 ke pin D2 Arduino dan pin 3 (emitor) ke GND Arduino.
  5. Upload kode di bawah dan buka Serial Monitor di 9600 baud. Ketika kamu memberi 24 V, kamu akan melihat “24V VAR / present” (VAR = bahasa Turki untuk “ada”).
C++ (Arduino IDE)
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}

Kode ini punya debounce sederhana yang hanya menerima pembacaan yang tidak berubah selama 20 ms; ini wajib untuk sinyal dari kontak mekanis atau relay. Karena kita membaca dengan millis() dan bukan delay(), Arduino bisa mengerjakan hal lain sambil menunggu. Di sistem kelistrikan mobil, jalur 12 V naik sampai 14,4 V ketika mesin menyala dan muncul lonjakan tinggi yang singkat; menaikkan resistor ke 3,3 kΩ dan menambahkan dioda TVS di input adalah langkah pencegahan yang bagus di sini.

Optocoupler dengan ESP32 dan Raspberry Pi Pico

Karena ESP32 dan Pico bekerja di 3,3 V, keduanya tidak boleh disambungkan langsung bahkan ke sinyal 5 V. Di sinilah keunggulan optocoupler: transistor output bersifat open collector, jadi tegangan output hanya ditentukan oleh tegangan tempat pull-up tersambung. Dengan pull-up internal, output otomatis tetap di 3,3 V; bahkan dengan 24 V di sisi input, yang sampai ke ESP32 paling tinggi 3,3 V. Kode ESP32 di bawah menghitung pulsa dari sensor induktif 24 V atau flow meter memakai interrupt:

C++ (Arduino IDE)
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}

IRAM_ATTR di depan fungsi interrupt menempatkan kode di memori cepat; ini dianjurkan untuk fungsi interrupt di ESP32. Filter 2 ms membuang pulsa palsu akibat optocoupler yang lambat mati atau derau kabel. Untuk penjelasan lebih lanjut tentang interrupt, lihat artikel interrupt Arduino. Di Raspberry Pi Pico, hal yang sama dilakukan dengan MicroPython seperti ini; sambil membaca input, contoh ini juga mengirim sinyal terisolasi ke sisi lain lewat PC817 kedua:

MicroPython
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)

Deteksi listrik PLN: H11AA1 dan keselamatan

Tegangan listrik PLN 230 V (220 V di Indonesia) bisa membunuh. Kalau kamu belum berpengalaman, jangan merakit sendiri rangkaian yang terhubung ke listrik PLN; pakai modul deteksi AC siap pakai yang tertutup dan bersertifikat. Jangan pernah memasang sisi listrik PLN di breadboard, jangan menyentuh apa pun selama rangkaian bertegangan, dan masukkan seluruh rangkaian ke kotak isolator bersama sekring.

Untuk mendeteksi apakah stopkontak atau rangkaian lampu sedang bertegangan, atau untuk menemukan momen persilangan nol (zero crossing) listrik PLN, dipakai optocoupler input AC seperti H11AA1. Di dalamnya ada dua LED yang tersambung antiparalel, jadi ia menghasilkan cahaya di kedua setengah siklus arus bolak-balik dan tidak punya masalah tegangan balik. Untuk 230 V rms, dua resistor 47 kΩ dipasang seri dengan input: sekitar 2,4 mA rms (3,5 mA di puncak) mengalir melalui total 94 kΩ dan setiap resistor membuang daya sekitar 0,28 W. Karena itu pilih resistor minimal 0,5 W, lebih baik 1 W; memakai dua resistor juga membagi dua tegangan di masing-masing resistor. Di sisi output, dengan pull-up 10 kΩ ke 5 V, transistor menghantar hampir sepanjang waktu selama ada tegangan; hanya di dekat persilangan nol, ketika LED padam, muncul pulsa HIGH yang singkat. Pada listrik 50 Hz (seperti di Indonesia) kamu akan melihat sekitar 100 pulsa per detik.

C++ (Arduino IDE)
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}

Kode ini memberimu dua informasi: kalau output menjadi LOW setidaknya sekali dalam 40 ms terakhir, listrik PLN menyala; dan setengah dari jumlah pulsa yang dihitung interrupt adalah frekuensi listrik PLN. Hal yang perlu diperhatikan pada modul siap pakai maupun board buatanmu sendiri: sisakan jarak minimal 6–8 mm (jarak rambat, creepage distance) di antara jalur listrik PLN dan sisi tegangan rendah, pasang sekring di input listrik PLN, jangan pernah melewatkan jalur PCB di antara kedua sisi optocoupler, dan pakai rangkaian di dalam kotak tertutup.

Optocoupler di modul relay dan jumper JD-VCC

Modul relay dengan input optocoupler
Banyak modul relay punya optocoupler PC817 di sisi input; untuk isolasi penuh kamu harus melepas jumper JD-VCC.

Sebagian besar modul relay 1, 2, 4, dan 8 kanal di pasaran punya PC817 di input setiap kanal. Arus dari pin VCC melewati resistor dan LED indikator menuju LED optocoupler; ketika pin IN ditarik ke LOW, rangkaian tertutup dan relay aktif dengan bunyi klik. Karena itu modul-modul ini biasanya bekerja aktif LOW. Namun, dari pabrik jumper JD-VCC sudah terpasang dan kumparan relay mendapat daya dari VCC dan GND yang sama: optocoupler-nya ada, tetapi isolasinya tidak ada. Dasar-dasar modul relay bisa kamu temukan di artikel Apa Itu Modul Relay?.

PengaturanPengkabelanIsolasi
Jumper JD-VCC terpasangArduino 5V → VCC, GND → GND, pin → INTidak ada; derau dari kumparan relay masuk ke catu daya Arduino
Jumper dilepasArduino 5V → VCC, pin → IN; GND Arduino tidak disambung. Catu 5 V terpisah → JD-VCC dan GNDPenuh; satu-satunya yang dimiliki bersama oleh kedua sisi adalah cahaya di dalam optocoupler

Catatan tentang menggerakkan triac dengan MOC3021

Kalau kamu ingin sakelar AC yang senyap dan tanpa percikan api sebagai pengganti relay, pakai triac (misalnya BT136) dan optocoupler output triac untuk menggerakkannya. MOC3021 bertipe random-phase: ia memicu triac begitu LED menyala, jadi bersama detektor zero-cross ia cocok untuk membuat dimmer. MOC3041 dan MOC3063 adalah model dengan rangkaian zero-crossing; keduanya hanya memicu ketika tegangan melewati nol, menimbulkan interferensi lebih kecil pada aplikasi nyala/mati, tetapi tidak bisa dipakai untuk dimmer. LED MOC3021 bisa butuh sampai 15 mA untuk memicu; pada 5 V, 220 Ω (sekitar 17 mA) adalah nilai yang cocok, sedangkan 330 Ω mungkin tidak cukup untuk sebagian komponen. Seperti di datasheet, resistor sekitar 360 Ω dipasang di antara gate triac dan MOC3021, dan untuk beban induktif seperti motor ditambahkan snubber RC di kedua ujung triac. Modul SSR (solid-state relay) siap pakai berisi persis struktur ini.

Ide proyek dengan optocoupler

  • Pembaca sensor industri: hitung produk di conveyor dengan sensor proximity induktif 24 V dan tampilkan hitungannya di LCD.
  • Detektor kunci kontak mobil: bangunkan ESP32 ketika kunci kontak dinyalakan dan jalankan kamera mobil atau pencatat data.
  • Alarm listrik padam: dengan modul deteksi AC siap pakai, bunyikan buzzer atau kirim notifikasi ke ponselmu ketika listrik PLN padam.
  • Penangkap bel pintu: baca jalur bel pintu 12 V yang sudah ada dengan isolasi dan kirim notifikasi ketika bel berbunyi.
  • Board relay terisolasi: kendalikan lampu 230 V dengan modul relay yang jumper JD-VCC-nya sudah kamu lepas dan yang kamu beri daya dari catu terpisah.
  • Input MIDI: baca not MIDI dari alat musik elektronik di Arduino dengan 6N138.

Kesalahan umum dan cara memperbaikinya

GejalaKemungkinan penyebabSolusi
Output tidak pernah berubahLED tersambung terbalik, atau tersambung tanpa resistor lalu terbakarPastikan pin 1 adalah yang bertanda titik; uji LED dengan rentang dioda di multimeter
Logikanya bekerja terbalikPin menjadi LOW ketika ada tegangan; ini normalAnggap LOW sebagai “ada” di kode
Output tidak turun penuh ke LOW (tertahan di 1–2 V)Arus LED terlalu kecil, CTR tidak cukup, atau pull-up terlalu kecilPerkecil resistor LED atau perbesar pull-up (misalnya 10 kΩ)
Sinyal PWM jadi cacatPC817 terlalu lambat di atas beberapa kHzPerkecil pull-up atau pakai optocoupler cepat seperti 6N137
Arduino reset padahal sudah diisolasiGND kedua sisi tersambung jadi satuPisahkan GND sisi input dari Arduino; lepas jumper JD-VCC di modul relay
Pemicu palsu acakKabel panjang, derau, pantulan kontakDebounce di software, perpendek kabel, tambahkan kapasitor 100 nF di kedua kaki LED
Cara termudah menguji optocoupler: beri sisi LED tegangan 5 V lewat 330 Ω dan pasang multimeter di rentang hambatan di antara kolektor dan emitor. Kamu seharusnya melihat hambatan rendah selama LED menyala dan hambatan sangat tinggi selama LED mati. Dengan tes sederhana ini, komponen yang rusak ketahuan sebelum masuk ke rangkaian.

Optocoupler adalah cara termurah untuk membawa proyek Arduino keluar dari meja dan membuatnya berkomunikasi dengan aman dengan sinyal 12 V, 24 V, dan 230 V di dunia nyata: komponen yang harganya sangat murah memisahkan board dan komputermu dari tegangan tinggi. Di aplikasi BlueGrays kamu bisa menemukan proyek mengendalikan bohlam 230 V dengan relay, lampu pintar, dan penyiraman, langkah demi langkah lengkap dengan skema rangkaian dan kode.

Pertanyaan umum

Optocoupler dipakai untuk apa?

Optocoupler membawa sinyal di antara dua rangkaian dengan cahaya, tanpa sambungan listrik apa pun. Ini mengisolasi rangkaian bertegangan tinggi atau berderau dari mikrokontroler yang sensitif seperti Arduino. Optocoupler dipakai untuk membaca sensor industri, di modul relay, dan di rangkaian deteksi listrik PLN.

Bagaimana pinout PC817?

PC817 punya empat kaki: pin 1 di sudut bertanda titik adalah anoda LED dan pin 2 adalah katoda. Di sisi seberangnya, pin 3 adalah emitor fototransistor dan pin 4 adalah kolektornya.

Resistor apa yang sebaiknya kupakai dengan optocoupler?

Resistor dihitung dengan R = (tegangan catu − 1,2 V) / arus LED. Nilai awal yang bagus adalah 330 Ω untuk pin 5 V Arduino, 220 Ω untuk ESP32, 2,2 kΩ untuk sinyal 12 V, dan 4,7 kΩ untuk sinyal 24 V.

Apa itu CTR pada optocoupler?

CTR (current transfer ratio, rasio transfer arus) adalah perbandingan arus yang bisa dialirkan transistor output terhadap arus LED. Pada optocoupler dengan CTR 100%, 5 mA ke LED memungkinkan kamu menarik paling banyak sekitar 5 mA dari output. Selalu rancang berdasarkan CTR terendah di datasheet.

Apa bedanya PC817 dan 4N35?

Keduanya optocoupler dengan output fototransistor. PC817 punya empat kaki dan murah, dengan CTR 50–600% tergantung rank-nya. 4N35 punya enam kaki, pin basisnya dikeluarkan, dan tahan tegangan kolektor sampai 70 V.

Bisakah optocoupler mendeteksi listrik PLN 230 V?

Bisa, optocoupler input AC seperti H11AA1 dengan resistor seri yang rating-nya sesuai bisa mendeteksi tegangan listrik PLN dan persilangan nol. Tapi tegangan listrik PLN bisa membunuh; kalau kamu belum berpengalaman, pakai modul deteksi AC siap pakai yang tertutup.

Lihat semua proyek
Menyalakan Bohlam 220V dengan Tombol Tekan
#19Mahir
Premium

Menyalakan Bohlam 220V dengan Tombol Tekan

Selama kamu menahan tombol, bohlam 220 volt sungguhan tetap menyala, dan mati begitu kamu melepasnya. Sinyal kecil Arduino tidak bisa langsung menyalakan bohlam, jadi relay, sakelar yang dikendalikan

4.4(30)
38
Menyalakan Bohlam 220V dengan Tombol (On-Off)
#20Mahir
Premium

Menyalakan Bohlam 220V dengan Tombol (On-Off)

Ingin menyalakan dan mematikan bohlam rumah sungguhan dengan tombol kecil? Setiap kali kamu menekan tombol, Arduino membalik relay dan bohlam menyala; tekan lagi dan bohlam mati. Relay adalah perantar

4.5(33)
44
Menyalakan Bohlam 220V dengan Remote Control
#21Mahir
Premium

Menyalakan Bohlam 220V dengan Remote Control

Nyalakan dan matikan bohlam sungguhan di rumahmu dengan remote TV, tanpa beranjak dari sofa. Arduino membaca sinyal cahaya tak terlihat dari remote; tombol power membuat relay berbunyi klik dan menyal

4.4(22)
30
Lampu Tangga dan Koridor Pintar
#82Menengah
Premium

Lampu Tangga dan Koridor Pintar

Injak tangga atau masuk ke lorong, dan lampu menyala satu per satu ke arah kamu berjalan. Ada sensor jarak di setiap ujung; sensor mana pun yang kamu lewati, delapan LED menyala satu per satu dari uju

5.0(35)
51
Lampu Pintar ESP32 (PIR + LDR + Relay + OLED)
#141Mahir
Premium

Lampu Pintar ESP32 (PIR + LDR + Relay + OLED)

Ubah lorong, kamar mandi, atau gudangmu menjadi lampu pintar dengan ESP32! Dengan sensor gerak PIR, sensor cahaya LDR, dan modul relay, kita membuat skenario klasik "lampu menyala ketika ada gerakan dalam gelap"; jika sudah terang, gerakan TIDAK menyalakan lampu, jadi energi hemat di siang hari. Lampu menyala 30 detik; jika gerakan berlanjut, timer diulang. OLED SSD1306 menampilkan status dengan font besar (NYALA / SIANG / MENUNGGU) dan hitung mundur.

4.3(6)
11
Stasiun Penyiraman Pintar
#83Mahir
Premium

Stasiun Penyiraman Pintar

Tukang kebun yang menyiram tanamanmu sendiri, supaya tanaman tidak kering ketika kamu berlibur. Sensor kelembapan tanah mengukur seberapa basah tanahnya; ketika kering, Arduino menyalakan pompa air be

5.0(42)
57
Lampu Otomatis dengan Sensor Gerak PIR ESP32
#121Menengah
Premium

Lampu Otomatis dengan Sensor Gerak PIR ESP32

Di proyek ini, sensor gerak PIR HC-SR501 mendeteksi ketika seseorang masuk ke ruangan dan otomatis menyalakan LED. Lama LED menyala dilacak dengan millis(); setiap bacaan HIGH memperbarui waktu gerakan terakhir, dan LED mati minimal 10 detik setelah bacaan HIGH terakhir. Kode yang sekarang juga menunggu 50 ms di setiap loop dengan delay(50), jadi loopnya belum sepenuhnya non-blocking. Proyek ini bisa dipakai untuk lampu tangga.

4.4(24)
38