Composants · 19 min de lecture

MOSFET Arduino : piloter ruban LED, moteur et pompe en 12 V

Utiliser un MOSFET avec Arduino : IRLZ44N logic level ou IRF520, résistance de grille et pull-down, diode de roue libre, code PWM pour ruban LED et moteur.

Un montage MOSFET avec Arduino est le moyen le plus efficace de commuter en toute sécurité des charges de plusieurs ampères, comme un ruban LED 12 V, un moteur à courant continu, une pompe à eau ou une serrure à solénoïde, à partir de broches Arduino qui ne fournissent qu'environ 20 mA. Le MOSFET est un interrupteur électronique commandé en tension : applique 5 V sur sa grille (gate) et le chemin entre drain et source devient presque un fil sans résistance ; à 0 V, il est complètement bloqué. Un MOSFET logic level bien choisi ne fait que tiédir en conduisant 3 A sans dissipateur.

Dans cet article, tu vas apprendre comment fonctionne un MOSFET, pourquoi tous les MOSFET ne conviennent pas à l'Arduino (la différence entre IRLZ44N et IRF520), à quoi servent la résistance de grille, la résistance de pull-down et la diode de roue libre, et comment régler vitesse et luminosité en PWM. Plus bas, tu trouveras du code prêt à l'emploi pour un ruban LED, un moteur à courant continu, une pompe et une serrure à solénoïde en 12 V, des exemples pour ESP32 et Raspberry Pi Pico, le calcul de l'échauffement et du dissipateur, ainsi qu'un tableau comparatif MOSFET, transistor et relais.

Qu'est-ce qu'un MOSFET et comment fonctionne-t-il ?

Le MOSFET (Metal Oxide Semiconductor Field Effect Transistor) est un transistor à effet de champ à trois broches : la grille (gate), le drain et la source. La grille est isolée du reste du composant par une fine couche d'oxyde ; aucun courant permanent n'y circule et elle se comporte comme un petit condensateur. Quand la tension entre grille et source (VGS) dépasse un certain seuil, un canal conducteur se forme entre drain et source et le courant de la charge le traverse. Un transistor bipolaire classique se commande par le courant de base, alors que le MOSFET se commande en tension ; la broche Arduino ne fournit du courant que pendant les quelques microsecondes nécessaires pour charger et décharger la grille.

Dans les projets Arduino, on utilise presque toujours un MOSFET canal N placé du côté négatif (GND) de la charge : c'est la commutation côté bas (low-side). Le plus de la charge va directement au plus de l'alimentation externe, son moins va au drain du MOSFET, et la source est reliée au GND. Ainsi, la tension grille-source est tout simplement la tension de la broche Arduino. Voici les valeurs de la fiche technique à vérifier :

ParamètreSignificationValeur pour l'IRLZ44N
VDSTension maximale supportée entre drain et source ; prévois au moins 1,5 à 2 fois la tension d'alimentation55 V
IDCourant de drain continu ; valable seulement avec le boîtier maintenu à 25 °C, en pratique tu en utilises bien moins47 A (VGS = 10 V)
VGS(th)Tension de grille à laquelle le canal commence tout juste à conduire (250 µA seulement) ; ce n'est pas la tension de pleine conduction1,0–2,0 V
RDS(on)Résistance drain-source à l'état passant ; elle fixe l'échauffement et la VGS de mesure est essentielle22 mΩ (10 V), 25 mΩ (5 V), 35 mΩ (4 V)
VGS (max.)Tension maximale applicable sur la grille ; au-delà, la couche d'oxyde claque±16 V
QgCharge nécessaire pour rendre la grille complètement passante ; plus elle est élevée, plus la commutation est lente48 nC
Diode interne (body diode)Diode intégrée de la source vers le drain ; elle ne protège pas les charges inductivesOui (dans tout MOSFET de puissance)

MOSFET logic level : IRLZ44N, IRF520 et les autres

