Parçalar · 13 dk okuma

Arduino MOSFET Kullanımı: IRLZ44N ile 12V LED, Motor ve Pompa

Arduino MOSFET devresi nasıl kurulur? IRLZ44N ile IRF520 farkı, gate ve pull-down direnci, flyback diyot, PWM ile 12V LED şerit, motor ve pompa kodları.

Arduino MOSFET devresi, Arduino'nun yalnızca 20 mA civarında akım verebilen pinleriyle 12 V'luk bir LED şeridi, DC motoru, su pompasını ya da solenoid kilidi, yani amperlerce akım çeken yükleri güvenle açıp kapatmanın en verimli yoludur. MOSFET, gerilimle kontrol edilen bir elektronik anahtardır: gate (kapı) ucuna 5 V uyguladığında drain ile source arasındaki yol neredeyse sıfır dirençli bir kabloya dönüşür, 0 V'ta ise tamamen kesilir. Doğru seçilmiş bir lojik seviye MOSFET, 3 A'lik bir yükü soğutucusuz taşırken yalnızca ılınır.

Bu yazıda MOSFET'in nasıl çalıştığını, neden her MOSFET'in Arduino'ya uymadığını (IRLZ44N ile IRF520 farkı), gate direnci, pull-down direnci ve flyback diyotun görevini, PWM ile hız ve parlaklık ayarını öğreneceksin. 12 V LED şerit, DC motor, pompa ve solenoid için hazır kodlar, ESP32 ve Raspberry Pi Pico örnekleri, ısınma ve soğutucu hesabı ile MOSFET, transistör ve röle karşılaştırma tablosu da yazının devamında.

MOSFET nedir, nasıl çalışır?

MOSFET (Metal Oxide Semiconductor Field Effect Transistor), alan etkili bir transistördür ve üç bacağı vardır: gate (kapı), drain (akaç) ve source (kaynak). Gate, ince bir oksit tabakasıyla geri kalan yapıdan yalıtılmıştır; bu yüzden gate'ten sürekli akım akmaz ve gate küçük bir kondansatör gibi davranır. Gate ile source arasındaki gerilim (VGS) belli bir eşiği aştığında drain ile source arasında iletken bir kanal oluşur ve yükün akımı bu kanaldan geçer. Klasik BJT transistör beyz akımıyla sürülürken MOSFET gerilimle sürülür; Arduino pini yalnızca gate'i şarj ve deşarj ettiği birkaç mikrosaniye boyunca akım verir.

Arduino projelerinde neredeyse her zaman N-kanal MOSFET kullanılır ve yükün eksi tarafına, yani GND tarafına konur; buna alt taraf (low-side) anahtarlama denir. Yükün artı ucu doğrudan harici beslemenin artısına, eksi ucu MOSFET'in drain'ine gider; source ise GND'ye bağlanır. Böylece gate–source gerilimi doğrudan Arduino pininin gerilimine eşit olur. Bir MOSFET'in veri sayfasında bakman gereken değerler şunlardır:

