When you push high current through a linear regulator, power MOSFET, or motor driver, the silicon die generates heat. If that heat isn't moved away from the junction, the part will throttle, drift, or catastrophically fail. Integrating a heat sensor with an Arduino allows you to log temperatures and trigger shutdowns, but a sensor only tells you the temperature—it doesn't fix the thermal design. To build reliable embedded systems, you must understand the thermal path from the silicon junction to the ambient air.

This guide breaks down the exact thermal resistance math ($R_{\theta}$), walks through a real-world heatsink selection based on wattage, explains how to read derating curves, and answers the most common questions about wiring and debugging heat sensors on Arduino platforms.

The Math: Junction-to-Ambient Thermal Paths (Rθ)

Thermal resistance, measured in degrees Celsius per Watt (°C/W), is the electronics equivalent of electrical resistance. Just as voltage drops across a resistor when current flows, temperature drops across a thermal interface when heat (watts) flows. According to Texas Instruments' thermal resistance guidelines, the total junction-to-ambient thermal resistance ($R_{\theta JA}$) is the sum of three distinct physical boundaries:

  • $R_{\theta JC}$ (Junction-to-Case): The internal resistance from the silicon die to the metal tab of the package. Fixed by the manufacturer.
  • $R_{\theta CS}$ (Case-to-Sink): The resistance of the interface material (thermal paste, pad, or mica insulator) between the component and the heatsink.
  • $R_{\theta SA}$ (Sink-to-Ambient): The resistance of the heatsink itself dissipating heat into the surrounding air.

The governing equation for junction temperature ($T_J$) is:

$T_J = T_A + (P_D \times R_{\theta JA})$

Let's run a concrete numeric example. You are using an LM7805 (TO-220 package) to drop a 12V nominal battery supply down to 5V to power an Arduino Nano and a few sensors. The circuit draws 1A of continuous current.

ParameterValueNotes
Power Dissipation ($P_D$)7W$(12V - 5V) \times 1A$
Max Junction Temp ($T_{J(max)}$)125°CStandard silicon limit
Ambient Temp ($T_A$)40°CInside a sealed project enclosure
$R_{\theta JC}$5.0°C/WTO-220 datasheet typical
$R_{\theta CS}$0.5°C/WUsing standard silicone thermal compound

To keep the silicon below its 125°C absolute maximum, we solve for the maximum allowable $R_{\theta JA}$:

$R_{\theta JA} = (125°C - 40°C) / 7W = 12.1°C/W$

Since $R_{\theta JA} = R_{\theta JC} + R_{\theta CS} + R_{\theta SA}$, we subtract the knowns to find the required heatsink performance:

$R_{\theta SA} = 12.1 - 5.0 - 0.5 = 6.6°C/W$

Your heatsink must have a sink-to-ambient thermal resistance of 6.6°C/W or lower. If you skip the thermal paste ($R_{\theta CS}$ jumps to ~2.5°C/W for dry metal-to-metal contact), your required $R_{\theta SA}$ drops to 4.6°C/W, demanding a much larger, more expensive heatsink.

Heatsink Selection and Derating Curves

Knowing you need a 6.6°C/W heatsink is only half the battle; you must select a physical part that meets this spec at your specific wattage. Thermal resistance is not perfectly linear. As a heatsink gets hotter, the chimney effect (natural convection) increases, slightly lowering its thermal resistance at higher wattages.

For our 7W LM7805 example, a standard stamped aluminum sink like the Aavid Thermalloy 530002B02500G (designed for TO-220 packages) is an excellent choice. According to its datasheet, this sink has an $R_{\theta SA}$ of roughly 5.5°C/W at 3W, but drops to about 4.8°C/W at 7W in natural convection. Because 4.8°C/W is well below our 6.6°C/W requirement, this $3 part will keep the junction temperature safely around 100°C.

Warning: Derating Curves and the 85°C Reliability Cliff
How hot is too hot? While 125°C is the absolute silicon destruction limit, reliability follows the Arrhenius equation. For every 10°C increase above 85°C, the expected lifespan of the component is halved. If your Arduino heat sensor logs the regulator case at 95°C, the part won't fail today, but it will suffer accelerated electromigration and early death. Always design for a case temperature below 85°C in continuous-duty applications.

