I am making a temperature control system using an Arduino. However, I have a problem with controlling a power resistor (which is used as a heater). I was suggested to use a MOSFET to control it. Unfortunately, my lack of knowledge about MOSFETs makes it difficult to do this.

As far as I understand a MOSFET works as a switch which turns ON when there is a voltage applied across GATE pin. When this happens, the resistance between DRAIN-SOURCE is reduced which allow current to flow. Which is nice, as I need current to heat my resistor.

Circuit for controlling Heater

If I control the PWM signal sent into the MOSFET from Arduino, does this control the current which flows through the heater?


3 Answers 3


This will work. You need to select a MOSFET that has low Rds(on) at the drive voltage from your arduino and to limit the PWM frequency to a relatively low frequency (normally no problem with thermal systems). If you don't do either one of those things, the MOSFET can get quite hot as a result of: \$P = I^2 * R\$ , heating from Rds(on) or from the dissipation during the switching.

You could even use a 1 second PWM cycle if you like.

I would suggest adding a small series resistor to the gate (perhaps 50 ohms) and a pull down resistor (100K is normally okay) so if the gate becomes floating because the micro output is disabled then you won't have the gate floating up into the zone where the transistor starts to conduct, gets hot and damages itself.

If your heating supply is (say) 12V then your current with a 3.9 ohm heater will be about 3A (36W). To avoid having a heatsink on a TO-220 or similar larger package you might want an Rds(on) of less than 35m\$\Omega\$ (about 470mW when hot). One possibility for 5V drive might be the A&O AOI514- 11.9m\$\Omega\$ and rated at 30V, which will run cool if switched infrequently and with 5V drive.

  • \$\begingroup\$ +1 for the pulldown resistor. If your Arduino is on and outputting 0V, it can sink current to take the charge out of the transistor, but if it's off, the charge doesn't have a way out and you could be stuck with a very toasty heater. \$\endgroup\$
    – Greg d'Eon
    Feb 18, 2015 at 20:23
  • \$\begingroup\$ +1 for the gate resistor. Easy to fry the output pin if the gate capacitance of the MOSFET is too large. \$\endgroup\$
    – Cuadue
    Feb 18, 2015 at 23:44

Yes, that would be a typical way to control the average current into your heater. Though be sure to select a mosfet that has a very low Rds(on) value, otherwise your mosfet becomes just another heater. Also look over the specification sheet for the mosfet to see if it is recommended to use an additional pre-driver to switch it on/off at the speed you will be using.


What you propose is the basic principle, but normally you will need a MOSFET driver between the arduino and the MOSFET. I never tried this so this is my guess: it will work also directly without the driver, but much slower, since to switch on the MOSFET you need to load the capacitance between gate and source, and the digital outputs of an arduino are very limited in maximum current.

To choose the MOSFET:

  • Check that the voltage provided by the arduino or driver output is what the MOSFET needs.
  • Check that the current that will flow is supported by the MOSFET (Continuous Drain Current).
  • Check the Drain-to-Source Breakdown Voltage of the MOSFET, it has to be higher that the voltage of the power supply connected to the resistor.
  • If you want fast response (like high PWM frequency, etc), check drivers for the MOSFET. Normally in the MOSFET's datasheet there will be circuits showing how to connect it and even drivers that can be used with it.

Cheers and good luck!


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.