L'erreur la plus fréquente consiste à regarder VGS(th) et à se dire « le seuil est de 4 V, l'Arduino donne 5 V, donc ça marche ». La tension de seuil est le point où le canal laisse passer à peine 250 µA ; pour que le MOSFET conduise plusieurs ampères avec une faible résistance, la tension de grille doit être nettement au-dessus. La bonne question est : à quelle VGS la fiche technique garantit-elle le RDS(on) ? S'il est donné pour 4,5 V ou 5 V, le MOSFET devient pleinement passant avec un Arduino 5 V : c'est un MOSFET logic level (à niveau logique). S'il n'est donné que pour 10 V, c'est un MOSFET standard qu'une broche Arduino ne rend passant qu'à moitié. Dans la nomenclature d'International Rectifier (aujourd'hui Infineon), les références qui commencent par IRL (IRLZ44N, IRLB8721, IRL540N) sont logic level, tandis que l'IRFZ44N, l'IRF520 et l'IRF540N sont standard.

Modèle (boîtier)VDSID continuRDS(on) (condition de mesure)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 VTrès bon ; jusqu'à 3 A sans dissipateurEn général jusqu'à 2–3 A, sans garantie
IRLB8721 (TO-220)30 V62 A16 mΩ (VGS = 4,5 V)1,35–2,35 VTrès bonEn général jusqu'à 2–3 A, sans garantie
AO3400A (SOT-23, CMS)30 V5,7 A48 mΩ (VGS = 2,5 V)0,65–1,45 VBon ; petites charges (≈2 A)Très bon ; garanti même à 2,5 V
IRFZ44N (TO-220)55 V49 A17,5 mΩ (seulement VGS = 10 V)2,0–4,0 VInadapté, à moitié passantÀ éviter
IRF520 et son module (TO-220)100 V9,2 A0,27 Ω (seulement VGS = 10 V)2,0–4,0 VSeulement jusqu'à ≈1 AÀ éviter
IRF540N (TO-220)100 V33 A44 mΩ (seulement VGS = 10 V)2,0–4,0 VInadapté, à moitié passantÀ éviter

La règle à retenir est simple : pour les cartes 5 V comme l'Uno, la Nano et la Mega, choisis un MOSFET dont le RDS(on) est spécifié à 4,5 V ou 5 V. Sur les cartes 3,3 V comme l'ESP32 et la Pico, c'est un peu plus délicat, car les fiches techniques des MOSFET TO-220 courants comme l'IRLZ44N et l'IRLB8721 ne garantissent aucune valeur à 3,3 V ; on y reviendra dans la partie ESP32. Ne choisis pas non plus d'après le boîtier : l'IRLZ44N et l'IRFZ44N ont le même boîtier et un marquage presque identique, mais cette seule lettre (L) change tout pour un Arduino. Tu peux vérifier l'ordre des broches avec l'outil Brochage des transistors ; sur un MOSFET TO-220, face imprimée vers toi, l'ordre de gauche à droite est grille, drain, source (G-D-S) et la languette métallique est reliée au drain.

Câblage MOSFET Arduino : résistance de grille, pull-down et masse commune

Le montage de base comporte cinq éléments : le MOSFET, une résistance de grille, une résistance de pull-down, une diode de roue libre pour les charges inductives et une alimentation externe. Le tableau ci-dessous donne le câblage pour trois cartes ; la charge d'exemple est un ruban LED ou un moteur 12 V. Tous les codes de l'article utilisent ces broches.

LiaisonArduino UnoESP32Raspberry Pi Pico
Broche de commande → résistance de grille → grilleD9 (PWM), 220 ΩGPIO 25, 100 ΩGP15, 100 Ω
Pull-down entre grille et GND10 kΩ10 kΩ10 kΩ
SourceGNDGNDGND
DrainMoins (−) de la chargeMoins (−) de la chargeMoins (−) de la charge
Plus (+) de la chargePlus de l'adaptateur 12 VPlus de l'adaptateur 12 VPlus de l'adaptateur 12 V
Moins (−) de l'adaptateur 12 VGND de l'Arduino (masse commune)GND de l'ESP32 (masse commune)GND de la Pico (masse commune)
MOSFET conseilléIRLZ44NIRLZ44N (jusqu'à 2–3 A) ou AO3400AIRLZ44N (jusqu'à 2–3 A) ou AO3400A

La résistance de grille (100 à 220 Ω) limite le courant instantané tiré de la broche pendant la charge de la capacité de grille. La capacité d'entrée de l'IRLZ44N vaut environ 1700 pF ; sans résistance, la broche voit presque un court-circuit à chaque commutation et la ligne de grille se met à osciller (ringing). Avec 220 Ω, le courant de crête ne dépasse pas 5 / 220 ≈ 23 mA, et la grille se charge quand même en quelques microsecondes. La résistance de pull-down (10 kΩ) empêche la grille de rester flottante tant que la broche est en entrée : au démarrage, lors d'un reset ou pendant le téléversement. Une grille flottante peut se charger à moitié à cause des parasites ; le MOSFET reste alors à moitié passant, le moteur tourne tout seul et le MOSFET chauffe très vite. Place la pull-down côté MOSFET, directement entre grille et source : ainsi le MOSFET reste bloqué même si le fil de commande se débranche. Les deux résistances forment un petit pont diviseur, mais l'effet est négligeable : la grille reçoit 5 × 10000 / 10220 ≈ 4,89 V.

N'oublie pas la masse commune : si le moins de l'adaptateur 12 V n'est pas relié au GND de l'Arduino, la tension de grille n'a pas de référence définie par rapport à la source et le MOSFET ne devient pas passant. N'alimente jamais la charge par la broche 5V de l'Arduino ; le moteur ou le ruban LED doit avoir sa propre alimentation (plus de détails dans GND et masse commune). Si tu inverses drain et source, la diode interne du MOSFET conduit et la charge reste alimentée en permanence, quel que soit l'état de la broche.

Diode de roue libre : pourquoi elle est indispensable avec moteur, pompe et solénoïde

Diode de roue libre de type 1N4007
Diode de redressement de type 1N4007 : elle se branche en inverse aux bornes de la charge inductive ; la bague sur le corps repère la cathode, qui va du côté positif (+) de l'alimentation.

Les charges inductives comme les moteurs, pompes, solénoïdes, bobines de relais et ventilateurs s'opposent à une coupure brutale du courant. Dès que le MOSFET se bloque, l'énergie magnétique de la bobine se libère sous forme d'une surtension sur le drain, bien au-dessus de la tension d'alimentation (V = L × di/dt). Cette pointe peut dépasser la VDS maximale du MOSFET et le détruire, ou créer des parasites qui font redémarrer l'Arduino. La solution : une diode branchée en inverse aux bornes de la charge, cathode (côté bague) vers le plus de l'alimentation, anode vers le drain. En fonctionnement normal, la diode est polarisée en inverse et ne conduit pas ; quand le MOSFET se bloque, le courant de la bobine circule dans la diode et s'éteint en douceur. La diode interne du MOSFET ne remplit pas ce rôle, car elle est placée entre source et drain, pas aux bornes de la charge. Pour aller plus loin, lis Qu'est-ce qu'une diode ?.

Charge et mode de commandeDiode conseilléePourquoi ?
Solénoïde, bobine de relais (tout ou rien)1N4007 (1 A, 1000 V)Diode lente, mais suffisante pour des commutations rares
Petite pompe ou petit moteur en PWM (jusqu'à 1 A)1N5819 Schottky (1 A, 40 V)Rapide ; elle conduit à chaque période du PWM
Moteur plus gros en PWM (1 à 3 A)1N5822 ou SS34 Schottky (3 A, 40 V)Pendant la phase basse du PWM, la diode porte tout le courant du moteur
Ruban LED 12 V, résistance chauffanteInutilePas de bobine, donc pas de surtension

Pas à pas : faire varier un ruban LED 12 V avec Arduino

  1. Rassemble le matériel : Arduino Uno, IRLZ44N, résistances de 220 Ω et 10 kΩ, un potentiomètre de 10 kΩ, un ruban LED 12 V et un adaptateur 12 V capable de fournir le courant du ruban.
  2. Calcule le courant du ruban : un ruban 5050 à 60 LED/m consomme environ 14,4 W par mètre, soit 1,2 A sous 12 V. Deux mètres demandent 2,4 A ; prends un adaptateur avec 20 % de marge (au moins 3 A).
  3. Place le MOSFET : relie la source de l'IRLZ44N au rail GND, sa grille à D9 via 220 Ω, et mets 10 kΩ entre grille et GND.
  4. Branche la charge : le fil +12V du ruban va au plus de l'adaptateur, le fil négatif au drain du MOSFET. Les contacts d'une breadboard supportent environ 1 A ; au-delà, utilise des borniers à vis ou soude les fils de la charge.
  5. Branche le potentiomètre : broches extérieures sur 5V et GND, curseur sur A0.
  6. Relie les masses et teste : connecte le moins de l'adaptateur au GND de l'Arduino, téléverse le code, puis branche l'adaptateur.
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() génère sur la broche 9 un signal PWM qui s'allume et s'éteint environ 490 fois par seconde ; 0 correspond à complètement éteint et 255 à complètement allumé. Les broches PWM de l'Uno sont 3, 5, 6, 9, 10 et 11 ; les broches 5 et 6 tournent à environ 980 Hz. Comme l'œil ne perçoit pas la luminosité de façon linéaire, mettre au carré la valeur du potentiomètre (une correction gamma simple) donne un réglage bien plus doux dans les faibles niveaux. Tu trouveras le fonctionnement du PWM en détail dans Qu'est-ce que le PWM ?. Calculons aussi l'échauffement : à 2,4 A, l'IRLZ44N dissipe P = I² × RDS(on) = 2,4² × 0,025 ≈ 0,14 W, il est donc à peine tiède au toucher. Pendant ce temps, le ruban LED consomme 28,8 W : la perte dans le MOSFET représente moins d'un pour cent du total.

Régler la vitesse d'un moteur ou d'une pompe en PWM

Mini pompe à eau submersible 6 V
Mini pompe submersible 6 V : elle contient un petit moteur à courant continu, il faut donc toujours une diode de roue libre à ses bornes quand on la pilote avec un MOSFET.

Un moteur ou une pompe se pilote avec le même montage que le ruban LED ; la seule différence est la diode de roue libre à ajouter aux bornes de la charge. Les moteurs ont aussi un courant de démarrage : un moteur à l'arrêt peut appeler 3 à 8 fois son courant nominal au premier instant. Dimensionne donc le MOSFET et l'alimentation pour le courant de blocage du moteur, et applique un démarrage progressif au lieu de passer d'un coup de 0 à 255. Les mini pompes submersibles consomment environ 0,1 à 0,3 A sous 3 à 6 V, les pompes à membrane 12 V généralement 0,5 à 1 A ; l'IRLZ44N gère les deux avec beaucoup de marge. Alimente toutefois une mini pompe avec une source à sa propre tension (5 à 6 V), pas avec l'adaptateur 12 V ; le montage du MOSFET reste le même. Pour choisir une pompe et monter un arrosage, lis Mini pompe à eau.

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}

Le code se rapproche d'un pas de la vitesse cible lue sur le potentiomètre toutes les 8 ms : le moteur passe ainsi de 0 à pleine vitesse en 2 secondes environ et le courant de démarrage ne fait pas s'effondrer l'alimentation. MIN_DUTY est la plus petite valeur PWM à laquelle le moteur commence à tourner ; trouve-la en testant ton propre moteur. Le PWM à 490 Hz produit un sifflement audible dans le moteur. La ligne TCCR1B en commentaire porte la fréquence de D9 et D10 à environ 3,9 kHz ; la bibliothèque Servo utilise aussi le Timer1, donc n'utilise pas les deux ensemble. Monter encore plus haut est tentant, mais comme une broche Arduino met quelques microsecondes à charger la grille d'un gros MOSFET à chaque commutation, les pertes de commutation augmentent avec la fréquence : vers 20 kHz, même un moteur de 2 A peut provoquer plus de 1 W de pertes dans le MOSFET. À ces fréquences, on utilise un driver de grille comme le TC4427.

Serrure à solénoïde et charges à usage bref

Les serrures de porte à solénoïde 12 V consomment 0,5 à 1 A, et la plupart ne sont pas prévues pour rester alimentées en continu : si on les laisse activées longtemps, la bobine chauffe. Le code doit donc n'ouvrir la serrure que quelques secondes. Comme le solénoïde est commuté en tout ou rien et non en PWM, une 1N4007 suffit comme diode de roue libre. Dans l'exemple ci-dessous, un appui sur le bouton de D2 ouvre la serrure pendant 3 secondes, puis elle se referme même si le bouton reste enfoncé. Pour la déclencher avec un lecteur de badges RFID ou un clavier matriciel, il suffit de changer la condition du if ; les types de serrures et leur comportement en cas de coupure de courant sont expliqués dans Serrure à solénoïde.

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}

