Introduction: A Fully Automatic Coffee Bean Roaster (Arduino)

Picture of A Fully Automatic Coffee Bean Roaster (Arduino)

I got introduced into the world of Arduino when two friends informed me about this little device independently from each other. I read about it and was sold immediately. What if I had this so many years ago, how much would I have invented already, what would I have made? What would my house have looked like?

I ordered one directly and there I was playing with lights, sensors, etc. But then? ..... it has the potential to control everything, but what? What should I make?

I think this is where more people get stuck. What should I do with it?

Coincidently I just finished constructing a coffee roaster, made from an ordinary popcorn machine. In basic it works by a fan blowing air past a heating element through the green coffee beans. By controlling the fan speed, I was able to control the temperature of the air roasting the beans. But, the roasting process turned out to be quite hands on, as the temperature needed to be kept constant following a profile, which was done by measuring the temperature the whole time and adjusting the fan speed with a pot meter.

That, I thought, should be automated....

Step 1: Materials Used

Picture of Materials Used

For this project I used:

-1x  Arduino Duemilanove
-1x  Arduino protoshield v2 (sparkfun) with breadboard
-1x 12x2 LCD screen (use a parallel one, would recommend a serial LCD)

-1x  electric popcorn machine
-4x  1KOhm resistors
-1x  small push button
-2x  1KOhm potmeter variable resistor
-1x  IRF540N
-1x  temperature sensor ZTK 33 V/7 mA
-1x  solid state relais S216S02 (sharp)

-19V adapter (used the one of my laptop)
-plugs, wires, etc

Step 2: Adjusting the Popcorn Machine

Picture of Adjusting the Popcorn Machine

The popcorn machine itself is adjusted by placing a temperature sensor, disconnecting the heating coil and fan motor contacts and installing wires and a solid state relais. Be sure to read my previous instructable as well, since that was my starting point.

Temperature sensor:
The sensor is installed on the inside of the aluminium cup, just above the sleeves, as it needs to measure the temperature of the beans while roasting. I used a piece of silicon (from a silicon hose) to make a heat resistant housing to keep the sensor in place and prevent short circuit. Drill a hole in the cup and place the sensor as shown on the photo's. Take care the sensor leads don't touch the metal of the cup. Outside the cup, the sensor is connected to wires long enough the lead out of the popcorn machine. The sensor and wires are secured with a tierap. Take care that the wires don't touch the cup either, as they can melt.

Installing a solid state relais to the heating coil:
The heating coil needs to be disconnected from the motor and from the heat security build into the popcorn machine. The electricity cord of the machine (220V) should be directly connected to the heating coil and the switch. In this circuit you build the solid state relais. Wires to control the solid state relais run out of the popcorn machine to the Arduino.

Fan motor:
The contacts of the fan motor are disconnected from the rest of the electronics and connected to two wires running out of the popcorn machine. A diode is placed between the two contacts to stop electricity being produced by the motor, after it is switched off but still turning. As power supply, a plug is installed to attach the 19v adapter of my laptop.

Step 3: Connecting the Arduino

Picture of Connecting the Arduino

As the roaster should be able to operate without a pc connected to it, I installed it with a LCD screen. The LCD screen I have is parallel and a bit annoying to connect. I therefore made a LCD module I can simply take off and use on other projects. The module is on its own breadboard with a potmeter to control the light and 8 wires connecting to the Arduino. I would recommend getting a serial LCD as you only need 3 wires.

The Arduino is equipped with a protoshield with a small bread board. It consists of:

* The temperature sensor: a simple voltage divider connection with a 1KOhm resistor, using analog port 9.

* The fanspeed controller: pulse width modulator (PWM) of port 3, connected to a mosfet (IRF540N) which controls the fan motor with 19V coming from the laptop adapter. Use 1Kohm resistor between base and digital 3.

*Heater controller: turned on or off by the solid state relais, connected to digital port 5 (dont forget the 1KOhm resistor or you blow you relais).

*A potmeter to adjust the minimal fanspeed, connected to 5V, ground and analog port 0.

*A button to start the roasting, connected to digital port 6, use another 1KOhm resistor here.

*LCD connection Digital pins 7-13 connected to RS, RW, E, d4, d5, d6, d7 of the LCD screen (and of course 5V and ground)

The popcorn machine is connected to the Arduino through 4 wires, all connected to metal pins to easily stick them in the holes of the breadboard.

Step 4: The Arduino Program Code

Picture of The Arduino Program Code

The program to run the Arduino consist of work of others, as it include a library for the LCD display (LiquidCrystal.h) and the PID control (PID_Beta6.h) , and a protocol to communicate with the associated Arduino PID Tuning Front-end, running on Processing (same maker as the PID control library, great work from Brett Beauregard!)

