Documentation

10K NTC Thermistor Temperature Sensor (MF52-103) | ShillehTek Product Manual
Documentation / 10K NTC Thermistor Temperature Sensor (MF52-103) | ShillehTek Product Manual

10K NTC Thermistor Temperature Sensor (MF52-103) | ShillehTek Product Manual

AnalogArduinoESP32manualshillehtekTemperature Sensor

Overview

The MF52-103 is a 10K NTC thermistor — a temperature sensor distilled to its simplest possible form: a blue epoxy bead marked "103" with two legs. NTC stands for Negative Temperature Coefficient: its resistance is 10k ohm at 25°C and falls as things warm up (roughly 3.3k at 50°C, over 30k near 0°C). Put it in a voltage divider with a plain 10k resistor, read the midpoint with an ADC, run the Beta equation, and you have temperature in °C — no protocol, no library, no address.

What it gives up in convenience versus digital sensors, it returns in flexibility and speed: the tiny bead reacts to temperature changes in seconds, it works at any voltage your ADC uses, costs almost nothing, and the leads can be extended, sleeved, or epoxied right onto the thing you're measuring — a motor housing, a heatsink, a water line, a 3D-printer bed (that's exactly what printer bed sensors are).

The "103" marking is standard EIA code: 10 followed by 3 zeros — 10,000 ohms at 25°C. With the common Beta value of 3950 and the code below, expect accuracy around ±1-2°C across the 0-70°C range — comparable to a DHT11 but with far faster response and a fraction of the failure modes.

At a Glance

Type
NTC thermistor (MF52)
Resistance @ 25°C
10k ohm ("103")
Beta Value
~3950 K
Range
-40°C to +125°C
Interface
Analog voltage divider
Polarity
None — legs interchangeable

Specifications

Parameter Value
Type MF52 epoxy-bead NTC thermistor
Nominal Resistance 10k ohm at 25°C (code 103)
Beta (B25/50) ~3950 K (±1%)
Resistance Tolerance ±1% typical
Temperature Range -40°C to +125°C
Accuracy (with Beta model) ~±1-2°C over 0-70°C
Response Time ~5-10 s in still air, <2 s in liquid (sleeved)
Dissipation Constant ~1-2 mW/°C (keep sense current tiny)
Example Values ~32.6k @ 0°C · 10k @ 25°C · ~3.6k @ 50°C · ~1.5k @ 75°C
Wiring Series with fixed 10k as a voltage divider
Polarity Non-polarized, two interchangeable terminals

Pinout Diagram

Two terminals, no polarity — either leg can face either way. The standard hookup is a divider: one leg to 3.3V (or 5V on Arduino), the other leg to the ADC pin, and a fixed 10k resistor from the ADC pin to GND. Warmer bead → lower thermistor resistance → higher voltage at the ADC node.

MF52-103 10K NTC thermistor diagram showing the 103 marked bead with Terminal 1 and Terminal 2 legs

Wiring Guide

All four platforms use the same divider — thermistor on top (to the supply), fixed 10k on the bottom (to GND), ADC at the junction. The code assumes exactly this arrangement.

Arduino Wiring

Connection Details
Thermistor leg 1 → 5V Top of divider
Thermistor leg 2 → A0 Divider midpoint
10k resistor: A0 → GND Bottom of divider (1% part best)
Tip: The fixed resistor's accuracy sets your accuracy — use a 1% metal-film 10k. Measure its true value with a multimeter and put that number in the code for the best results.

ESP32 Wiring

Connection Details
Thermistor leg 1 → 3V3 Top of divider
Thermistor leg 2 → GPIO 34 ADC1, input-only pin
10k resistor: GPIO 34 → GND Bottom of divider
Note: The ESP32 ADC is nonlinear at the extremes; the code uses read_uv() (calibrated microvolts) which corrects most of it. Averaging several samples — already in the code — does the rest.

Raspberry Pi Wiring

No analog input on the Pi, so the divider feeds an ADS1115 I2C ADC.