Pourquoi le module IRF520 ne suffit pas en 5 V

Le module MOSFET IRF520, très courant dans les kits de démarrage, est une petite carte à borniers vendue avec des valeurs comme « 24 V, 5 A ». À côté du MOSFET, on trouve quelques résistances et une LED témoin ; la plupart des versions n'ont pas de diode de roue libre. Le problème vient du MOSFET lui-même : l'IRF520 est un MOSFET standard avec un seuil de 2 à 4 V, et son RDS(on) de 0,27 Ω n'est garanti que pour VGS = 10 V. D'après les courbes typiques de la fiche technique, avec 5 V sur la grille, l'IRF520 commence à limiter le courant vers 2 A ; sur un exemplaire à seuil élevé, cette limite descend sous 1 A. Le MOSFET ne se comporte alors plus comme un interrupteur, mais comme une résistance variable.

Prenons un exemple : tu pilotes avec le module IRF520 un moteur 12 V qui consomme 2 A. Si 1,5 V chute aux bornes du MOSFET, il dissipe P = 1,5 × 2 = 3 W. Avec une résistance thermique de 62 °C/W pour un boîtier TO-220 sans dissipateur, cela représente environ 186 °C au-dessus de l'ambiante ; le MOSFET surchauffe vite et lâche, ou au mieux le moteur tourne lentement. Les 5 A indiqués sur le module ne valent qu'avec 10 V sur la grille. Voici les bornes du module et leur câblage :

