Reflow Oven Controller

This shows the build for a simple Arduino-based reflow oven controller. This converts a basic toaster oven into a temperature controlled reflow oven for making surface mount circuits. The temperature profile is read from a simple text file on an SD card. This makes changing the temperature profile very easy, without any new code to upload.

I’ve not done much surface mount work, mainly as I like the projects that I build to be easily repeatable with minimal tools. But there are a number of ICs which are only available as a surface mount package.

Also, surface mount boards are smaller, so consume less resources, and do not require drilling all the holes.

Finished unit

Here is the finished unit. It has worked on a couple of test runs, but I will upload photos of the first boards built on it.

The oven is controlled with a solid state relay. It still works as a timed oven (but I will not be cooking my food in it after filling it with lead fumes).

The LCD screen shows the actual temperature (Ta), the setpoint temperature (Ts) the time taken in seconds (T) and the phase of the temperature profile.

This is crammed into the laser cut enclosure. It uses the DataDuino as the basis for project (with SD card and real time clock). A serial interfaces LCD screen (again with an Arudino) is used as the display. Temperature is measured with a thermocouple and a specialist  k-type thermocouple amplifier IC.

Reflow temperature profiles

There is quite a lot of information on the temperature profile required for reflow solder techniques.

Here is one link:

Basically there are four main stages:

  • Warm – Approx 90s getting up to 150C
  • Soak – Stay between 150 and 200C for 60s
  • Reflow/Peak – Ramp up up to 250C and stay there for at least 5seconds. Takes around 60s
  • Cool – The slower cooling the better the connections

Obviously each solder paste and set of components is slightly different. I needed a generic reflow curve which I could easily adapt.

I did this by implementing the reflow curve data within a text file on an SD card. This can be changed easily and the new set points are loaded each time the unit is switched on.

The data is in the format:

Start Temp, Finish Temp, Time, Rate

These are in .csv format and you can enter as many as you like. These data points will be used to create the temperature setpoint. A hysteresis controller is used to control the heater to get to the set point.

The setpoint temperature is calculated from first figuring out if the rate is +ve or -ve. This will then increment or decrement the setpoint. The setpoint temperature will then be the start temperature which is then ramped up to the finish temperature at the ramp rate. If the ramp is set to zero then the ramp is calculated from (finish temp-start temp)/Time.

Toaster Oven conversion

I used a second hand toaster oven, which cost £8 from the car boot sale. It was in almost new condition. It is 700W rated, which is a bit under rated it turns out, and uses infra-red elements at the top and in the base.

A solid-state relay (from a Chinese manufacturer, which I had lying around) is used to control the oven. This can cope with 25A, but I am only putting around 3A through it. The back of the relay is a metal plate for heat-sinking, which I bolted to the metal casing of the toaster. This would not be OK for leaving it on all the time, but for the 4-5mins for a reflow oven, this should be OK.

Testing the unit. The relay is added to the mechanical timer contacts.

The relay is mounted inside the case, onto the back metal plate (which is incredibly thin so probably will not work as an amazing heatsink).

Here I am testing the oven using a 5V input. The heaters are controlled well.

Temperature measurement

I have written about temperature measurment before. This time the temperatures are quite high. We need to be able to measure up to 400C with no problems. The typical technique to do this is to use a thermocouple. This is a set of two junctions of two dissimilar metals. If one junction is kept cool while the other heated up then a very small voltage is generated (by the Seeback effect).

The problem is that this voltage is very small (a few uV per degree C). Also a cold junction is required which must have a known temperature.

To convert the thermocouple value into a more useful voltage I used a thermocouple amplifier IC. This was the AD8495CRMZ from Analog Devices. This was expensive (around £6 from Farnell), but did everything I needed. It has an internal calibrated temperature sensor so that it knows the cold junction temperature, a conversion for K type thermocouples and an amplifier. The output is 5mV per degree C, hence it is much easier to read by the microcontroller, especially at higher temperatures.

I used this thermocouple from Farnell, which is good for up to 1000C.

The IC is only available in a surface mount package, hence I needed to use these adaptors I made. The irony of needing a reflow solder oven to solder these is not lost on me, but I hand soldered these.

The final circuit was taken straight out of the data sheet. Which suggests using input resistors and filtering capacitors (there are two more capacitors on the back of the board). Also an output RC filter is used to remove any 50Hz hum.

Circuit overview

I am not planning on making loads of these, hence I have not produced a full circuit, so you will just have to make do with these photos and explanations. The main brains of the device is an Arduino based ATmega328 with the DataDuino board. I used this board as I have a load of them. It has an SD card holder in it and a real time clock to give accurate timing pulses (not really required, but I used it any way).

There are three main sections: The DataDuino brain, the thermocouple conversion circuit and a serial LCD display (the green board and the green LCD display).

The DataDuino has the main control code on it. it has two inputs for start and stop switches. It also has output LEDs for when the device is running and an output to control the heater solid state relay.

There were not enough pins to run and LCD display, but I really wanted a user interface which shows various data. Hence I used another Arduino board (home brewed on the Nottingham hackspace PCB workshop) and uploaded the basic Serial to LCD example within the Arduino IDE.

This worked great. To output data to the 16 x 2 LCD screen I needed to create an output which was 80 characters long. The first 40 are for the first line, which then rolls over to the second line for the next 40. This took a bit of working out, but is there in the data sheets if you look hard enough. So I updated this display with totally new data every second.

I like this as a way of adding a display – it only uses two pins and you can output error messages etc. I will probably roll a PCB for implementing this, please email if interested in one.

Arduino code

The Arduino code is here. I used the Arduino Uno bootloader and version 1.0.5 of the IDE. It requires a number of libraries to be installed, as listed in the header file. It should be commented to explain what it does. Please get in touch if you would like to know more.


Here are some photos from initial testing. It worked OK, but did not get up to warm temperature quick enough. I ran through one cycle and then tried it again and it worked much better. I think I need a slightly longer warm up cycle, but this is adjustable via the SD card.

You can see the temperature probe near the surface of the test piece of board.

The test was just an old copper clad board with some flux and solder paste on it. But it did flow.

Leave a Reply

Your email address will not be published. Required fields are marked *