Optokuplör Nedir? PC817 ve 4N35 ile Arduino'da Galvanik İzolasyon
Optokuplör nedir, nasıl çalışır? PC817 ve 4N35 pinleri, CTR ve direnç hesabı, 12/24 V sinyal okuma, 220 V algılama (H11AA1), röle modülü ve MOC3021 notları.
Optokuplör (optocoupler, optoizolatör ya da foto kuplör), iki devre arasında elektrik bağlantısı kurmadan, yalnızca ışıkla sinyal taşıyan küçük bir entegredir. İçinde bir kızılötesi LED ve onun karşısında duran bir fototransistör bulunur: bir taraftaki devre LED'i yakınca diğer taraftaki transistör iletime geçer. İki taraf arasında tek bir kablo bile olmadığı için 24 V'luk bir endüstriyel sensörü, bir otomobilin 12 V hattını ya da bir motor sürücüsünü Arduino'na bağlarken oluşabilecek gerilim sıçramaları ve parazitler mikrodenetleyicine ulaşamaz.
Bu yazıda optokuplörün içinde ne olduğunu, galvanik izolasyonun neden önemli olduğunu, en yaygın iki model olan PC817 ve 4N35'in pinlerini ve değerlerini, CTR kavramını ve direnç hesabını adım adım öğreneceksin. Ardından Arduino çıkışını yalıtmayı, 12/24 V sinyalleri güvenle okumayı, ESP32 ve Raspberry Pi Pico ile kullanımı, 220 V algılamanın (H11AA1) güvenlik kurallarını, röle modüllerindeki optokuplörü ve MOC3021 ile triyak sürmeyi göreceksin.
Optokuplör nedir, nasıl çalışır?
Optokuplörün kılıfının içinde birbirine bakan iki yonga vardır. Giriş tarafında, normal bir LED gibi akımla çalışan kızılötesi bir LED bulunur. Çıkış tarafında ise beyzi ışığa duyarlı bir fototransistör vardır; beyz ucuna akım vermek yerine ışık düşürülür. İki yonganın arasında saydam ama elektriksel olarak yalıtkan bir plastik katman yer alır. Bu katman binlerce volta dayanacak şekilde tasarlanmıştır.
- Giriş tarafındaki devre, LED'den bir direnç üzerinden birkaç miliamper akım geçirir.
- LED kızılötesi ışık yayar; bu ışık yalıtkan katmanı geçip fototransistörün üzerine düşer.
- Işık, fototransistörün beyz akımı gibi davranır ve kolektör ile emetör arasından akım akmasını sağlar; transistör bir anahtar gibi kapanır.
- LED sönünce ışık kesilir, transistör yalıtıma geçer ve çıkış devresi açılır. Sinyal böylece kablosuz, yalnızca ışıkla karşıya geçmiş olur.
Çıkış tarafında hangi elemanın olduğuna göre optokuplörlerin farklı türleri vardır. Hobi projelerinde en çok fototransistörlü modeller kullanılır; ama AC sinyal algılamak, triyak tetiklemek ya da hızlı veri hattını yalıtmak için özel türler gerekir:
| Tür | Örnek modeller | Çıkış | Tipik kullanım |
|---|---|---|---|
| Fototransistörlü | PC817, EL817, 4N35, 4N25 | NPN fototransistör | Dijital sinyal yalıtımı, 12/24 V giriş okuma, röle modülleri |
| Darlington çıkışlı | 4N33, H11B1 | Darlington transistör | Çok düşük LED akımıyla yüksek çıkış akımı (ama daha yavaş) |
| AC girişli | H11AA1, PC814 | Ters paralel iki LED + fototransistör | 220 V şebeke algılama, sıfır geçiş tespiti |
| Triyak çıkışlı | MOC3021, MOC3041, MOC3063 | Foto triyak | Triyak tetikleme, AC yük kontrolü, SSR'ler |
| Yüksek hızlı lojik | 6N137, 6N138 | Fotodiyot + lojik kapı ya da transistör | MIDI, UART ve hızlı dijital hat yalıtımı |
Galvanik izolasyon neden gerekir?
Galvanik izolasyon, iki devrenin arasında doğrudan iletken bir yol olmaması demektir: ortak GND yoktur, ortak kablo yoktur, enerji ve bilgi başka bir yolla (ışık, manyetik alan) aktarılır. Arduino'nun pinleri en fazla 5 V'a (ESP32 ve Pico'da 3,3 V) dayanır. Bir endüstriyel sensörün 24 V'u, bir motorun anahtarlama sırasında ürettiği yüzlerce voltluk kısa sıçramalar ya da uzun kablolara indüklenen parazitler, ortak GND üzerinden doğrudan mikrodenetleyiciye ulaşabilir. Optokuplör bu yolu fiziksel olarak keser.
- Koruma: Yüksek gerilim tarafında bir arıza olsa bile hasar optokuplörde kalır; Arduino, bilgisayarın USB portu ve sen güvende olursun.
- Parazit ve toprak döngüsü: Motorlar, röleler ve uzun kablolar GND hattında gürültü oluşturur. Topraklar ayrı olduğunda bu gürültü sinyal hattına karışmaz; ortak toprak konusunu GND ve ortak toprak yazısında ayrıntılı anlatıyoruz.
- Farklı gerilim seviyeleri: Çıkış transistörü dışarıdan beslendiği için 24 V'luk bir sinyal 3,3 V'a, 5 V'luk bir sinyal 12 V'a kolayca dönüşür. Optokuplör aynı zamanda yavaş ama sağlam bir seviye dönüştürücüdür.
- Güvenlik standartları: Şebeke gerilimine bağlı cihazlarda kullanıcı tarafının şebekeden yalıtılması zorunludur; PC817 gibi parçalar 5000 V rms yalıtım testinden geçer.
PC817 ve 4N35 pinleri ve teknik değerleri
| Pin | PC817 (DIP-4) | 4N35 (DIP-6) |
|---|---|---|
| 1 | Anot (LED +) | Anot (LED +) |
| 2 | Katot (LED −) | Katot (LED −) |
| 3 | Emetör | Boş (bağlantı yok) |
| 4 | Kolektör | Emetör |
| 5 | Yok | Kolektör |
| 6 | Yok | Beyz (genelde boş bırakılır) |
| Özellik | PC817 | 4N35 |
|---|---|---|
| LED ileri gerilimi (VF) | Tipik 1,2 V, en fazla 1,4 V (20 mA'de) | Yaklaşık 1,2–1,3 V |
| LED en büyük akımı | 50 mA | 60 mA |
| LED ters gerilimi | En fazla 6 V | En fazla 6 V |
| CTR | %50–600 (5 mA, 5 V'ta; sınıfa göre) | En az %100 (10 mA, 10 V'ta) |
| Kolektör-emetör gerilimi (VCEO) | 35 V | 70 V |
| Kolektör akımı | En fazla 50 mA | En fazla 50 mA |
| Anahtarlama süresi | Tipik 3–4 µs (düşük yük direnciyle) | Yaklaşık 10 µs |
| Yalıtım gerilimi | 5000 V rms | 5000 V rms |
PC817'nin üzerinde 1 numaralı pin bir noktayla işaretlidir; kılıf üzerinde "PC817" yazısından sonra gelen A, B, C ya da D harfi CTR sınıfını gösterir. EL817, LTV817 ve KP1010 gibi parçalar PC817 ile pin uyumlu muadillerdir. 4N35 ise altı bacaklı olduğu için beyz ucu dışarı çıkar; bu ucu genelde boş bırakırsın, çok gürültülü ortamlarda beyz ile emetör arasına yüksek değerli bir direnç (ör. 1 MΩ) konarak kapanma hızlandırılabilir.
CTR nedir ve direnç nasıl hesaplanır?
CTR (Current Transfer Ratio, akım aktarım oranı), çıkış transistöründen akabilecek kolektör akımının LED akımına oranıdır: CTR = IC / IF × %100. Örneğin CTR'si %100 olan bir optokuplörde LED'den 5 mA geçirirsen çıkıştan en fazla yaklaşık 5 mA akım çekebilirsin. CTR sıcaklıkla değişir, LED yaşlandıkça yıllar içinde düşer ve aynı modelin parçaları arasında bile büyük fark gösterir. Bu yüzden tasarımda her zaman veri sayfasındaki en düşük değeri esas alırsın.
| PC817 sınıfı | CTR aralığı (IF = 5 mA) | 5 mA LED akımında çıkış akımı |
|---|---|---|
| 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 |
| Harf yok | %50–600 | 2,5–30 mA (en kötüsünü varsay) |
LED direnci: Giriş tarafı tam bir LED gibi hesaplanır: R = (Vkaynak − VF) / IF. Arduino Uno'nun 5 V pininden 10 mA geçirmek için (5 − 1,2) / 0,010 = 380 Ω bulunur; standart 330 Ω yaklaşık 11,5 mA, 390 Ω yaklaşık 9,7 mA verir. ESP32'de (3,3 − 1,2) / 0,010 = 210 Ω, yani 220 Ω kullanırsın. Raspberry Pi Pico'nun pinleri varsayılan olarak 4 mA sürme gücüyle ayarlıdır; burada 470 Ω ile yaklaşık 4,5 mA yeterlidir. Hesabı elle yapmak istemezsen LED Direnci aracını kullanabilirsin.
Çıkış (pull-up) direnci: Transistörün tam iletime (doyuma) girmesi için pull-up direncinin çektiği akım, CTR'nin izin verdiğinden küçük olmalıdır. 5 V'a bağlı 10 kΩ pull-up yalnızca 0,5 mA ister. Harfsiz bir PC817'de en kötü CTR %50 olduğundan 0,5 mA için LED'den 1 mA geçmesi yeterdi; 5–10 mA vererek en az beş kat pay bırakmış olursun. Arduino'nun dahili pull-up direnci (yaklaşık 20–50 kΩ) de bu iş için idealdir. Pull-up küçüldükçe sinyal hızlanır ama gereken akım artar; büyüdükçe akım azalır ama transistörün kapanması yavaşlar.
| Durum | Kaynak gerilimi | Hedef LED akımı | Önerilen direnç | Direnç gücü |
|---|---|---|---|---|
| Arduino Uno pininden sürme | 5 V | ~10 mA | 330 Ω | 1/4 W yeterli |
| ESP32 pininden sürme | 3,3 V | ~10 mA | 220 Ω | 1/4 W yeterli |
| Raspberry Pi Pico pininden sürme | 3,3 V | ~4,5 mA | 470 Ω | 1/4 W yeterli |
| 12 V sinyal okuma | 12 V | ~5 mA | 2,2 kΩ | 1/4 W (0,05 W harcar) |
| 24 V sinyal okuma | 24 V | ~5 mA | 4,7 kΩ | 1/4 W (0,11 W harcar) |
Bağlantı tablosu: Arduino Uno, ESP32 ve Raspberry Pi Pico
| PC817 pini | Görevi | Arduino Uno | ESP32 | Raspberry Pi Pico |
|---|---|---|---|---|
| 1 (Anot), çıkış yalıtımı | Kart LED'i sürer | D9 → 330 Ω → pin 1 | GPIO 25 → 220 Ω → pin 1 | GP15 → 470 Ω → pin 1 |
| 2 (Katot), çıkış yalıtımı | LED dönüşü | GND | GND | GND |
| 4 (Kolektör), giriş okuma | Kart sinyali okur | D2 (INPUT_PULLUP) | GPIO 27 (INPUT_PULLUP) | GP14 (PULL_UP) |
| 3 (Emetör), giriş okuma | Okuma tarafı GND | GND | GND | GND |
| 1 ve 2, giriş okuma | Dış sinyal (12/24 V) | Dış kaynağa bağlanır, karta değil | Dış kaynağa bağlanır, karta değil | Dış kaynağa bağlanır, karta değil |
Arduino çıkışını yalıtmak
Bu kullanımda Arduino, optokuplörün LED'ini yakar; çıkıştaki transistör ise başka bir devrenin girişini bir anahtar gibi kısa devre eder. Örneğin bir 12 V cihazın "tetik" girişini, bir fotoğraf makinesinin uzaktan deklanşör girişini, bir PLC girişini ya da farklı gerilimde çalışan başka bir mikrodenetleyiciyi bu yolla güvenle sürebilirsin. Çıkış transistörünün sınırları 35 V ve 50 mA olduğu için bir röle bobinini, motoru ya da LED şeridi doğrudan süremez; böyle yükler için karşı tarafta bir transistör ya da MOSFET kullanırsın.
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}Çıkış tarafında kolektörü (pin 4) karşı devrenin artı tarafına ya da girişine, emetörü (pin 3) o devrenin GND'sine bağlarsın; kutup ters olursa transistör iletmez. PC817 ile sinyalin açılıp kapanması birkaç ile birkaç on mikrosaniye sürdüğü için optokuplörden geçen PWM sinyali birkaç kHz'in üstünde bozulmaya başlar. Hızlı sinyaller (UART, MIDI, yüksek frekanslı PWM) için 6N137 gibi yüksek hızlı optokuplörler ya da dijital izolatör entegreleri tercih edilir.
12/24 V sinyali güvenle okumak
Endüstriyel endüktif sensörler, PLC çıkışları, kapı kontakları, araç kontak anahtarı ya da 12 V'luk bir zil butonu gibi kaynaklardan gelen sinyalleri doğrudan Arduino pinine bağlayamazsın. Çözüm, sinyali optokuplörün LED'inden geçirmektir: 24 V için LED'e seri 4,7 kΩ, 12 V için 2,2 kΩ direnç koyarsın; çıkış transistörü ise Arduino'nun dahili pull-up direnciyle çalışır. Gerilim geldiğinde LED yanar, transistör iletir ve Arduino pini LOW okur. Yani mantık terstir; kodda bunu dikkate alırsın.
- 24 V kaynağın artısını 4,7 kΩ direnç üzerinden PC817'nin 1 numaralı pinine (anot) bağla.
- Sinyal kaynağının eksisini (24 V GND) 2 numaralı pine (katot) bağla. Bu GND'yi Arduino'ya bağlama.
- İsteğe bağlı olarak 1 ve 2 numaralı pinlere ters yönde bir 1N4148 diyot ekle (katodu pin 1'e); ters bağlantıya karşı korur.
- PC817'nin 4 numaralı pinini (kolektör) Arduino'nun D2 pinine, 3 numaralı pinini (emetör) Arduino GND'sine bağla.
- Aşağıdaki kodu yükle ve Seri Monitörü 9600 baud'da aç. 24 V uyguladığında "24V VAR" yazısını görmelisin.
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}Kod, 20 ms boyunca değişmeyen okumaları kabul eden basit bir debounce (sıçrama önleme) içerir; mekanik kontak ya da rölelerden gelen sinyallerde bu şarttır. Okumayı delay() yerine millis() ile yaptığımız için Arduino bu sırada başka işler de yapabilir. Araç elektriğinde 12 V hattı motor çalışırken 14,4 V'a çıkar ve kısa süreli yüksek sıçramalar görülür; burada direnci 3,3 kΩ'a çıkarmak ve girişe bir TVS diyot eklemek iyi bir önlemdir.
ESP32 ve Raspberry Pi Pico ile optokuplör
ESP32 ve Pico 3,3 V ile çalıştığı için 5 V'luk sinyallere bile doğrudan bağlanmamalıdır. Optokuplörün güzelliği şudur: çıkış transistörü açık kolektördür, yani çıkış gerilimini yalnızca pull-up direncinin bağlı olduğu gerilim belirler. Dahili pull-up kullandığında çıkış otomatik olarak 3,3 V seviyesinde kalır; giriş tarafında 24 V olsa bile ESP32'ye en fazla 3,3 V ulaşır. Aşağıdaki ESP32 kodu 24 V'luk bir endüktif sensörden ya da debimetreden gelen darbeleri kesmeyle (interrupt) sayar:
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}Kesme fonksiyonunun önündeki IRAM_ATTR, kodun hızlı belleğe konmasını sağlar; ESP32'de kesme fonksiyonlarında kullanılması önerilir. 2 ms'lik filtre, optokuplörün yavaş kapanmasından ya da kablo parazitinden doğan sahte darbeleri eler. Kesmelerin ayrıntısı için Arduino interrupt yazısına göz atabilirsin. Raspberry Pi Pico'da aynı işi MicroPython ile şöyle yaparsın; bu örnek girişi okurken ikinci bir PC817 ile karşı tarafa yalıtılmış bir sinyal de gönderir:
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)220 V algılama: H11AA1 ve güvenlik
Bir prizde ya da lamba hattında gerilim olup olmadığını, ya da şebekenin sıfır geçiş anlarını tespit etmek için H11AA1 gibi AC girişli optokuplörler kullanılır. İçinde ters paralel bağlı iki LED vardır; bu yüzden alternatif akımın her iki yarım dalgasında da ışık üretir ve ters gerilim sorunu yaşamaz. 230 V rms için girişe seri olarak iki adet 47 kΩ direnç konur: toplam 94 kΩ'dan yaklaşık 2,4 mA rms (tepe değerde 3,5 mA) akar ve her direnç yaklaşık 0,28 W harcar. Bu yüzden en az 0,5 W, tercihen 1 W direnç seçilir; iki direnç kullanmak her birinin üzerindeki gerilimi de yarıya indirir. Çıkış tarafında 5 V'a bağlı 10 kΩ pull-up ile transistör, gerilim varken çoğunlukla iletimdedir; yalnızca sıfır geçişlerinin yakınında LED'ler sönünce kısa bir HIGH darbesi oluşur. 50 Hz şebekede saniyede yaklaşık 100 darbe görürsün.
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}Kod iki bilgi verir: son 40 ms içinde çıkış en az bir kez LOW olduysa şebeke vardır; kesme ile sayılan darbelerin yarısı da şebeke frekansını verir. Hazır modüllerde ve kendi kartında dikkat etmen gereken noktalar şunlardır: şebeke tarafındaki iletken yollar ile düşük gerilim tarafı arasında en az 6–8 mm boşluk (kaçak yolu) bırak, şebeke girişine bir sigorta koy, optokuplörün iki tarafı arasından hiçbir iz geçirme ve devreyi kapalı bir kutu içinde kullan.
Röle modüllerindeki optokuplör ve JD-VCC jumper'ı

