Using the STC-1000+ firmware
Project home at Github
Features
● Both Fahrenheit and Celsius versions
● Up to 6 profiles with up to 10 setpoints.
● Each setpoint can be held for 1999 hours (i.e. up to ~41 days).
● Somewhat intuitive menus for configuring
● Separate delay settings for cooling and heating
● Configurable hysteresis (allowable temp swing)
● Approximative ramping
● Button acceleration, for frustrationless programming by buttons
Navigation and menus
By default current temperature is displayed in C or F on the display, depending on which
firmware is used. Pressing the 'S' button enters the menu. Pressing button 'up' and 'down'
scrolls through the menu items. Button 'S' selects and 'power' button steps back or cancels
current selection.
The menu is divided in two steps. When first pressing 'S', the following choices are presented:
Menu item Description
Pr0 Set parameters for profile 0
Pr1 Set parameters for profile 1
Pr2 Set parameters for profile 2
Pr3 Set parameters for profile 3
Pr4 Set parameters for profile 4
Pr5 Set parameters for profile 5
Set Settings menu
Table 2: Menu items
Selecting one of the profiles enters the submenu for that profile.
Pr05 submenus have the following items:
Sub menu item Description Values
SP0 Set setpoint 0 40.0 to 140͒
°C or 40.0 to 250°F
dh0 Set duration 0 0 to 999 hours
... Set setpoint/duration x ...
dh8 Set duration 8 0 to 999 hours
SP9 Set setpoint 9 40.0 to 140°C or 40.0 to 250°F
Table 3: Profile submenu items
You can change all the setpoints and durations associated with that profile from here. When
running the programmed profile, SP0 will be the initial setpoint, it will be held for dh0 hours
(unless ramping is used). After that SP1 will be used as setpoint for dh1 hours. The profile will
stop running when a duration (dh) of 0 hours OR last step is reached (consider 'dh9' implicitly 0).
When the profile has ended, STC1000+ will automatically switch to thermostat mode with the
last reached setpoint. (So I guess you could also consider a 'dh' value of 0 as infinite hours).
The settings menu has the following items:
Sub menu item Description Values
hy Set hysteresis 0.0 to 2.5°C or 0.0 to 5.0°F
tc Set temperature correction 2.5 to 2.5°C or 5.0 to 5.0°F
SP Set setpoint 40 to 140°C or 40 to 25°0F
St Set current profile step 0 to 8
dh Set current profile duration 0 to 999 hours
cd Set cooling delay 0 to 60 minutes
hd Set heating delay 0 to 4 minutes
rP Ramping 0 = off, 1 = on
rn Set run mode 'Pr0' to 'Pr5' and 'th'
Table 4: Settings submenu items
Hysteresis, is the allowable temperature range around the setpoint where the thermostat will not
change state. For example, if temperature is greater than setpoint + hysteresis AND the time
passed since last cooling cycle is greater than cooling delay, then cooling relay will be engaged.
Once the temperature reaches setpoint again, cooling relay will be disengaged.
Temperature correction, will be added to the read temperature, this allows the user to
calibrate temperature reading. It is best to calibrate around your working point. That means for
fermentation, it is better to calibrate at room temperature against a reference thermometer than
using ice water.
Setpoint, well... The desired temperature to keep. The way STC1000+ firmware works,
setpoint is always the value the thermostat strives towards, even when running a profile. What
the profile does is simply setting the setpoint at given times.
Current profile step and current profile duration, allows 'jumping' in the profile. Step and
duration are updated automatically when running the profile, but can also be set manually at any
time. Note that profile step and profile duration are the variables directly used to keep track of
progress in a profile. Little or no validation is made of what values are entered. It is up to the user
to know what he/she is doing by changing these values. Changing these values will not take
effect until next point in profile is calculated, which could be as much as one hour. Every hour,
current duration, 'dh' (and if next step is reached, also current step, 'St') is updated with new
value(s). That means in case of a power outage, STC1000+ will pick up (to within the hour)
from where it left off. Current profile step and current profile duration are only available in the
menu when a profile is currently running.
Cooling and heating delay is the minimum 'off time' for each relay, to spare the compressor
and relays from short cycling. If the the temperature is too high or too low, but the delay has not
yet been met, the corresponding LED (heating/cooling) will blink, indicating that the controller is
waiting to for the delay to pass before it will start heating or cooling. When the controller is
powered on, the initial delay (for both heating and cooling) will always be approximately 1 minute,
regardless of the settings. That is because even if your system could tolerate no heating or
cooling delays during normal control (i.e. ‘cd’ and/or ‘hd’ set to zero), it would be undesirable for
the relay to rapidly turn on and off in the event of a power outage causing mains power to
fluctuate. Cooling and heating delays are loaded when cooling/heating relays switched off. So,
for instance if you set cooling delay to 60 minutes and setpoint is reached, turning cooling relay
off, it will be approximately one hour until cooling relay will be allowed to switch on again, even if
you change your mind and change the setting in EEPROM (i.e. it will not affect the current
cycle).
Run mode, selecting 'Pr0' to 'Pr5' will start the corresponding profile running from step 0,
duration 0. Selecting 'th' will switch to thermostat mode, the last setpoint from the previously
running profile will be retained as the current setpoint when switching from a profile to thermostat
mode.
Thermostat mode
When mode is set to thermostat, setpoint, ‘SP’, will not change and the controller will aim to
keep the temperature to within the range of SP±hy. Much like how the normal STC1000
firmware works.
The thermostat control runs approximately once every second.
Running profiles
By entering the ‘rn’ submenu under settings and selecting a profile, the current duration, ‘dh’, and
current step, ‘St’, is reset to zero and the initial setpoint for that profile, ‘SP0’, is loaded into ‘SP’.
Even when running a profile, ‘SP’ will always be the value the controller aims to keep. The profile
simple updates ‘SP’ during its course. When a profile is running the ‘Set’ LED on the display will
be lit as an indication.
From the instant the profile is started a timer will be running, and every time that timer indicates
that one hour has passed, current duration, ‘dh’, will be incremented. If and only if, it has reached
the current step duration, ‘dhx’, current duration will be reset to zero and the current step, ‘St’,
will be incremented and the next setpoint in the profile will be loaded into ‘SP’. Note that all this
only happens on one hour marks after the profile is started.
So, what will happen if the profile data is updated while the profile is running? Well, if that point
has not been reached the data will be used. For example profile is running step 3 (with the first
step being step 0). Then ‘SP3’ has already been loaded into ‘SP’, so changing ‘SP0’ ‘SP3’ will
not have any effect on the current run. However, the duration ‘dh3’ is still being evaluated every
hour against the current duration, so changing it will have effect.
Changing the current duration, ‘dh’, and current step, ‘St’, will also have effect, but the change
will not be immediate, only on the next one hour mark will these new values be used in the
calculation. You will need to know what you are doing when changing these values manually, but
correctly used, it could come in handy.
Changing the setpoint, ‘SP’, when running a profile, will have immediate effect (as it is used by
thermostat control), but it will be overwritten by profile when it reaches a new step.
Once the profile reaches the final setpoint, ‘SP9’, or a duration of zero hours, it will switch over to
thermostat mode and maintain the last known setpoint indefinitely.
Finally, to stop a running profile, simply switch to thermostat mode.
Ramping
When Ramping is enabled, the controller will ramp the temperature setting linearly between
setpoints over the duration of the first setpoint. When Ramping is not enabled, the controller will
hold at the current setpoint for the complete duration of that setpoint.
For example, suppose we wanted our fermentation to hold at 50° for 5 days, then ramp up to 60°
over 2 days, hold at 60° for 1 day, then ramp down to 35°, we would program the STC1000+ as
follows:
SP0: 50 dh0: 120 ← Hold at 50 for 120hrs (5 days)
SP1: 50 dh1: 48 ←Ramp up to 60 over 48hrs (2 days)
SP2: 60 dh2: 24 ← Hold at 60 for 1 day
SP3: 60 dh3: 240 ← Ramp down to 35 over 10 days
SP4: 35 dh4: 0 ← Hold at 35 indefinitely
Which will result in the following temperature profile:
Note: In order to keep a constant
temperature with ramping enabled,
an extra setpoint with the same
value is needed (STC1000+ will
attempt to ramp between all
setpoints, but if the setpoints are
the same, then the setpoint will
remain constant during the step).
However, if ramping had not been enabled, this same set of setpoints would have resulted in the
following temperature profile:
Additional features
Sensor alarm, if the measured temperature is out of range (indicating the sensor is not
connected properly or broken), the internal buzzer will sound and display will show ‘AL’.
Power off, pressing and holding power button for a few seconds when the controller is not in
menu (showing current temperature), will disable the display and and relays (soft power off). To
really power off, you need to cut mains power to the device.
By pressing and holding ‘up’ button when temperature is showing, current setpoint will be
displayed.
By pressing and holding ‘down’ button when temperature is showing, ‘th’ will be displayed if the
controller is in thermostat mode. If a profile is running, it will cycle through ‘Prx’, current profile
step and current profile duration, to indicate which profile is running and the progress made.
By pressing and holding ‘up’ and ‘down’ button simultaneously when temperature is showing, the
firmware version number will be displayed.
Other resources
Project home at Github
Project thread on Homebrewtalk
Project featured on Hackaday