Connection Details
Thermistor leg 1 → Pin 1 (3.3V) Top of divider
Thermistor leg 2 → ADS1115 A0 Divider midpoint
10k resistor: A0 → GND Bottom of divider
ADS1115 VDD/GND/SDA/SCL 3.3V / GND / Pin 3 / Pin 5

Raspberry Pi Pico Wiring

Connection Details
Thermistor leg 1 → 3V3(OUT) (pin 36) Top of divider
Thermistor leg 2 → GP26 (pin 31) ADC0 input
10k resistor: GP26 → GND Bottom of divider
Tip: For the cleanest Pico readings, power the divider from ADC_VREF (pin 35) instead of 3V3 and keep the wiring away from the onboard switcher.

Code Examples

All four examples read the divider, convert to thermistor resistance, and apply the Beta equation (B=3950) to print °C and °F. Adjust SERIES_R to your measured fixed resistor for best accuracy.

Arduino

ntc103_arduino.ino
// MF52-103 10K NTC Thermistor - Arduino Example
// Divider: 5V - thermistor - A0 - 10k - GND

#include <math.h>

const int   PIN      = A0;
const float SERIES_R = 10000.0;   // fixed resistor (measure yours!)
const float NOMINAL  = 10000.0;   // 10k at 25 C
const float B_COEFF  = 3950.0;
const float T_NOMINAL = 25.0;

float readTempC() {
  long total = 0;
  for (int i = 0; i < 20; i++) { total += analogRead(PIN); delay(5); }
  float adc = total / 20.0;                     // 0..1023

  // Thermistor is on TOP of the divider:
  // Vout = Vcc * R_fixed / (R_ntc + R_fixed)  =>  R_ntc = R_fixed*(1023/adc - 1)
  float rNtc = SERIES_R * (1023.0 / adc - 1.0);

  float steinhart = logf(rNtc / NOMINAL) / B_COEFF     // Beta equation
                  + 1.0 / (T_NOMINAL + 273.15);
  return 1.0 / steinhart - 273.15;
}

void setup() {
  Serial.begin(9600);
  Serial.println("MF52-103 thermistor ready");
}

void loop() {
  float c = readTempC();
  Serial.print("Temperature: ");
  Serial.print(c, 1);
  Serial.print(" C  /  ");
  Serial.print(c * 9.0 / 5.0 + 32.0, 1);
  Serial.println(" F");
  delay(1000);
}

ESP32 (MicroPython)

ntc103_esp32.py
# MF52-103 10K NTC Thermistor - ESP32 MicroPython Example
# Divider: 3V3 - thermistor - GPIO34 - 10k - GND

from machine import ADC, Pin
import math, time

adc = ADC(Pin(34))
adc.atten(ADC.ATTN_11DB)

VCC      = 3.3
SERIES_R = 10000.0
NOMINAL  = 10000.0
B_COEFF  = 3950.0

def read_temp_c():
    total = 0
    for _ in range(20):
        total += adc.read_uv()
        time.sleep_ms(5)
    volts = total / 20 / 1_000_000

    r_ntc = SERIES_R * (VCC / volts - 1.0)     # thermistor on top
    steinhart = (math.log(r_ntc / NOMINAL) / B_COEFF
                 + 1.0 / (25.0 + 273.15))
    return 1.0 / steinhart - 273.15

print("MF52-103 thermistor ready")
while True:
    c = read_temp_c()
    print("Temperature: {:.1f} C / {:.1f} F".format(c, c * 9 / 5 + 32))
    time.sleep(1)

Raspberry Pi (Python + ADS1115)

ntc103_rpi.py
#!/usr/bin/env python3
# MF52-103 10K NTC Thermistor - Raspberry Pi + ADS1115 Example
# Divider: 3.3V - thermistor - ADS1115 A0 - 10k - GND
# Install: pip3 install adafruit-circuitpython-ads1x15

import time, math
import board, busio
import adafruit_ads1x15.ads1115 as ADS
from adafruit_ads1x15.analog_in import AnalogIn

VCC, SERIES_R, NOMINAL, B_COEFF = 3.3, 10000.0, 10000.0, 3950.0

i2c = busio.I2C(board.SCL, board.SDA)
ads = ADS.ADS1115(i2c)
ads.gain = 1
chan = AnalogIn(ads, ADS.P0)

def read_temp_c():
    volts = sum(chan.voltage for _ in range(10)) / 10
    r_ntc = SERIES_R * (VCC / volts - 1.0)
    steinhart = (math.log(r_ntc / NOMINAL) / B_COEFF
                 + 1.0 / (25.0 + 273.15))
    return 1.0 / steinhart - 273.15

print("MF52-103 thermistor ready")
try:
    while True:
        c = read_temp_c()
        print("Temperature: {:.1f} C / {:.1f} F".format(c, c * 9 / 5 + 32))
        time.sleep(1)
except KeyboardInterrupt:
    print("Stopped by user")

Raspberry Pi Pico (MicroPython)

ntc103_pico.py
# MF52-103 10K NTC Thermistor - Pico MicroPython Example
# Divider: 3V3 - thermistor - GP26 - 10k - GND

from machine import ADC
import math, time

adc = ADC(26)
VCC, SERIES_R, NOMINAL, B_COEFF = 3.3, 10000.0, 10000.0, 3950.0

def read_temp_c():
    total = 0
    for _ in range(20):
        total += adc.read_u16()
        time.sleep_ms(5)
    volts = total / 20 / 65535 * VCC

    r_ntc = SERIES_R * (VCC / volts - 1.0)
    steinhart = (math.log(r_ntc / NOMINAL) / B_COEFF
                 + 1.0 / (25.0 + 273.15))
    return 1.0 / steinhart - 273.15

print("MF52-103 thermistor ready")
while True:
    c = read_temp_c()
    print("Temperature: {:.1f} C / {:.1f} F".format(c, c * 9 / 5 + 32))
    time.sleep(1)

Frequently Asked Questions

My reading is way off — like 60°C on a desk. What's wrong?
Check the divider orientation first: the code assumes thermistor on top (to the supply) and 10k on the bottom (to GND). Swapped positions invert the math and produce wild numbers. Second, confirm the fixed resistor really is 10k — grab-bag resistors are often misread. Third, make sure the supply in the code (5V vs 3.3V) matches the wiring.
Which leg is positive?
Neither — a thermistor is just a temperature-dependent resistor, completely non-polarized. Either leg can go to the supply or the ADC node. If your "103" bead reads about 10k on a multimeter at room temperature, it's healthy and in you can wire it either way.
How accurate can I realistically get?
With a 1% thermistor, a measured 1% series resistor, and the Beta equation: about ±1-2°C across 0-70°C. The full Steinhart-Hart equation (three coefficients instead of Beta) tightens that toward ±0.5°C. The biggest practical win is calibration: compare against a known thermometer at one or two temperatures and trim SERIES_R or add an offset.
Why does the bead read slightly warm all the time?
Self-heating: current through the bead dissipates power in it. With a 10k/10k divider at 3.3V it's microwatts — negligible. It only becomes real if you use a much smaller series resistor or power the divider continuously at 5V while measuring still air. If you're chasing tenths of a degree, power the divider from a GPIO pin and switch it on only during readings.
Can I put it in water?
Not bare — the epoxy bead is splash-tolerant but the legs will corrode and readings drift. For liquids, use heat-shrink with adhesive lining over the bead and joints, or epoxy the bead into the tip of a short brass/stainless tube (that's exactly what waterproof probe sensors are). Response in stirred liquid is then a second or two.
How long can the wires be?
Meters, easily — wire resistance of even a few ohms is tiny against 10,000. Twist the pair to reject interference and keep it away from mains and motor wiring since the ADC node is high-impedance. For very long runs (10m+), add a 100nF capacitor from the ADC node to GND to quiet pickup.
When should I choose this over a DS18B20 or DHT22?
Choose the thermistor for speed (it reacts in seconds), surface/contact measurement, tight spaces, high-temperature points up to 125°C, cost, and dead-simple analog reading. Choose a DS18B20 when you want digital ±0.5°C with no calibration or many sensors on one wire; a DHT22 when you also need humidity. Thermistors are what commercial gear — 3D printers, battery packs, appliances — uses internally.

Related Tutorials