ParametreAnlamıIRLZ44N değeri
VDSDrain ile source arasında dayanabileceği en yüksek gerilim; besleme geriliminin en az 1,5–2 katı olmalı55 V
IDSürekli drain akımı; kılıf 25 °C'de tutulursa geçerlidir, pratikte çok daha azını kullanırsın47 A (VGS = 10 V)
VGS(th)Kanalın açılmaya başladığı gate gerilimi (yalnızca 250 µA akar); tam açılma gerilimi değildir1,0–2,0 V
RDS(on)Tam açıkken drain–source direnci; ısınmayı belirler ve hangi VGS'de ölçüldüğü çok önemlidir22 mΩ (10 V), 25 mΩ (5 V), 35 mΩ (4 V)
VGS (maks.)Gate'e uygulanabilecek en yüksek gerilim; aşılırsa oksit tabakası delinir±16 V
QgGate'i tam açmak için gereken yük; büyüdükçe anahtarlama yavaşlar48 nC
Gövde diyotuSource'tan drain'e doğru yapının içinde bulunan diyot; bobinli yükleri korumazVar (her güç MOSFET'inde)

Lojik seviye MOSFET: IRLZ44N, IRF520 ve diğerleri

En sık yapılan hata, VGS(th) değerine bakıp "eşik 4 V, Arduino 5 V veriyor, o hâlde çalışır" demektir. Eşik gerilimi, kanalın yalnızca 250 µA geçirmeye başladığı noktadır; MOSFET'in birkaç amperi düşük dirençle taşıması için gate geriliminin eşiğin epey üstünde olması gerekir. Doğru soru şudur: Veri sayfası RDS(on) değerini hangi VGS'de garanti ediyor? Bu değer 4,5 V ya da 5 V için verilmişse MOSFET 5 V'luk Arduino ile tam açılır ve buna lojik seviye (logic level) MOSFET denir. Değer yalnızca 10 V için verilmişse MOSFET standarttır ve Arduino pini onu ancak yarım açar. International Rectifier'ın (bugün Infineon) adlandırmasında IRL ile başlayan parçalar (IRLZ44N, IRLB8721, IRL540N) lojik seviyedir; IRFZ44N, IRF520 ve IRF540N ise standarttır.

Model (kılıf)VDSSürekli IDRDS(on) (ölçüm koşulu)VGS(th)Arduino Uno (5 V)ESP32 / Pico (3,3 V)
IRLZ44N (TO-220)55 V47 A25 mΩ (VGS = 5 V)1,0–2,0 VÇok iyi; 3 A'e kadar soğutucusuzTipik olarak 2–3 A'e kadar, garanti yok
IRLB8721 (TO-220)30 V62 A16 mΩ (VGS = 4,5 V)1,35–2,35 VÇok iyiTipik olarak 2–3 A'e kadar, garanti yok
AO3400A (SOT-23, SMD)30 V5,7 A48 mΩ (VGS = 2,5 V)0,65–1,45 Vİyi; küçük yükler (≈2 A)Çok iyi; 2,5 V'ta bile garantili
IRFZ44N (TO-220)55 V49 A17,5 mΩ (yalnız VGS = 10 V)2,0–4,0 VUygun değil, yarım açılırKullanma
IRF520 ve modülü (TO-220)100 V9,2 A0,27 Ω (yalnız VGS = 10 V)2,0–4,0 VYalnız ≈1 A'e kadarKullanma
IRF540N (TO-220)100 V33 A44 mΩ (yalnız VGS = 10 V)2,0–4,0 VUygun değil, yarım açılırKullanma

Tablodaki ölçüt basittir: Uno, Nano ve Mega gibi 5 V'luk kartlar için RDS(on) değeri 4,5 V ya da 5 V'ta verilmiş bir MOSFET seç. ESP32 ve Pico gibi 3,3 V'luk kartlarda iş biraz daha zordur, çünkü IRLZ44N ve IRLB8721 gibi popüler TO-220 MOSFET'lerin veri sayfaları 3,3 V için değer garanti etmez; bu konuya ESP32 bölümünde döneceğiz. Kılıfa bakarak da seçim yapma: IRLZ44N ile IRFZ44N aynı kılıfta, neredeyse aynı yazıyla gelir ama aradaki tek harf (L) Arduino için her şeyi değiştirir. Bacak sırasını Transistör Bacak Bağlantıları aracından kontrol edebilirsin; TO-220 MOSFET'lerde yazılı yüz sana bakarken soldan sağa gate, drain, source sırası vardır ve metal sırt drain'e bağlıdır.

Arduino MOSFET bağlantısı: gate direnci, pull-down ve ortak GND

Temel devre beş parçadan oluşur: MOSFET, gate direnci, pull-down direnci, bobinli yüklerde flyback diyot ve harici güç kaynağı. Aşağıdaki tablo üç kart için bağlantıyı gösterir; yük örnek olarak 12 V'luk bir LED şerit ya da motordur. Yazıdaki bütün kodlar bu pinleri kullanır.

BağlantıArduino UnoESP32Raspberry Pi Pico
Kontrol pini → gate direnci → gateD9 (PWM), 220 ΩGPIO 25, 100 ΩGP15, 100 Ω
Gate ile GND arası pull-down10 kΩ10 kΩ10 kΩ
SourceGNDGNDGND
DrainYükün eksi (−) ucuYükün eksi (−) ucuYükün eksi (−) ucu
Yükün artı (+) ucu12 V adaptörün artısı12 V adaptörün artısı12 V adaptörün artısı
12 V adaptörün eksi (−) ucuArduino GND (ortak toprak)ESP32 GND (ortak toprak)Pico GND (ortak toprak)
Önerilen MOSFETIRLZ44NIRLZ44N (2–3 A'e kadar) ya da AO3400AIRLZ44N (2–3 A'e kadar) ya da AO3400A

Gate direnci (100–220 Ω), gate kapasitesi şarj olurken pinden çekilen anlık akımı sınırlar. IRLZ44N'nin giriş kapasitesi yaklaşık 1700 pF'tır; dirençsiz bağlarsan pin her geçişte bir an için kısa devreye yakın akım verir ve gate hattında çınlama (ringing) oluşur. 220 Ω ile anlık akım en fazla 5 / 220 ≈ 23 mA olur ve gate yine de birkaç mikrosaniyede dolar. Pull-down direnci (10 kΩ) ise Arduino açılırken, resetlenirken ya da kod yüklenirken pin giriş durumundayken gate'in boşta kalmasını önler. Boşta kalan gate parazitle yarım şarj olabilir; MOSFET yarı açık kalıp motoru kendi kendine döndürür ve kısa sürede aşırı ısınır. Pull-down direncini gate direncinin MOSFET tarafına, doğrudan gate ile source arasına koy; böylece kontrol kablosu çıksa bile MOSFET kapalı kalır. İki direnç küçük bir gerilim bölücü oluşturur ama etkisi önemsizdir: gate'e 5 × 10000 / 10220 ≈ 4,89 V ulaşır.

Ortak GND'yi unutma: 12 V adaptörün eksi ucu Arduino'nun GND'sine bağlanmazsa gate gerilimi source'a göre tanımsız kalır ve MOSFET açılmaz. Yükü asla Arduino'nun 5V pininden besleme; motor ya da LED şerit kendi güç kaynağından beslenmeli (ayrıntılar: GND ve ortak toprak). Drain ile source'u ters bağlarsan MOSFET'in gövde diyotu iletime geçer ve yük, pin ne durumda olursa olsun sürekli çalışır.

Flyback diyot: motor, pompa ve solenoid için neden şart?

1N4007 tipi flyback diyot
1N4007 tipi doğrultma diyodu: bobinli yükün uçlarına ters bağlanır; gövdedeki çizgi katottur ve beslemenin artı (+) tarafına gelir.

Motor, pompa, solenoid, röle bobini ve fan gibi bobin içeren yükler, akımın aniden kesilmesine karşı koyar. MOSFET kapandığı anda bobindeki manyetik enerji, drain ucunda besleme geriliminin çok üstüne çıkan bir gerilim sıçraması (V = L × di/dt) olarak boşalır. Bu sıçrama MOSFET'in VDS sınırını aşıp onu delebilir ya da parazit üretip Arduino'yu resetleyebilir. Çözüm, yükün iki ucuna ters yönde bir diyot bağlamaktır: katot (çizgili uç) beslemenin artısına, anot drain'e gelir. Normal çalışmada diyot ters kutuplandığı için akım geçirmez; MOSFET kapanınca bobin akımı diyot üzerinden dönerek yavaşça söner. MOSFET'in gövde diyotu bu işi yapmaz, çünkü yükün uçlarına değil source ile drain arasına bağlıdır. Konunun ayrıntıları için Diyot Nedir? yazısına bakabilirsin.

Yük ve sürme şekliÖnerilen diyotNeden?
Solenoid, röle bobini (yalnız aç–kapa)1N4007 (1 A, 1000 V)Yavaş bir diyottur ama seyrek anahtarlamada yeterlidir
Küçük pompa ya da motor, PWM ile (1 A'e kadar)1N5819 Schottky (1 A, 40 V)Hızlıdır; PWM'in her periyodunda iletime geçer
Büyük motor, PWM ile (1–3 A)1N5822 ya da SS34 Schottky (3 A, 40 V)PWM kapalıyken motor akımının tamamını diyot taşır
12 V LED şerit, ısıtıcı dirençGerekmezBobin yoktur, gerilim sıçraması oluşmaz

Adım adım: Arduino ile 12 V LED şerit parlaklık kontrolü

  1. Malzemeleri hazırla: Arduino Uno, IRLZ44N, 220 Ω ve 10 kΩ direnç, 10 kΩ potansiyometre, 12 V LED şerit ve şeridin akımını karşılayan 12 V adaptör.
  2. Şeridin akımını hesapla: 60 LED/m'lik 5050 şerit metre başına yaklaşık 14,4 W, yani 12 V'ta 1,2 A çeker. 2 metre 2,4 A eder; adaptörü %20 paylı seç (en az 3 A).
  3. MOSFET'i yerleştir: IRLZ44N'nin source'unu GND hattına, gate'ini 220 Ω üzerinden D9'a bağla ve gate ile GND arasına 10 kΩ koy.
  4. Yükü bağla: Şeridin +12V kablosunu adaptörün artısına, eksi kablosunu MOSFET'in drain'ine bağla. Breadboard kontakları yaklaşık 1 A taşır; daha yüksek akımlarda yük kablolarını klemensle ya da lehimle bağla.
  5. Potansiyometreyi bağla: Dış uçlarını 5V ve GND'ye, orta ucunu A0'a bağla.
  6. Toprakları birleştir ve dene: Adaptörün eksisini Arduino GND'sine bağla, kodu yükle, ardından adaptörü prize tak.
C++ (Arduino IDE)
1// IRLZ44N ile 12 V LED şerit parlaklık kontrolü / 12 V LED strip dimming with an IRLZ44N
2const int STRIP_PIN = 9;    // PWM pini, 220 Ω ile gate'e / PWM pin, to the gate via 220 Ω
3const int POT_PIN = A0;     // potansiyometre orta ucu / potentiometer wiper
4
5void setup() {
6  pinMode(STRIP_PIN, OUTPUT);
7  digitalWrite(STRIP_PIN, LOW);             // açılışta kapalı / off at startup
8  Serial.begin(9600);
9}
10
11void loop() {
12  int pot = analogRead(POT_PIN);            // 0–1023
13  float x = pot / 1023.0;                   // 0.0–1.0
14  int duty = (int)(x * x * 255.0 + 0.5);    // basit gama düzeltmesi / simple gamma correction
15  analogWrite(STRIP_PIN, duty);             // D9'da 490 Hz PWM / 490 Hz PWM on D9
16  Serial.print("Parlaklik / Brightness: %");
17  Serial.println(duty * 100 / 255);
18  delay(50);
19}

analogWrite(), 9 numaralı pinde saniyede yaklaşık 490 kez açılıp kapanan bir PWM sinyali üretir; 0 tamamen kapalı, 255 tamamen açık demektir. Uno'da PWM verebilen pinler 3, 5, 6, 9, 10 ve 11'dir; 5 ve 6 numaralı pinler yaklaşık 980 Hz verir. Göz parlaklığı doğrusal algılamadığı için potansiyometre değerinin karesini almak (basit gama düzeltmesi) düşük parlaklıklarda çok daha yumuşak bir ayar sağlar. PWM'in mantığını PWM Nedir? yazısında ayrıntılı bulabilirsin. Isınmayı da hesaplayalım: 2,4 A'de IRLZ44N'nin harcadığı güç P = I² × RDS(on) = 2,4² × 0,025 ≈ 0,14 W'tır, yani MOSFET elle tutulduğunda ancak ılık gelir. Aynı anda LED şeridin kendisi 28,8 W harcar; MOSFET'teki kayıp toplamın yüzde birinden azdır.

PWM ile DC motor ve pompa hız kontrolü

6 V mini dalgıç su pompası
6 V mini dalgıç su pompası: içinde küçük bir DC motor bulunur; MOSFET ile sürülürken uçlarına mutlaka flyback diyot bağlanır.

Motor ve pompa sürmek LED şeritle aynı devreyle yapılır; tek fark, yükün uçlarına flyback diyot eklemen gerektiğidir. Motorların bir de kalkış akımı vardır: duran bir motor ilk anda çalışma akımının 3–8 katını çekebilir. Bu yüzden MOSFET'i ve güç kaynağını motorun kilitlenme (stall) akımına göre seç ve hızı aniden 0'dan 255'e çıkarmak yerine yumuşak kalkış uygula. Mini dalgıç pompalar 3–6 V'ta yaklaşık 0,1–0,3 A, 12 V'luk diyaframlı pompalar ise genellikle 0,5–1 A çeker; ikisi için de IRLZ44N fazlasıyla yeterlidir. Yalnız mini pompayı 12 V adaptöre değil, kendi gerilimindeki (5–6 V) bir kaynağa bağla; MOSFET devresi aynı kalır. Pompa seçimi ve sulama ayrıntıları için Mini Su Pompası yazısına göz at.

C++ (Arduino IDE)
1// IRLZ44N ile motor/pompa hız kontrolü ve yumuşak kalkış / Motor or pump speed control with soft start (IRLZ44N)
2const int MOTOR_PIN = 9;     // 220 Ω ile gate'e / to the gate via 220 Ω
3const int POT_PIN = A0;      // hız ayarı / speed setting
4const int MIN_DUTY = 60;     // bunun altında motor yalnızca vızıldar / below this the motor only hums
5
6int current = 0;             // şu anki PWM değeri / current PWM value
7
8void setup() {
9  pinMode(MOTOR_PIN, OUTPUT);
10  digitalWrite(MOTOR_PIN, LOW);
11  // TCCR1B = (TCCR1B & 0b11111000) | 0x02;   // isteğe bağlı: D9/D10 PWM ≈3,9 kHz / optional: D9/D10 PWM ≈3.9 kHz
12}
13
14void loop() {
15  int target = map(analogRead(POT_PIN), 0, 1023, 0, 255);
16  if (target < MIN_DUTY) target = 0;         // çok düşük hızda tamamen durdur / stop completely at very low speed
17
18  if (current < target) current++;           // yavaşça hızlan / speed up gently
19  else if (current > target) current--;      // yavaşça yavaşla / slow down gently
20
21  analogWrite(MOTOR_PIN, current);
22  delay(8);                                  // 0→255 yaklaşık 2 s / 0→255 takes about 2 s
23}

Kod, potansiyometreden okunan hedef hıza her 8 ms'de bir adım yaklaşır; böylece motor 0'dan tam hıza yaklaşık 2 saniyede çıkar ve kalkış akımı güç kaynağını çökertmez. MIN_DUTY, motorun dönmeye başladığı en düşük PWM değeridir; kendi motorunda deneyerek bul. 490 Hz'lik PWM motorda duyulabilir bir vızıltı yaratır. Yorum satırındaki TCCR1B komutu D9 ve D10'un frekansını yaklaşık 3,9 kHz'e çıkarır; Servo kütüphanesi de Timer1'i kullandığı için ikisini birlikte kullanma. Frekansı daha da yükseltmek cazip gelebilir, ama Arduino pini büyük bir MOSFET'in gate'ini her geçişte ancak birkaç mikrosaniyede doldurabildiği için anahtarlama kayıpları frekansla birlikte artar: 20 kHz civarında 2 A'lik bir motor bile MOSFET'te 1 W'tan fazla kayba yol açabilir. Bu frekanslarda TC4427 gibi bir gate sürücü kullanılır.

Solenoid kilit ve kısa süreli yükler

12 V'luk solenoid kapı kilitleri 0,5–1 A çeker ve çoğu sürekli enerjilendirilmek için tasarlanmamıştır; uzun süre açık kalırsa bobin ısınır. Bu yüzden kilidi yalnızca birkaç saniye açık tutan bir kod yazmak gerekir. Solenoid PWM ile değil aç–kapa çalıştığı için flyback diyot olarak 1N4007 yeterlidir. Aşağıdaki örnekte D2'deki butona basınca kilit 3 saniye açılır, sonra buton basılı tutulsa bile kapanır. Kilidi bir RFID kart okuyucu ya da keypad ile tetiklemek için yalnızca if koşulunu değiştirmen yeterli; kilit türleri ve elektrik kesintisindeki davranış için Solenoid Kilit yazısına bak.

C++ (Arduino IDE)
1// Butonla 3 saniyelik solenoid kilit açma / Open a solenoid lock for 3 seconds with a button
2const int LOCK_PIN = 9;                 // 220 Ω ile IRLZ44N gate'ine / to the IRLZ44N gate via 220 Ω
3const int BUTTON_PIN = 2;               // buton D2 ile GND arasında / button between D2 and GND
4const unsigned long OPEN_MS = 3000;     // kilidin açık kalma süresi / how long the lock stays open
5
6void setup() {
7  pinMode(LOCK_PIN, OUTPUT);
8  digitalWrite(LOCK_PIN, LOW);          // kilit kapalı / locked
9  pinMode(BUTTON_PIN, INPUT_PULLUP);    // basılınca LOW / LOW when pressed
10}
11
12void loop() {
13  if (digitalRead(BUTTON_PIN) == LOW) {
14    digitalWrite(LOCK_PIN, HIGH);       // solenoid çeker, kilit açılır / solenoid pulls in, lock opens
15    delay(OPEN_MS);
16    digitalWrite(LOCK_PIN, LOW);        // bobini soğumaya bırak / let the coil cool down
17    while (digitalRead(BUTTON_PIN) == LOW) {}   // buton bırakılana kadar bekle / wait until released
18    delay(50);                          // buton zıplamasını süz / debounce
19  }
20}

IRF520 modülü neden 5 V ile yetersiz kalır?

Başlangıç kitlerinde çok yaygın olan IRF520 MOSFET modülü, üzerinde "24 V, 5 A" gibi değerlerle satılan klemensli küçük bir karttır. Kartta MOSFET'in yanında birkaç direnç ve bir sinyal LED'i bulunur; çoğu sürümde flyback diyot yoktur. Sorun MOSFET'in kendisindedir: IRF520 standart bir MOSFET'tir, eşik gerilimi 2–4 V arasındadır ve 0,27 Ω'luk RDS(on) değeri yalnızca VGS = 10 V için garanti edilir. Veri sayfasındaki tipik eğrilere göre 5 V gate geriliminde IRF520 yaklaşık 2 A'de akımı sınırlamaya başlar; eşiği yüksek bir parçada bu sınır 1 A'in altına iner. Bu noktada MOSFET bir anahtar gibi değil, değişken bir direnç gibi davranır.

Bir örnekle bakalım: 12 V'luk, 2 A çeken bir motoru IRF520 modülüyle sürdüğünü düşün. MOSFET üzerinde 1,5 V düşerse harcanan güç P = 1,5 × 2 = 3 W olur. Soğutucusuz TO-220 kılıfın ısıl direnci 62 °C/W olduğu için bu, ortam sıcaklığının yaklaşık 186 °C üstü demektir; MOSFET kısa sürede aşırı ısınıp bozulur, en iyi ihtimalle motor yavaş döner. Modülün etiketindeki 5 A, gate'e 10 V uygulandığında geçerlidir. Modülün uçları ve bağlantısı şöyledir:

Modül ucuBağlantıNot
SIGArduino PWM pini (ör. D9)Gate sinyali; 3,3 V kartlarla neredeyse hiç açılmaz
VCCArduino 5VÇoğu sürümde devreye bağlı değildir; yük akımı buradan geçmez
GND (pin başlığı)Arduino GNDOrtak toprak için şart
VIN ve GND (klemens)Harici beslemenin + ve − ucuYükün güç kaynağı; modül 24 V'a kadar satılır
V+ ve V− (klemens)Yükün + ve − ucuMotor ve pompada V+ ile V− arasına diyot ekle (katot V+'ya)
  • MOSFET'i değiştir: Modüldeki IRF520'yi söküp yerine aynı bacak sırasına (G-D-S) sahip IRLZ44N lehimle; kart aynen çalışır ama artık 5 V ile tam açılır.
  • Lojik seviye modül kullan: AOD4184A (D4184) MOSFET'li hazır modüller 4,5 V'ta en fazla 9,5 mΩ'luk RDS(on) sunar ve 5 V'luk Arduino ile rahat çalışır.
  • Gate'i yüksek gerilimle sür: 12 V'tan beslenen TC4427 gibi bir gate sürücü, Arduino'nun 5 V ya da 3,3 V'luk sinyalini gate'te 12 V'a çevirir; IRF520 böylece gerçek kapasitesine ulaşır. Gate gerilimi sınırı aşmasın: IRF520'de ±20 V, IRLZ44N'de ±16 V.
  • Küçük yüklerde olduğu gibi kullan: 1 A'in altındaki yüklerde (kısa bir LED şerit, mini pompa) IRF520 modülü 5 V ile kabul edilebilir bir ısınmayla çalışır; MOSFET elle tutulamayacak kadar ısınıyorsa yükü küçült.

ESP32 ve Raspberry Pi Pico ile MOSFET kullanımı (3,3 V)

ESP32 ve Pico'nun pinleri 3,3 V verdiği için MOSFET seçimi daha da önemlidir. IRLZ44N'nin veri sayfası RDS(on) değerini en düşük 4 V için verir; tipik eğrilere göre 3 V civarında da birkaç amperi rahat geçirir, ama eşiği yüksek bir parçada bu garanti değildir. Pratik kural: 3,3 V'luk kartlarda IRLZ44N ya da IRLB8721'i 2–3 A'e kadar kullan, yük çalışırken drain–source gerilimini multimetreyle ölç ve P = VDS × I ile harcanan gücü hesapla; soğutucusuz TO-220 için 1 W'ın altında kal. Daha büyük akımlar için gate'i 5–12 V'a çıkaran bir sürücü, küçük yükler için ise RDS(on) değeri 2,5 V'ta garanti edilen AO3400A kullan. ESP32'de MOSFET için GPIO 25, 26, 27, 32 ya da 33 gibi pinleri seç: GPIO 0, 2, 5, 12 ve 15 açılış (strapping) pinleridir, GPIO 1, 3, 5, 14 ve 15 ise açılışta kısa süre HIGH olabilir ya da PWM verebilir. Bu pinlerde yük açılışta istemeden çalışabilir ya da pull-down direnci kartın açılışını bozabilir.

Aşağıdaki ESP32 kodu, toprak nem sensörü toprağın kuruduğunu söylediğinde MOSFET üzerinden bir pompayı yumuşak kalkışla çalıştırır, 5 saniye sulayıp yumuşakça durdurur. PWM için ESP32 Arduino çekirdeği 3.x'teki ledcAttach() ve ledcWrite() fonksiyonları kullanılır; eski 2.x sürümlerinde bunların yerine ledcSetup() ve ledcAttachPin() vardı ve ledcWrite() pin yerine kanal numarası alıyordu. Koddaki #if satırları kurulu çekirdeğe uygun olanı seçer, böylece kod iki sürümde de derlenir. Gate 3,3 V ve 100 Ω ile sürüldüğü için frekansı 1 kHz'te tuttuk; böylece anahtarlama kayıpları önemsiz kalır. Sensörün kuru ve ıslak değerlerini Toprak Nem Sensörü yazısındaki gibi kendi toprağında ölçüp DRY_LEVEL eşiğini ona göre ayarla.

C++ (Arduino IDE)
1// ESP32 + MOSFET ile otomatik sulama pompası / Automatic watering pump with ESP32 + MOSFET
2const int PUMP_PIN = 25;                 // 100 Ω ile gate'e, gate–GND 10 kΩ / to the gate via 100 Ω, 10 kΩ gate–GND
3const int SOIL_PIN = 34;                 // toprak nem sensörü, ADC1 / soil moisture sensor, ADC1
4const int DRY_LEVEL = 2800;              // üstü kuru sayılır, kalibre et / above this counts as dry, calibrate
5const unsigned long WATER_MS = 5000;     // sulama süresi / watering time
6
7void pumpWrite(int duty) {               // 0–255 PWM, iki çekirdek sürümünde / on both core versions
8#if ESP_ARDUINO_VERSION_MAJOR >= 3
9  ledcWrite(PUMP_PIN, duty);             // 3.x: pin numarasıyla / 3.x: by pin number
10#else
11  ledcWrite(0, duty);                    // 2.x: kanal 0 ile / 2.x: by channel 0
12#endif
13}
14
15void pumpRamp(int from, int to) {        // yumuşak hız değişimi / smooth speed change
16  int step = (to > from) ? 5 : -5;
17  for (int d = from; d != to; d += step) {
18    pumpWrite(d);
19    delay(20);
20  }
21  pumpWrite(to);
22}
23
24void setup() {
25  Serial.begin(115200);
26#if ESP_ARDUINO_VERSION_MAJOR >= 3
27  ledcAttach(PUMP_PIN, 1000, 8);         // 1 kHz, 8 bit (0–255); çekirdek 3.x / core 3.x
28#else
29  ledcSetup(0, 1000, 8);                 // çekirdek 2.x: kanal 0 / core 2.x: channel 0
30  ledcAttachPin(PUMP_PIN, 0);
31#endif
32  pumpWrite(0);                          // pompa kapalı / pump off
33}
34
35void loop() {
36  int soil = analogRead(SOIL_PIN);       // 0–4095
37  Serial.printf("Toprak / Soil: %d\n", soil);
38  if (soil > DRY_LEVEL) {
39    pumpRamp(0, 255);                    // yaklaşık 1 s'de tam hıza / full speed in about 1 s
40    delay(WATER_MS);
41    pumpRamp(255, 0);                    // yumuşakça dur / stop gently
42    delay(60000);                        // suyun toprağa yayılmasını bekle / let the water soak in
43  }
44  delay(1000);
45}

Raspberry Pi Pico'da MicroPython ile PWM üretmek için machine.PWM sınıfı yeterlidir; duty_u16() 0 ile 65535 arasında bir değer alır. Aşağıdaki kod, GP15'teki MOSFET üzerinden 12 V'luk bir LED şeride yumuşak bir "nefes" efekti verir. Arduino örneğindeki gibi değerin karesi alınarak basit bir gama düzeltmesi yapılır; böylece karanlıktan aydınlığa geçiş göze doğal görünür. Pico'nun pinleri de 3,3 V verdiği için ESP32 için söylediğimiz MOSFET kuralları burada da geçerlidir.

MicroPython
1# Pico + MOSFET ile 12 V LED şerit nefes efekti / 12 V LED strip breathing effect with Pico + MOSFET
2from machine import Pin, PWM
3import time
4
5strip = PWM(Pin(15))          # 100 Ω ile gate'e, gate–GND 10 kΩ / to the gate via 100 Ω, 10 kΩ gate–GND
6strip.freq(1000)              # 1 kHz: titreme görünmez / 1 kHz: no visible flicker
7
8def set_level(x):             # x: 0.0–1.0
9    strip.duty_u16(int(x * x * 65535))   # basit gama düzeltmesi / simple gamma correction
10
11while True:
12    for i in range(101):                 # yavaşça aydınlan / fade in
13        set_level(i / 100)
14        time.sleep_ms(20)
15    for i in range(100, -1, -1):         # yavaşça sön / fade out
16        set_level(i / 100)
17        time.sleep_ms(20)
18    time.sleep_ms(500)

Isınma, güç hesabı ve soğutucu seçimi

Tam açık bir MOSFET'in ısısı tek bir formülle bulunur: P = I² × RDS(on). Burada iki noktaya dikkat etmelisin. Birincisi, RDS(on) sıcaklıkla artar; IRLZ44N'de 100 °C'de 25 °C'deki değerin yaklaşık 1,5 katıdır, bu yüzden hesapta 25 mΩ yerine 38 mΩ kullanmak daha gerçekçidir. İkincisi, kılıfın ısıyı havaya aktarma yeteneği sınırlıdır: soğutucusuz TO-220 için ısıl direnç (RθJA) 62 °C/W'tır, yani her 1 W yonga sıcaklığını ortamın 62 °C üstüne çıkarır. Aşağıdaki tablo, IRLZ44N'nin 5 V gate geriliminde ve soğutucusuz kullanımda nasıl ısındığını gösterir:

Yük akımıHarcanan güç (38 mΩ ile)Sıcaklık artışı (soğutucusuz)Öneri
1 A0,04 W≈ 2 °CSoğutucu gerekmez
3 A0,34 W≈ 21 °CSoğutucu gerekmez, ılık
5 A0,95 W≈ 59 °CSınırda; küçük bir soğutucu tak
8 A2,4 W≈ 150 °CSoğutucu şart
10 A3,8 W≈ 236 °CKanatlı soğutucu ve termal macun şart

Soğutucu hesabı da aynı mantıkla yapılır: Tj = Tortam + P × (RθJC + RθCS + RθSA). 10 A'de 3,8 W harcanıyorsa ve yonga sıcaklığını 30 °C'lik bir odada 100 °C'de tutmak istiyorsan toplam ısıl direnç (100 − 30) / 3,8 ≈ 18 °C/W'ı geçmemelidir. IRLZ44N'nin yonga–kılıf direnci 1,4 °C/W, termal macunlu temas yaklaşık 0,5 °C/W olduğundan soğutucunun kendisi en fazla 16 °C/W olmalıdır; bu, küçük ama kanatçıklı bir TO-220 soğutucuya karşılık gelir. MOSFET'in metal sırtı drain'e bağlıdır; birden fazla MOSFET'i aynı soğutucuya takacaksan araya mika ya da silikon yalıtkan ped ve plastik vida burcu koy. Isınmanın PWM'den gelen ikinci kaynağı ise anahtarlama kaybıdır; 490 Hz'te önemsizdir ama frekans yükseldikçe artar.

MOSFET'in tam açılıp açılmadığını anlamanın en kolay yolu, yük çalışırken drain ile source arasındaki gerilimi ölçmektir. IRLZ44N 3 A'de 0,1 V civarı göstermelidir; 1 V ya da üstünü görüyorsan MOSFET yarı açıktır ve gate gerilimi yetersizdir (standart MOSFET, 3,3 V kart ya da kopuk bir gate bağlantısı). Harcanan gücü P = VDS × I ile hesaplayabilir, değerleri Ohm Kanunu aracıyla kontrol edebilirsin.

MOSFET, transistör ve röle karşılaştırması

ÖzellikLojik seviye MOSFET (IRLZ44N)BJT transistör (2N2222A / TIP120)Röle (5 V modül)
Nasıl kontrol edilir?Gerilimle; gate'ten sürekli akım akmazAkımla; beyz akımı sürekli akar (2–10 mA)Bobin akımıyla (≈70 mA); modüldeki transistör sürer
Açıkken kayıpI² × RDS(on): 3 A'de ≈ 0,2–0,3 WVCE(sat) × I: TIP120'de 3 A'de 2 V'a kadar, ≈ 6 WKontaklarda neredeyse sıfır
Akım kapasitesiOnlarca amper (soğutucuyla)2N2222A 0,6 A, TIP120 5 AGenellikle 10 A (kontak sınırı)
PWM ile hız ve parlaklıkEvet, kHz seviyesindeEvetHayır, yalnız aç–kapa
AC / 220 VHayır, yalnız DCHayır, yalnız DCEvet, galvanik yalıtım sağlar
Ses ve ömürSessiz, aşınmazSessiz, aşınmazTıklar; kontak ömrü yaklaşık 100.000 anahtarlama
En uygun kullanımLED şerit, motor, pompa, solenoid (1–10 A DC)Küçük yükler (1 A'e kadar), röle bobini, buzzerLamba, priz, AC cihazlar

Kısaca: Bir DC yükü hızlı, sessiz ve PWM ile kontrol etmek istiyorsan MOSFET; 220 V şebekeye bağlı bir lambayı ya da prizi açıp kapatacaksan röle modülü kullan. Birkaç yüz miliamperlik küçük yükler için ucuz bir BJT de iş görür; beyz direnci hesabını Transistör Nedir? yazısında bulabilirsin. Aynı motoru iki yöne döndürmen gerekiyorsa tek MOSFET yetmez, dört anahtarlı bir H köprüsü gerekir; bunun için L298N motor sürücü ya da MOSFET'li bir H köprüsü modülü kullan.

MOSFET ile proje fikirleri

  • Otomatik dolap ya da merdiven ışığı: PIR sensörü hareket algılayınca 12 V LED şeridi PWM ile yumuşakça yak, bir süre sonra söndür.
  • Gün batımı lambası: LDR ile ortam karardıkça şeridin parlaklığını kademeli olarak artır.
  • Akıllı fan: DHT11 ile ölçtüğün sıcaklık arttıkça 12 V bilgisayar fanının hızını yükselt.
  • Otomatik bitki sulama: Toprak nem sensörü ve MOSFET'le sürülen bir pompayla saksıları kendi kendine sula; her pompa için ayrı MOSFET kullan.
  • Kartlı kapı kilidi: RFID RC522 doğru kartı okuyunca 12 V solenoid kilidi 3 saniye aç.
  • Akıllı sera: Fanı, pompayı ve ısıtıcıyı ayrı MOSFET'lerle yöneten bir akıllı sera kur.

Sık yapılan hatalar ve çözümleri

BelirtiOlası nedenÇözüm
Yük hiç çalışmıyorOrtak GND yok ya da G-D-S sırası yanlışAdaptörün eksisini Arduino GND'sine bağla, bacak sırasını kontrol et
Yük sürekli çalışıyor, kapanmıyorDrain ile source ters bağlı (gövde diyotu iletimde) ya da MOSFET delinmişBağlantıyı düzelt; drain–source arası iki yönde kısa devre ölçülüyorsa MOSFET'i değiştir
MOSFET çok ısınıyor, yük zayıf çalışıyorStandart MOSFET (IRF520, IRFZ44N) 5 V ya da 3,3 V ile yarı açıkIRLZ44N gibi lojik seviye bir MOSFET ya da gate sürücü kullan
Açılışta ya da kod yüklenirken motor kendi kendine dönüyorGate boşta, pull-down direnci yokGate ile GND arasına 10 kΩ koy
Motor durunca Arduino resetleniyorFlyback diyot yok ya da motor ve Arduino aynı zayıf beslemeyi paylaşıyorMotora ters paralel Schottky diyot ekle, motoru ayrı bir beslemeden çalıştır
PWM'de motor yüksek sesle vızıldıyor490 Hz PWM frekansı duyulabilir aralıktaFrekansı 3,9 kHz'e çıkar; 20 kHz üstü için gate sürücü kullan
N-kanal MOSFET'i artı tarafa koyunca yük zayıf çalışıyorSource yükle birlikte yükselir, VGS düşerN-kanalı GND tarafında kullan; artı tarafı anahtarlamak için P-kanal MOSFET ve NPN sürücü kullan
Devreyi ilk kez kurarken yükü küçük tut: 12 V şerit yerine önce bir LED ve 1 kΩ direnç, pompa yerine önce küçük bir motorla dene. Arduino kendi kendine resetleniyorsa sebep çoğunlukla gerilim düşmesi ve parazittir; adım adım teşhis için Arduino Resetleniyor yazısına göz at. 12 V adaptörden Arduino için 5 V üretmek istersen bir LM2596 voltaj düşürücü kullanabilirsin.

MOSFET, Arduino'yu gerçek dünyadaki güçlü yüklere bağlamanın en temiz yoludur: doğru seçilmiş lojik seviye bir parça, bir gate direnci, bir pull-down ve bobinli yüklerde bir diyotla LED şeritten pompaya kadar her DC yükü sessizce ve verimli şekilde kontrol edersin. BlueGrays uygulamasında PWM ile LED soldurma, potansiyometreyle parlaklık ayarı, akıllı sulama istasyonu ve akıllı aydınlatma gibi projeleri adım adım devre şemaları ve kodlarıyla bulabilir, burada öğrendiğin MOSFET devresini hemen bir projeye dönüştürebilirsin.

Sıkça sorulan sorular

Arduino ile hangi MOSFET kullanılmalı?

5 V'luk Arduino Uno, Nano ve Mega için RDS(on) değeri 4,5 V ya da 5 V'ta garanti edilen lojik seviye bir N-kanal MOSFET seç. En yaygını IRLZ44N'dir: 55 V'a dayanır ve 5 V gate geriliminde yalnızca 25 mΩ dirence sahiptir. IRLB8721 de iyi bir seçenektir; IRFZ44N, IRF520 ve IRF540N gibi standart MOSFET'ler ise tam açılmak için 10 V ister.

IRF520 modülü Arduino ile çalışır mı?

Çalışır ama sınırlı kalır. IRF520 standart bir MOSFET'tir ve 5 V gate geriliminde tipik olarak 2 A civarında akımı sınırlamaya başlar, bu yüzden 1 A'in üstündeki yüklerde hızla ısınır. Küçük yükler için yeterlidir; daha fazlası için modüldeki MOSFET'i IRLZ44N ile değiştir ya da lojik seviye bir modül kullan.

MOSFET gate direnci kaç ohm olmalı?

Arduino ile 100–220 Ω arası bir gate direnci uygundur; 220 Ω, 5 V'ta pinden çekilen anlık akımı yaklaşık 23 mA ile sınırlar. Ayrıca gate ile GND arasına 10 kΩ'luk bir pull-down direnci koy; bu direnç açılışta ve kod yüklenirken MOSFET'in kendi kendine açılmasını önler.

MOSFET ile 220 V kontrol edilebilir mi?

Arduino projelerinde MOSFET'i yalnızca DC yükler için kullan. Şebekenin 220 V AC gerilimi tek bir N-kanal MOSFET ile güvenle anahtarlanamaz ve böyle bir devre yalıtımsız olduğu için tehlikelidir. 220 V'luk lamba ya da priz için röle modülü, katı hal rölesi (SSR) ya da optokuplörlü triyak devresi kullan.

ESP32 ile MOSFET nasıl sürülür?

ESP32'nin pinleri 3,3 V verdiği için düşük gate geriliminde iyi açılan bir MOSFET seç. IRLZ44N tipik olarak 2–3 A'e kadar 3,3 V ile iyi çalışır; küçük yüklerde 2,5 V'ta garantili AO3400A, büyük akımlarda gate'i 12 V'a çıkaran bir sürücü daha güvenlidir. PWM için ledcAttach() ve ledcWrite() kullan, GPIO 25, 26, 27, 32 ya da 33 gibi açılışta sinyal üretmeyen pinleri seç.

MOSFET neden ısınır?

Tam açık bir MOSFET'in ısısı P = I² × RDS(on) ile bulunur; IRLZ44N 3 A'de yalnızca 0,2–0,3 W harcar. MOSFET çok ısınıyorsa genellikle gate gerilimi yetersizdir ve MOSFET yarı açık kalmıştır; standart MOSFET kullanmak, 3,3 V kartla sürmek ve çok yüksek PWM frekansı en sık sebeplerdir. Soğutucusuz bir TO-220'de 1 W'ın üstüne çıkıyorsan soğutucu kullan.

Tüm projeleri gör
Ldr İle Gece Lambası
#12Başlangıç

Ldr İle Gece Lambası

Hava karardığında kendiliğinden yanan, sabah olunca sönen küçük bir gece lambası. Işık sensörü odadaki aydınlığı ölçer; Arduino ortam yeterince karanlıksa LED'i yakar, aydınlanınca söndürür. Sokak lam

4.8(102)
205
ESP32 PWM ile LED Soldurma (Fade)
#110Başlangıç

ESP32 PWM ile LED Soldurma (Fade)

LED'in parlaklığını yumuşak şekilde 0'dan max'a, max'tan 0'a değiştirme. Arduino'daki gibi analogWrite() ile PWM kontrolü yapıyoruz — ESP32 Arduino Core 3.0+ ile aynı syntax sorunsuz çalışır. Pin tanımı + pinMode + analogWrite yeterli.

4.8(36)
54
ESP32 Potansiyometre ile LED Parlaklık (Analog → PWM)
#115Orta
Premium

ESP32 Potansiyometre ile LED Parlaklık (Analog → PWM)

Bu projede bir potansiyometre ile LED parlaklığını analog olarak kontrol ediyoruz. ESP32'nin ADC pini potansiyometreden gelen 0-3.3V gerilimi okur, ardından bu değer PWM (Pulse Width Modulation) sinyaline çevrilerek LED'e gönderilir. Böylece potansiyometreyi çevirdikçe LED kademeli olarak parlar ve söner. Arduino Core 3.0+ ile analogWrite() doğrudan kullanılabilir; ESP32-S2/S3'te ADC çözünürlüğü 12-bit'e sabitlenir.

4.5(19)
32
Raspberry Pi Pico PWM ile LED Fade (Nefes Efekti)
#160Başlangıç

Raspberry Pi Pico PWM ile LED Fade (Nefes Efekti)

LED artık sadece yanıp sönmüyor — nefes alıyor! Raspberry Pi Pico'nun PWM (Pulse Width Modulation — darbe genişlik modülasyonu) özelliğiyle LED'in parlaklığı yavaş yavaş artar, sonra yavaş yavaş azalır. Uyku modundaki MacBook ışığı gibi sakin bir "nefes" efekti. Öğrenme: machine.PWM sınıfı (pini PWM çıkışına çevirme), duty_u16() (0–65535 arası 16-bit parlaklık değeri), PWM frekansı (freq(1000) — saniyede 1000 kez aç-kapa, göz titremeyi görmez), range() ile adım adım döngü

0.0(0)
4
Akıllı Sulama İstasyonu
#83İleri
Premium

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

5.0(42)
57
ESP32 Akıllı Aydınlatma (PIR + LDR + Röle + OLED)
#141İleri
Premium

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

4.3(6)
11
Akıllı Merdiven ve Koridor Aydınlatması
#82Orta
Premium

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

5.0(35)
51