Komponen · 15 mnt baca

Panduan MOSFET Arduino: Mengendalikan LED Strip 12V, Motor, dan Pompa

Cara memakai MOSFET dengan Arduino: IRLZ44N logic-level vs IRF520, resistor gate dan pull-down, dioda flyback, serta kode PWM untuk LED strip 12V, motor, dan pompa.

Rangkaian MOSFET Arduino adalah cara paling efisien untuk menyalakan dan mematikan beban yang menarik arus beberapa ampere, seperti LED strip 12 V, motor DC, pompa air, atau kunci solenoid, hanya dengan pin Arduino yang cuma sanggup memberi arus sekitar 20 mA. MOSFET adalah sakelar elektronik yang dikendalikan tegangan: beri 5 V ke gate-nya, dan jalur antara drain dan source berubah menjadi seperti kabel dengan hambatan hampir nol; pada 0 V jalurnya terputus sepenuhnya. MOSFET logic-level yang dipilih dengan benar hanya terasa sedikit hangat ketika membawa beban 3 A tanpa heatsink.

Di panduan ini kamu akan belajar cara kerja MOSFET, kenapa tidak semua MOSFET cocok untuk Arduino (perbedaan IRLZ44N dan IRF520), apa fungsi resistor gate, resistor pull-down, dan dioda flyback, serta cara mengatur kecepatan dan kecerahan dengan PWM. Di bagian selanjutnya ada kode siap pakai untuk LED strip 12 V, motor DC, pompa, dan solenoid, contoh untuk ESP32 dan Raspberry Pi Pico, perhitungan panas dan heatsink, serta tabel perbandingan MOSFET vs transistor vs relay.

Apa itu MOSFET dan bagaimana cara kerjanya?

MOSFET (Metal Oxide Semiconductor Field Effect Transistor) adalah transistor efek medan dengan tiga kaki: gate, drain, dan source. Gate terisolasi dari bagian lain komponen oleh lapisan oksida yang tipis, jadi tidak ada arus tetap yang mengalir ke dalamnya dan gate berperilaku seperti kapasitor kecil. Ketika tegangan antara gate dan source (VGS) naik melewati ambang tertentu, terbentuk kanal konduktif antara drain dan source, dan arus beban mengalir melaluinya. Transistor BJT klasik dikendalikan oleh arus basis, sedangkan MOSFET dikendalikan oleh tegangan; pin Arduino hanya memberi arus selama beberapa mikrodetik yang dibutuhkan untuk mengisi dan mengosongkan gate.

Proyek Arduino hampir selalu memakai MOSFET N-channel yang dipasang di sisi negatif (GND) beban; cara ini disebut switching low-side. Kabel positif beban langsung ke terminal positif catu daya eksternal, kabel negatifnya ke drain MOSFET, dan source dihubungkan ke GND. Dengan begitu, tegangan gate-ke-source sama dengan tegangan pin Arduino. Ini nilai-nilai datasheet yang perlu kamu cek:

ParameterArtiNilai IRLZ44N
VDSTegangan tertinggi yang sanggup ditahan jalur drain–source; sebaiknya minimal 1,5–2 kali tegangan catu daya55 V
IDArus drain kontinu; hanya berlaku jika casing dijaga pada 25 °C, dalam praktik kamu memakai jauh lebih kecil47 A (VGS = 10 V)
VGS(th)Tegangan gate ketika kanal baru mulai menghantar (hanya 250 µA yang mengalir); bukan tegangan menyala penuh1,0–2,0 V
RDS(on)Hambatan drain–source ketika menyala penuh; nilai ini menentukan panas, dan VGS ketika nilai ini diukur sangat penting22 mΩ (10 V), 25 mΩ (5 V), 35 mΩ (4 V)
VGS (maks.)Tegangan tertinggi yang boleh diberikan ke gate; jika dilewati, lapisan oksidanya jebol±16 V
QgMuatan yang dibutuhkan untuk menyalakan gate sepenuhnya; makin besar, makin lambat switching-nya48 nC
Body diodeDioda bawaan di dalam struktur, dari source ke drain; dioda ini tidak melindungi beban induktifAda (di setiap MOSFET daya)

MOSFET logic-level: IRLZ44N, IRF520, dan lainnya

Kesalahan paling umum adalah melihat VGS(th) lalu berpikir “ambangnya 4 V, Arduino memberi 5 V, jadi pasti jalan”. Ambang adalah titik ketika kanal baru meloloskan 250 µA; agar MOSFET bisa membawa beberapa ampere dengan hambatan rendah, tegangan gate harus jauh di atas ambang. Pertanyaan yang benar adalah: pada VGS berapa datasheet menjamin RDS(on)? Jika nilainya diberikan untuk 4,5 V atau 5 V, MOSFET menyala penuh dari Arduino 5 V, dan disebut MOSFET logic-level. Jika hanya diberikan untuk 10 V, itu MOSFET standar dan pin Arduino hanya akan menyalakannya setengah. Dalam penamaan International Rectifier (sekarang Infineon), komponen yang diawali IRL (IRLZ44N, IRLB8721, IRL540N) adalah logic-level, sedangkan IRFZ44N, IRF520, dan IRF540N adalah standar.

