I developed a wireless, web controlled PID temperature control system for a single brew kettle using the $35 credit card sized Raspberry Pi computer.
The server side is written in Python which should be really easy to learn and expand to control pumps, solenoid valves, more heating elements, etc. I really like Python for quick development and its libraries. The web server is web.py. http://webpy.org/
On the browser side I'm using jQuery http://jquery.com/
and plugins for real time display (gauges and charts). Mouse overs on the temperature plot show time and temperature for the point highlighted. It currently works in a Firefox browser. Real time status information is sent back from the Raspberry Pi approximately every second to the browser using AJAX to prevent page refresh.
For IDE I'm using Aptana Studio 3. After I make changes to the code on the laptop I press the synchronize button and the changes are sent wirelessly over to the raspberry pi so development and testing is very quick. I also can use putty on windows to ssh login into the raspberry pi computer.
For PID tuning I made it really simple to tune the system using the Ziegler-Nichols open loop. After setting the heat output to 100%, wait for the input to changed by 10% and then just highlight the sloped line after the dead time on the temperature display to calculate the parameters. Then, after I programmed it all, I found out that this method is known to overshoot the set point. I played around with the parameters in order for it to work well with no overshoot. There is a better way to tune it using the ITAE-load method described on this site: http://www.vandelogt.nl/htm/regelen_pid_uk.htm
but it takes a long time.
The electronic side of things is pretty simple and easy to put together (not including the ssr, heating element, etc.):
I use the Raspberry Pi, Adafruit Pi Plate Kit, DS18B20 temperature sensor probe, jeenode output plug http://jeelabs.com/products/output-plug
, 20 x 4 LCD and LCD117 kit, LED, cheap belkin wifi dongle, and a couple of resistors
More information and source code can be found on the following web site: