Maker.io main logo

SparkFun Qwiic Thermocouple Hookup Guide

2024-05-07 | By SparkFun Electronics

License: See Original Project Qwiic

Courtesy of SparkFun

Guide by ALEX THE GIANT, ELL C

Introduction

How many times have you asked yourself, "Self? How can I measure both the ambient temperature ‎as well as that thing over there, AND set temperature limits to trigger interrupts so I don't have to ‎constantly poll over I2C? And how can I make it as easy as possible?" Well, we've got your answer. ‎SparkFun has 2 new thermocouple amplifier boards - the SparkFun Qwiic Thermocouple - PCC and ‎the SparkFun Qwiic Thermocouple - Screw Terminals; both of which do all of the above with a ‎resolution of 0.0625°C, and an accuracy of ±1.5°C (worst-case). The boards come ready to accept ‎a K-type thermocouple, which gives a temperature range of -200°C to 1350°C. Additionally, the ‎MCP9600 has four onboard temperature alerts for those interrupt triggers as well as the ability to ‎enter alternate operation modes in order to save power.‎

Let's dig in and see how all this works!‎

 

Required Materials

To follow along with this tutorial, you will need the following materials. You may not need everything ‎though depending on what you have. Add it to your cart, read through the guide, and adjust the cart ‎as necessary.‎

SparkFun Qwiic Thermocouple Wish List SparkFun Wish List‎

Suggested Reading

If you aren’t familiar with the following concepts, we recommend checking out these tutorials before ‎continuing. If you aren't familiar with the Qwiic system, we recommend reading here for an overview.‎

qwiic_1

Qwiic Connect System

Serial Terminal Basics: This tutorial will show you how to communicate with your serial devices using a variety of terminal ‎emulator applications.‎

Processor Interrupts with Arduino: What is an interrupt? In a nutshell, there is a method by which a processor can execute its normal ‎program while continuously monitoring for some kind of event, or interrupt. There are two types of ‎interrupts: hardware and software interrupts. For the purposes of this tutorial, we will focus on ‎hardware interrupts.‎

A Brief Theory of Operation

Thermocouples are fairly ubiquitous, being used in everything from industrial kilns and diesel ‎engines to pilot light sensors and thermostats in your home or office. Let's take a brief moment to ‎go over how they work.‎

Roughly a couple hundred years ago, a man named Thomas Seebeck discovered the principal that ‎thermocouples use. He noticed that if you take two wires made of dissimilar metals, connect them at ‎the two ends, and make a temperature gradient between one end and the other, a voltage potential ‎formed and current flowed. One junction is held in the environment where the temperature of ‎interest exists. This is known as the hot junction. The other junction is referred to as the cold ‎junction.‎

ktype_2

K-type thermocouple with cold junction spread for voltage measurement

There are many types of thermocouples, which mainly differ by the types of metals used in the two ‎wires. The most common general-purpose thermocouple is type K. They are made out of chromel ‎and alumel. These two alloys produce a potential of approximately 41.276 µV/°C, and voltage out ‎can be calculated using the equation below.‎

equation_3

K-type thermocouples can read between from −200 °C to +1350 °C (−330 °F to +2460 °F) and are ‎fairly stable.‎

Hardware Overview

MCP9600‎

At the heart of this board is the MicroChip Technology Inc MCP9600 Thermocouple EMF to ‎Temperature Converter. Inside this chip are two temperature sensors, one for the thermocouple ‎itself (the hot junction) and one for the chip itself (the cold junction). In addition, the MCP9600 has ‎four onboard temperature alerts that allow you to set a temperature limit to trigger an interrupt when ‎the temperature reaches a certain value. This frees up your microcontroller and your I2C bus. The ‎MCP9600 can also be put into alternate operation modes in order to save power. The sensor ‎supports a burst mode, where it will take a specifiable number of samples, return the results, and ‎then go to sleep. More information can be found in the MCP9600 Datasheet (PDF).‎

connector_4

PCC Connector

terminal_5

Screw Terminal

Power

Ideally, power will be supplied via the Qwiic connectors on either side of the board. Alternatively, ‎power can be supplied through the header along the bottom side of the board labeled 3V3 and GND. ‎The input voltage range should be between 2.7-5.5V.‎

Note: There is no onboard voltage regulation on either of these boards. If you choose to provide ‎power via the plated through holes, ensure that your voltage does not exceed 5.5V.‎

PCC_6

PCC Connector

screw_7

Screw Terminal

Qwiic Connectors

