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.
- Rangkaian di sisi input mengalirkan arus beberapa miliampere ke LED melalui sebuah resistor.
- LED memancarkan cahaya inframerah; cahaya ini menembus lapisan isolator dan jatuh ke fototransistor.
- Cahaya itu berperan seperti arus basis fototransistor dan membuat arus mengalir di antara kolektor dan emitor; transistor menutup seperti sakelar.
- 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:
| Jenis | Contoh model | Output | Penggunaan umum |
|---|---|---|---|
| Fototransistor | PC817, EL817, 4N35, 4N25 | Fototransistor NPN | Isolasi sinyal digital, membaca input 12/24 V, modul relay |
| Output Darlington | 4N33, H11B1 | Transistor Darlington | Arus output besar dari arus LED yang sangat kecil (tetapi lebih lambat) |
| Input AC | H11AA1, PC814 | Dua LED antiparalel + fototransistor | Deteksi listrik PLN, deteksi zero-cross (persilangan nol) |
| Output triac | MOC3021, MOC3041, MOC3063 | Fototriac | Memicu triac, kendali beban AC, SSR |
| Logika kecepatan tinggi | 6N137, 6N138 | Fotodioda + gerbang logika atau transistor | Isolasi 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.
Pinout dan spesifikasi PC817 dan 4N35
| Pin | PC817 (DIP-4) | 4N35 (DIP-6) |
|---|---|---|
| 1 | Anoda (LED +) | Anoda (LED +) |
| 2 | Katoda (LED −) | Katoda (LED −) |
| 3 | Emitor | Tidak terhubung |
| 4 | Kolektor | Emitor |
| 5 | Tidak ada | Kolektor |
| 6 | Tidak ada | Basis (biasanya dibiarkan terbuka) |
| Parameter | PC817 | 4N35 |
|---|---|---|
| Tegangan maju LED (VF) | Tip. 1,2 V, maks. 1,4 V (pada 20 mA) | Sekitar 1,2–1,3 V |
| Arus maksimum LED | 50 mA | 60 mA |
| Tegangan balik LED | Maks. 6 V | Maks. 6 V |
| CTR | 50–600% (pada 5 mA, 5 V; tergantung rank) | Minimal 100% (pada 10 mA, 10 V) |
| Tegangan kolektor-emitor (VCEO) | 35 V | 70 V |
| Arus kolektor | Maks. 50 mA | Maks. 50 mA |
| Waktu switching | Tip. 3–4 µs (dengan resistor beban kecil) | Sekitar 10 µs |
| Tegangan isolasi | 5000 V rms | 5000 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 PC817 | Rentang CTR (IF = 5 mA) | Arus output pada arus LED 5 mA |
|---|---|---|
| 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 |
| Tanpa huruf | 50–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.
| Kasus | Tegangan catu | Target arus LED | Resistor yang disarankan | Daya resistor |
|---|---|---|---|---|
| Digerakkan dari pin Arduino Uno | 5 V | ~10 mA | 330 Ω | 1/4 W sudah cukup |
| Digerakkan dari pin ESP32 | 3,3 V | ~10 mA | 220 Ω | 1/4 W sudah cukup |
| Digerakkan dari pin Raspberry Pi Pico | 3,3 V | ~4,5 mA | 470 Ω | 1/4 W sudah cukup |
| Membaca sinyal 12 V | 12 V | ~5 mA | 2,2 kΩ | 1/4 W (membuang 0,05 W) |
| Membaca sinyal 24 V | 24 V | ~5 mA | 4,7 kΩ | 1/4 W (membuang 0,11 W) |
Tabel pengkabelan: Arduino Uno, ESP32, dan Raspberry Pi Pico
| Pin PC817 | Peran | Arduino Uno | ESP32 | Raspberry Pi Pico |
|---|---|---|---|---|
| 1 (Anoda), isolasi output | Board menyalakan LED | D9 → 330 Ω → pin 1 | GPIO 25 → 220 Ω → pin 1 | GP15 → 470 Ω → pin 1 |
| 2 (Katoda), isolasi output | Jalur balik LED | GND | GND | GND |
| 4 (Kolektor), membaca input | Board membaca sinyal | D2 (INPUT_PULLUP) | GPIO 27 (INPUT_PULLUP) | GP14 (PULL_UP) |
| 3 (Emitor), membaca input | GND sisi pembaca | GND | GND | GND |
| 1 dan 2, membaca input | Sinyal eksternal (12/24 V) | Ke catu daya eksternal, bukan ke board | Ke catu daya eksternal, bukan ke board | Ke catu daya eksternal, bukan ke board |
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.
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.
- Hubungkan positif catu 24 V lewat resistor 4,7 kΩ ke pin 1 (anoda) PC817.
- Hubungkan negatif sumber sinyal (GND 24 V) ke pin 2 (katoda). Jangan sambungkan GND ini ke Arduino.
- Kalau mau, tambahkan dioda 1N4148 terbalik di antara pin 1 dan 2 (katoda ke pin 1); dioda ini melindungi dari sambungan terbalik.
- Hubungkan pin 4 (kolektor) PC817 ke pin D2 Arduino dan pin 3 (emitor) ke GND Arduino.
- 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”).
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:
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:
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
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.
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

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?.
| Pengaturan | Pengkabelan | Isolasi |
|---|---|---|
| Jumper JD-VCC terpasang | Arduino 5V → VCC, GND → GND, pin → IN | Tidak ada; derau dari kumparan relay masuk ke catu daya Arduino |
| Jumper dilepas | Arduino 5V → VCC, pin → IN; GND Arduino tidak disambung. Catu 5 V terpisah → JD-VCC dan GND | Penuh; 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
| Gejala | Kemungkinan penyebab | Solusi |
|---|---|---|
| Output tidak pernah berubah | LED tersambung terbalik, atau tersambung tanpa resistor lalu terbakar | Pastikan pin 1 adalah yang bertanda titik; uji LED dengan rentang dioda di multimeter |
| Logikanya bekerja terbalik | Pin menjadi LOW ketika ada tegangan; ini normal | Anggap 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 kecil | Perkecil resistor LED atau perbesar pull-up (misalnya 10 kΩ) |
| Sinyal PWM jadi cacat | PC817 terlalu lambat di atas beberapa kHz | Perkecil pull-up atau pakai optocoupler cepat seperti 6N137 |
| Arduino reset padahal sudah diisolasi | GND kedua sisi tersambung jadi satu | Pisahkan GND sisi input dari Arduino; lepas jumper JD-VCC di modul relay |
| Pemicu palsu acak | Kabel panjang, derau, pantulan kontak | Debounce di software, perpendek kabel, tambahkan kapasitor 100 nF di kedua kaki LED |
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.
Proyek untuk dibuat setelah membaca ini
Lihat semua proyek
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

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

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

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

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.

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

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.
Artikel lainnya
Aplikasi BlueGrays
Rakit rangkaian ini langkah demi langkah di ponselmu
Skema pengkabelan, kode, dan daftar komponen dalam satu layar. 200+ proyek Arduino, ESP32, dan Pico siap dibuat.
Pindai dengan ponselmu
Arahkan kamera ke kode ini dan toko aplikasi di ponselmu akan terbuka.
atau buka toko aplikasi