Borne du moduleRelier àRemarque
SIGBroche PWM de l'Arduino (ex. D9)Signal de grille ; avec une carte 3,3 V, le MOSFET ne conduit presque pas
VCC5V de l'ArduinoRelié à rien sur la plupart des versions ; aucun courant de charge
GND (connecteur à broches)GND de l'ArduinoIndispensable pour la masse commune
VIN et GND (bornier)+ et − de l'alimentation externeAlimentation de la charge ; le module est vendu pour 24 V max.
V+ et V− (bornier)+ et − de la chargePour un moteur ou une pompe, ajoute une diode entre V+ et V− (cathode sur V+)
  • Remplace le MOSFET : dessoude l'IRF520 du module et soude à sa place un IRLZ44N au même brochage (G-D-S) ; la carte fonctionne pareil, mais devient pleinement passante en 5 V.
  • Prends un module logic level : les modules équipés du MOSFET AOD4184A (D4184) offrent un RDS(on) de 9,5 mΩ maximum à 4,5 V et fonctionnent sans souci avec un Arduino 5 V.
  • Commande la grille avec une tension plus élevée : un driver de grille comme le TC4427 alimenté en 12 V transforme le signal 5 V ou 3,3 V de l'Arduino en 12 V sur la grille, et l'IRF520 atteint ses vraies performances. Respecte la limite de tension de grille : ±20 V pour l'IRF520, ±16 V pour l'IRLZ44N.
  • Garde-le pour les petites charges : en dessous de 1 A (un ruban LED court, une mini pompe), le module IRF520 fonctionne en 5 V avec un échauffement acceptable ; si le MOSFET devient trop chaud pour être touché, réduis la charge.