Piyasadaki 1, 2, 4 ve 8 kanallı röle modüllerinin çoğunda her kanalın girişinde bir PC817 vardır. VCC pininden gelen akım bir direnç ve gösterge LED'inden geçip optokuplörün LED'ine gider; IN pini LOW yapıldığında devre tamamlanır ve röle çeker. Bu yüzden bu modüller genelde aktif LOW çalışır. Ancak fabrikadan çıktığı haliyle JD-VCC jumper'ı takılıdır ve röle bobini de aynı VCC ve GND'den beslenir: optokuplör orada durur ama izolasyon yoktur. Röle modülünün temellerini Röle Modülü Nedir? yazısında bulabilirsin.
| Ayar | Bağlantı | İzolasyon |
|---|---|---|
| JD-VCC jumper'ı takılı | Arduino 5V → VCC, GND → GND, pin → IN | Yok; röle bobininin gürültüsü Arduino'nun beslemesine karışır |
| Jumper çıkarılmış | Arduino 5V → VCC, pin → IN; Arduino GND bağlanmaz. Ayrı 5 V kaynak → JD-VCC ve GND | Tam; iki tarafın tek ortak noktası optokuplördeki ışıktır |
MOC3021 ile triyak sürme notu
Röle yerine sessiz ve kıvılcımsız bir AC anahtar istiyorsan bir triyak (ör. BT136) ve onu süren bir triyak çıkışlı optokuplör kullanılır. MOC3021 rastgele fazlıdır: LED yandığı anda triyakı tetikler, bu yüzden bir sıfır geçiş algılayıcıyla birlikte dimmer (parlaklık ayarı) yapımına uygundur. MOC3041 ve MOC3063 ise sıfır geçiş devreli modellerdir; yalnızca gerilim sıfırdan geçerken tetiklerler, aç-kapa uygulamalarında daha az parazit üretirler ama dimmer için kullanılamazlar. MOC3021'in LED'i tetikleme için en fazla 15 mA isteyebilir; 5 V'ta 220 Ω (yaklaşık 17 mA) uygun bir değerdir, 330 Ω bazı parçalarda yetersiz kalabilir. Triyak kapısı ile MOC3021 arasına veri sayfalarındaki gibi yaklaşık 360 Ω direnç konur, motor gibi endüktif yüklerde de triyakın uçlarına bir RC söndürücü (snubber) eklenir. Hazır SSR (katı hal rölesi) modüllerinin içinde de tam olarak bu yapı vardır.
Optokuplör ile proje fikirleri
- Endüstriyel sensör okuyucu: 24 V endüktif yaklaşım sensörüyle bir konveyördeki ürünleri say ve LCD ekranda göster.
- Araç kontak algılayıcı: Kontak açıldığında ESP32'yi uyandır ve araçtaki kamerayı ya da kayıt cihazını başlat.
- Elektrik kesintisi alarmı: Hazır bir AC algılama modülüyle şebeke kesilince buzzer çal ya da telefona bildirim gönder.
- Kapı zili yakalayıcı: Mevcut 12 V zil hattını yalıtılmış olarak oku ve zil çaldığında bildirim gönder.
- Yalıtılmış röle kartı: JD-VCC jumper'ını çıkarıp ayrı bir kaynakla beslediğin röle modülüyle 220 V lamba kontrolü yap.
- MIDI girişi: Bir 6N138 ile elektronik müzik aletinden gelen MIDI notalarını Arduino'da oku.
Sık yapılan hatalar ve çözümleri
| Belirti | Olası sebep | Çözüm |
|---|---|---|
| Çıkış hiç değişmiyor | LED ters bağlı ya da dirençsiz bağlanıp yanmış | Pin 1'in noktayla işaretli olduğunu kontrol et; LED'i multimetrenin diyot kademesinde ölç |
| Mantık ters çalışıyor | Gerilim gelince pin LOW olur, bu normaldir | Kodda LOW'u "var" olarak yorumla |
| Çıkış tam LOW'a inmiyor (1–2 V'ta kalıyor) | LED akımı düşük, CTR yetersiz ya da pull-up çok küçük | LED direncini küçült ya da pull-up'ı büyüt (ör. 10 kΩ) |
| PWM sinyali bozuluyor | PC817 birkaç kHz'in üstünde yavaş kalıyor | Pull-up'ı küçült ya da 6N137 gibi hızlı bir optokuplör kullan |
| İzolasyona rağmen Arduino resetleniyor | İki tarafın GND'si birleştirilmiş | Giriş tarafının GND'sini Arduino'dan ayır; röle modülünde JD-VCC jumper'ını çıkar |
| Rastgele sahte tetiklemeler | Uzun kablo, parazit, kontak sıçraması | Yazılımda debounce uygula, kabloyu kısalt, LED uçlarına 100 nF kondansatör ekle |
Optokuplör, bir Arduino projesini masadan alıp gerçek dünyanın 12 V, 24 V ve 220 V'luk sinyalleriyle güvenle konuşturmanın en ucuz yoludur: birkaç kuruşluk bir parça, kartını ve bilgisayarını yüksek gerilimden ayırır. BlueGrays uygulamasında röle ile 220 V ampul kontrolü, akıllı aydınlatma ve sulama projelerini devre şemaları ve kodlarıyla adım adım bulabilirsin.
Sıkça sorulan sorular
Optokuplör ne işe yarar?
Optokuplör iki devre arasında elektrik bağlantısı olmadan, ışıkla sinyal taşır. Böylece yüksek gerilimli ya da gürültülü bir devreyi Arduino gibi hassas bir mikrodenetleyiciden yalıtır. Endüstriyel sensör okuma, röle modülleri ve şebeke algılama devrelerinde kullanılır.
PC817 hangi pin nedir?
PC817 dört bacaklıdır: noktalı köşedeki 1 numaralı pin LED'in anodu, 2 numaralı pin katodudur. Karşı taraftaki 3 numaralı pin fototransistörün emetörü, 4 numaralı pin kolektörüdür.
Optokuplör için kaç ohm direnç kullanılmalı?
Direnç R = (kaynak gerilimi − 1,2 V) / LED akımı formülüyle bulunur. Arduino'nun 5 V pini için 330 Ω, ESP32 için 220 Ω, 12 V sinyal için 2,2 kΩ ve 24 V sinyal için 4,7 kΩ iyi başlangıç değerleridir.
CTR nedir?
CTR (akım aktarım oranı), çıkış transistöründen geçebilecek akımın LED akımına oranıdır. CTR'si %100 olan bir optokuplörde LED'den 5 mA geçerse çıkıştan en fazla yaklaşık 5 mA çekilebilir. Tasarımda veri sayfasındaki en düşük CTR esas alınmalıdır.
PC817 ile 4N35 arasındaki fark nedir?
İkisi de fototransistör çıkışlı optokuplördür. PC817 dört bacaklı ve ucuzdur, CTR'si sınıfına göre %50–600 arasındadır. 4N35 altı bacaklıdır, beyz ucu dışarı çıkar ve 70 V'a kadar kolektör gerilimine dayanır.
Optokuplör ile 220 V algılanabilir mi?
Evet, H11AA1 gibi AC girişli optokuplörler ve uygun güçte seri dirençlerle şebeke gerilimi ve sıfır geçişleri algılanabilir. Ancak 220 V öldürücüdür; deneyimin yoksa hazır, kapalı kutulu AC algılama modülleri kullanmalısın.
Bu yazıdan sonra yapabileceğin projeler
Tüm projeleri gör
220V Ampülü Buton(Push) İle Yakma
Butona bastığın sürece 220 voltluk gerçek bir ampul yanar, bıraktığın anda söner. Arduino'nun küçük sinyali ampulü doğrudan yakamaz; araya röle denen elektrikli bir anahtar girer ve ampulün devresini

