Temperature Measurement

The Arduino uses high temperature, type K thermocouples to measure the different temperatures in the system. This date is used to control the oil pump and for protection against over heating.

Locations of Temperature Gauges

Receiver Pipe

The most important temperature reading is the oil  inside the receiver pipe. This temperature controls the oil pump. When the temperature difference between this and the water are over a certain value, the pump turns on. Also, if the temperature gets too high, the pump turns on to prevent over heating. A maximum temperature will turn on the motor to rotate the mirror out of focus so the oil can cool. If the oil gets too hot it could catch fire. The receiver pipe temperature data is also very important in calculating how much heat is absorbed by the oil and helps determine the efficiency of the system.

Heat Exchanger Exit

This temperature is taken at the exit of the heat exchanger. It helps calculate the heat exchanger efficiency. It also helps us to calculate how much energy is transfered to the water.  The picture below shows how the thermocouple is mounted inside a 1/8 inch brass tube to measure the oil temperature in the 1/2 inch exit pipe.

Control Control

Boiler water temperature

The boiler will be under pressure so water temperatures that are well over 100C are possible. This temperature sensor is used to control the oil pump. This temperature can also be used to calculate the boiler pressure.

The thermocouples are glass braided and will function up to 500C. They are sold with with 3 feet of wire, which will be connected to an op-amp Adafruit breakout board using the MAX31855 chip. Three thermocouples and breakout boards have been connected to the Arduino.


You can find the Arduino program for the 3 thermocouples below. The thermocouple data was recorded in the Arduino serial window and can be cut and pasted into excel to analyze the data.

//You can connect as many MAX31855's as you have pins. Simply share the CLK and DO pins of all the breakouts and have a unique CS pin for each one
//Then you can create new thermocouples using the following style:
// Adafruit_MAX31855 thermocouple1(thermoCLK, thermoCS1, thermoDO);

// Adafruit_MAX31855 thermocouple2(thermoCLK, thermoCS2, thermoDO);
// Adafruit_MAX31855 thermocouple3(thermoCLK, thermoCS3, thermoDO);
//used ada_thermo_5 as base
#include "Adafruit_MAX31855.h"
int thermoDO = 3;
int thermoCS = 4;
int thermoCLK = 5;
int thermoCS2= 2;
int thermoCS3= 6;
// for time
int i=0;
Adafruit_MAX31855 thermocouple(thermoCLK, thermoCS, thermoDO);
Adafruit_MAX31855 thermocouple2(thermoCLK, thermoCS2, thermoDO);
Adafruit_MAX31855 thermocouple3(thermoCLK, thermoCS3, thermoDO);
void setup() {
Serial.println("MAX31855 test");
// wait for MAX chip to stabilize
void loop() {
//for(int i=0; i++)
double c = thermocouple.readCelsius();
double c2 = thermocouple2.readCelsius();
double c3 = thermocouple3.readCelsius();
Serial.print("Time = ");

Serial.print("T1= ");
Serial.print("T2= ");
Serial.print("T3= ");
//Serial.print("F = ");

Make a free website with emyspot.com - Report abuse