MOSFET avec ESP32 et Raspberry Pi Pico (3,3 V)

Comme les broches de l'ESP32 et de la Pico ne fournissent que 3,3 V, le choix du MOSFET compte encore plus. La fiche technique de l'IRLZ44N ne spécifie le RDS(on) que jusqu'à 4 V ; d'après les courbes typiques, il laisse encore passer plusieurs ampères vers 3 V, mais ce n'est pas garanti pour un exemplaire à seuil élevé. Règle pratique : sur une carte 3,3 V, utilise l'IRLZ44N ou l'IRLB8721 jusqu'à 2–3 A, mesure la tension drain-source au multimètre pendant que la charge fonctionne et calcule la puissance dissipée avec P = VDS × I ; reste sous 1 W pour un TO-220 sans dissipateur. Pour des courants plus forts, utilise un driver qui porte la grille à 5–12 V, et pour les petites charges un AO3400A, dont le RDS(on) est garanti à 2,5 V. Sur l'ESP32, choisis pour le MOSFET des broches comme GPIO 25, 26, 27, 32 ou 33 : les GPIO 0, 2, 5, 12 et 15 sont des broches de démarrage (strapping), et les GPIO 1, 3, 5, 14 et 15 peuvent passer brièvement à HIGH ou sortir du PWM au boot. Sur ces broches, la charge peut s'allumer toute seule au démarrage, ou la pull-down peut perturber le boot.

Le code ESP32 ci-dessous démarre une pompe via le MOSFET avec un démarrage progressif quand le capteur d'humidité du sol signale une terre sèche, arrose pendant 5 secondes puis l'arrête en douceur. Pour le PWM, il utilise les fonctions ledcAttach() et ledcWrite() du core ESP32 Arduino 3.x ; les anciennes versions 2.x utilisaient à la place ledcSetup() et ledcAttachPin(), et leur ledcWrite() prenait un numéro de canal au lieu d'une broche. Les lignes #if du code choisissent les bons appels selon le core installé, si bien qu'il compile avec les deux versions. Comme la grille est commandée en 3,3 V à travers 100 Ω, la fréquence reste à 1 kHz pour que les pertes de commutation soient négligeables. Mesure les valeurs du capteur en terre sèche et humide, comme dans Capteur d'humidité du sol, et règle le seuil DRY_LEVEL en conséquence.

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}

Sur la Raspberry Pi Pico, la classe machine.PWM suffit pour générer du PWM en MicroPython ; duty_u16() accepte une valeur de 0 à 65535. Le code ci-dessous donne à un ruban LED 12 V branché sur le MOSFET de GP15 un doux effet de « respiration ». Comme dans l'exemple Arduino, la valeur est mise au carré pour une correction gamma simple, afin que le passage du sombre au clair paraisse naturel. Les broches de la Pico fournissent elles aussi 3,3 V : les règles de choix du MOSFET données pour l'ESP32 s'appliquent ici aussi.

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)

Échauffement, calcul de puissance et choix du dissipateur

L'échauffement d'un MOSFET pleinement passant se calcule avec une seule formule : P = I² × RDS(on). Garde deux points en tête. D'abord, le RDS(on) augmente avec la température ; pour l'IRLZ44N, il vaut à 100 °C environ 1,5 fois sa valeur à 25 °C, il est donc plus réaliste de calculer avec 38 mΩ plutôt que 25 mΩ. Ensuite, le boîtier ne peut évacuer qu'une quantité limitée de chaleur dans l'air : la résistance thermique d'un TO-220 sans dissipateur (RθJA) est de 62 °C/W, chaque watt fait donc monter la puce de 62 °C au-dessus de l'ambiante. Le tableau montre comment chauffe l'IRLZ44N avec 5 V sur la grille et sans dissipateur :

