I found an aluminium block with heater elements in the trash and thought I’d recycle it into an Arduino controlled hotplate. I use it mostly for SMD soldering but from time to time I also do acetone-etching of ABS 3D-prints or even for curing small silicone moulded parts.
To insulate the plate from the housing I used PTFE parts with steel screws in the center to elevate the plate from the housing. I had to add the drill holes but was missing the right drill bit to make a counterbore hole for the screw head and had to resort to the Dremel, aarrgh. With the hot part ready to run some tests I hooked it up to 230V mains AC power to see how fast it can heat up. Turns out the heating elements are only about 200W which is less than I’d like for the hughe chunk of aluminium. The advantage is that the heat distributes nicely and there are hardly any hot- or cold-spots.
Time to make this thing regulated. Initially I wanted to copy the code from the hot-end control of the Marlin firmware for 3D printers. The code was too much entangled with other firmware functions so it was easier to just do it from scratch.
As in hot-ends of 3D printers I used 100k glass bead NTC sensors. They are very accurate, have a high temperature range and are easy to read using just an analog input without the need of using any amplifier like thermocouples do. Since the hotplate runs directly on mains power things can get dangerous. I do not want the aluminium block to accidentally melt if a solder joint should start to fail or the NTC degrades or something. So I added two NTC sensors, one is used to regulate the temperature, the other one just monitors the temperature and switches the relay off if temperature rises too high. If I had to be able to let the hotplate run for a long time without supervision I’d probably add a hardware based safety mechanism.
The drawback on using NTC is their non linear behaviour:
The formula is based on the resistance value at 25°C (R25) and the B25_100 constant that describes the change in resistance vs. temperature. The B value of the thermistors used in 3D printers is usually B = 3950. To get the temperature we need to build a voltage divider so the NTC can either be used as a pull-up (to 5V) or pull-down to any of the analog inputs. I chose to use it as a pullup. To finish the voltage divider it also needs a fixed pulldown resistor. The value of the pulldown shifts and scales the S-shaped voltage curve.
The resistor should be chosen to have the flattening parts of the curve outside of the used range. With a resistance of 100kΩ at 25°C using a 2kΩ pulldown resistor results in the curve shown above. For temperatures below 50°C the ADC resolution per temperature starts to drop rapidly meaning the resolution will suck. At 0°C the resolution is not even 5°C/LSB. For a hotplate however this is of little concern. Between 50 and 250°C the resolution is better than 1°C and with some oversampling and filtering this will be even better. I created a calculation sheet to generate a lookup-table that is used in the Arduino code.
Sorry, there is not wiring diagram available but it is pretty basic for anyone with knowledge in electronics. For anyone else this project is too dangerous to attempt anyways as it connects to 230V mains AC directly. The pin connections can be extracted from the Arduino sketch.
Here is an incomplete list of components that I used:
- Solid state relay
- NTC thermistor
- I2C LCD display
- AC power socket with fuse
- 5V AC/DC supply for Arduino
- Piezo sounder
This is what the wiring looks like on the inside
The housing was laser cut on the LaserSaur from 3mm MDF wood at the local Fablab. The design was done using pen and paper which I then compiled into a vector drawing using Inkscape. The file can be downloaded here.
Commissioning and test
I found a PID library that supports the use of any relay by applying low switching intervals. In addition I tried to use the autotune library for the PID settings but it did not work that well. I manually tuned the settings to get the fastest response possible without too much overshoot that still maintains the temperature within ±0.5°C once it settled. This took quite a while because the huge mass of the aluminium block makes it cool down very slowly.
The reflow profile was also done by experimenting. It is a little too slow to fit the standard tolerances. It works well during pre-heat and soak but then the temperature does not rise fast enough during the reflow period. It takes more like one minute to reach the peak temperature instead of the recommended 30 seconds. It still works even with the dreaded lead-free solder and with leaded solder I do get flawless solder joints.