Build a Web Enabled High Temperature Kiln Controller




Introduction: Build a Web Enabled High Temperature Kiln Controller

About: dabbler in many things, pays the bills working as I.T. support officer on a blue water research vessel

Turns a Raspberry Pi into a cheap, universal & web-enabled kiln Controller.

I used this to add a firing schedule control to a little pottery kiln I picked up second hand. The kiln is 10A/240V rated to 1000 degrees C. It has a door switch and a basic thermostat which allows for 25%, 50%, 75% or 100% power but no timer, which means constant monitoring if you want to ramp the temperature up slowly or soak the wares at any point. With the kilnController I can now set it up for a bisque or low temperature glaze firing and leave it to its own devices, checking progress every now and then on my mobile phone or PC.

Step 1: Hardware

  1. Raspberry Pi Zero W running Raspbian. Any pi will do but the zeros are the cheapest at about $15 here in Australia
  2. MAX 31855 Cold-Junction K-Type Thermocouple (about $6 on eBay)
  3. K-Type Thermocouple Sensor -100°C to 1250°C ($3 on eBay)
  4. Solid State Relay Module SSR-25DA 25A /250V 3-32V DC Input 24-380VAC Output (again, about $6 on eBay)
  5. Half a dozen bits of wire
  6. A tupperware box to house it all

To put it all together you'll need a soldering iron, screw drivers and some wire cutters

Step 2: Wiring Up the Thermocouple

MAX31855 to Raspberry Pi

Vin not connected

3Vo to Pin 1 (3.3v DC)

GND to Pin 9 (Ground)

DO to Pin 11 (GPIO 17)

CS to Pin 13 (GPIO 27)

CLK to Pin 15 (GPIO 22)

DO (data out) is an output from the MAX31855 (input to the microcontroller) which carries each bit of data

CS (chip select) is an input to the MAX31855 (output from the microcontroller) which tells the chip when its time to read the thermocouple data.

CLK (clock) is an input to the MAX31855 (output from microcontroller) which indicates when to present another bit of data

For this project I've used the MAX31855 python library from

Thermocouple sensor to MAX31855

The MAX31855's terminals are marked 'Yellow +' and 'Red -', but my thermocouple sensor came with red and black wires, each with a little tab on the end. If you have the same sort of sensor, you'll need to put the red wire into the 'Yellow +' terminal, and the black one into the 'Red -' terminal.

While you can cut the terminations off the ends of each wire, I don't recommend it, as the insulation will unravel, leading to possible short circuits. Connect the tabs as shown in the picture above and everything should be sweet.

For now we've done enough wiring up to be able to start testing. But first, we'll need to install the web interface on the Pi...

Step 3: Installing the Web Interface Software on the Raspberry Pi

I built my controller on a 16GB SD card with raspbian installed but all the software would fit on an 8GB card if that's what you've got (df -h is showing less than 5GB of files).

After getting raspbian installed and connecting to your wireless network, run the following commands in a terminal on the pi:

sudo apt-get install python-pip python-dev libevent-dev git
sudo pip install ez-setup
sudo pip install greenlet bottle gevent gevent-websocket
git clone

Just about ready to start, but first get the IP address of your Pi by typing the following command in your terminal session:


Write down the IP address for your wlan0 connection. It should look something like: (the last couple of numbers might be different)

Note: kilnController is a forked and then modified version of the reflow oven project: picoReflow which I found out about through a blog post on succulent ceramics. Because the original project was for a solder reflow oven, it had quite a bit of code for for driving cooling fans and monitoring a door switch. I didn't need these for my project, but the code's still there (commented out) if you feel the need for a cooling fan. I added more code so that it would display nicely on my mobile phone.

Step 4: Running the Web Server and Testing the Thermocouple

Time to start the web server. Type the following into your terminal window:

cd kilnController

You should see a couple of lines saying something like:

2019-01-10 21:49:20,006 INFO kilncontrollerd: Starting kilncontrollerd
2019-01-10 21:49:20,024 INFO oven: import MAX31855
2019-01-10 21:49:20,036 INFO oven: init MAX31855
2019-01-10 21:49:20,074 INFO kilncontrollerd: listening on

Now, go to a mobile phone or computer that's using the same wireless network as the pi. Open a web browser and enter the IP address you wrote down earlier, followed by a colon and the port number 8081. For example:

After a short wait you should see the temperature displayed on the top left of the web page. Warm up the thermocouple sensor by holding it in your hand or putting it on a lamp or a soldering iron. You should see the temperature increasing at 1 second intervals.

Step 5: Wiring Up the Solid State Relay