Courant de chargePuissance dissipée (avec 38 mΩ)Échauffement (sans dissipateur)Conseil
1 A0,04 W≈ 2 °CPas de dissipateur
3 A0,34 W≈ 21 °CPas de dissipateur, tiède
5 A0,95 W≈ 59 °CLimite ; ajoute un petit dissipateur
8 A2,4 W≈ 150 °CDissipateur obligatoire
10 A3,8 W≈ 236 °CDissipateur à ailettes et pâte thermique obligatoires

Le dissipateur se dimensionne avec la même logique : Tj = Tambiante + P × (RθJC + RθCS + RθSA). Si 3,8 W sont dissipés à 10 A et que tu veux garder la puce à 100 °C dans une pièce à 30 °C, la résistance thermique totale ne doit pas dépasser (100 − 30) / 3,8 ≈ 18 °C/W. La résistance jonction-boîtier de l'IRLZ44N vaut 1,4 °C/W et un contact avec pâte thermique environ 0,5 °C/W : le dissipateur lui-même doit donc faire 16 °C/W au maximum, ce qui correspond à un petit dissipateur TO-220 à ailettes. La languette métallique du MOSFET est reliée au drain ; si tu montes plusieurs MOSFET sur le même dissipateur, intercale un isolant en mica ou en silicone et une rondelle isolante en plastique pour la vis. La deuxième source de chaleur en PWM, ce sont les pertes de commutation ; négligeables à 490 Hz, elles augmentent avec la fréquence.

Le moyen le plus simple de savoir si le MOSFET est pleinement passant est de mesurer la tension entre drain et source pendant que la charge fonctionne. Un IRLZ44N doit afficher environ 0,1 V à 3 A ; si tu lis 1 V ou plus, le MOSFET n'est qu'à moitié passant et la tension de grille est insuffisante (MOSFET standard, carte 3,3 V ou liaison de grille coupée). Tu peux calculer la puissance dissipée avec P = VDS × I et vérifier les valeurs avec le Calculateur de la loi d'Ohm.

MOSFET, transistor ou relais : comparatif

