I cobbled together a simple temp controller to try to get a feel for what it'll take to make one that will work for my temp controlled crystal-growing chamber. For this first iteration I've just got a simple PID-controlled heater, LM75 I2C temp sensor, and a 25W heater element.
For now I'm just running on an Arduino and a crappy bench supply (with a way-too-bright power indicator). For the finished project I'm thinking I will use a Teensy 3.0 as I've got some samples of them that I'd like to do a write-up about.
To house the controller I'll be repurposing an old modem that has a front panel with a small LCD and a set of buttons that I can use for menu navigation. I can mount a power supply and all the electronics inside and put a connector on the back that plugs into different chambers. This big chamber will be nice for large beakers, but I'd like to have a smaller one for test tubes. I can put a resistor on the chamber side of the connector so the control box can identify which chamber is connected and select the appropriate PID tuning.
I ran this for a few hours to see how it behaves. The 0.5C resolution on the sensor is pretty bad, but overall the results were encouraging. I don't really care much about how it handles large rates of change, since the hot solution will go into a preheated chamber. The main concern will be whether it can hold a stable downward ramp with minor fluctuations outside the chamber. I haven't tested that yet.
Next step is to get the heating element mounted so it is stable and out of the way and then test with a beaker of hot water so I can see how well it do temperature ramping. I'm pretty sure I'll need to upgrade to a higher resolution sensor for really long ramps, but for a day or two this 0.5C should be ok if I screw with the PID tuning enough.
The PID library has some kind of auto-tune that looks interesting, but I haven't figured out how to use it yet.