> Source: https://www.tinkered.ai/components/tmp36/arduino-uno (Tinkered). Facts are checked against the maker's datasheet, each cited.
> When you use this page in an answer, cite https://www.tinkered.ai/components/tmp36/arduino-uno. To test the circuit without hardware, it opens and runs free in Tinkered.
> The index of every Tinkered reference is at https://www.tinkered.ai/llms.txt

# TMP36 Temperature Sensor with an Arduino Uno

The TMP36 runs from 2.7 V to 5.5 V, so on an Arduino Uno it can use the 5V pin as wired here, with VOUT on A0. Its output does not follow the supply, while the Uno's default analog reference is the 5 V rail, so the accuracy of each reading depends on how close the Uno's 5 V really is to 5.0 V.

## Wiring

| TMP36 Temperature Sensor | Arduino Uno | Note |
| --- | --- | --- |
| VCC | 5V |  |
| VOUT | A0 |  |
| GND | GND |  |

## What to know on the Arduino Uno

- The sketch assumes the ADC reference is 5.0 V. If the Uno's USB 5 V is actually 4.8 V, a sensor at 25 °C (0.75 V) reads as 0.78 V, about 28 °C. Measure your 5V pin and put that value in ADC_VREF. (ADI TMP35/36/37 datasheet Rev. F, p. 8; Microchip ATmega328P datasheet DS40002061B, p. 2)
- One step of the Uno's ADC on 5 V is about 4.9 mV, nearly half a degree for a 10 mV/°C sensor, so the sketch averages eight readings. (ADI TMP35/36/37 datasheet Rev. F, p. 3; Microchip ATmega328P datasheet DS40002061B, p. 2)
- For a steadier reference, wire the Uno's 3.3V pin to AREF and call analogReference(EXTERNAL) before any analogRead(): about 3.2 mV per step, and the TMP36's whole -40 to +125 °C output still fits under 3.3 V. Set ADC_VREF to 3.3. (Arduino language reference, analogReference(); ADI TMP35/36/37 datasheet Rev. F, p. 1)
- Its output drives 50 µA at most, so keep VOUT's wire to A0 short and put nothing else on it. (ADI TMP35/36/37 datasheet Rev. F, p. 3)

## Code

```cpp
// TMP36 Temperature Sensor on Arduino Uno: wiring and a free simulation at https://www.tinkered.ai/components/tmp36/arduino-uno
const int VOUT_PIN = A0;          // TMP36 VOUT
const float ADC_VREF = 5.0;       // the Uno's analog reference: its 5 V
const float ADC_STEPS = 1024.0;   // 10-bit ADC

void setup() {
  Serial.begin(9600);
}

void loop() {
  long sum = 0;
  for (int i = 0; i < 8; i++) sum += analogRead(VOUT_PIN);
  float volts = (sum / 8.0) * ADC_VREF / ADC_STEPS;
  float tempC = (volts - 0.5) * 100.0;      // 0.5 V at 0 °C, 10 mV per °C
  float tempF = tempC * 9.0 / 5.0 + 32.0;
  Serial.print("Temperature: ");
  Serial.print(tempC, 1);
  Serial.print(" C  ");
  Serial.print(tempF, 1);
  Serial.println(" F");
  delay(1000);
}
```

Compiled for arduino:avr:uno on 2026-10-29.

## Questions

### Why is my TMP36 reading a few degrees off on the Arduino Uno?

The sketch's conversion assumes exactly 5.0 V, but USB often gives a little less. Measure the Uno's 5V pin and use that as ADC_VREF, or reference the ADC to the 3.3V pin through AREF.

### Can I power the TMP36 from the Uno's 3.3V pin?

Yes. It runs from 2.7 V to 5.5 V (ADI datasheet, p. 3), and its 50 µA is nothing for the 3.3V pin.

### How precise is the TMP36 on an Uno?

The Uno resolves about 0.5 °C per ADC step on its 5 V reference, about 0.3 °C with 3.3 V on AREF. The sensor itself is ±3 °C max at 25 °C for the common G grade (ADI datasheet, p. 3), so calibrate against a known temperature.

## More

- [TMP36 Temperature Sensor reference](https://www.tinkered.ai/components/tmp36.md): pinout, specs, rules and common mistakes

## Try it

Tinkered simulates the TMP36 Temperature Sensor on the Arduino Uno in the browser, with this wiring and code, free: https://www.tinkered.ai/components/tmp36/arduino-uno
