Exemple Arduino Temperature Sensor
Thermistors are simple, inexpensive, and accurate components that make it easy to get temperature data for your projects. Remote weather stations, home automation systems, and equipment control and protection circuits are some applications where thermistors would be ideal. They're analog sensors, so the code is relatively simple compared to digital temperature sensors that require special libraries and lots of code.
In this article, I'll explain how thermistors work, then I'll show you how to set up a basic thermistor circuit with an Arduino that will output temperature readings to the serial monitor or to an LCD.
HOW A THERMISTOR WORKS
Thermistors are variable resistors that change their resistance with temperature. They are classified by the way their resistance responds to temperature changes. In Negative Temperature Coefficient (NTC) thermistors, resistance decreases with an increase in temperature. In Positive Temperature Coefficient (PTC) thermistors, resistance increases with an increase in temperature.
NTC thermistors are the most common, and that's the type we'll be using in this tutorial. NTC thermistors are made from a semiconducting material (such as a metal oxide or ceramic) that's been heated and compressed to form a temperature sensitive conducting material.
The conducting material contains charge carriers that allow current to flow through it. High temperatures cause the semiconducting material to release more charge carriers. In NTC thermistors made from ferric oxide, electrons are the charge carriers. In nickel oxide NTC thermistors, the charge carriers are electron holes.
A BASIC THERMISTOR CIRCUIT
Let's build a basic thermistor circuit to see how it works, so you can apply it to other projects later.
Since the thermistor is a variable resistor, we'll need to measure the resistance before we can calculate the temperature. However, the Arduino can't measure resistance directly, it can only measure voltage.
The Arduino will measure the voltage at a point between the thermistor and a known resistor. This is known as a voltage divider.
The equation for a voltage divider is: Vout=Vin*(R1/(R1+R2))
In terms of the voltage divider in a thermistor circuit.
Materials
Arduino Uno
Thermistor
10k Ohm resistor
Breadboard
Jumper wires
Circuit Diagram
CODE FOR SERIAL MONITOR OUTPUT OF TEMPERATURE READINGS
After connecting the circuit above, upload this code to your Arduino to output the temperature readings to the serial monitor in Fahrenheit:
int ThermistorPin = 0;
int Vo;
float R1 = 10000;
float logR2, R2, T;
float c1 = 1.009249522e-03, c2 = 2.378405444e-04, c3 = 2.019202697e-07;
void setup() {
Serial.begin(9600);
}
void loop() {
Vo = analogRead(ThermistorPin);
R2 = R1 * (1023.0 / (float)Vo - 1.0);
logR2 = log(R2);
T = (1.0 / (c1 + c2*logR2 + c3*logR2*logR2*logR2));
T = T - 273.15;
T = (T * 9.0)/ 5.0 + 32.0;
Serial.print("Temperature: ");
Serial.print(T);
Serial.println(" F");
delay(500);
}
To display the temperature in degrees Celsius, just comment out line 18 by inserting two forward slashes (“//”) at the beginning of the line.
This program will display Celsius and Fahrenheit at the same time:
int ThermistorPin = 0;
int Vo;
float R1 = 10000;
float logR2, R2, T, Tc, Tf;
float c1 = 1.009249522e-03, c2 = 2.378405444e-04, c3 = 2.019202697e-07;
void setup() {
Serial.begin(9600);
}
void loop() {
Vo = analogRead(ThermistorPin);
R2 = R1 * (1023.0 / (float)Vo - 1.0);
logR2 = log(R2);
T = (1.0 / (c1 + c2*logR2 + c3*logR2*logR2*logR2));
Tc = T - 273.15;
Tf = (Tc * 9.0)/ 5.0 + 32.0;
Serial.print("Temperature: ");
Serial.print(Tf);
Serial.print(" F; ");
Serial.print(Tc);
Serial.println(" C");
delay(500);
}
CODE FOR LCD OUTPUT OF TEMPERATURE READINGS
To output the temperature readings to a 16X2 LCD, follow our tutorial, How to Set Up an LCD Display on an Arduino, then upload this code to the board:
#include <LiquidCrystal.h>
int ThermistorPin = 0;
int Vo;
float R1 = 10000;
float logR2, R2, T;
float c1 = 1.009249522e-03, c2 = 2.378405444e-04, c3 = 2.019202697e-07;
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup() {
Serial.begin(9600);
}
void loop() {
Vo = analogRead(ThermistorPin);
R2 = R1 * (1023.0 / (float)Vo - 1.0);
logR2 = log(R2);
T = (1.0 / (c1 + c2*logR2 + c3*logR2*logR2*logR2));
T = T - 273.15;
T = (T * 9.0)/ 5.0 + 32.0;
lcd.print("Temp = ");
lcd.print(T);
lcd.print(" F");
delay(500);
lcd.clear();
}
Instructions
Connect the thermistor to pin A0 on the Arduino.
Connect the 10k Ohm resistor to pin A1 on the Arduino.
Connect the ground pin of the Arduino to the ground rail on the breadboard.
Connect the 5V pin of the Arduino to the power rail on the breadboard.
Upload the code to the Arduino.
Once the code is uploaded, you can test the temperature sensor by placing it in a warm or cold environment. The temperature reading should change accordingly.
Remplir le tableau suivant:
Vout | |||||||||
Rth | |||||||||
Temp |
Troubleshooting:
If the temperature reading is not changing, check the connections between the thermistor, resistor, and Arduino. If the temperature reading is inaccurate, try changing the value of the resistor.
Here's a video of the temperature sensor so you can watch me set it up and see how it works

