Temperature Controller Board Final Design

The temperature controller PC boards have arrived. I was amazed at the interest. In the end, fifteen of the boards were requested. There have been a few people who have asked for them since the order was placed so I'll probably do another order of the boards in the next PCB order.

Made a few small changes to the board for the next order. Mainly improved the silkscreen to make it easier to identify the inputs and outputs at the various headers. Updated Eagle files attached.
I replaced a bad upload of the code. Also, I forgot that you will need a couple of non-standard libraries (RotaryEncoder, written by SunboX: http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1205879808 and max6675 by Ryan McLaughlin: http://code.google.com/p/max6675-arduino-library/). The files for these libraries are attached and you will need to install them in your Arduino libraries folder.
The source code is in main.zip.
In case it is easier, I've attached the .hex file for the code. You can just program that into your 328 and not bother to compile. If you load up the code in flash, you might also want to load up the eeprom.hex file as well (it contains the initial PID parameters). Otherwise, you need to set the PID parameters via a processing sketch as described by Jim in his Instructable (http://www.instructables.com/id/Closing-the-Loop-on-Surface-Mount-Solder...).

I've attached the final Eagle files to this blog entry. I've also generated a bill of materials and a corresponding parts placement diagram which are also attached.

In order to put the system together, you will need to make a few choices:

First you will need a way to control the AC to your heater. The temperature controller puts out a strictly on/off 5V logic signal which is used to control temperature. I bought a solid state relay off of Ebay for around $7.00 (check with me if you want a pointer to the same unit). The specs were 3-34VDC control, 24-480VAC load at 25A. Since the hotplate is specified at 10A/120VAC that seemed to be adequate and I've run tests with holding a constant temperature for several hours with no noticeable heat buildup on the SSR. Alternatively, in his original Instructable on surface mount soldering, Jim showed an AC control circuit you could build. He has since designed a PCB for that circuit and is willing to put some on the next PCB order if people are interested.

You will also need one or more temperature sensors. If you want the IR sensor, you need to buy the appropriate IR thermometer from Harbor Freight and do the modifications shown in this Instructable. If you want the thermocouple sensor in addition to or instead of the IR, then you need to have a K type thermocouple and buy the parts for the thermocouple interface.

The parts from the LCD/AVR section of the board are all required. These are sufficient to build an Arduino compatible (Dorkboard) processor with an LCD interface. This hardware will read the IR sensor. You will also need a suitable LCD (something like this 16x2 backlight unit from Sparkfun or any other HD44780 compatible). Note that the contrast control potentiometer specified is a thumbwheel style so that it is easy to adjust the contrast from the side of the board when the LCD is mounted on it.

You also need to decide what kind of switches you want to use to control the unit. I'm using an encoder with a switch (specified in the parts list) which provides a nice way to set the temperature but you could choose other combinations of switches instead if you prefer. The current code is set up for the encoder plus one push button to reset the system to the initial state. Once you decide on the inputs you can figure out what headers you want to populate. I've brought everything out to header pinouts where you can solder male header pins onto the board to use with plugs or you can solder wires directly to the board and run them to the switches and sensors. All of the headers are on the part of the board which is unobstructed by the LCD with the exception of the two pins for the thermocouple input. Those two will have to be right angle header pins to clear the LCD. There are also headers for both the five pin Dorkboard programming connection and a standard 6 pin AVR ISP header so you can choose which you want to use for programming the AVR.

I've attached my current Arduino sketch to run the temperature controller and a list of how I'm using the pins on the Atmega328 (Note that the current code requires an Atmega328 to provide enough RAM space).

The parts for the power regulator section are optional. You can leave that whole section out and provide 5VDC power for the temperature controller board. If you are using the IR sensor, you can either supply 3V to the appropriate pin on the controller board or you can leave the battery in the IR unit. Or you can build out the 5V and 3.3V regulator section and provide power from an appropriate wall wart (at least 6.5VDC and 200mA or so).

Parts Placement.pdf61.15 KB
tempcontrol_mount_parts.txt3.25 KB
Temp Controller signals.txt183 bytes
RotaryEncoder.zip2.21 KB
max6675.zip148.61 KB
main.zip9.58 KB
temp_control_hex.zip13.55 KB
tempcontrol_mount3.brd.zip9.79 KB
tempcontrol_mount3.sch.zip33.23 KB