If you start sintering a bunch of crap, or otherwise start running a kiln a lot, you may wish to know what the *actual* interior temperatures look like.

I rigged up a thermocouple on a Particle Photon, to independently measure and record temperatures. The kiln has an independent digital display based on its own thermocouple, but I can't record those values beyond pen/paper (which is obviously tedious)... and I'd still want some way to independently verify the internal temperatures.

Having an external thermocouple also lets me bury it in refractory to get some sense for heat penetration and transfer delays.

The output:

This shows 5 complete runs in different conditions, and one in progress.


  • Particle Photon (or any Particle board). Another MCU would work fine (think Arduino), but you'd have to figure out a good way to log and graph the data (Particle.io)
  • Breadboard and a few jumpers
  • Adafruit 128x64 OLED display, I2C mode (Adafruit)
  • 6685-based driver and Thermocouple (Amazon)


Plug the Photon into the breadboard. Leave room on the digital side, all our components are going there.

OLED: use jumpers to connect the pins as defined in the code (or update the code to match the hookup):

#define OLED_POWER  D3
#define OLED_GROUND D2
#define OLED_SCL D1
#define OLED_SCA D0

Thermocouple driver: the last pin (GND) lines up with the Photon's GND, then D7 will match VCC, and so on. If you need to move it around, adjust the code:

#define thermoDO    D6
#define thermoCS D5
#define thermoCLK D4
#define thermoVCC D7

The actual thermocouple gets plugged into the terminal block. I put the red on the + side and it worked...


Particle: Sources https://github.com/jaustindavid/kilnmonitor, Particle IDE App

Sheets (Tools -> Script Editor):

function collectData() {
// Logger.log("Starting");
var sheet = SpreadsheetApp.getActiveSheet();
var temp = UrlFetchApp.fetch("https://api.spark.io/v1/devices/DEVICE/temperature?access_token=TOKEN");
// Logger.log(temp);

try {
var temp = JSON.parse(temp.getContentText()); // parse the JSON the Core API created
// Logger.log(temp.result);
var temp_result = unescape(temp.result); // you'll need to unescape before your parse as JSON
// Logger.log(temp_result);
var d = new Date(); // time stamps are always good when taking readings
sheet.appendRow([d, temp_result]); // append the date, temperature
} catch(e) {
Logger.log("Unable to parse returned JSON");

if (sheet.getLastRow() > 10000) {
sheet.deleteRow(2); // delete row 2 to make room; leave the header

This helpful article explains the whole setup. It's actually pretty straightforward.


My thermocouple was kinda short, and the outside of the kiln gets warm (like 100-150F) so I separate the two with a big ol' glove (see above). The wire is relatively thin, so I drop it down the peep / vent hole, and there into a crucible or just floating in the chamber.