The program does the following:
Display a welcome screen and waiting for you to push the button. Then it turns on the fan but not the heating coil and it allows you to set the minimal fan speed at which the beans still move a little (you can lower it during the roasting as beans get lighter). When you press the button again the heating coil is turned on and the roasting starts. The programcontinuously measures the temperature and adjusts the fanspeed in order to match the set point. It will lower the fan speed to increase the temperature of the beans of increase the fan speed to do the opposite. If the beans get more than 3 degrees above the set point the heating coil is switched of, which will lower the temperature directly. The set point is updated along a profile that is set into the program. First heat up to 150C and stay there for 1 minute, then slowly increase to 190C and stay there for 1 minute. Then slowly increase the temperature again until the final temperature is reached. At this point, the fan is set on max and the heating is turned down. The roaster stops when the beans are lowered to 40C.

After lots and lots of tweaking, the final program code to run the coffee roaster can be found in the file below.

Step 5: Testing..... and Roasting Your Coffee Beans

Picture of Testing..... and Roasting Your Coffee Beans

Ok, so now you connect the popcorn machine to the Arduino, to the 19V and 220V power supply and you connect the Arduino to the LCD screen and your computer, and you are ready to test your roaster.

I guess if you use the program, the temperature sensor should be more or less ok. But better be to calibrate is, and if necessary to adjust is. For this you would need a thermometer which can measure up to 220C. Measure at difference temperatures and adjust  "a = 0.6271 and b = -213.13"

Next I suggest to try out some things, see how it works and follow the temperature profile with the front-end program. You will need some beans to be able to follow the temperature profile. Take good care that you set a minimal fanspeed that still keeps the beans a little bit moving. Otherwise the beans might burn (can work out dangerously!). As the roasting progresses, the beans get lighter and therefore the minimal fanspeed can be lowered.

If this all works out, I suggest you try your first batch of coffee beans. Mine can take up to 100g of beans each time, which isn't so much (but then I dont drink THAT much coffee). If it works out fine, you can start to experiment with different profiles (I would suggest to start with the final temperature settings)

Good luck and enjoy.

I have thought about an additional controller that would keep an eye on the beans. If they stop dancing then the fan speed should be increased a little bit. Couldn't think of any way to sense this, so if you have any suggestion please let me know.


Ghild.Zero (author)2017-05-29

could you tell me more details about the Fan, how strong the fan in CFM ? (or label specs on the motor)

KarosL (author)2015-11-26

iam a total noob in electronics (interested in coffee :D ) so i wanted to ask if i can use my arduino uno r3 instead of the arduino Duemilanove?

survivaldude (author)KarosL2016-11-19

survivaldude (author)KarosL2016-11-19

You should be able to use whatever Ardunio/Microcontroller you want to as long as you have enough input/output pins. I haven't looked into the diagrams of this project in particular, but the Uno is almost exactly the same as the Duemilanove (just a bit faster boot load time), so you should be fine with an exact substitute.

apsis0215 (author)2016-07-15

just thought about this, did a search and instruct ables came up. great job! I was wondering if you can hear 1st and second cracking over the sound of the fan. I was thinking of incorporating an audible sensor that would listen into that frequency and apply that into the equations for roasting...

My first thought was to use a heat gun with an air stream temperature monitor, is air roasting better than direct contact and turning?

JamesN101 (author)2016-05-02

You could use a pressure sensor at the fan outlet. This should give you a reasonably steady state signal between the two flow regimes for static beans (higher pressure), and fluidised beans (lower pressure). I'm not sure if the relationship will be linear, but there will be a relative pressure drop (pressure over fan speed) once the beans fluidise. You could slowly increase fan speed until you notice a step change in pressure.

snightingale1 (author)2011-09-22

would a better way to do this be to always run the fan at full and use PWM + solid state relay to adjust power input to the heating element? Seems to me like this would offer more direct temperature control and could overcome minimum fan speed problem.

He chose the easier problem, since the heating element requires way more power to regulate. It would be a whole other issue putting your board in the way of that.

ben clarke (author)2014-03-25

Why did you run the fan off of 19 volts not 240 from the wall?

robzimpulse (author)2014-01-27

what program do you used in step 5 to make some pid graph? I'm in progress to make some incubator and need to plot the response. Roby

nightlife31 (author)robzimpulse2014-01-28

Hi Roby,
That is the PID Front-End that was developed by the guy that made the PID library. It is written in processing and works very nicely. You should be able to find it here:


p.s. let me know if you document your works somewhere, Ill be interested to have a look :)

dkelly1966 (author)2009-11-16