220V Ampülü Buton(On-Off) İle Yakma
Evdeki gerçek bir ampulü küçük bir butonla açıp kapatmak ister misin? Butona her bastığında Arduino röleyi çevirir ve ampul yanar, bir daha basınca söner. Röle, kartın zayıf sinyaliyle şebeke elektriğ

220V Ampülü Uzaktan Kumanda İle Yakma
Kanepeden kalkmadan, televizyon kumandasıyla evdeki gerçek bir ampulü yakıp söndür. Arduino kumandadan gelen görünmez ışık sinyalini okur; açma tuşuna basınca röleyi çekip ampulü yakar, sessiz tuşuna

Akıllı Merdiven ve Koridor Aydınlatması
Merdivene ya da koridora adım attığında ışıklar senin gittiğin yönde, basamak basamak yanar. Girişte ve çıkışta birer mesafe sensörü vardır; hangisinin önünden geçersen sekiz LED o uçtan başlayarak ya

ESP32 Akıllı Aydınlatma (PIR + LDR + Röle + OLED)
ESP32, PIR hareket sensörü, LDR ışık sensörü ve röle modülü ile evinin koridorunu, tuvaletini veya kilerini akıllı aydınlatmaya dönüştürüyoruz. Klasik "karanlıkta hareket algılanınca ışık yansın" senaryosunu inşa ediyoruz — ortam aydınlıksa hareket olsa bile ışık yanmaz, böylece gündüz gereksiz yere yanmaz ve enerji tasarrufu sağlanır. Işık 30 saniye yanık kalır; hareket devam ederse timer otomatik sıfırlanır ve süre uzar. SSD1306 OLED ekranda büyük fontlarla durum (AÇIK / GÜNDÜZ / BEKLE), geri