Model (kemasan)VDSID kontinuRDS(on) (kondisi uji)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 VSangat baik; sampai 3 A tanpa heatsinkBiasanya sampai 2–3 A, tidak dijamin
IRLB8721 (TO-220)30 V62 A16 mΩ (VGS = 4,5 V)1,35–2,35 VSangat baikBiasanya sampai 2–3 A, tidak dijamin
AO3400A (SOT-23, SMD)30 V5,7 A48 mΩ (VGS = 2,5 V)0,65–1,45 VBaik; beban kecil (≈2 A)Sangat baik; dijamin bahkan pada 2,5 V
IRFZ44N (TO-220)55 V49 A17,5 mΩ (hanya VGS = 10 V)2,0–4,0 VTidak cocok, hanya menyala setengahJangan dipakai
IRF520 dan modulnya (TO-220)100 V9,2 A0,27 Ω (hanya VGS = 10 V)2,0–4,0 VHanya sampai ≈1 AJangan dipakai
IRF540N (TO-220)100 V33 A44 mΩ (hanya VGS = 10 V)2,0–4,0 VTidak cocok, hanya menyala setengahJangan dipakai

Aturan dari tabel ini sederhana: untuk board 5 V seperti Uno, Nano, dan Mega, pilih MOSFET yang RDS(on)-nya dicantumkan pada 4,5 V atau 5 V. Di board 3,3 V seperti ESP32 dan Pico urusannya sedikit lebih sulit, karena datasheet MOSFET TO-220 populer seperti IRLZ44N dan IRLB8721 tidak menjamin nilai apa pun pada 3,3 V; kita akan membahasnya lagi di bagian ESP32. Jangan memilih berdasarkan kemasan juga: IRLZ44N dan IRFZ44N datang dalam kemasan yang sama dengan tulisan yang hampir sama, tetapi satu huruf itu (L) mengubah segalanya untuk Arduino. Kamu bisa mengecek urutan kaki dengan alat pinout transistor; pada MOSFET TO-220, dengan sisi bertulisan menghadap ke arahmu, urutannya dari kiri ke kanan adalah gate, drain, source, dan tab logamnya terhubung ke drain.

Pengkabelan MOSFET Arduino: resistor gate, pull-down, dan ground bersama

Rangkaian dasarnya punya lima bagian: MOSFET, resistor gate, resistor pull-down, dioda flyback untuk beban induktif, dan catu daya eksternal. Tabel di bawah menunjukkan pengkabelan untuk tiga board; contoh bebannya adalah LED strip atau motor 12 V. Semua kode di artikel ini memakai pin-pin ini.

SambunganArduino UnoESP32Raspberry Pi Pico
Pin kontrol → resistor gate → gateD9 (PWM), 220 ΩGPIO 25, 100 ΩGP15, 100 Ω
Pull-down antara gate dan GND10 kΩ10 kΩ10 kΩ
SourceGNDGNDGND
DrainKabel negatif (−) bebanKabel negatif (−) bebanKabel negatif (−) beban
Kabel positif (+) bebanPositif adaptor 12 VPositif adaptor 12 VPositif adaptor 12 V
Negatif (−) adaptor 12 VGND Arduino (ground bersama)GND ESP32 (ground bersama)GND Pico (ground bersama)
MOSFET yang disarankanIRLZ44NIRLZ44N (sampai 2–3 A) atau AO3400AIRLZ44N (sampai 2–3 A) atau AO3400A

Resistor gate (100–220 Ω) membatasi arus kejut singkat yang ditarik dari pin ketika kapasitansi gate sedang terisi. Kapasitansi input IRLZ44N sekitar 1700 pF; tanpa resistor, pin sejenak melihat sesuatu yang mendekati korsleting di setiap transisi, dan jalur gate mulai berosilasi (ringing). Dengan 220 Ω, arus puncaknya paling besar 5 / 220 ≈ 23 mA, dan gate tetap terisi dalam beberapa mikrodetik. Resistor pull-down (10 kΩ) menjaga gate agar tidak mengambang ketika pin berstatus input, yang terjadi ketika Arduino baru menyala, di-reset, atau menerima sketch baru. Gate yang mengambang bisa menangkap derau dan terisi setengah; MOSFET lalu menyala setengah, memutar motor dengan sendirinya, dan cepat kepanasan. Pasang pull-down di sisi MOSFET dari resistor gate, langsung antara gate dan source, supaya MOSFET tetap mati walaupun kabel kontrolnya lepas. Kedua resistor membentuk pembagi tegangan kecil, tetapi efeknya bisa diabaikan: 5 × 10000 / 10220 ≈ 4,89 V sampai ke gate.