A microphone could not only tell if the beans were moving but could also tell when they crack :)

nightlife31 (author)dkelly19662009-11-22

Nice idea. But the fan would make too much noice to hear the difference between moving and non-moving beans. I thought about an infrared sensor to measure bean movement, but you would be blowing hot air against the sensor and I dont think that will be succesfull either

SugarCluster (author)nightlife312013-09-21

Piezoelectric sensor will be enough to pick up cracks and bean movements.
Just JB Weld it to the outer cup,or to the case of popcorn popper.
It is used to detect knocks on some security systems(such as window break sensor),and it's fairly cheap(on RadioShack,search for piezoelectric speaker,and buy some of them and pry open the case. You can reverse it to make speaker,or the contact microphone.).
Hope this helps.

"tilas75" said this first,but it was too short to give some solutions.

snightingale1 (author)2011-09-22

ah just read lower comment about max temp not being achieved with fan on full. Makes sense. Guess other approach could be set fan at speed that would allow adequate top temp and then adjust heat source. (author)2011-05-28

If the beans lift up a bit, you could set up what is known as a 'reed switch'. Two thin strips of metal, say Stainless steel, 1/16th apart. As the beans lift up they close the switch. That would make the logic easy. Or even bump it over and over, as long as it is closing and opening the controller would know that they were moving.

To add function, mount it on a threaded rod so you can tune the level easily.

This is the method used in polyethylene plants to measure the level in holding tanks. Poly is made as small pellets, shaped like a coffee bean but smaller. Of course they don't move around, just fill or drain.

varocketry (author)2010-12-24

Nightlife - noticed you temperature were in Celsuius so your 300dC resistor would be able to measure 572dF - plenty!

Again, great job.

varocketry (author)2010-12-24

Some coffees require temperatures of 420-440 deg F for a successful second crack. The temperature sensor needs to read at least 450 deg or 500 degrees.

Is there a recommended substitute that will read this higher temperature?
Thanks. I'm definitely going to study this -- I haven;t even experience with Arduino.

Adam Manick (author)2010-11-04

Maybe use a sensitive vibration detector. you can even make one.

tilas75 (author)2010-08-09

How about a piezoelectric sensor?

a_pyles (author)2009-12-31

How does the temperature sensor work? 
Where do you put the probe?
Whats the maximum temperature that this sensor can read?

I was thinking of building something similar. But using the 
max6675 thermocouple amplifier. Is there any advantage to your approach over the max 6675? The 6675 is about $12.00 ( from sparkfun.) 

nightlife31 (author)a_pyles2010-01-12

Sorry for the late reply. The temperature sensor is a T sensitive resistor which can measure up to 300C if I am not mistaken. I got it from a local electronics supplier and choose this one as it was the only one this width measuring range. The sensor is located in the metal tin inwhich the popcorn or beans are roasted, just above the air sleaves.
Recently I have been unsatisfied with the temp readings. When I roast beans and measure the temp externally during the process with the thermometer I also used to calibrate the sensor, I get a deviation of about 10C, which is way too much. Therefore I am now also considering a thermocouple and already got myself the MAX6675. The pins on this chip are however soo short that you need a small breakboard to attach it to and extend its pins (also orderable from sparkfun I think). I dont have any experience with thermocouples, but as they are used widely in industry, I assume they are more reliable to the thermistor I now use. Due to limited time at this moment, I am not sure when I will start with it.
Let me know what your progress is

Regards, Rutger

steveastrouk (author)nightlife312010-03-01

According to the datasheet for the temperature sensor, it can only work up to 150 C.

A T/C will be a lot better.


rnr (author)2010-02-11

I am 3/4 of the way through building your system.
Do you have an alternative for the sharp relay as it is proving difficult to source in Australia and there are some issues about importing them into the country due to local sharp licensing issues.

nightlife31 (author)rnr2010-02-12

It isn't important which brand of relay you use. I prefer to use a solid state one , but see no reason why anormal one wouldn't work. The most important is that it is able to switch the high current of the coil. You can calculate the amperage you need. You can find many types on ebay, although some are quite bulky.

Recently I made some modifications to the roaster, but I have been to busy to finish it and put them online. In the program currently in this instructable I start the roasting by directly turning on the heat control. Because the T is below the setpoint of 150C, the fan speed is automatically turned low and you need to fiddle with the min fax speed settings to keep the beans moving. I adjusted this by heating up the beans till 150C degrees while having the fan at max speed. This works without a problem, it just takes some seconds longer to reach 150C, but the whole min fan speed issue is solved. The reason for this is that once the beans reach 150, a lot of water has evaporated and their density is much lower.

