Too much heat/cool oscillation? [Arduino]


I'm looking for some advice and hoping someone can help.

I'm running my arduino based Brewpi to slowly raise the temp during fermentation from 62 to 68. It seems like there is too much switching between heating and cooling...and there is too much overshoot.

Here's a shot of the current day.

Arduino based Brewpi running the latest arduino firmware.
Chest freezer with enough room for two 5 gallon buckets, total of 10 gallons fermenting.
Heat wraps on both buckets.
Temp probe in a thermowell of one of the buckets.
Chamber probe just dangling in the free air of the freezer.
Room probe. Ambient of about 68F

Device Config:

Temp setting min : 33.8
Temp setting max : 86
PID Kp : 20
PID Ki : 0.025
PID Kd : 1.5
PID max : 18
Integrator: max temp : 0.9
Temp idle range top : 1.801
Temp idle range bottom : -1.801
Heating target upper bound : 0.541
Heating target lower bound : -0.359
Cooling target upper bound : 0.359
Cooling target lower bound : -0.541
Max time for heating overshoot estimator : 600
Max time for cooling overshoot estimator : 1200
Beer fast filter delay time : 78s
Beer slow filter delay time : 318s
Beer slope filter delay time : 8m
Fridge fast filter delay time : 18s
Fridge slow filter delay time : 318s
Fridge slope filter delay time : 4min

Thanks for any advice that is given.


The BrewPi Arduino code wasn't built to heat the beer directly. It manages the beer temp by managing the fridge temp. If your heaters heat the beer directly, it cannot manage the fridge temperature properly.
You can see that your fridge setting is responding faster than your actual fridge temperature because of this. You might get better results if you decrease Kp.

If you need better control with your setup, you'll have to modify the Arduino code yourself, or get the BrewPi Spark.


Thanks for the quick reply.

That's what I was afraid you would say.
What about switching to indirect heat, say from a 40W lightbulb?

If I did that should I restore the default parameters?

Lastly, do you know of anyone who has modified the Arduino code for direct heat?



Not to step on Elco's toes (I do not know much about the code), but yes, switching to a heater that heats the fridge air will solve the problem. I would suggest something like this tubular heater:

A light bulb will emit a lot of light, which might skunk the beer. In addition I would recommend a heat source with a lower surface temperature. A light bulb will reach at least 130ºC (approx 270ºF) and radiates a lot of heat so everything close to the bulb will get quite hot.

Good luch!


I changed the Kp to 7.5 (I believe in making changes that are big enough to see if they make a difference) and the behavior is markedly different.

I also disconnected the heat wraps and went with a 40W bulb (sorry Espen, but I'm in the middle of the fermentation...I'll look into the tubular heater for the next one). I'm in plastic buckets so I am less concerned with light right now.

I'm still curious about what actually is the trigger to start a heat or cool. I would assume it is a difference from the setpoint and the current slope (trend) of the beer temp. The new settings seem to allow the temp to get to about 0.2F above setpoint before starting the cooling.



Skunked beer is not too bad. I went to a training on beer faults a few months ago. They used a set of small pills that was added to perfectly good if not terribly exiting Carlsberg. The funny part was that adding the "skunk" pill made Carlsberg taste a lot like Corona :slight_smile:

So as long as you like Corona, don't worry :beers:

PS! To me it seems you seems to be nice and close to the target temp.


I wasn't so much worried about the target temp which also seemed quite good to me too.

I was more interested/concerned about how the system was alternating between heating and cooling so often.