Jangan lupa ground bersama: jika negatif adaptor 12 V tidak dihubungkan ke GND Arduino, tegangan gate tidak punya acuan yang jelas terhadap source dan MOSFET tidak akan menyala. Jangan pernah memberi daya beban dari pin 5V Arduino; motor atau LED strip butuh catu dayanya sendiri (selengkapnya di Ground Bersama (GND)). Jika drain dan source tertukar, body diode MOSFET akan menghantar dan beban terus menyala, apa pun status pinnya.

Dioda flyback: kenapa motor, pompa, dan solenoid membutuhkannya

Dioda flyback tipe 1N4007
Dioda penyearah tipe 1N4007: dipasang terbalik di kedua ujung beban induktif; gelang pada badannya menandai katoda, yang menuju sisi positif (+) catu daya.

Beban induktif seperti motor, pompa, solenoid, kumparan relay, dan kipas melawan arus yang berhenti tiba-tiba. Begitu MOSFET mati, energi magnet yang tersimpan di kumparan dilepaskan sebagai lonjakan tegangan di drain yang naik jauh di atas tegangan catu daya (V = L × di/dt). Lonjakan itu bisa melewati rating VDS MOSFET dan merusaknya, atau menimbulkan gangguan yang membuat Arduino reset. Solusinya adalah dioda yang dipasang terbalik di kedua ujung beban: katoda (ujung bergelang) ke positif catu daya, anoda ke drain. Dalam operasi normal dioda mendapat bias mundur dan tidak mengalirkan arus; ketika MOSFET mati, arus kumparan berputar melalui dioda dan melemah perlahan. Body diode MOSFET tidak bisa melakukan tugas ini, karena letaknya antara source dan drain, bukan di kedua ujung beban. Untuk detail lebih lanjut, baca Apa Itu Dioda?.

Beban dan cara penggerakanDioda yang disarankanKenapa?
Solenoid, kumparan relay (hanya nyala/mati)1N4007 (1 A, 1000 V)Dioda yang lambat, tetapi cukup untuk switching yang jarang
Pompa atau motor kecil dengan PWM (sampai 1 A)1N5819 Schottky (1 A, 40 V)Cepat; dioda menghantar di setiap periode PWM
Motor lebih besar dengan PWM (1–3 A)1N5822 atau SS34 Schottky (3 A, 40 V)Ketika PWM sedang mati, dioda membawa seluruh arus motor
LED strip 12 V, pemanas resistifTidak perluTidak ada kumparan, jadi tidak ada lonjakan tegangan

Langkah demi langkah: meredupkan LED strip 12 V dengan Arduino

  1. Siapkan komponennya: Arduino Uno, IRLZ44N, resistor 220 Ω dan 10 kΩ, potensiometer 10 kΩ, LED strip 12 V, dan adaptor 12 V yang sanggup memasok arus strip-nya.
  2. Hitung arus strip: strip 5050 dengan 60 LED/m menarik sekitar 14,4 W per meter, yaitu 1,2 A pada 12 V. Dua meter butuh 2,4 A; pilih adaptor dengan cadangan 20% (minimal 3 A).
  3. Pasang MOSFET: hubungkan source IRLZ44N ke jalur GND, gate-nya ke D9 lewat 220 Ω, dan pasang 10 kΩ antara gate dan GND.
  4. Hubungkan beban: kabel +12V strip ke positif adaptor, kabel negatifnya ke drain MOSFET. Kontak breadboard hanya sanggup sekitar 1 A; untuk arus lebih besar, pakai terminal sekrup atau solder kabel bebannya.
  5. Hubungkan potensiometer: kaki luar ke 5V dan GND, kaki tengah ke A0.
  6. Satukan ground dan uji: hubungkan negatif adaptor ke GND Arduino, upload kodenya, lalu colokkan adaptor.
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() menghasilkan sinyal PWM di pin 9 yang menyala dan mati sekitar 490 kali per detik; 0 berarti mati total dan 255 menyala penuh. Pin PWM di Uno adalah 3, 5, 6, 9, 10, dan 11; pin 5 dan 6 berjalan di sekitar 980 Hz. Karena mata tidak menangkap kecerahan secara linear, mengkuadratkan nilai potensiometer (koreksi gamma sederhana) memberi kendali yang jauh lebih halus di kecerahan rendah. Detail PWM bisa kamu baca di Apa Itu PWM?. Kita cek juga panasnya: pada 2,4 A, IRLZ44N membuang daya P = I² × RDS(on) = 2,4² × 0,025 ≈ 0,14 W, jadi hanya terasa suam-suam kuku ketika disentuh. Sementara itu LED strip-nya sendiri memakai 28,8 W; rugi daya di MOSFET kurang dari satu persen dari totalnya.

Kendali kecepatan motor DC dan pompa dengan PWM

Pompa air celup mini 6 V
Pompa air celup mini 6 V: di dalamnya ada motor DC kecil, jadi selalu pasang dioda flyback di kedua kakinya ketika menggerakkannya dengan MOSFET.

Menggerakkan motor atau pompa memakai rangkaian yang sama dengan LED strip; bedanya hanya kamu menambahkan dioda flyback di kedua ujung beban. Motor juga punya arus lonjakan awal (inrush current): motor yang diam bisa menarik 3–8 kali arus kerjanya di momen pertama. Karena itu, pilih MOSFET dan catu daya berdasarkan arus stall motor, dan pakai soft start alih-alih langsung melompat dari 0 ke 255. Pompa celup mini menarik sekitar 0,1–0,3 A pada 3–6 V, sedangkan pompa diafragma 12 V biasanya menarik 0,5–1 A; IRLZ44N menangani keduanya dengan cadangan yang sangat lega. Hanya saja, beri daya pompa mini dari catu daya sesuai tegangannya sendiri (5–6 V), bukan dari adaptor 12 V; rangkaian MOSFET-nya tetap sama. Untuk pemilihan pompa dan detail penyiraman, lihat pompa air mini.

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}

Kode ini mendekati kecepatan target yang dibaca dari potensiometer satu langkah setiap 8 ms, jadi motor naik dari 0 ke kecepatan penuh dalam sekitar 2 detik dan arus lonjakan awal tidak menjatuhkan tegangan catu daya. MIN_DUTY adalah nilai PWM terendah ketika motor mulai berputar; temukan nilainya dengan mencoba pada motormu sendiri. PWM 490 Hz membuat bunyi mendenging yang terdengar di motor. Baris TCCR1B yang dijadikan komentar menaikkan frekuensi D9 dan D10 ke sekitar 3,9 kHz; library Servo juga memakai Timer1, jadi jangan pakai keduanya bersamaan. Menaikkan frekuensi lebih tinggi lagi memang menggoda, tetapi karena pin Arduino butuh beberapa mikrodetik untuk mengisi gate MOSFET besar di setiap transisi, rugi-rugi switching ikut naik bersama frekuensi: di sekitar 20 kHz, motor 2 A pun bisa menimbulkan rugi lebih dari 1 W di MOSFET. Pada frekuensi seperti itu dipakai driver gate seperti TC4427.

Kunci solenoid dan beban berdurasi singkat

Kunci pintu solenoid 12 V menarik 0,5–1 A, dan sebagian besar tidak dirancang untuk dialiri listrik terus-menerus; jika dibiarkan menyala lama, kumparannya memanas. Jadi kodenya sebaiknya hanya membuka kunci selama beberapa detik. Karena solenoid dinyalakan dan dimatikan, bukan dikendalikan dengan PWM, 1N4007 sudah cukup sebagai dioda flyback. Pada contoh di bawah, menekan tombol di D2 membuka kunci selama 3 detik, lalu kunci menutup lagi walaupun tombol masih ditekan. Untuk memicu kunci dengan pembaca kartu RFID atau keypad, kamu cukup mengganti kondisi if; untuk jenis-jenis kunci dan perilakunya ketika listrik padam, lihat kunci solenoid.

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}

Kenapa modul IRF520 kurang mampu di 5 V

Modul MOSFET IRF520, yang sangat umum di starter kit, adalah board kecil dengan terminal sekrup yang dijual dengan rating seperti “24 V, 5 A”. Di samping MOSFET-nya ada beberapa resistor dan LED indikator sinyal; sebagian besar versinya tidak punya dioda flyback. Masalahnya ada di MOSFET-nya sendiri: IRF520 adalah MOSFET standar dengan ambang 2–4 V, dan RDS(on) 0,27 Ω miliknya hanya dijamin pada VGS = 10 V. Menurut kurva tipikal di datasheet, dengan tegangan gate 5 V IRF520 mulai membatasi arus di sekitar 2 A; pada komponen dengan ambang tinggi, batas itu turun di bawah 1 A. Di titik itu MOSFET tidak lagi berperilaku seperti sakelar, melainkan seperti resistor variabel.

Contohnya begini: bayangkan kamu menggerakkan motor 12 V yang menarik 2 A dengan modul IRF520. Jika 1,5 V jatuh di MOSFET, daya yang dibuang P = 1,5 × 2 = 3 W. Dengan hambatan termal kemasan TO-220 tanpa heatsink sebesar 62 °C/W, itu berarti sekitar 186 °C di atas suhu ruangan; MOSFET cepat kepanasan dan rusak, atau paling bagus motornya berputar pelan. Angka 5 A di label modul hanya berlaku dengan 10 V di gate. Ini terminal modul dan cara menghubungkannya:

Terminal modulHubungkan keCatatan
SIGPin PWM Arduino (mis. D9)Sinyal gate; nyaris tidak menyala sama sekali dengan board 3,3 V
VCC5V ArduinoDi sebagian besar versi tidak terhubung ke apa pun; arus beban tidak lewat sini
GND (pin header)GND ArduinoWajib untuk ground bersama
VIN dan GND (terminal sekrup)+ dan − catu daya eksternalDaya untuk beban; modul ini dijual untuk sampai 24 V
V+ dan V− (terminal sekrup)+ dan − bebanUntuk motor dan pompa, tambahkan dioda antara V+ dan V− (katoda ke V+)
  • Ganti MOSFET-nya: lepas solderan IRF520 dari modul dan solder IRLZ44N dengan urutan kaki yang sama (G-D-S); board-nya bekerja persis sama, tetapi sekarang menyala penuh pada 5 V.
  • Pakai modul logic-level: modul siap pakai dengan MOSFET AOD4184A (D4184) menawarkan RDS(on) paling besar 9,5 mΩ pada 4,5 V dan bekerja nyaman dengan Arduino 5 V.
  • Gerakkan gate dengan tegangan lebih tinggi: driver gate seperti TC4427 yang diberi daya 12 V mengubah sinyal 5 V atau 3,3 V dari Arduino menjadi 12 V di gate, sehingga IRF520 mencapai kemampuan aslinya. Jaga tegangan gate tetap dalam batas: ±20 V untuk IRF520, ±16 V untuk IRLZ44N.
  • Pakai apa adanya untuk beban kecil: di bawah 1 A (LED strip pendek, pompa mini), modul IRF520 bekerja pada 5 V dengan panas yang masih wajar; jika MOSFET terlalu panas untuk disentuh, kurangi bebannya.

Memakai MOSFET dengan ESP32 dan Raspberry Pi Pico (3,3 V)

Karena pin ESP32 dan Pico mengeluarkan 3,3 V, memilih MOSFET yang tepat jadi makin penting. Datasheet IRLZ44N mencantumkan RDS(on) sampai serendah 4 V; menurut kurva tipikalnya, MOSFET ini masih meloloskan beberapa ampere dengan nyaman di sekitar 3 V, tetapi itu tidak dijamin untuk komponen dengan ambang tinggi. Aturan praktisnya: di board 3,3 V, pakai IRLZ44N atau IRLB8721 untuk sampai 2–3 A, ukur tegangan drain-ke-source dengan multimeter ketika beban berjalan, lalu hitung daya yang dibuang dengan P = VDS × I; untuk TO-220 tanpa heatsink, jaga di bawah 1 W. Untuk arus lebih besar, pakai driver yang menaikkan gate ke 5–12 V, dan untuk beban kecil pakai AO3400A, yang RDS(on)-nya dijamin pada 2,5 V. Di ESP32, pilih pin seperti GPIO 25, 26, 27, 32, atau 33 untuk MOSFET: GPIO 0, 2, 5, 12, dan 15 adalah pin strapping, sedangkan GPIO 1, 3, 5, 14, dan 15 bisa sebentar menjadi HIGH atau mengeluarkan PWM ketika boot. Di pin-pin itu beban bisa menyala tanpa diduga ketika board dinyalakan, atau resistor pull-down bisa mengganggu proses boot.

Kode ESP32 di bawah menyalakan pompa lewat MOSFET dengan soft start ketika sensor kelembapan tanah melaporkan tanah kering, menyiram selama 5 detik, lalu mematikannya dengan lembut. Untuk PWM, kode ini memakai fungsi ledcAttach() dan ledcWrite() dari core Arduino ESP32 3.x; versi lama 2.x memakai ledcSetup() dan ledcAttachPin() sebagai gantinya, dan ledcWrite() di versi itu menerima nomor kanal, bukan pin. Baris #if di kode memilih pemanggilan yang benar sesuai core yang terinstal, jadi kodenya bisa dikompilasi di kedua versi. Karena gate digerakkan dengan 3,3 V lewat 100 Ω, frekuensinya dijaga di 1 kHz supaya rugi-rugi switching tetap bisa diabaikan. Ukur nilai kering dan basah sensor di tanahmu sendiri, seperti di Sensor Kelembapan Tanah, lalu atur ambang DRY_LEVEL sesuai hasilnya.

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}

Di Raspberry Pi Pico, kelas machine.PWM sudah cukup untuk menghasilkan PWM di MicroPython; duty_u16() menerima nilai dari 0 sampai 65535. Kode di bawah memberi efek “bernapas” yang halus pada LED strip 12 V lewat MOSFET di GP15. Seperti di contoh Arduino, nilainya dikuadratkan untuk koreksi gamma sederhana, sehingga peralihan dari gelap ke terang terlihat alami. Pin Pico juga mengeluarkan 3,3 V, jadi aturan MOSFET yang kita bahas untuk ESP32 berlaku juga di sini.

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)

Panas, perhitungan daya, dan memilih heatsink

Panas pada MOSFET yang menyala penuh berasal dari satu rumus: P = I² × RDS(on). Ingat dua hal. Pertama, RDS(on) naik seiring suhu; untuk IRLZ44N pada 100 °C nilainya sekitar 1,5 kali nilai pada 25 °C, jadi memakai 38 mΩ alih-alih 25 mΩ dalam perhitungan lebih realistis. Kedua, kemasan hanya sanggup membuang panas ke udara dalam jumlah terbatas: hambatan termal TO-220 tanpa heatsink (RθJA) adalah 62 °C/W, artinya setiap watt menaikkan suhu die 62 °C di atas suhu ruangan. Tabel di bawah menunjukkan seberapa panas IRLZ44N dengan gate 5 V dan tanpa heatsink:

Arus bebanDaya yang dibuang (pada 38 mΩ)Kenaikan suhu (tanpa heatsink)Saran
1 A0,04 W≈ 2 °CTidak perlu heatsink
3 A0,34 W≈ 21 °CTidak perlu heatsink, hangat
5 A0,95 W≈ 59 °CDi ambang batas; pasang heatsink kecil
8 A2,4 W≈ 150 °CWajib heatsink
10 A3,8 W≈ 236 °CWajib heatsink bersirip dan pasta termal

Menentukan ukuran heatsink mengikuti logika yang sama: Tj = Truangan + P × (RθJC + RθCS + RθSA). Jika 3,8 W dibuang pada 10 A dan kamu ingin menjaga die di 100 °C dalam ruangan 30 °C, total hambatan termal tidak boleh melebihi (100 − 30) / 3,8 ≈ 18 °C/W. Hambatan junction-ke-casing IRLZ44N adalah 1,4 °C/W dan kontak dengan pasta termal sekitar 0,5 °C/W, jadi heatsink-nya sendiri harus 16 °C/W atau kurang, yang sesuai dengan heatsink TO-220 kecil tetapi bersirip. Tab logam MOSFET terhubung ke drain; jika kamu memasang beberapa MOSFET di heatsink yang sama, pakai pad isolator mika atau silikon dan ring sekrup plastik (bushing). Sumber panas kedua ketika memakai PWM adalah rugi-rugi switching; nilainya bisa diabaikan pada 490 Hz tetapi bertambah ketika frekuensi naik.

Cara termudah untuk mengetahui apakah MOSFET menyala penuh adalah mengukur tegangan antara drain dan source ketika beban berjalan. IRLZ44N seharusnya menunjukkan sekitar 0,1 V pada 3 A; jika kamu melihat 1 V atau lebih, MOSFET hanya menyala setengah dan tegangan gate terlalu rendah (MOSFET standar, board 3,3 V, atau sambungan gate yang putus). Kamu bisa menghitung daya yang dibuang dengan P = VDS × I dan mengecek angkanya dengan kalkulator hukum Ohm.

MOSFET vs transistor vs relay

FiturMOSFET logic-level (IRLZ44N)Transistor BJT (2N2222A / TIP120)Relay (modul 5 V)
Bagaimana cara mengendalikannya?Dengan tegangan; tidak ada arus gate tetapDengan arus; arus basis terus mengalir (2–10 mA)Dengan arus kumparan (≈70 mA); transistor di modul yang menggerakkannya
Rugi daya ketika menyalaI² × RDS(on): ≈ 0,2–0,3 W pada 3 AVCE(sat) × I: TIP120 sampai 2 V pada 3 A, ≈ 6 WHampir nol di kontaknya
Kapasitas arusPuluhan ampere (dengan heatsink)2N2222A 0,6 A, TIP120 5 ABiasanya 10 A (rating kontak)
Kecepatan dan kecerahan dengan PWMYa, di rentang kHzYaTidak, hanya nyala/mati
AC / tegangan listrik PLNTidak, hanya DCTidak, hanya DCYa, dengan isolasi galvanik
Bunyi dan umur pakaiSenyap, tidak ausSenyap, tidak ausBerbunyi klik; umur kontak sekitar 100.000 kali operasi
Paling cocok untukLED strip, motor, pompa, solenoid (1–10 A DC)Beban kecil (sampai 1 A), kumparan relay, buzzerLampu, stopkontak, peralatan AC

Singkatnya: jika kamu ingin mengendalikan beban DC dengan cepat, tanpa suara, dan dengan PWM, pakai MOSFET; jika kamu menyalakan dan mematikan lampu atau stopkontak yang tersambung ke listrik PLN, pakai modul relay. Untuk beban kecil beberapa ratus miliampere, BJT yang murah juga bisa; perhitungan resistor basisnya ada di Apa Itu Transistor?. Jika motor yang sama harus berputar ke dua arah, satu MOSFET tidak cukup: kamu butuh H-bridge dengan empat sakelar, jadi pakai driver motor L298N atau modul H-bridge MOSFET.

Ide proyek dengan MOSFET

  • Lampu lemari atau tangga otomatis: ketika sensor PIR mendeteksi gerakan, nyalakan LED strip 12 V perlahan dengan PWM dan matikan setelah beberapa waktu.
  • Lampu senja: pakai LDR untuk menaikkan kecerahan strip sedikit demi sedikit ketika ruangan makin gelap.
  • Kipas pintar: percepat kipas PC 12 V ketika suhu yang diukur DHT11 naik.
  • Penyiram tanaman otomatis: siram pot-potmu secara otomatis dengan sensor kelembapan tanah dan pompa yang digerakkan MOSFET; pakai MOSFET terpisah untuk setiap pompa.
  • Kunci pintu dengan kartu: buka kunci solenoid 12 V selama 3 detik ketika RFID RC522 membaca kartu yang benar.
  • Rumah kaca pintar: buat rumah kaca pintar yang mengendalikan kipas, pompa, dan pemanas dengan MOSFET terpisah.

Kesalahan umum dan cara memperbaikinya

GejalaKemungkinan penyebabSolusi
Beban sama sekali tidak menyalaTidak ada ground bersama, atau urutan G-D-S salahHubungkan negatif adaptor ke GND Arduino dan cek urutan kakinya
Beban menyala terus dan tidak mau matiDrain dan source tertukar (body diode menghantar), atau MOSFET rusak dalam kondisi shortPerbaiki pengkabelan; jika drain–source terukur short di kedua arah, ganti MOSFET-nya
MOSFET sangat panas dan bebannya lemahMOSFET standar (IRF520, IRFZ44N) hanya menyala setengah pada 5 V atau 3,3 VPakai MOSFET logic-level seperti IRLZ44N, atau driver gate
Motor berputar sendiri ketika dinyalakan atau ketika uploadGate mengambang, tidak ada resistor pull-downPasang 10 kΩ antara gate dan GND
Arduino reset ketika motor berhentiTidak ada dioda flyback, atau motor dan Arduino berbagi catu daya yang lemahTambahkan dioda Schottky terbalik di kedua ujung motor dan beri daya motor dari catu daya terpisah
Motor mendenging keras dengan PWMFrekuensi PWM 490 Hz ada di rentang yang bisa didengarNaikkan ke 3,9 kHz; di atas 20 kHz, pakai driver gate
Beban lemah ketika MOSFET N-channel dipasang di sisi positifSource ikut naik bersama beban, sehingga VGS mengecilTetap pasang N-channel di sisi GND; untuk switching high-side pakai MOSFET P-channel dengan driver NPN
Ketika merakit rangkaian untuk pertama kali, pakai beban kecil dulu: coba LED dengan resistor 1 kΩ sebelum strip 12 V, dan motor kecil sebelum pompa. Jika Arduino terus reset, penyebabnya biasanya tegangan yang anjlok dan gangguan; untuk diagnosis langkah demi langkah, lihat Kenapa Arduino-ku terus reset?. Jika kamu ingin mendapatkan 5 V untuk Arduino dari adaptor 12 V, kamu bisa memakai buck converter LM2596.

MOSFET adalah cara paling rapi untuk menghubungkan Arduino ke beban bertenaga besar di dunia nyata: dengan komponen logic-level yang dipilih dengan benar, resistor gate, pull-down, dan dioda untuk beban induktif, kamu bisa mengendalikan beban DC apa pun, dari LED strip sampai pompa, secara senyap dan efisien. Di aplikasi BlueGrays ada proyek seperti LED fade dengan PWM, kendali kecerahan LED dengan potensiometer, sistem penyiram tanaman pintar, dan lampu pintar, lengkap dengan skema rangkaian dan kode langkah demi langkah, jadi rangkaian MOSFET yang kamu pelajari di sini bisa langsung kamu jadikan proyek nyata.

Pertanyaan umum

MOSFET mana yang sebaiknya kupakai dengan Arduino?

Untuk Arduino Uno, Nano, atau Mega 5 V, pilih MOSFET N-channel logic-level yang RDS(on)-nya dijamin pada 4,5 V atau 5 V. Yang paling umum adalah IRLZ44N: tahan 55 V dan hambatannya hanya 25 mΩ dengan gate 5 V. IRLB8721 juga pilihan yang bagus, sedangkan MOSFET standar seperti IRFZ44N, IRF520, dan IRF540N butuh 10 V untuk menyala penuh.

Apakah modul IRF520 bisa dipakai dengan Arduino?

Bisa, tetapi terbatas. IRF520 adalah MOSFET standar, dan dengan gate 5 V biasanya mulai membatasi arus di sekitar 2 A, jadi cepat panas dengan beban di atas 1 A. Untuk beban kecil tidak masalah; untuk yang lebih besar, ganti MOSFET di modulnya dengan IRLZ44N atau pakai modul logic-level.

Berapa nilai resistor gate yang sebaiknya kupakai untuk MOSFET?

Dengan Arduino, resistor gate 100–220 Ω sudah bekerja dengan baik; 220 Ω membatasi arus kejut dari pin menjadi sekitar 23 mA pada 5 V. Pasang juga resistor pull-down 10 kΩ antara gate dan GND, yang mencegah MOSFET menyala sendiri ketika board dinyalakan dan ketika upload.

Apakah MOSFET bisa mengendalikan tegangan AC listrik PLN?

Di proyek Arduino, pakai MOSFET hanya untuk beban DC. Listrik AC PLN tidak bisa di-switch dengan aman memakai satu MOSFET N-channel, dan rangkaian seperti itu tidak punya isolasi, sehingga berbahaya. Untuk lampu atau stopkontak listrik PLN, pakai modul relay, solid-state relay (SSR), atau rangkaian TRIAC yang digerakkan optocoupler.

Bagaimana cara menggerakkan MOSFET dengan ESP32?

Karena pin ESP32 mengeluarkan 3,3 V, pilih MOSFET yang menyala dengan baik pada tegangan gate rendah. IRLZ44N biasanya bekerja baik pada 3,3 V sampai 2–3 A; untuk beban kecil, AO3400A yang dijamin pada 2,5 V, dan untuk arus tinggi, driver yang menaikkan gate ke 12 V, lebih aman. Pakai ledcAttach() dan ledcWrite() untuk PWM, dan pilih pin yang tetap tenang ketika boot, seperti GPIO 25, 26, 27, 32, atau 33.

Kenapa MOSFET-ku jadi panas?

Panas pada MOSFET yang menyala penuh adalah P = I² × RDS(on); IRLZ44N hanya membuang 0,2–0,3 W pada 3 A. Jika MOSFET sangat panas, biasanya tegangan gate terlalu rendah dan MOSFET hanya menyala setengah; memakai MOSFET standar, menggerakkannya dari board 3,3 V, dan frekuensi PWM yang sangat tinggi adalah penyebab paling umum. Jika TO-220 tanpa heatsink harus membuang lebih dari 1 W, tambahkan heatsink.

Lihat semua proyek
Lampu Tidur dengan LDR
#12Pemula

Lampu Tidur dengan LDR

Lampu tidur kecil yang menyala sendiri ketika gelap dan mati ketika pagi tiba. Sensor cahaya mengukur seberapa terang ruangan, dan Arduino menyalakan LED ketika cukup gelap lalu mematikannya lagi keti

4.8(102)
205
LED Fade dengan PWM ESP32
#110Pemula

LED Fade dengan PWM ESP32

Mengubah kecerahan LED secara halus dari 0 ke maksimum, dan dari maksimum ke 0. Kita mengendalikan PWM dengan analogWrite() seperti di Arduino; sintaks yang sama bekerja tanpa masalah di ESP32 Arduino Core 3.0+. Definisi pin + pinMode + analogWrite sudah cukup.

4.8(36)
54
Kendali Kecerahan LED dengan Potensiometer ESP32 (Analog → PWM)
#115Menengah
Premium

Kendali Kecerahan LED dengan Potensiometer ESP32 (Analog → PWM)

Di proyek ini, kita mengendalikan kecerahan LED secara analog memakai potensiometer. Pin ADC ESP32 membaca tegangan 0-3,3V dari potensiometer, lalu nilai ini diubah menjadi sinyal PWM (Pulse Width Modulation) dan dikirim ke LED. Hasilnya, ketika kamu memutar potensiometer, LED perlahan menerang dan meredup. Dengan Arduino Core 3.0+, analogWrite() bisa langsung dipakai; di ESP32-S2/S3, resolusi ADC tetap 12-bit.

4.5(19)
32
LED Fade PWM Raspberry Pi Pico (Efek Bernapas)
#160Pemula

LED Fade PWM Raspberry Pi Pico (Efek Bernapas)

LED tidak lagi sekadar berkedip, ia bernapas! Dengan PWM (Pulse Width Modulation) Pico, kecerahan LED naik lalu turun perlahan, seperti lampu MacBook yang tidur. Pelajari kelas machine.PWM, duty_u16() (kecerahan 16-bit 0–65535), frekuensi PWM (freq(1000): 1000 siklus per detik, tanpa kedipan terlihat), loop range() bertahap, dan output mirip analog dari pin digital. PWM juga dipakai untuk warna RGB, motor, servo, dan buzzer.

0.0(0)
4
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 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
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