I still want to change the temp sensor for a thermocouple, as I am in doubt about the accuracy of the one I use now.

Hope this is of any help to you. I would be very interested in the final result, so keep it posted.

VitoVonAntwon (author)2009-12-03

Maybe a webcam, and some optical recognition software.  That sounds really complicated, but probably the best bet.

gmuller (author)2009-11-04

Why did you elect to modify the fan speed and not the temperature in your design? I would think you would control the temperature up and down rather than the fan, that way you can leave the fan running at a constant speed (and cool the beans afterwards), and adjust the heat as needed...

nightlife31 (author)gmuller2009-11-08

Hi, need to correct my previous remark. I have been working on this for a while and forget that I actually thought of controlling the heat in the beginning. Problem is that my popcorn machine isn't able to reach high enough temperature with the fan at max speed and that is why the fan speed was controlled and not the heating coil.

It would be possible to solve the minimal fan speed settings when combining both heating and fan speed control, as the coil is able to heat the beans enough for the water to evaporate and them to get lighter. So first controlling the heat with the coil untill the temperature cannot get higher and then switch to fanspeed control. Although this only requires software changes, it is a bit more complicated. I'll think about it :)

gmuller (author)nightlife312009-11-08

Is this just because the popcorn roaster speed is "regulated" by a temp sensor? I built a roaster from a convection oven and had to disable this temperature governor by disabling this sensor. Of course you run into the safety issue of not having ANY temp control other than your arduino, but s long as you're being reasonable with it, I don't suppose you could damage anything.

Anyway, I'd be curious to see this done...I'd like to mod mine to do something similar...

nightlife31 (author)gmuller2009-11-22

The popcorn machine isn't really high quality. I wasn't even able to make popcorn with is. I bypassed the build-in bimetal temp control (which switches the heating coil on and off), but still the temperature could not reach high enough with the fan at max.

I surely wouldn't leave it running unattended, but with some common sense you will not burn down the house.

nightlife31 (author)gmuller2009-11-05

Good point, as I come to think of it.
Since I came from an already working system (see the other instructable), this was the more logical way to go for me. But your solution would solve the minimal fan speed problem.

Controlling the heating coil with the Arduino would be easiest to connect the solid state relais with a PWM port. I am not sure if the solid state relais and the heating coil (1200W) could handly very frequent on/off switching. (My electronic knowledge is rather limited).

naumanalikhan01 (author)2009-11-06

Good application but this technology is making consumers lazy and more lazy.

gmuller (author)naumanalikhan012009-11-08

I disagree. If that were true 4000 years ago we'd be saying the same thing about domesticating plants. Access to leisure time is what creates the technological insights that we've enjoyed since the dawn of civilization.

Why would that be? Instead of making yourself lazy Senseo coffee substitute or buying overhyped starbucks coffee, with this (and a good coffee machine and grinder) you can discover what coffee is about and develop your own taste.

WyoJustin (author)2009-11-06

What a project. What a feat.  What an instructable!


Bartboy (author)2009-11-04

I'm too lazy to read all of this... :P
Does/how hard would it be to make it do this every morning at 7, make the coffee, pour it, and add cream?

HarveyH44 (author)Bartboy2009-11-05

You wouldn't want to do this every morning.  After roasting, the beans need to rest for a few hours.  Usually, I wait 4-6 hours, or over night.  I've got a different home-brewed roaster setup, which does about a pound of coffee.  I use a stopwatch and listen to the popping and crackling, and sort of guess at when they are done enough.

Bartboy (author)HarveyH442009-11-05

But could this be set up so it roasts the beans, Grinds them, and makes the coffee overnight?

HarveyH44 (author)Bartboy2009-11-05

Might be a start, but you should probably read up some on the roasting process.  Just how lazy are you anyway?  I roast at around 428 F, wouldn't leave it unattended, something goes wrong, potential fire hazard.  Green coffee comes with a thin membrane on each bean, which splits, and blows off.  It's best to roast outdoors, didn't mention the smoke and steam, or strong aroma.  Roast enough to last a week or two, grind before you brew.

nightlife31 (author)HarveyH442009-11-06

You can find some info on the roasting process with links on my other instructable. This one is just about making the manual coffee roaster in an automated one, that is able to follow a temperature profile instead of just up to x degrees.

joren (author)2009-11-04

 Great (proof of) concept!  I would be curious how you think you could scale it up to do batches in the 1+ KG range, which would be much more practical? 

kelseymh (author)2009-11-04

COFFEE!!!  What a most excellent application, and well written, too.

About This Instructable




More by nightlife31:A fully automatic coffee bean roaster (Arduino)Popcorn machine made into a high class  coffee roaster
Add instructable to: