Soldering tiny SMD components can be quite challenging, but the process can also be automated. This can be done by applying soldering paste and baking it, either in a (reflow) oven or on a hot plate (like a cooking plate in your kitchen). Around the web, I've seen many DIY reflow ovens; in my opinion they have one big downside: they take up a lot of space. So I decided to build a hotplate instead.
The hotplate is fully programmable, so that any reflow profile can be added. The reflow process is then fully automated. Let's get building!
Step 1: Parts & Tools
- Hot plate, I got mine from an old wok
- Solid State Relay (SSR)
- Power cord
- USB powerplug (US plug)
- Prototyping board
- Arduino nano
- Female headers
- Type K Thermocouple + MAX 6675 amplifier
- Push button
- USB to mini USB cable
- Wood glue
- Soldering iron
Step 2: The Case
For the case we have two options, depending on your hotplate. A first option is to modify the existing enclosure, this is viable if it is big enough to accommodate a SSR, LCD etc. In my case however, there was not enough room, so I had to design a new one.
The case is made out of lasercut MDF. Due to the living hinge, this design can only be made on a lasercutter: small slits in the MDF make it able to bend. The pieces can be glued together as a puzzle, just use enough clamps. Add the hot plate and secure it in place (mine is secured with screws in the bottom).
Some additional holes need to be drilled: one for the power cord, one for the button and two for the LCD. This way, any button, lcd, ... you have laying around can be made to fit. The LCD can then be screwed in place, together with the button.
The thermocouple should be firmly pressed against the hot plate. Drill a hole and feed the thermocouple through. Next, it should be pressed against the MDF. I used a small tin strip, but you could also use tape or a zip tie (drill 2 holes next to the thermocouple hole and feed the zip tie though them).
Something to be aware of: you might be wondering if using MDF in combination with a 250°C cooking plate is a good idea. In general it isn't, but I have made the case such that this is not a danger.
The MDF parts only touch the feet of the hotplate, which are significantly cooler (max 60°C) than the top of the hotplate. Everywhere else, the MDF and hotplate are separated by a small air gap. Since air is a very good insulator, the MDF doesn't heat up at all, let alone catch fire. Furthermore, the temperature is only high during a few minutes, so the legs can never reach the same temperature as the top (steady-state is never reached).
I added the Fusion 360 file so that you can adjust it to your needs. Just keep the warning above in mind when tuning the design for your own hotplate.
Step 3: Electronics
The electronics part of this project is quite straightforward, we only need to connect some modules together. The Arduino gets the temperature from a thermocouple, whose signal is amplified by the MAX6675. It then displays the temperature on an LCD and switches a Solid State Relay (SSR) if needed. Everything is depicted on the diagram.
Since they don't draw a lot of power, we can simply connect everything to the Arduino pins and configuring the required pins for power and ground.
Due to some space limitations, it didn't turn out as neatly as I had hoped. I mounted everything to a small piece of perfboard, soldered to the back of the LCD screen. The MAX6675 was taped to the back with some double sided tape.
The Arduino is powered via the mini USB port, so we connect it via a USB cable to the power brick. It is a good idea to test the system at this point before going any further.
We can now connect the hotplate itself. Since this is mains wiring, we should be very careful: make sure everything is unplugged when working on it!
First of all, we should ground the hotplate to prevent electrocution if anything goes wrong. Strip the power cable and firmly screw the yellow/green grounding wire to the casing.
Next, we will connect the two terminals of the hotplate to the mains via the SSR. Connect the live wire (color code depends on your country) to one side of the SSR. Connect the second side of the SSR to the hotplate via a short wire (same gauge/diameter as the power cable). The other end of the hotplate goes to the neutral wire.
I added a picture of the wiring before mounting the hotplate into the case to make this clear.
Wiring the power adapter is easier: the live wire goes to one terminal, and the neutral to the other. Although I live in Europe, I used a US power adapter for this: the holes in the prongs are very convenient to attach spade terminals to.
That wraps up the electronics, now lets blow some life in it with code.
Step 4: Programming
The code is what turns a dumb wok into a reflow hotplate. It allows us to precisely control the temperature and add custom reflow profiles.
Unfortunately, reflow soldering is not as simple as turning on the heater, waiting and turning it off again. The temperature needs to follow a specific profile, the so called reflow profile. A good explanation can be found here, or on other places on the interwebs.
The code allows to store multiple profiles to satisfy different needs (mainly leaded or lead-free solder). A simple button press switches between them. They are added in the Times_profile and Temps_profile, which are both 4 column vectors. The first column is for the preheat phase, the second one for the soak phase, then ramp up and finally the reflow phase.
Controlling the hotplate
Driving the hot plate such that it follows this trajectory is not straightforward. The science behind this is called control theory. One can go very in-depth here and design the perfect controller, but we will keep it as simple as possible while still ensuring a good result. The input to our system is the SSR, which turns it on or off, and the output is the temperature, which we can measure. By turning the SSR on or off, based on this temperature we introduce feedback, and that is what allows us to control the temperature. I will explain the process as intuitively as possible, and explain how you can characterize your specific hot plate to work with the code I made.
We all know that when turning on a heater, it doesn't instantly get hot. There is a delay between turning it on (action) and becoming hot (reaction). So when we want to reach a temperature of 250°C, we should turn off the hotplate some time before that. This delay can be measured by turning on the hotplate and measuring the time between turn on, and change in temperature. Let's assume the delay is 20 seconds. Fill this in for the variable "timeDelay".
Another way of looking at it would be as follows: if we turn off the heater at 250°C, it would reach a higher value -let's say 270 C - and then start to cool down somewhat. The difference in temperature is the overshoot - 20°C in our case. Fill this in for the variable "overShoot".
In conclusion: reaching 250°C requires us to turn off the hotplate at 230°C and wait another 20 seconds for the hotplate to reach this overshoot temperature.
When the temperature has dropped, the hotplate should turn on again. Waiting for a drop of 20°C would not give a nice result, so a different threshold is used. This is called control with hysteresis (different values to turn on and off). Small bursts of max 10 seconds are used to maintain the temperature.
To verify the controller, I logged the data to an excel file via Putty (a serial terminal for the PC with some awesome features). As you can see, the reflow profile produced is more than good enough. Not bad for cheap electric wok!
Step 5: Test & Enjoy
We're done! We have turned an old wok into a reflow hotplate!
Plug in the hotplate, select a reflow profile and let the machine do the work. After a few minutes, the solder starts melting and solders all components into place. Just be sure to let everything cool down before touching it. Alternatively, it can also be used as pre-heater, which is handy for boards with large ground planes.
I hope you liked the project and have found inspiration to make something similar! Feel free to check out my other instructables: https://www.instructables.com/member/ThomasVDD/