A custom 8-channel thermocouple logger designed using an Arduino and MAX31855 cold-junction compensated thermocouple-to-digital converters. This project was initiated to aid several other thermal projects.
The MAX31855 uses linear approximation to find the thermocouple temperatures. However, thermocouples are non-linear devices (see graph below). Therefore, using the MAX31855 out of the box resulted in large errors when temperatures were very high or very low. This was also exacerbated when using thermocouples that were of type T or type J (type T are the most accurate with the best tolerances). This seemed to be a common problem when browsing forums, even though their datasheet states good accuracy (probably stated for small temperature ranges with type K). To compensate properly, custom firmware was written to back-calculate millivolts data at each thermocouple junction (there is more than one) and use a lookup table to compute more accurate results. Before the firmware was written, errors of 5C to 10C were observed at temperatures ranging from -20c to +100C. With the new firmware, temperatures ranging from -196C to +100C, have a maximum error of ~+/-2C.