# Calibrating Sensors

## Why Calibrate?

![](https://cdn-learn.adafruit.com/assets/assets/000/025/356/medium800/sensors_PerfectSensor.png?1431283745)

### 

There are a lot of good sensors these days and many are 'good enough' out of the box for many non-critical applications. &nbsp;But in order to achieve the best possible accuracy, a&nbsp;sensor should be calibrated in the system where it will be used. &nbsp;This is because:&nbsp;

- **No sensor is perfect.**
  - Sample to sample manufacturing variations mean that even two sensors from the same manufacturer production run may yield slightly different readings.
  - Differences in sensor design mean two different sensors may respond differently in similar conditions. This is especially true of ‘indirect’ sensors that calculate a measurement based on one or more actual measurements of some different, but related parameter.
  - Sensors subject to heat, cold, shock, humidity etc. during storage, shipment and/or assembly may show a change in response.
  - Some sensor technologies 'age' and their response will naturally change over time - requiring periodic re-calibration.

- **The Sensor is only one component in the measurement system.** &nbsp;For example:
  - With analog sensors, your ADC is part of the measurement system and subject to variability as well.
  - Temperature measurements are subject to thermal gradients between the sensor and the measurement point.
  - Light and color&nbsp;sensors can be affected by spectral distribution, ambient light, specular reflections and other optical phenomena.
  - Inertial sensors almost always have some 'zero offset' error and are sensitive to alignment with the system being measured

### 

The two&nbsp;most important characteristic of a sensor are:

- **Precision** &nbsp;-&nbsp;The ideal sensor will always produce the same output for the same input. &nbsp;
- **Resolution** &nbsp;- A good&nbsp;sensor will be able to reliably detect small changes in the measured parameter.

![](https://cdn-learn.adafruit.com/assets/assets/000/025/551/medium800/sensors_Precision.png?1431800024)

### 

- **Noise** - All measurement systems are subject to random noise to some degree. &nbsp;Measurement systems with a low&nbsp;Signal to Noise Ratio will have problems making repeatable measurements. &nbsp;In the diagrams above, the sensor on the right shows much better precision&nbsp;than the noisy one on the left.
- **Hysteresis** - Some types of sensors also exhibit&nbsp;hysteresis. &nbsp;The sensor will tend to read low with an increasing signal and high with a decreasing signal as shown in the graph below. &nbsp;Hysteresis&nbsp;is a common problem with many pressure sensors.

To paraphrase George Santayana: **_&nbsp;_**

**_"Those who ingnore hysteresis are doomed to unrepeatable results."_**

![](https://cdn-learn.adafruit.com/assets/assets/000/025/353/medium800/sensors_Hysteresis.png?1431279295)

### 

Precision and resolution are the real&nbsp;'must have' qualities. &nbsp;But there are a couple of&nbsp;other 'nice-to-have' qualities:

**Linearity** - A sensor whose output is directly proportional to the input is said to be linear. &nbsp;This eliminates the need to do any complex curve-fitting and simplifies the calibration&nbsp;process.

**Speed** - All else being equal, a sensor that can produce precise readings faster is a good thing to have.

![](https://cdn-learn.adafruit.com/assets/assets/000/025/354/medium800/sensors_Sensor_Errors.png?1431279458)

### 

Accuracy is a combination of precision, resolution and calibration. &nbsp; **If you have a sensor that gives you repeatable measurements with good&nbsp;resolution, you&nbsp;can calibrate it for accuracy.**

### 

To some degree, yes. &nbsp;Nevertheless, digital sensors are still subject to manufacturing and operating condition variability.&nbsp; For critical measurements, you need to calibrate the total system.

### 

And it probably is - when measured in their QA test fixture&nbsp;using&nbsp;their test procedures and according to their definition of 'accuracy'. &nbsp;

**Your mileage may vary!**

# Calibrating Sensors

## So, How Do We Calibrate?

The first thing to decide is what your calibration reference will be. &nbsp;

## Standard References

If it is important to get accurate readings in some standard units, you will need a Standard Reference to calibrate against. &nbsp;This can be:

**A calibrated sensor** - If you have a sensor or instrument that is known to be accurate. &nbsp;It can be used to make reference readings for comparison. &nbsp;Most laboratories will have instruments that have been calibrated against NIST standards. &nbsp;These will have documentation including the specfic reference against which they were calibrated, as well as any correction factors that need to be applied to the output.

**A standard physical reference** - Reasonably accurate physical standards can be used as standard references for some types of sensors

- **Rangefinders**

  - Rulers and Meter sticks

- **Temperature**  **Sensors**

  - Boiling Water - 100°C at sea-level
  - Ice-water Bath - The "Triple Point" of water is&nbsp;0.01°C at sea-level

- **Accelerometers**

  - Gravity is a constant 1G on the surface of the earth.

&nbsp;

![](https://cdn-learn.adafruit.com/assets/assets/000/025/350/medium800/sensors_Intermediate_temperature_thermocouples_reference_functions.svg.png?1431276979)

 **_Thermocouple Characteristic Curves_**

_CC0 Public Domain via&nbsp;[Wikimedia Commons](http://commons.wikimedia.org/wiki/File:Intermediate_temperature_thermocouples_reference_functions.svg)_

## The Characteristic Curve

Characteristic Curve – Each sensor will have a ‘characteristic curve’ that defines the sensor’s response to an input. The calibration process maps the sensor’s response to an ideal linear response.&nbsp; How to best accomplish that depends on the nature of the characteristic curve.

- **Offset** – An offset means that the sensor output is higher or lower than the ideal output. Offsets are easy to correct with a single-point calibration.
- **Sensitivity or Slope** – A difference in slope means that the sensor output changes at a different rate than the ideal. The Two-point calibration process can correct differences in slope.
- **Linearity** – Very few sensors have a completely linear characteristic curve. Some are linear enough over the measurement range that it is not a problem.&nbsp; But some sensors will require more complex calculations to linearize the output.

## Calibration Methods

In the next few pages, we'll look at three different types of calibration:

- **One Point Calibration**
- **Two Point Calibration**
- **Multi-Point Curve Fitting**

# Calibrating Sensors

## One Point Calibration

One point calibration is the simplest type of calibration. If your sensor output is already scaled to useful measurement units, a one point calibration can be used to correct for sensor offset errors in the following cases:

- **Only one measurement point is needed.** If you have an application that only requires accurate measurement of a single level, there is no need to worry about the rest of the measurement range.&nbsp; An example might be a temperature control system that needs to maintain the same temperature continuously.
- **The sensor is known to be linear and have the correct slope over the desired measurement range.** In this case, it is only necessary to calibrate one point in the measurement range and adjust the offset if necessary. &nbsp;Many temperature sensors are good candidates for one-point calibration.

A one point calibration can also be used as a "drift check" to detect changes in response and/or deterioration in sensor performance. &nbsp;

For example, thermocouples used at very high temperatures exhibit an 'aging' effect. &nbsp;This can be detected by performing&nbsp;periodic one point calibrations, and comparing the resulting offset with the previous calibration.

![](https://cdn-learn.adafruit.com/assets/assets/000/025/549/medium800/sensors_SinglePoint.png?1431796742)

## How to do it:

To perform a one point calibration:

1. Take a measurement with your sensor.
2. Compare that measurement with your reference standard.
3. Subtract the sensor reading from the reference reading to get the offet.
4. In your code, add the offset to every sensor reading to obtain the calibrated value.

![](https://cdn-learn.adafruit.com/assets/assets/000/025/544/medium800/sensors_234A0507.jpg?1431787620)

## Example:

Imagine that you have a competition robot that needs to position itself exactly 6"&nbsp;from a goal in preparation for scoring.

You have an ultrasonic rangefinder for your distance sensor. &nbsp;Since you only require maximum accuracy at one distance, a one point calibration is a simple and effictive&nbsp;solution.

Using a measuring tape&nbsp;as your reference standard, position the robot exactly 6"&nbsp;from the goal.

If you take a reading with your sensor and it says 6.3", then you have a -0.3"&nbsp;offset.

Now edit your code to subtract 0.3"&nbsp;from every reading. &nbsp;Since this is known to be a linear sensor it will likely be pretty accurate over most of its range. &nbsp;But you know with great confidence that it will be spot-on at the critical&nbsp;distance of 6".

# Calibrating Sensors

## Two Point Calibration

A Two Point Calibration is a little more complex. &nbsp;But it can be applied to either raw or scaled sensor outputs. A Two Point calibration essentially re-scales the output and is capable of correcting both slope and offset errors.&nbsp; Two point calibration can be used in cases where the sensor output is known to be reasonably linear over the measurement range.&nbsp;&nbsp;

![](https://cdn-learn.adafruit.com/assets/assets/000/025/550/medium800/sensors_TwoPoint.png?1431797282)

## How to do it:

To perform a two&nbsp;point calibration:

1. Take two&nbsp;measurements with your sensor: &nbsp;One near the low end of the measurement range and one near the high end of the measurement range. &nbsp;Record these readings as "RawLow" and "RawHigh"
2. Repeat these&nbsp;measurements with your reference instrument. &nbsp;Record these readings as "ReferenceLow" and "ReferenceHigh"
3. Calculate "RawRange" as&nbsp;RawHigh – RawLow.
4. Calculate "ReferenceRange" as&nbsp;ReferenceHigh – ReferenceLow
5. In your code, calculate the "CorrectedValue" using the formula below:

**CorrectedValue&nbsp;= (((RawValue – RawLow) \* ReferenceRange) / RawRange) + ReferenceLow**

&nbsp;

## Example

A common example of a two-point calibration is to calibrate a temperature sensor&nbsp;using an ice-water bath and boiling water for the two references. &nbsp; Thermocouples and other temperature sensors are quite linear within this temperature range, so two point calibration should produce good resuts.

Since these are physical standards, we know that&nbsp;at normal sea-level atmospheric pressure, water boils at 100°C and the ["triple point"](http://en.wikipedia.org/wiki/Triple_point)&nbsp;is&nbsp;0.01°C. &nbsp;We can use these known values as our reference values:

**ReferenceLow = 0.01°C**

**ReferenceHigh = 100°C**

**ReferenceRange = 99.99**

Here we'll show a two point calibration of a laboratory thermometer. &nbsp;But the same principles apply to any temperature sensor:

![](https://cdn-learn.adafruit.com/assets/assets/000/025/548/medium800/sensors_Phase-diag2.svg.png?1431793293)

_Phase diagram by&nbsp;Matthieumarechal&nbsp;via&nbsp;[Wikimedia Commons](http://commons.wikimedia.org/wiki/File:Phase-diag2.svg)_

### Boiling Water

As you can see this lab thermometer is off by -4 degrees at the boiling point of water.

![sensors_234A0499.jpg](https://cdn-learn.adafruit.com/assets/assets/000/025/545/medium640/sensors_234A0499.jpg?1431788043)

![sensors_234A0501.jpg](https://cdn-learn.adafruit.com/assets/assets/000/025/546/medium640/sensors_234A0501.jpg?1431788092)

### "Triple Point" Ice-Water Bath

The same thermometer registers a little&nbsp;less than&nbsp;zero degrees in the ice-water bath.

![sensors_234A0505.jpg](https://cdn-learn.adafruit.com/assets/assets/000/025/547/medium640/sensors_234A0505.jpg?1431788203)

So the&nbsp;"Raw" readings are:

**RawLow = -0.5°C**

**RawHigh = 96.0°C**

**RawRange = 96.5°C**

So, if we get a raw reading of&nbsp; **37°C** with this thermometer, we can plug the numbers into the equation to get the corrected&nbsp;reading:

(((37 + 0.5) \* 99.99) / 96.5) +&nbsp;0.01 =&nbsp; **38.9°C** &nbsp;

# Calibrating Sensors

## Multi-Point Curve Fitting

![](https://cdn-learn.adafruit.com/assets/assets/000/025/355/medium800/sensors_nonLinear.png?1431281958)

Sensors that are not linear over the measurement range require some curve-fitting to achieve accurate measurements over the measurement range. A common case requiring curve-fitting is thermocouples at extremely hot or cold temperatures.&nbsp; While nearly linear over a fairly wide range, they do deviate significantly at extreme temperatures.

The graphs below show the characteristic curves of high, intermediate and low temperature thermocouples. &nbsp;Note how the lines start to curve more&nbsp;at the extremes.

![](https://cdn-learn.adafruit.com/assets/assets/000/025/345/medium800/sensors_High_temperature_thermocouples_reference_functions.svg.png?1431276430)

![](https://cdn-learn.adafruit.com/assets/assets/000/025/349/medium800/sensors_Intermediate_temperature_thermocouples_reference_functions.svg.png?1431276846)

![](https://cdn-learn.adafruit.com/assets/assets/000/025/348/medium800/sensors_Low_temperature_thermocouples_reference_functions.svg.png?1431276622)

 **_Thermocouple Characteristic Curves_**

_Thermocouple curves&nbsp;CC0 Public Domain via&nbsp;[Wikimedia Commons](http://commons.wikimedia.org/wiki/File:Intermediate_temperature_thermocouples_reference_functions.svg)_

Fortunately, the characteristic curve of standard thermocouple types are well understood and curve-fitting coefficients are available from NIST and other sources.

If you are using a Max31855 Thermocouple Amplifier, check out the next page for some excellent linearization code&nbsp;developed by some members of the Adafruit Forum.

[NIST Thermocouple Database](http://srdata.nist.gov/its90/type_j/jcoefficients_inverse.html)
&nbsp;But if you are working with a home-brew DIY sensor, you may need to do some characterization to determine the characteristic curve and derive a linearization formula for your sensor.

Excel and similar&nbsp;spreadsheet type programs have some built-in tools to assist with curve fitting. &nbsp;For a good tutorial on Advanced Regression with Excel, see the following link:&nbsp;

[Advanced Regression in Excel](http://chemlab.truman.edu/data-analysis/advanced-regression-with-microsoft-excel/)
# Calibrating Sensors

## Maxim 31855 Thermocouple Linearization

Forum members&nbsp; [heypete](http://forums.adafruit.com/memberlist.php?mode=viewprofile&u=256747)&nbsp;and&nbsp; [jh421797](http://forums.adafruit.com/memberlist.php?mode=viewprofile&u=277866)&nbsp;have implemented the NIST K-type thermocouple equations for the Max31855 thermocouple amplifier. &nbsp;

The code is posted below:

You can check&nbsp;out the original forum thread here:&nbsp;

[Max 31855 Forum Thread](http://forums.adafruit.com/viewtopic.php?f=19&t=32086&start=15#p372992)
### Code from jh421797
```
// corrected temperature reading for a K-type thermocouple
// allowing accurate readings over an extended range
// http://forums.adafruit.com/viewtopic.php?f=19&amp;t=32086&amp;p=372992#p372992
// assuming global: Adafruit_MAX31855 thermocouple(CLK, CS, DO);
float correctedCelsius(){
   
   // MAX31855 thermocouple voltage reading in mV
   float thermocoupleVoltage = (thermocouple.readCelsius() - thermocouple.readInternal()) * 0.041276;
   
   // MAX31855 cold junction voltage reading in mV
   float coldJunctionTemperature = thermocouple.readInternal();
   float coldJunctionVoltage = -0.176004136860E-01 +
      0.389212049750E-01  * coldJunctionTemperature +
      0.185587700320E-04  * pow(coldJunctionTemperature, 2.0) +
      -0.994575928740E-07 * pow(coldJunctionTemperature, 3.0) +
      0.318409457190E-09  * pow(coldJunctionTemperature, 4.0) +
      -0.560728448890E-12 * pow(coldJunctionTemperature, 5.0) +
      0.560750590590E-15  * pow(coldJunctionTemperature, 6.0) +
      -0.320207200030E-18 * pow(coldJunctionTemperature, 7.0) +
      0.971511471520E-22  * pow(coldJunctionTemperature, 8.0) +
      -0.121047212750E-25 * pow(coldJunctionTemperature, 9.0) +
      0.118597600000E+00  * exp(-0.118343200000E-03 * 
                           pow((coldJunctionTemperature-0.126968600000E+03), 2.0) 
                        );
                        
                        
   // cold junction voltage + thermocouple voltage         
   float voltageSum = thermocoupleVoltage + coldJunctionVoltage;
   
   // calculate corrected temperature reading based on coefficients for 3 different ranges   
   float b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10;
   if(thermocoupleVoltage &lt; 0){
      b0 = 0.0000000E+00;
      b1 = 2.5173462E+01;
      b2 = -1.1662878E+00;
      b3 = -1.0833638E+00;
      b4 = -8.9773540E-01;
      b5 = -3.7342377E-01;
      b6 = -8.6632643E-02;
      b7 = -1.0450598E-02;
      b8 = -5.1920577E-04;
      b9 = 0.0000000E+00;
   }
   
   else if(thermocoupleVoltage &lt; 20.644){
      b0 = 0.000000E+00;
      b1 = 2.508355E+01;
      b2 = 7.860106E-02;
      b3 = -2.503131E-01;
      b4 = 8.315270E-02;
      b5 = -1.228034E-02;
      b6 = 9.804036E-04;
      b7 = -4.413030E-05;
      b8 = 1.057734E-06;
      b9 = -1.052755E-08;
   }
   
   else if(thermocoupleVoltage &lt; 54.886){
      b0 = -1.318058E+02;
      b1 = 4.830222E+01;
      b2 = -1.646031E+00;
      b3 = 5.464731E-02;
      b4 = -9.650715E-04;
      b5 = 8.802193E-06;
      b6 = -3.110810E-08;
      b7 = 0.000000E+00;
      b8 = 0.000000E+00;
      b9 = 0.000000E+00;
   }
   
   else {
      // TODO: handle error - out of range
      return 0;
   }
   
   return b0 + 
      b1 * voltageSum +
      b2 * pow(voltageSum, 2.0) +
      b3 * pow(voltageSum, 3.0) +
      b4 * pow(voltageSum, 4.0) +
      b5 * pow(voltageSum, 5.0) +
      b6 * pow(voltageSum, 6.0) +
      b7 * pow(voltageSum, 7.0) +
      b8 * pow(voltageSum, 8.0) +
      b9 * pow(voltageSum, 9.0);
}
```

### Code from 'heypete'

For the latest updates, please see heypete's github repo:

[heypete linearization code on Github](https://github.com/heypete/MAX31855-Linearization)
```
#include &lt;SPI.h&gt;
    #include "Adafruit_MAX31855.h"

    #define DO   12
    #define CS   11
    #define CLK  10
    Adafruit_MAX31855 thermocouple(CLK, CS, DO);

    void setup() {
       Serial.begin(9600);
       Serial.println("MAX31855 test");
       // wait for MAX chip to stabilize
       delay(500);
    }
    void loop() {
       // Initialize variables.
       int i = 0; // Counter for arrays
       double internalTemp = thermocouple.readInternal(); // Read the internal temperature of the MAX31855.
       double rawTemp = thermocouple.readCelsius(); // Read the temperature of the thermocouple. This temp is compensated for cold junction temperature.
       double thermocoupleVoltage= 0;
       double internalVoltage = 0;
       double correctedTemp = 0;

        // Check to make sure thermocouple is working correctly.
       if (isnan(rawTemp)) {
        Serial.println("Something wrong with thermocouple!");
      }
       else {
          // Steps 1 &amp; 2. Subtract cold junction temperature from the raw thermocouple temperature.
          thermocoupleVoltage = (rawTemp - internalTemp)*0.041276;  // C * mv/C = mV

          // Step 3. Calculate the cold junction equivalent thermocouple voltage.

          if (internalTemp &gt;= 0) { // For positive temperatures use appropriate NIST coefficients
             // Coefficients and equations available from http://srdata.nist.gov/its90/download/type_k.tab

             double c[] = {-0.176004136860E-01,  0.389212049750E-01,  0.185587700320E-04, -0.994575928740E-07,  0.318409457190E-09, -0.560728448890E-12,  0.560750590590E-15, -0.320207200030E-18,  0.971511471520E-22, -0.121047212750E-25};

             // Count the the number of coefficients. There are 10 coefficients for positive temperatures (plus three exponential coefficients),
             // but there are 11 coefficients for negative temperatures.
             int cLength = sizeof(c) / sizeof(c[0]);

             // Exponential coefficients. Only used for positive temperatures.
             double a0 =  0.118597600000E+00;
             double a1 = -0.118343200000E-03;
             double a2 =  0.126968600000E+03;


             // From NIST: E = sum(i=0 to n) c_i t^i + a0 exp(a1 (t - a2)^2), where E is the thermocouple voltage in mV and t is the temperature in degrees C.
             // In this case, E is the cold junction equivalent thermocouple voltage.
             // Alternative form: C0 + C1*internalTemp + C2*internalTemp^2 + C3*internalTemp^3 + ... + C10*internaltemp^10 + A0*e^(A1*(internalTemp - A2)^2)
             // This loop sums up the c_i t^i components.
             for (i = 0; i &lt; cLength; i++) {
                internalVoltage += c[i] * pow(internalTemp, i);
             }
                // This section adds the a0 exp(a1 (t - a2)^2) components.
                internalVoltage += a0 * exp(a1 * pow((internalTemp - a2), 2));
          }
          else if (internalTemp &lt; 0) { // for negative temperatures
             double c[] = {0.000000000000E+00,  0.394501280250E-01,  0.236223735980E-04, -0.328589067840E-06, -0.499048287770E-08, -0.675090591730E-10, -0.574103274280E-12, -0.310888728940E-14, -0.104516093650E-16, -0.198892668780E-19, -0.163226974860E-22};
             // Count the number of coefficients.
             int cLength = sizeof(c) / sizeof(c[0]);

             // Below 0 degrees Celsius, the NIST formula is simpler and has no exponential components: E = sum(i=0 to n) c_i t^i
             for (i = 0; i &lt; cLength; i++) {
                internalVoltage += c[i] * pow(internalTemp, i) ;
             }
          }

          // Step 4. Add the cold junction equivalent thermocouple voltage calculated in step 3 to the thermocouple voltage calculated in step 2.
          double totalVoltage = thermocoupleVoltage + internalVoltage;

          // Step 5. Use the result of step 4 and the NIST voltage-to-temperature (inverse) coefficients to calculate the cold junction compensated, linearized temperature value.
          // The equation is in the form correctedTemp = d_0 + d_1*E + d_2*E^2 + ... + d_n*E^n, where E is the totalVoltage in mV and correctedTemp is in degrees C.
          // NIST uses different coefficients for different temperature subranges: (-200 to 0C), (0 to 500C) and (500 to 1372C).
          if (totalVoltage &lt; 0) { // Temperature is between -200 and 0C.
             double d[] = {0.0000000E+00, 2.5173462E+01, -1.1662878E+00, -1.0833638E+00, -8.9773540E-01, -3.7342377E-01, -8.6632643E-02, -1.0450598E-02, -5.1920577E-04, 0.0000000E+00};

             int dLength = sizeof(d) / sizeof(d[0]);
             for (i = 0; i &lt; dLength; i++) {
                correctedTemp += d[i] * pow(totalVoltage, i);
             }
          }
          else if (totalVoltage &lt; 20.644) { // Temperature is between 0C and 500C.
             double d[] = {0.000000E+00, 2.508355E+01, 7.860106E-02, -2.503131E-01, 8.315270E-02, -1.228034E-02, 9.804036E-04, -4.413030E-05, 1.057734E-06, -1.052755E-08};
             int dLength = sizeof(d) / sizeof(d[0]);
             for (i = 0; i &lt; dLength; i++) {
                correctedTemp += d[i] * pow(totalVoltage, i);
             }
          }
          else if (totalVoltage &lt; 54.886 ) { // Temperature is between 500C and 1372C.
             double d[] = {-1.318058E+02, 4.830222E+01, -1.646031E+00, 5.464731E-02, -9.650715E-04, 8.802193E-06, -3.110810E-08, 0.000000E+00, 0.000000E+00, 0.000000E+00};
             int dLength = sizeof(d) / sizeof(d[0]);
             for (i = 0; i &lt; dLength; i++) {
                correctedTemp += d[i] * pow(totalVoltage, i);
             }
          } else { // NIST only has data for K-type thermocouples from -200C to +1372C. If the temperature is not in that range, set temp to impossible value.
             // Error handling should be improved.
             Serial.print("Temperature is out of range. This should never happen.");
             correctedTemp = NAN;
          }

          Serial.print("Corrected Temp = ");
          Serial.println(correctedTemp, 5);
          Serial.println("");

       }

       delay(1000);

    }
```


## Featured Products

### 10K Precision Epoxy Thermistor

[10K Precision Epoxy Thermistor](https://www.adafruit.com/product/372)
Need to measure something damp? This epoxy-coated precision 1% 10K thermistor is an inexpensive way to measure temperature in weather or liquids. The resistance in 25 °C is 10K (+- 1%). The resistance goes down as it gets warmer and goes up as it gets cooler. <a...></a...>

Out of Stock
[Buy Now](https://www.adafruit.com/product/372)
[Related Guides to the Product](https://learn.adafruit.com/products/372/guides)
### Thermocouple Amplifier MAX31855 breakout board (MAX6675 upgrade)

[Thermocouple Amplifier MAX31855 breakout board (MAX6675 upgrade)](https://www.adafruit.com/product/269)
Thermocouples are very sensitive, requiring a good amplifier with a cold-compensation reference. The MAX31855K does everything for you, and can be easily interfaced with any microcontroller, even one without an analog input. This breakout board has the chip itself, a 3.3V regulator with 10uF...

In Stock
[Buy Now](https://www.adafruit.com/product/269)
[Related Guides to the Product](https://learn.adafruit.com/products/269/guides)
### Thermocouple Amplifier with 1-Wire Breakout Board - MAX31850K

[Thermocouple Amplifier with 1-Wire Breakout Board - MAX31850K](https://www.adafruit.com/product/1727)
Thermocouples are very sensitive, requiring a good amplifier with a cold-compensation reference. [So far we've carried the very nice MAX31855 which is an SPI interface thermocouple amplifier.](https://www.adafruit.com/products/269) The '855 is great but if you have a lot of...

In Stock
[Buy Now](https://www.adafruit.com/product/1727)
[Related Guides to the Product](https://learn.adafruit.com/products/1727/guides)
### Thermocouple Type-K Glass Braid Insulated

[Thermocouple Type-K Glass Braid Insulated](https://www.adafruit.com/product/270)
Thermocouples are best used for measuring temperatures that can go above 100 °C. This is a bare wires bead-probe which can measure air or surface temperatures. Most inexpensive thermocouples have a vinyl covering which can melt at around 200 °C, this one uses a fiberglass braid so it...

In Stock
[Buy Now](https://www.adafruit.com/product/270)
[Related Guides to the Product](https://learn.adafruit.com/products/270/guides)
### Sensor pack 900

[Sensor pack 900](https://www.adafruit.com/product/176)
An assortment of the most common sensors used in electronics. 9 sensors and 3 additional components to interface with the 'analog world'. [We have some tutorials here, to get you started](http://learn.adafruit.com/search?q=sensors).

Includes

- <a...></a...>

In Stock
[Buy Now](https://www.adafruit.com/product/176)
[Related Guides to the Product](https://learn.adafruit.com/products/176/guides)

## Related Guides

- [Adding a Single Board Computer to Blinka](https://learn.adafruit.com/adding-a-single-board-computer-to-blinka.md)
- [MicroPython Hardware: SPI Devices](https://learn.adafruit.com/micropython-hardware-spi-devices.md)
- [Adafruit 1-Wire Thermocouple Amplifier - MAX31850K](https://learn.adafruit.com/adafruit-1-wire-thermocouple-amplifier-max31850k.md)
- [Adafruit FT232H With SPI & I2C Devices](https://learn.adafruit.com/adafruit-ft232h-with-spi-and-i2c-libraries.md)
- [MAX31855 Thermocouple](https://learn.adafruit.com/thermocouple.md)
- [Connecting the MAX31855 Thermocouple Amplifier breakout to an Electric Imp](https://learn.adafruit.com/connecting-the-max31855-thermocouple-amplifier-breakout-to-an-electric-imp.md)
- [CircuitPython Libraries on Linux and the 96Boards DragonBoard 410c](https://learn.adafruit.com/circuitpython-libraries-on-linux-and-the-96boards-dragonboard-410c.md)
- [Google Docs Sensor Logging From Your PC](https://learn.adafruit.com/gdocs-sensor-logging-from-your-pc.md)
- [ Analog IC Insights On-the-Go by Maxim Integrated](https://learn.adafruit.com/maxim-app.md)
- [CircuitPython I2C and SPI Under the Hood](https://learn.adafruit.com/circuitpython-basics-i2c-and-spi.md)
- [MAX31855 Thermocouple Sensor Python Library](https://learn.adafruit.com/max31855-thermocouple-python-library.md)
- [Motorized Turntable](https://learn.adafruit.com/motorized-turntable-circuitpython.md)
- [Flora TSL2561 Lux Sensor](https://learn.adafruit.com/flora-lux-sensor.md)
- [Make It Pulse](https://learn.adafruit.com/make-it-pulse.md)
- [Guardian Robot – Zelda BOTW](https://learn.adafruit.com/guardian-robot-zelda-botw.md)