There are two Qwiic connectors on either end of the SparkFun Qwiic Thermocouple boards to ‎provide power and I2C connectivity simultaneously. The I2C address of the board is 0x60 by ‎default but has 7 other addresses the board can be configured to use.‎

connect_8

PCC Connector

term_9

Screw Terminal

I2C Pins

The I2C pins break out the functionality of the Qwiic connectors. Depending on your application, ‎you can connect to these pins via the plated through holes for SDA and SCL.‎

pins_10

PCC Connector

pins_11

Screw Terminal

Alert Pins

The Qwiic Thermocouple Amplifier has four configurable alert pins. Each alert can be configured ‎for:‎

  • Temperature
  • Hysteresis
  • Junction Alert - hot (thermocouple) or cold (internal MCP9600 sensor)
  • Edge - from cold to hot, or from hot to cold
  • Logic Level - active high or active low
  • Alert Mode - interrupt or comparator

Check out the Temperature Alerts section of the Arduino library function descriptions to learn more ‎about how to use the alert pins.‎

alerts_12

PCC Connector

alerts_13

Screw Terminal

Jumpers

I2C Jumper

These boards are both equipped with pull-up resistors. If you are daisy chaining multiple Qwiic ‎devices, you will want to cut this jumper; if multiple sensors are connected to the bus with the pull-‎up resistors enabled, the parallel equivalent resistance will create too strong of a pull-up for the bus ‎to operate correctly. As a general rule of thumb, disable all but one pair of pull-up resistors if ‎multiple devices are connected to the bus. To disable the pull up resistors, use an X-acto knife to ‎cut the joint between the two jumper pads highlighted below.‎

jumper_14

PCC Connector

jumper_16

Screw Terminal

ADDR Jumper

The MCP9600 uses an analog voltage to set the I2C address. By default, the ADDR jumper pulls the ‎address pin low, which gives the board a default address of 0x60. Cutting the jumper pulls the ‎address pin high through a 10K resistor, which will change the address to 0x67.‎

addr_17

PCC Connector

addr_18

Screw Terminal

For addresses other than 0x67, a resistor will need to be soldered. Refer to the table below for the ‎resistor value and corresponding address.‎

table_19

Resistor location on each board:‎

location_20

PCC Connector

location_21

Screw Terminal

LED Jumper

Wanna turn off that pesky power LED? Cut this jumper.‎

led_22

PCC Connector

led_23

Screw Terminal

Board Dimensions

Feel free to click on either of the images below for a closer look!‎

qwiic_24

Qwiic Thermocouple Amplifier PCC

qwiic_25

Qwiic Thermocouple Amplifier Screw Terminals

Hardware Hookup

For this tutorial, we'll use the Amplifier board with the PCC connector. Grab your Qwiic cable and ‎plug one end into the RedBoard Qwiic and the other end into the Thermocouple Amplifier.‎

plug_26

Then you can connect the K-type Thermocouple into the PCC connector as so:‎

connect_27

Plug in the RedBoard Qwiic When you are all set up, you should have something that looks like this:‎

setup_28

Software Setup and Programming

Note: This code/library has been written and tested on Arduino IDE version 1.8.10. Otherwise, ‎make sure you are using the latest stable version of the Arduino IDE on your desktop. ‎

If this is your first time using Arduino, please review our tutorial on installing the Arduino IDE. If you ‎have not previously installed an Arduino library, please check out our installation guide.‎

SparkFun has written a library to work with the Qwiic Thermocouple. You can obtain this library ‎through the Arduino Library Manager by searching for MCP9600. Find the one written ‎by SparkFun Electronics and install the latest version. If you prefer downloading libraries manually, ‎you can grab them from the GitHub Repository.‎

DOWNLOAD THE SPARKFUN MCP9600 ARDUINO LIBRARY (ZIP)‎

MCP9600 Library Overview

Device Status

  • bool begin( uint8_t address = DEV_ADDR, TwoWire &wirePort = Wire ) - Sets device I2C ‎address to a user-specified address, over whatever port the user specifies. If left blank, the ‎default address 0x60 is used on the Wire bus.
  • bool available( void ) - Also referred to as the data ready bit, returns true if the ‎thermocouple (hot) junction temperature has been updated since last checked.‎
  • bool isConnected( void ) - Returns true if the thermocouple will acknowledge over I2C, and ‎false otherwise.‎
  • uint16_t deviceID( void ) - Returns the contents of the device ID register. The upper 8 bits ‎are constant, but the lower contain revision data.‎
  • bool checkDeviceID( void ) - Returns true if the constant upper 8 bits in the device ID ‎register are what they should be according to the datasheet.‎
  • bool resetToDefaults( void ) - Resets all device parameters to their default values. Returns ‎‎1 if there was an error, 0 otherwise.‎

