Coffee Roaster

Posted by

I started roasting coffee a few years ago using a popcorn popper. The popcorn popper worked fine but I was limited to 3-4 oz. batches. So I decided to build a roaster that could handle 2-3 lb batches.

The roaster uses an arduino to control the relays, the proportional valve, and to measure the thermocouples. Commands are sent to the arduino from a raspberry pi connected by USB. The original design used a web app hosted on the raspberry pi that allowed the roaster to be controlled by a tablet or any other device. This method sometimes ran into connection issues so I switched it to a python script running tKinter for the UI paired with a touchscreen monitor. I recently swapped the python script to Java using JavaFX for the UI.

Arduino code can be found here:
And the UI code for the Raspberry Pi:

Warning: This project involves electricity, moving parts, propane, and fire. I will not be held responsible for damages and/or injuries resulting from reproducing this project.

I was able to find a lot information for the project at You can find my original build log here.

I started with mockup with Google Sketchup to visualize what I wanted to build. I decided on a drum roaster based on commercial designs scaled down.






I have never welded before, after some (admittedly not enough) research I bought an arc welder. In hindsight, a mig welder would have been a much better choice for welding the sheet metal.

After spending a few hours watching welding tutorials on youtube, I started welding the frame with angle iron and flat stock.

When I started welding the sheet metal had trouble with burn throughs. For the drum, I decided on 8″ diameter with a 10″ length to allow a 3lb. capacity.

My original shopping list:


Gas Fittings

For the burner, I used black iron pipe drilled with holes and a 1/4″ NPT orifice for the propane.

Here is a video testing the burner:

Inside the drum, vanes are used to stir the beans.


A second row of vanes is added to push the beans to the to the back of the drum as they push forward.

Using plexiglass on the front face, I was able to test balance of the drum and mixing of the beans.

The shaft was off-center causing a wobble so I recentered it.

I started work on the front plate, and needed to bend the drum thermocouple to allow clearance for the vanes.

As the beans roast, the outer skin (chaff) comes off. The chaff can be collected using an exhaust fan and cyclone separator. The chaff is pulled into the separator and falls to the bottom where it is emptied by opening a trapdoor underneath the box.

For the cooling tray, I used a 10″ stainless steel stock pot cut down to 4″ high. The stainless was too thin to weld, so I used JB Weld to mount it in place.

I adjusted the burner to make it longer and more narrow. I also added legs to lift it off the bottom of the chamber.

The flame is controlled using the PWM output of the arduino through an H-Bridge to the proportional valve.

Test with a potentiometer:

Test with arduino output and h-bridge:


I used a sliding gate to release the beans from the hopper to the drum.

To calculate the BTU’s I used a pan water and measured the temperature change over time.

A BTU is the amount of energy used to raise one pound of water one degree.
BTUs = delta T * lb of water
If I average the temperature change to the 2:30 mark for the two trials, delta T = 190.85 – 75 = 115.85
6 Cups of water = 3 fluid pounds = 3.129 pounds
115.85 * 3.129 = 362.49 BTUs
And we need to find that per hour
362.49 / 2.5 minutes = 144.996 BTU/minute
145 * 60 minutes = 8,700 BTU/hour

The side and back panels were off during the test so the calculation was only an estimate.

For the door I used a 3/8″ steel rod and a 3/8″ steel tube welded to the face plate.

For paint I used high temperature primer.


The flame is lit using an electronic bbq ignitor. The flame is monitored with an infrared sensor. I also flared the side vents for better air flow.


First roast.

Touchscreen monitor with tKinter UI.

Video of the user interface.