When reading a derating curve on a power semiconductor datasheet, you will see Power Dissipation on the Y-axis and Case Temperature on the X-axis. The curve is flat at the maximum wattage up to 25°C, then slopes linearly down to 0W at 150°C. The slope of this line is exactly $-1 / R_{\theta JC}$. If your enclosure ambient temperature rises to 60°C, you must trace up from 60°C on the X-axis to the derating line, then across to the Y-axis to find your new, lower maximum allowable wattage. Never assume a '15W transistor' can dissipate 15W in a real-world enclosure.

Enclosure Airflow and Thermal Failure Signatures

If your Arduino heat sensor alerts you that temperatures are climbing, you have two choices: increase the heatsink mass or change the airflow. Moving from natural convection to forced air (a small 30mm 5V DC brushless fan) can cut a heatsink's $R_{\theta SA}$ by 50% to 70%. However, effective thermal management requires proper enclosure venting. Place intake vents at the bottom front of the enclosure and exhaust vents at the top rear to leverage natural thermal buoyancy alongside the fan.

If thermal management is ignored, components exhibit distinct failure signatures before they melt:

  • Parametric Drift: As silicon heats up, leakage currents increase. If your Arduino is reading erratic analog values from a sensor, check the voltage regulator. A hot LM7805 will output noisy DC, causing the Arduino's ADC reference to fluctuate.
  • Thermal Runaway (BJTs): Bipolar Junction Transistors have a negative temperature coefficient for $V_{BE}$. As they heat up, they draw more current, which creates more heat, leading to a destructive feedback loop.
  • Increased $R_{DS(on)}$ (MOSFETs): A power MOSFET that runs at 110°C will have an on-resistance nearly 2x higher than at 25°C. This increased resistance causes more $I^2R$ heating, further compounding the thermal load.
  • Solder Reflow/Creep: Sustained temperatures above 100°C near mechanical joints can cause lead-free solder to creep, leading to intermittent high-resistance connections on the PCB.

Arduino Heat Sensor FAQ

How to wire a digital heat sensor to Arduino for high-accuracy logging?

For high-accuracy thermal logging, skip the analog TMP36 and use a digital I2C sensor like the Adafruit MCP9808. It offers ±0.25°C accuracy and resolves down to 0.0625°C. Wire the VCC to the Arduino's 3.3V pin (not 5V, to avoid self-heating the sensor die), GND to GND, SDA to A4 (on Uno/Nano), and SCL to A5. Use 4.7kΩ pull-up resistors on the I2C lines if your breakout board doesn't have them. The MCP9808 features a dedicated ALERT pin that you can wire to an Arduino hardware interrupt (e.g., Pin 2) to trigger an immediate shutdown sequence if the heatsink exceeds your thermal threshold, bypassing the main loop latency.

Why is my Arduino heat sensor reading 10 degrees too high?

If your heat sensor is reading significantly higher than expected, you are likely experiencing self-heating or thermal coupling errors. Analog sensors like the LM35 draw roughly 100µA, but if you power them directly from a 5V rail that is noisy or drooping, the internal dissipation changes. More commonly, if you zip-tie a sensor to a heatsink without thermal epoxy, the air gap acts as an insulator ($R_{\theta CS}$ is massive). The heatsink core might be 60°C, but the sensor suspended in the boundary layer of still air reads 70°C from ambient radiation. Always use thermally conductive epoxy (like Arctic Alumina) to bond surface-mount thermistors or TO-92 sensors directly to the metal case you are monitoring.

What is the best heat sensor for Arduino to measure MOSFET junction temps?

You cannot easily measure the internal silicon junction of a surface-mount MOSFET with a standard Arduino heat sensor. The best approach is to measure the case temperature using a fast-response surface-mount NTC thermistor (e.g., 10kΩ B3950) epoxied directly to the MOSFET's exposed thermal pad or drain tab. You then use the $R_{\theta JC}$ value from the MOSFET datasheet in your Arduino code to calculate the junction temperature mathematically: T_J = T_Case + (Power_Watts * R_theta_JC). For non-contact measurement of high-voltage switching nodes where wiring an Arduino is unsafe, use an IR thermometer or a thermal camera, but be aware that shiny metal MOSFET tabs have very low emissivity and will reflect room temperature, giving falsely low readings unless painted with flat black high-temp paint.