Sensor measurements

  • float getThermocoupleTemp( bool units = true ) - Returns the thermocouple temperature ‎and clears the data ready bit. Set units to true for Celcius (default), or false for freedom units ‎‎(Fahrenheit).
  • float getAmbientTemp( bool units = true ) - Returns the ambient (IC die) temperature. Set ‎units to true for Celcius (default), or false for freedom units (Fahrenheit).‎
  • float getTempDelta( bool units = true ) - Returns the difference in temperature between ‎the thermocouple and ambient junctions. Set units to true for Celcius (default), or false for ‎freedom units (Fahrenheit).
  • signed long getRawADC( void ) - Returns the raw contents of the ADC register.‎
  • bool isInputRangeExceeded( void ) - Returns true if the MCP9600's EMF range has been ‎exceeded, and false otherwise.‎

Measurement configuration

  • bool setAmbientResolution( Ambient_Resolution res ) - Changes the resolution on the ‎cold (ambient) junction, for either 0.0625 or 0.25 degree C resolution. Lower resolution ‎reduces conversion time.‎
  • Ambient_Resolution getAmbientResolution( void ) - Returns the resolution on the cold ‎‎(ambient) junction, for either 0.0625 or 0.25 degree C resolution. Lower resolution reduces ‎conversion time.‎
  • bool setThermocoupleResolution( Thermocouple_Resolution res ) - Changes the resolution ‎on the hot (thermocouple) junction, for either 12, 14, 16, or 18-bit resolution. Lower resolution ‎reduces conversion time.‎
  • Thermocouple_Resolution getThermocoupleResolution( void ) - Returns the resolution on ‎the hot (thermocouple) junction, for either 12, 14, 16, or 18-bit resolution. Lower resolution ‎reduces conversion time.
  • uint8_t setThermocoupleType( Thermocouple_Type type ) - Changes the type of ‎thermocouple connected to the MCP9600. Supported types are K, J, T, N, S, E, B, R.‎
  • Thermocouple_Type getThermocoupleType( void ) - Returns the type of thermocouple ‎connected to the MCP9600 as found in its configuration register. Supported types are K, J, T, ‎N, S, E, B, R.‎
  • uint8_t setFilterCoefficient( uint8_t coefficient ) - Changes the weight of the on-chip ‎exponential moving average filter. Set this to 0 for no filter, 1 for minimum filter, and 7 for ‎maximum filter.‎
  • uint8_t getFilterCoefficient( void ) - Returns the weight of the on-chip exponential ‎moving average filter.‎
  • bool setBurstSamples( Burst_Sample samples ) - Changes the amount of samples to take in ‎burst mode. Returns 0 if set sucessfully, 1 otherwise.‎
  • Burst_Sample getBurstSamples( void ) - Returns the amount of samples to take in burst ‎mode, according to the device's configuration register.‎
  • bool burstAvailable( void ) - Returns true if all the burst samples have been taken and the ‎results are ready. Returns false otherwise.‎
  • bool startBurst( void ) - Initiates a burst on the MCP9600.‎
  • bool setShutdownMode( Shutdown_Mode mode ) - Changes the shutdown "operating" mode of ‎the MCP9600. Configurable to Normal, Shutdown, and Burst. Returns 0 if properly set, 1 ‎otherwise.
  • Shutdown_Mode getShutdownMode( void ) - Returns the shutdown "operating" mode of the ‎MCP9600. Configurable to Normal, Shutdown, and Burst.‎

Temperature Alerts

  • bool configAlertTemp( uint8_t number, float temp ) - Configures the temperature at ‎which to trigger the alert for a given alert number.‎
  • bool configAlertJunction( uint8_t number, bool junction ) - Configures the junction to ‎monitor the temperature of to trigger the alert. Set to zero for the thermocouple (hot) junction, ‎or one for the ambient (cold) junction.‎
  • bool configAlertHysteresis( uint8_t number, uint8_t hysteresis ) - Configures the ‎hysteresis to use around the temperature set point, in degrees Celsius.‎
  • bool configAlertEdge( uint8_t number, bool edge ) - Configures whether to trigger the ‎alert on the rising (cold -> hot) or falling (hot -> cold) edge of the temperature change. Set to ‎‎1 for rising, 0 for falling.‎
  • bool configAlertLogicLevel( uint8_t number, bool level ) - Configures whether the ‎hardware alert pin is active-high or active-low. Set to 1 for active-high, 0 for active-low.‎
  • bool configAlertMode( uint8_t number, bool mode ) - Configures whether the MCP9600 ‎treats the alert like a comparator or an interrrupt. Set to 1 for interrupt, 0 for comparator. More ‎information is on pg. 34 of the datasheet.‎
  • bool configAlertEnable( uint8_t number, bool enable ) - Configures whether or not the ‎interrupt is enabled or not. Set to 1 to enable, or 0 to disable.‎
  • bool clearAlertPin( uint8_t number ) - Clears the interrupt on the specified alert channel, ‎resetting the value of the pin.‎
  • bool isTempGreaterThanLimit( uint8_t number ) - Returns true if the interrupt has been ‎triggered, false otherwise.‎