CritèreMOSFET logic level (IRLZ44N)Transistor bipolaire (2N2222A / TIP120)Relais (module 5 V)
CommandeEn tension ; pas de courant de grille permanentEn courant ; le courant de base circule en permanence (2–10 mA)Par le courant de bobine (≈70 mA), fourni par le transistor du module
Pertes à l'état passantI² × RDS(on) : ≈ 0,2–0,3 W à 3 AVCE(sat) × I : TIP120 jusqu'à 2 V à 3 A, ≈ 6 WQuasi nulles sur les contacts
Courant admissibleDes dizaines d'ampères (avec dissipateur)2N2222A 0,6 A, TIP120 5 AEn général 10 A (limite des contacts)
PWM pour vitesse et luminositéOui, dans la gamme du kHzOuiNon, tout ou rien
Alternatif / 230 VNon, continu seulementNon, continu seulementOui, avec isolation galvanique
Bruit et durée de vieSilencieux, sans usureSilencieux, sans usureClique ; contacts d'environ 100 000 manœuvres
Idéal pourRuban LED, moteur, pompe, solénoïde (1–10 A continu)Petites charges (jusqu'à 1 A), bobines de relais, buzzersLampes, prises, appareils sur secteur

En résumé : pour commander une charge continue rapidement, en silence et en PWM, prends un MOSFET ; pour allumer une lampe ou une prise sur le secteur 230 V, prends un module relais. Pour de petites charges de quelques centaines de milliampères, un transistor bipolaire bon marché fait aussi l'affaire ; le calcul de la résistance de base est expliqué dans Qu'est-ce qu'un transistor ?. Si le même moteur doit tourner dans les deux sens, un seul MOSFET ne suffit pas : il faut un pont en H à quatre interrupteurs, donc un driver moteur L298N ou un module pont en H à MOSFET.

Idées de projets avec un MOSFET

  • Éclairage automatique de placard ou d'escalier : quand un capteur PIR détecte un mouvement, allume en douceur un ruban LED 12 V en PWM et éteins-le après un moment.
  • Lampe crépusculaire : avec une LDR, augmente progressivement la luminosité du ruban à mesure que la pièce s'assombrit.
  • Ventilateur intelligent : accélère un ventilateur de PC 12 V à mesure que la température mesurée par un DHT11 augmente.
  • Arrosage automatique des plantes : arrose tes pots tout seul avec un capteur d'humidité du sol et une pompe pilotée par MOSFET ; prévois un MOSFET par pompe.
  • Serrure à badge : ouvre une serrure à solénoïde 12 V pendant 3 secondes quand un RFID RC522 lit le bon badge.
  • Serre connectée : construis une serre intelligente qui gère ventilateur, pompe et chauffage avec des MOSFET séparés.

Erreurs fréquentes et solutions

SymptômeCause probableSolution
La charge ne fonctionne pas du toutPas de masse commune ou ordre G-D-S erronéRelie le moins de l'adaptateur au GND de l'Arduino et vérifie le brochage
La charge reste alimentée et ne s'arrête pasDrain et source inversés (diode interne passante) ou MOSFET claquéCorrige le câblage ; si drain-source mesure un court-circuit dans les deux sens, remplace le MOSFET
Le MOSFET chauffe beaucoup et la charge est faibleMOSFET standard (IRF520, IRFZ44N) à moitié passant en 5 V ou 3,3 VUtilise un MOSFET logic level comme l'IRLZ44N ou un driver de grille
Le moteur tourne tout seul au démarrage ou au téléversementGrille flottante, pas de pull-downMets 10 kΩ entre grille et GND
L'Arduino redémarre quand le moteur s'arrêtePas de diode de roue libre, ou moteur et Arduino partagent une alimentation trop faibleAjoute une diode Schottky en inverse aux bornes du moteur et alimente le moteur séparément
Le moteur siffle fort en PWMLes 490 Hz du PWM sont dans la plage audibleMonte à 3,9 kHz ; au-delà de 20 kHz, utilise un driver de grille
La charge est faible avec le MOSFET canal N côté plusLa source monte avec la charge et VGS diminueGarde le canal N côté GND ; pour commuter le plus, utilise un MOSFET canal P commandé par un transistor NPN
Quand tu montes le circuit pour la première fois, commence avec une petite charge : essaie une LED avec une résistance de 1 kΩ avant le ruban 12 V, et un petit moteur avant la pompe. Si l'Arduino redémarre tout seul, la cause est le plus souvent une chute de tension et des parasites ; pour un diagnostic pas à pas, lis L'Arduino redémarre tout seul. Pour tirer 5 V pour l'Arduino de l'adaptateur 12 V, tu peux utiliser un convertisseur abaisseur LM2596.

Le MOSFET est la façon la plus propre de relier un Arduino à des charges puissantes du monde réel : avec un composant logic level bien choisi, une résistance de grille, une pull-down et une diode pour les charges inductives, tu commandes n'importe quelle charge continue, du ruban LED à la pompe, en silence et avec un excellent rendement. Dans l'application BlueGrays, tu trouveras des projets comme la variation de LED en PWM, le réglage de luminosité au potentiomètre, une station d'arrosage intelligente ou un éclairage intelligent, avec schémas et code pas à pas, pour transformer tout de suite le montage MOSFET appris ici en vrai projet.

Questions fréquentes

Quel MOSFET utiliser avec un Arduino ?

Pour un Arduino 5 V comme l'Uno, la Nano ou la Mega, choisis un MOSFET canal N logic level dont le RDS(on) est garanti à 4,5 V ou 5 V. Le plus répandu est l'IRLZ44N : il supporte 55 V et n'a que 25 mΩ avec 5 V sur la grille. L'IRLB8721 est aussi un bon choix, alors que les MOSFET standard comme l'IRFZ44N, l'IRF520 et l'IRF540N ont besoin de 10 V pour être pleinement passants.

Le module IRF520 fonctionne-t-il avec Arduino ?

Oui, mais avec des limites. L'IRF520 est un MOSFET standard qui, avec 5 V sur la grille, commence en général à limiter le courant vers 2 A ; il chauffe donc vite au-delà de 1 A. Il convient aux petites charges ; pour plus, remplace le MOSFET du module par un IRLZ44N ou utilise un module logic level.

Quelle résistance de grille pour un MOSFET ?

Avec un Arduino, une résistance de grille de 100 à 220 Ω convient ; 220 Ω limitent le courant instantané de la broche à environ 23 mA sous 5 V. Ajoute aussi une pull-down de 10 kΩ entre grille et GND pour que le MOSFET ne devienne pas passant tout seul au démarrage ou pendant le téléversement.

Peut-on commuter du 230 V avec un MOSFET ?

Dans les projets Arduino, réserve le MOSFET aux charges en courant continu. Le 230 V alternatif du secteur ne peut pas être commuté en sécurité avec un seul MOSFET canal N, et un tel montage n'a aucune isolation, ce qui le rend dangereux. Pour une lampe ou une prise secteur, utilise un module relais, un relais statique (SSR) ou un montage à triac commandé par optocoupleur.

Comment piloter un MOSFET avec un ESP32 ?

Comme les broches de l'ESP32 fournissent 3,3 V, choisis un MOSFET qui conduit bien avec une faible tension de grille. L'IRLZ44N fonctionne en général bien en 3,3 V jusqu'à 2–3 A ; pour les petites charges, l'AO3400A garanti à 2,5 V est plus sûr, et pour les forts courants, un driver qui porte la grille à 12 V. Utilise ledcAttach() et ledcWrite() pour le PWM et des broches calmes au démarrage, comme GPIO 25, 26, 27, 32 ou 33.

Pourquoi mon MOSFET chauffe-t-il ?

L'échauffement d'un MOSFET pleinement passant vaut P = I² × RDS(on) ; un IRLZ44N ne dissipe que 0,2 à 0,3 W à 3 A. S'il chauffe beaucoup, la tension de grille est généralement insuffisante et il n'est qu'à moitié passant ; les causes les plus fréquentes sont un MOSFET standard, une commande par carte 3,3 V et une fréquence PWM trop élevée. Si un TO-220 sans dissipateur doit évacuer plus de 1 W, ajoute un dissipateur.

Voir tous les projets
Veilleuse avec LDR
#12Débutant

Veilleuse avec LDR

Une petite veilleuse qui s'allume toute seule quand il fait nuit et s'éteint au matin. Un capteur de lumière mesure la clarté de la pièce, et l'Arduino allume la LED quand il fait assez sombre puis l'

4.8(102)
205
ESP32 LED Fade avec PWM
#110Débutant

ESP32 LED Fade avec PWM

Modifiez la luminosité de la LED en douceur de 0 à max, de max à 0. Nous contrôlons le PWM avec analogWrite() comme dans Arduino - la même syntaxe avec ESP32 Arduino Core 3.0+ fonctionne sans problème. La définition du pin + pinMode + analogWrite est suffisante.

4.8(36)
54
Luminosité d'une LED avec un Potentiomètre sur ESP32 (Analogique → PWM)
#115Intermédiaire
Premium

Luminosité d'une LED avec un Potentiomètre sur ESP32 (Analogique → PWM)

Dans ce projet, nous contrôlons la luminosité d'une LED de manière analogique à l'aide d'un potentiomètre. La broche ADC de l'ESP32 lit la tension entre 0 et 3,3 V provenant du potentiomètre, puis cette valeur est convertie en signal PWM (modulation de largeur d'impulsion) envoyé à la LED. Ainsi, la LED s'allume et s'éteint progressivement. Avec Arduino Core 3.0+, analogWrite() est utilisable directement; sur ESP32-S2/S3, la résolution de l'ADC est fixée à 12 bits.

4.5(19)
32
Raspberry Pi Pico PWM LED Fade (Effet Respiration)
#160Débutant

Raspberry Pi Pico PWM LED Fade (Effet Respiration)

La LED ne clignote plus — elle respire ! Grâce au PWM (modulation de largeur d'impulsion) du Raspberry Pi Pico, la luminosité monte puis descend lentement. Apprends la classe machine.PWM, duty_u16() (luminosité 16 bits 0–65535), la fréquence PWM, les boucles range() et la sortie quasi analogique. Base du mélange de couleurs RGB, du contrôle moteur, des servos et du buzzer.

0.0(0)
4
Station d'irrigation intelligente
#83Avancé
Premium

Station d'irrigation intelligente

Un jardinier qui arrose tes plantes tout seul pour qu'elles ne sèchent pas pendant tes vacances. Un capteur d'humidité mesure à quel point la terre est mouillée ; quand elle devient sèche, l'Arduino f

5.0(42)
57
Éclairage Intelligent ESP32 (PIR + LDR + Relais + OLED)
#141Avancé
Premium

Éclairage Intelligent ESP32 (PIR + LDR + Relais + OLED)

Transformez votre couloir, votre salle de bain ou votre garde-manger en éclairage intelligent avec l'ESP32 ! En utilisant un capteur de mouvement PIR, un capteur de lumière LDR et un module relais, nous construisons le scénario classique "la lumière s'allume lorsqu'un mouvement est détecté dans l'obscurité" — si l'environnement est déjà lumineux, le mouvement N'ACTIVE PAS la lumière, économisant ainsi de l'énergie pendant la journée. La lumière reste allumée pendant 30 secondes ; si le mouvement

4.3(6)
11
Éclairage intelligent des escaliers et des couloirs
#82Intermédiaire
Premium

Éclairage intelligent des escaliers et des couloirs

Pose le pied dans l'escalier ou le couloir et les lumières s'allument marche après marche dans ton sens de passage. Un capteur de distance se trouve à chaque extrémité ; quel que soit celui devant leq

5.0(35)
51