Arduino peripherals guide series
MCP9808: an accurate thermometer module for your Arduino
The MCP9808 is a very accurate temperature sensor for your Arduino. It offers user-selected resolutions, programmable alerts, I2C connectivity, and works with 5V and 3.3V Arduinos.
In a previous article, I discussed three common thermometer sensors used by Arduino makers. A student recently asked if any thermometer sensors are more accurate than the common DHT11/22, TMP36, and BMP280.
The Microchip MCP9808 high-accuracy temperature sensor
Of course, there is! Presenting the MCP9808 from Microchip.
You can see that this module is made for accuracy by looking at the first page of its datasheet; this is what you see:
There's more information than usual about the accuracy of the device, with typical and maximum values at different ranges. It is also possible to select the measurement resolution!
Evaluation of the MCP9808 accuracy plots
The first page also contains a very interesting temperature accuracy distribution plot:
This plot tells us that 20% of readings from a sample of 854 units of this module contain approximately a 0.0˚C error!
The data shows that this is a very accurate sensor!
The datasheet contains several more interesting plots, like these in page 7:
These plots illustrate how accuracy changes over the range of temperatures that the sensor is capable of measuring. Notice that in figure 2-3, which shows the error distribution at 25˚C, the distribution is tall and concentrated thinly around the 0 mark on the horizontal axis; this indicates that the manufacturer calibrated this sensor to work best in regular room temperatures, where most of our electronics work.
Then, look at Figures 2-5 and 2-4, how the error distributions at 85˚C and -20˚C are shorter and more spread out, indicating a larger spread of the measurement errors.
This is a visual description of the fact that the accuracy of a sensor varies along the whole width of the range in which it operates.
This uses the I2C interface to communicate with a microcontroller. Adafruit has published a library that makes using it even easier.
If you want to learn how to use the MCP9808 with your Arduino, consider my course Arduino Step by Step Getting Started, where I cover the sensor in Lecture 14 of Section 10.
New to the Arduino?
Arduino Step by Step Getting Started is our most popular course for beginners.
This course is packed with high-quality video, mini-projects, and everything you need to learn Arduino from the ground up. We'll help you get started and at every step with top-notch instruction and our super-helpful course discussion space.
Jump to another article
2. Basics of the TimerOne library
3. How to find device I2C address
4. Getting started with I2C on the Arduino
5. Using I2C: True digital to analog conversion on the Arduino Uno
6. How accurate are thermometer sensors?
7. MCP9808: an accurate thermometer module for your Arduino
8. Getting useful motion data from the MPU-6050 device
9. What to do with unused pins on an Atmega328P or Attiny85?
Done with the basics? Looking for more advanced topics?
Arduino Step by Step Getting Serious is our comprehensive Arduino course for people ready to go to the next level.
Learn about Wifi, BLE and radio, motors (servo, DC and stepper motors with various controllers), LCD, OLED and TFT screens with buttons and touch interfaces, control large loads like relays and lights, and much much MUCH more.