So far no-one would be hurt if you got things wrong, but this step involves electricity at voltages and currents that could kill you if not handled properly, so please be careful. Make sure that nothing is plugged in while you work on the circuit and that there are no exposed wires or short circuits when you start using it on the kiln. I put my project inside a plastic box that I had sitting around (but I'm thinking that I might make a nice ceramic container now that I have the kiln running again :)

The solid state relay (SSR) turns the power to the kiln on and off. For my setup I wired in a short extension cord and plugged the kiln into that. I did this by carefully removing the outer insulator just behind the female socket on the power cord. Then I cut through the active wire and connected the ends to terminals 1 and 2 on the SSR. The Active wire (high potential) is coloured brown here in Australia (used to be red).

Connect pin 16 on the Pi (GPIO 23) to the '+' terminal on the SSR (terminal 3) and pin 6 on the Pi (Ground) to terminal 2 on the SSR.

Note: the SSR can get quite hot when in operation so you might want to put it on a heat sink. I sit my plastic box on a tin can when firing.

Danger image: public domain from Max Pixel

Step 6: Final Test

One last test before we can use our kiln controller in anger.

Plug a desk lamp into the controller. Plug the other end into a wall socket. Watch for any obvious signs of problems (the smoke getting out of components, funny smells etc.), if all is going well tun on the lamp and rest the thermocouple sensor on the lamp's bulb. At this stage the lamp should not be illuminated.

If it's not already running, start up the kiln controller software on the pi. Select a profile and click on 'Start' on the top right and then on the 'Start the firing' button on the Firing Overview modal.

Now, the bisque profile I've set up has a start temperature of 30 degrees Celsius. I live in Tasmania, where it's almost always cooler than that so the controller should immediately turn on the lamp to warm up the sensor. If you live in a warmer clime you might have to wait a while until the profile calls for something higher than your current ambient temperature. Either way, if everything's working to plan, you'll eventually see the light turn on and a 'kiln on' icon light up on the interface.

Leave it running for a while and you'll see the lamp turn on and off while the controller tracks the temperature profile.

Click on the 'Stop' button on the top left when you're done and go forth and fire up your kiln!

2 People Made This Project!


  • Plywood Challenge

    Plywood Challenge
  • Plastic Contest

    Plastic Contest
  • Battery Powered Contest

    Battery Powered Contest

40 Discussions


1 day ago

So I made this and I’ve connected everything like it says too but the pi isn’t controlling temp. It just registers the temp inside the kiln. When I plug the kiln in it automatically starts heating up. Anyone run into this issue before?


Question 3 months ago on Step 5

This is a great tutorial, thanks for putting the work into this. I did get an error while running the:

sudo pip install greenlet bottle gevent gevent-websocket

Do you know how I can get past this? It's my first pi project so I'm pretty green. I'm doing this from work so maybe its a firewall issue?

1597091942156-65c2d459-0d32-42f0-9400-65e7dcbdcb4f (1).jpg

Answer 1 day ago

The way I found to fix this issue was to run,

$ sudo apt-get install libffi-dev

then run,

$ sudo pip install greenlet bottle gevent gevent-websocket

Weirdly enough, I got this error on my first but not my second setup.


26 days ago

Is there a wiring diagram of this or do you have any pics of how all the wiring is connected. I am going to be building this and I wanna make sure I wire it correctly


Question 2 months ago

Hey, this looks great. I've got an older kiln that doesn't support segments and I'm thinking of using this. My kiln is a bit bigger than yours and has 4 elements and 3 thermocouples.
I found there's an Octo MAX31855 which can read 8 thermocouples but I'm not sure how to integrate it with your software.
It's definitely scope-creep but you could even control multiple kilns with 8 thermocouples.

The Bartlett V6 supports multizone thermocouples which gives a nice more even heat in larger kilns as you can only heat the zones that are low without over-firing areas that are hot based on kiln packing or airflow. The way this is handled is covered quite well in the manual, if you're curious.

I could use the software as-is but I'd need to tie all relays to the single output which is a bit less accurate.

Thanks for all your work so far!


2 months ago

I got this to work by using similar version from git hub

its exactly the same wiring and seems like different code.


i have it running through My phones hot spot - another tutorial on youtube

I reached the same point as jrdesigns10 with this instructibles step by step by botheredbybees (thanks bothered by bees it worked in the end) i had the error message ( wheels) and could not get further than that.

i did get another version of this to work found on git hub where this is also posted. there are a whole bunch of different versions of step by step that seem to stem from one version. These can all can be found on git hub by searching in git hubs search tab key words - kiln controller.

make shure u buy the MAX31855 thermocouple this one worked. i first bought the MAX31856 and could not get it to work.

i have no coding knowledge and basic electrical.


Question 3 months ago on Step 3

Can this be ran with out web? just run it from pi itself I have a monitor and wireless keyboard & mouse. my Wi-Fi is not strong in the part of shop where the kiln is.

Big Texun
Big Texun

Question 6 months ago

Has anyone tried to adjust the software for multiple probe inputs? I haven't looked at the cost yet, but it shouldn't be hard to add a module that takes 3 inputs, throw out the sensor the farthest from the average of the two closest measurements. AND to log the name and reading of the measurement that was thrown out, so you can decide later if you have an pyrometer failing. Thermocouples are notorious for working good, but silently drifting and giving bad readings. This 3-way vote is an attempt of removing a failing probe before it destroys a project...

I'm an engineer, with a lot of experience with thermocouples, so I'm just trying to do it right...


7 months ago

Heyya! Thanks for the great tutorial. I was wondering: how hard would it be to make this work with a Adafruit MAX31856 instead of MAX32855? That's what I have on hand right now.

Big Texun
Big Texun

Reply 6 months ago

I've worked with a lot of the chips in the family, they have different specs, but they all work the same and are interchangable.


Reply 7 months ago

I haven't tried one but I shouldn't imagine it would give you any trouble. Looks like a higher spec'd board, so better, if anything, than the MAX32855. Good luck with the build.

Big Texun
Big Texun

Tip 6 months ago

People, don't buy your bricks online, you will pay too much!

Online, the cheapest bricks were running $7 by the time you factor in shipping. Everywhere they have brick houses, they have people in a wholesale mindset selling bricks. I'm working on three quotes, so far I'm looking at $1.15 per brick plus sales tax. Makes the difference between my large kiln's bricks costing $89.64 and over $500. When I was looking at $500, suddenly I wanted an alternative to bricks... but at $89 I'm asking myself if I should build it larger or not... (not, the larger the kiln the longer the cycle takes to run, and the more power you use). My controller won't cost me anything... I have a drawer of raspberry pi's, thermocouples, tc transducers, etc... so this project is just a drop in software replacement for my bbq smoker controller... doesn't get better than that...


Question 12 months ago

Hi there, great instructable!

I plan on doing this to a kiln thats about 4 times the size...
I'm scratching my head trying to figure out what alterations to this I need to do.
It's fed by 32A 250V input and has a stepped temperature controller like the small kiln in the instructable.

for starters does anyone know what kind of SSR I'd need to use with such high amps?
should i just use 3 separate SSRs? one for each set of elements?

any advice would be much appreciated!

Big Texun
Big Texun

Answer 6 months ago

SSR's come in sizes rated for your load. The controller doesn't care which one you use, as long as the control voltage requirements match the pi's control signal.

I'm building a glass kiln with a large bed, and heating elements in the ceiling to evenly heat the thin, flat objects typically 6mm thick... But other than that it will be just like this one...


Answer 11 months ago

The easiest thing would be to get a 50A SSR - do a web search for "Solid State Relay SSR-50DA 3-32VDC 50A/250V Output 24-380VAC"

Big Texun
Big Texun

Question 6 months ago

Love the article! similar to my meat smoker controller, but you have the system tuned for glassmaking, wonderful! I'm building a glass kiln for large pieces, and for this type of kiln the heating element is in the roof to evenly heat the large surface. The big challenge is constructing the coil channel to hold the element, you want the heat to escape, but not the coil... You don't want your element fused inside of your project after it slips... Does anyone have any tips on how they might have designed such a thing? Working on a 26 by 18 work plane in the kiln. It will be tall enough for slumping molds and a shelf raised from the floor, floor to roof will be 9". I could put an element in the wall later if I decide to alter the design, but that is another discussion. Does anyone have any experience with ceiling mount heating element? Perhaps I need to document my build...


9 months ago

This one seems to be Great!
Anyway... I had some troubles with the SSR.
3.2V control voltage from the raspi was not enough to turn on 220V switching voltage. Maybe ist depends on the SSR you are using, I don‘t know.
I added a BC547 transistor as seen over here:
and now it works =)
As the switching voltage without transistor was about 100V, maybe everything works fine in countries where you have 110V line voltage.