Akıllı Sulama İstasyonu
Tatile gidince çiçeklerin kurumasın diye kendi kendine sulayan bir bahçıvan. Toprak nem sensörü toprağın ne kadar ıslak olduğunu ölçer; toprak kuruyunca Arduino su pompasını birkaç saniye çalıştırır v

ESP32 PIR Hareket Sensörü ile Otomatik Aydınlatma
Bu projede HC-SR501 PIR hareket sensörü ile odaya giren kişiyi algılayıp LED'i otomatik olarak yakacağız. LED'in açık kalma süresini millis() ile izleyeceğiz; sensör HIGH okundukça son hareket zamanı yenilenecek ve son HIGH okumasından en az 10 saniye sonra LED sönecek. Mevcut kod ayrıca her döngüde delay(50) ile 50 ms beklediğinden uygulama döngüsü tamamen bloklamayan bir yapıda değildir. Gerçek hayatta merdiven, koridor, banyo veya dolap içi aydınlatmalarda kullanılabilir.
Diğer yazılar
BlueGrays uygulaması
Bu devreyi telefonunda adım adım kur
Devre şeması, kod ve parça listesi tek ekranda. 200'den fazla Arduino, ESP32 ve Pico projesi seni bekliyor.
Telefonunla tara
Kamerayı koda tut; telefonunun uygulama mağazası açılır.
ya da mağazada aç

