PID Thermostat For The Arduino

PID Thermostat

This is a PID thermostat for the arduino. It supports independent tuning parameters for multiple hardware ‘profiles’, and includes an autotune mode to estimate the PID parameters for a given setpoint.

Installation

Hardware

  • DS18-series (I’m using the DS18B20) temperature sensor
  • Solid-state relay rated for your power source
  • 16×2 LCD display (I’m using the LCD-09052 from Sparkfun)
  • 4 buttons (I think mine are normally closed)

kerinin arduino-thermostatThere’s an arduino shield designed specifically for this sketch which can be ordered for around $25 on BatchPCB. The fritzing source files for the PCB layout are in the fritzing directory.

Software

OSX:
sudo pip install ino
brew install picocom

Other OS’s will have their own picocom install process. Picocom is only really necessary if you want to use ino serial. I prefer to use screen /dev/tty.foo, FWIW.

Sketch

# get it
git clone [email protected]:kerinin/arduino-thermostat.git ./
cd arduino-thermostat
git submodule init && git submodule update

# deploy it
ino build
ino upload

Using

You’ll want to take a look at the pin settings and either adjust your wiring to match or change them to reflect your hardware.

The up & down buttons cycle through the settings menus, the left & right change values. Set your setpoint and it should start driving the SSR

If you’re seeing lots of oscillations or periodic temperature spikes followed by long ramp down times, try running an autotune cycle. This works by pushing the power to 100% and waiting for the temperature to go outside a temperature band around your setpoint (controlled by the ‘Tuning Range’ parameter). It then drops the power to 0% and waits for the temperature to fall below the temperature band. Rinse and repeat until a ‘stable’ oscillation develops, at which point the PID parameters are set based on the amplitude and frequency of that oscillation.

The PID and autotune features use the awesome PID and PID_Autotune libraries by Bret Beauregard. For more information on how they work take a look at this post about the PID library and this post about the Autotune library

kerinin arduino-thermostat SchematicContributing

Please do! Fork the repo, make some changes and send me a pull request!

Future Directions

  • on/off switch
  • I’d like the temperatures to ramp from their current value to the target value over some time period based on the tuning parameters. This should reduce oscillation and overshoot.
  • Refactor the different files into self-contained classes. (Stop sharing global state!!!)
  • Improve the MenuBackend library’s UI handling. Try to remove that case statement in the display code
  • Import / Export profile data from console

 

For more detail: PID Thermostat For The Arduino

 


About The Author

Ibrar Ayyub

I am an experienced technical writer holding a Master's degree in computer science from BZU Multan, Pakistan University. With a background spanning various industries, particularly in home automation and engineering, I have honed my skills in crafting clear and concise content. Proficient in leveraging infographics and diagrams, I strive to simplify complex concepts for readers. My strength lies in thorough research and presenting information in a structured and logical format.

Follow Us:
LinkedinTwitter

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top