One problem was left:
After stopping a schedule, the whole thing seems to be stuck. If I chose another schedule and hit ‚Start‘ again, nothing happens. I have to start everything from ground up.

Anyway, thanks for this great Tutorial!


Question 11 months ago on Introduction

Hi. I have built this and am having trouble gaining confidence to put the kiln on the contoller as I am not getting anyway near the temperature that the Sitter is tripping at as shown on the Websocket. (see image). I have changed the interface, thermocouple and cable to no avail.

I am out of ideas. I am guessing that it may have something to do with the reference temp at the cold junction.

The sitter had an Orton mini bar 2 and the firing looked fine, but the kiln is rather energetic in its slope! The temperature indication has only ever got as far as around 750'C



Answer 10 months ago

Hi Andy,
that's not looking real good. The only thing I can think of is that there's a problem with the temp_scale variable in the file. Looking at the code, the 'temp_scale' variable in is being used by /lib/ for reading the thermocouple, so should be left as 'c' unless your thermocouple driver code has been changed to report the temperature in Fahrenheit.

PS: thanks for the pull request on the github code. I've merged in your changes.


Reply 9 months ago

I am using it in Celsius. I've bought another thermocouple, which is a completely different design (looks more like yours). I've had to isolate the sheeth as earthing made it sense all over the place. I will let you know the results once we have done another firing.