Smoker Automation! (Part 1)

Posted on January 5th, 2017 by Ben

Just built and ready to roll…

Now, the first thing I did when we got a smoker was to buy a book, and in that book the author extolled the virtues of an offset smoker (like ours in the picture above), but warned that they aren’t a ‘set and forget’ thing. And after that I immediately went and bought a wireless 2-channel thermometer (one for the food temperature and one for the cooking temperature).

After a Christmas Eve of smoking in cold, blustery weather and constantly being in and out the house trying to keep the right temperature I decided there has to be a better way – and so SmokerPi was born! These posts will document the successes (and probably failures!) of trying to automate my smoker.

The First Prototype

First we need to build some prototype hardware to play with…

Controlling the Heat

The first question is how can we control the heat? There’s only really two things you can control on a Smoker and that’s the inlet vent on the firebox (controlling the amount of oxygen that can reach the fire) and the outlet vent on the chimney (controlling the draft through the smoker and the heat and smoke in the cooking chamber).

Now, both of these control the temperature but do a few experiments and you’ll quickly work out that the inlet vent is really the primary control, so it’s really there we need to start. That’s all well and good but it’s hot down there!

Actually the design of the smoker gives a possible option: By clamping a servo to the handle on the end of the firebox with an arm down to the the vent handle the whole thing is offset an inch or two from the firebox and therefore hopefully plastic parts will be OK.

The 3D printed bracket and arm


The obvious choice for me as a base was a Raspberry Pi Zero. They’re cheap, there’s a great community of things to connect and you can do so much with Python to quickly make great software even when experimenting. To go with that we need a temperature measuring device and a way to control the servo.

It turns out the servo is quite easy: The Raspberry Pi has a PWM output on GPIO pin 18 which can be directly connected to the control input to the servo. The only catch is that the power requirement means any attempt to power the servo from the 5V supplying the Pi is likely to result in the Pi immediately resetting. Instead I connected it to 4 AA batteries in series.

For temperature a thermocouple is a good choice. Partly for its temperature resilience giving the option to locate it quite close the fire for better responsiveness, but mostly because they tend to respond quicker in themselves, than other sensors. To read it Adafruit do a small thermocouple amplifier board which connects to SPI and comes with Python code for the Pi.

For good measure I also added a small H-bridge motor control board also from Adafruit for future use in case it is useful to have a fan to blow additional oxygen into the firebox.


I won’t go into the software in much detail at this stage but I wanted a real-time web-app style interface with a graph showing the live data from the thermocouple, and a slider to control the servo angle.

Using Flask and flask-socketio a web sockets app could quickly be written (OK, the writing was quick but the reading to get me that far took a bit longer!) which communicated from the Python program to a connecting web browser. I then added flot charts which are a set of JavaScript client-side graph plotting libraries built on jQuery to present the data nicely.

Where next?

After a quick function test showing that the servo really could work the vent accurately, it’s time to give it a trial run… Watch this space!