Example Code

Once you've installed the library, you should be able to find the examples in Arduino ‎under File > Examples > SparkFun MCP9600 Thermocouple Library.‎

SparkFun MCP9600 Thermocouple Library

Example 1: Basic Readings

While all of the examples are well commented, let's quickly run through example 1 just to get your ‎feet wet. The best part? It's pretty much plug and play. So go ahead and open up Example 1, or ‎alternatively, copy and paste the code below into an Arduino window:‎

Copy Code
/*
Temperature Measurements with the MCP9600 Thermocouple Amplifier
By: Fischer Moseley
SparkFun Electronics
Date: July 8, 2019
License: This code is public domain but you buy me a beer if you use this and we meet someday (Beerware License).

This example outputs the ambient and thermocouple temperatures from the MCP9600 sensor.

Hardware Connections:
Attach the Qwiic Shield to your Arduino/Photon/ESP32 or other
Plug the sensor onto the shield
Serial.print it out at 115200 baud to serial monitor.
*/

#include <SparkFun_MCP9600.h>
MCP9600 tempSensor;

void setup(){
Serial.begin(115200);
Wire.begin();
Wire.setClock(100000);
tempSensor.begin(); // Uses the default address 0x60 for SparkFun
//tempSensor.begin(0x66); // Default address for SparkX

//check if the sensor is connected
if(tempSensor.isConnected()){
Serial.println("Device will acknowledge!");
}
else {
Serial.println("Device did not acknowledge! Freezing.");
while(1); //hang forever
}

//check if the Device ID is correct
if(tempSensor.checkDeviceID()){
Serial.println("Device ID is correct!");
}
else {
Serial.println("Device ID is not correct! Freezing.");
while(1);
}
}

void loop(){ //print the thermocouple, ambient and delta temperatures every 200ms if available
if(tempSensor.available()){
Serial.print("Thermocouple: ");
Serial.print(tempSensor.getThermocoupleTemp());
Serial.print(" °C Ambient: ");
Serial.print(tempSensor.getAmbientTemp());
Serial.print(" °C Temperature Delta: ");
Serial.print(tempSensor.getTempDelta());
Serial.print(" °C");
Serial.println();
}
delay(20); //don't hammer too hard on the I2C bus
}

What You Should See

Open up the Serial Monitor and make sure your baud rate is 115200. You should see something ‎like the image below. If you move the hot junction (ie, the thermocouple wand) closer to a heat ‎source, you should see the Thermocouple temperature go up.‎

Serial Monitor

Troubleshooting

‎Need help? ‎

If your product is not working as you expected or you need technical assistance or information, ‎head on over to the SparkFun Technical Assistance page for some initial troubleshooting. ‎

If you don't find what you need there, the SparkFun Forums are a great place to find and ask for ‎help. If this is your first visit, you'll need to create a Forum Account to search product forums and ‎post questions.‎

Resources and Going Further

Want more information on the Qwiic Thermocouple? Check out the links here:‎

Qwiic Thermocouple Amplifier PCC:‎

Qwiic Thermocouple Amplifier Screw Terminals:‎

Hardware and Library:‎

制造商零件编号 SEN-16294
QWIIC THERMOCOUPLE AMP PCC CONN
SparkFun Electronics
¥243.80
Details
制造商零件编号 SEN-16295
QWIIC THERMOCOUPLE AMP SCREW TRM
SparkFun Electronics
¥183.15
Details
制造商零件编号 DEV-15123
REDBOARD QWIIC ATMEGA328 EVAL BD
SparkFun Electronics
¥175.01
Details
Add all DigiKey Parts to Cart
TechForum

Have questions or comments? Continue the conversation on TechForum, DigiKey's online community and technical resource.

Visit TechForum