New Setup for Glycol Tank + Pump

I already went ahead and made a custom shelve to close off the upper part of the fridge from the rest.

Basically, I created a freezer compartment.

First tests today or tommorrow

I donā€™t have all my parts for my new panel but I didnā€™t want to wait any longer. This is what a 5 minute BrewPi Setup looks like :wink:

It is only switching few watts, so no problem with the heat of the SSR. The BrewPi is currently controlling 110 liters of lager in one of the 150 liter conicals in ā€œBeer Constantā€ mode at 4 degrees celsius with only the beer sensor on version 4.3.0 (Beer-to-fridge KP = 0, Td = 0, Ti = 0). I will post results after the weekend.

Did a new test. Was not pumping yet, just cooling the 8L of water. The new setup completely froze the water in 3 hours. Oops! Hope the pump is okay, it is inside the ice.

But the fridge has plenty of power.

So, I just got a Cornelius Maxi 110 inā€¦ this has a beer line and a seperate water ine wit integrated pump. Iā€™m going to use this to cool my 2 fermentersā€¦

but while I was playing with this, I had a bit of a ā€œbrainfartā€ā€¦ . why would I not get another one and use this as a Wort Cooler? would that not be far more effective then a CFC or plate cooler?

Why get a separate one? I just quickly cool down below 80 Celsius with a spiral and then transfer to the conical. The rest is down by the flow through cooler.The one on the left is a Cornelius CR50.

The setup was running during this weekend, but BrewPi is struggling quite a bit. And it doesnā€™t seem to get bether:

Last cycle zoomed in:

As I already wrote I am running in ā€œBeer Constant Modeā€ with only the fridge sensor on version 4.3.0 and Beer-to-fridge KP = 0, Td = 0, Ti = 0.

Current Settings / Info:

{
  "kind": "Control",
  "pids": [
    {
      "kind": "Pid",
      "name": "heater1",
      "enabled": true,
      "setPoint": {
        "kind": "SetPointSimple",
        "name": "fridgeset",
        "value": 4
      },
      "inputSensor": {
        "kind": "TempSensorFallback",
        "onBackupSensor": true,
        "sensor": {
          "kind": "TempSensor",
          "name": "beer1",
          "sensor": {
            "kind": "OneWireTempSensor",
            "value": 5.75,
            "connected": true,
            "address": "288EE8A00600007B",
            "calibrationOffset": 0
          }
        }
      },
      "inputError": 1.7539,
      "Kp": 10,
      "Ti": 600,
      "Td": 60,
      "p": -17.5391,
      "i": 0,
      "d": 0.1953,
      "actuatorIsNegative": false,
      "outputActuator": {
        "kind": "ActuatorPwm",
        "value": 0,
        "period": 4,
        "minVal": 0,
        "maxVal": 100,
        "target": {
          "kind": "ActuatorMutexDriver",
          "mutexGroup": {
            "kind": "ActuatorMutexGroup",
            "deadTime": 1800000,
            "waitTime": 1799869
          },
          "target": {
            "kind": "ActuatorNop",
            "state": false
          }
        }
      }
    },
    {
      "kind": "Pid",
      "name": "heater2",
      "enabled": true,
      "setPoint": {
        "kind": "SetPointSimple",
        "name": "beer2set",
        "value": null
      },
      "inputSensor": {
        "kind": "TempSensor",
        "name": "beer2",
        "sensor": {
          "kind": "TempSensorDisconnected",
          "value": null,
          "connected": false
        }
      },
      "inputError": null,
      "Kp": 10,
      "Ti": 600,
      "Td": 60,
      "p": 0,
      "i": 0,
      "d": 0,
      "actuatorIsNegative": false,
      "outputActuator": {
        "kind": "ActuatorPwm",
        "value": 0,
        "period": 4,
        "minVal": 0,
        "maxVal": 100,
        "target": {
          "kind": "ActuatorMutexDriver",
          "mutexGroup": {
            "kind": "ActuatorMutexGroup",
            "deadTime": 1800000,
            "waitTime": 1799806
          },
          "target": {
            "kind": "ActuatorNop",
            "state": false
          }
        }
      }
    },
    {
      "kind": "Pid",
      "name": "cooler",
      "enabled": true,
      "setPoint": {
        "kind": "SetPointSimple",
        "name": "fridgeset",
        "value": 4
      },
      "inputSensor": {
        "kind": "TempSensorFallback",
        "onBackupSensor": true,
        "sensor": {
          "kind": "TempSensor",
          "name": "beer1",
          "sensor": {
            "kind": "OneWireTempSensor",
            "value": 5.75,
            "connected": true,
            "address": "288EE8A00600007B",
            "calibrationOffset": 0
          }
        }
      },
      "inputError": 1.7539,
      "Kp": 10,
      "Ti": 1800,
      "Td": 200,
      "p": -17.5391,
      "i": -69.8672,
      "d": 0.5859,
      "actuatorIsNegative": true,
      "outputActuator": {
        "kind": "ActuatorPwm",
        "value": 86.8203,
        "period": 1200,
        "minVal": 0,
        "maxVal": 100,
        "target": {
          "kind": "ActuatorMutexDriver",
          "mutexGroup": {
            "kind": "ActuatorMutexGroup",
            "deadTime": 1800000,
            "waitTime": 1799731
          },
          "target": {
            "kind": "ActuatorTimeLimited",
            "minOnTime": 120,
            "minOffTime": 180,
            "maxOnTime": 65535,
            "state": true,
            "target": {
              "kind": "ActuatorPin",
              "state": true,
              "pin": 17,
              "invert": false
            }
          }
        }
      }
    },
    {
      "kind": "Pid",
      "name": "beer2fridge",
      "enabled": true,
      "setPoint": {
        "kind": "SetPointSimple",
        "name": "beer1set",
        "value": 4
      },
      "inputSensor": {
        "kind": "TempSensor",
        "name": "beer1",
        "sensor": {
          "kind": "OneWireTempSensor",
          "value": 5.75,
          "connected": true,
          "address": "288EE8A00600007B",
          "calibrationOffset": 0
        }
      },
      "inputError": 1.7539,
      "Kp": 0,
      "Ti": 0,
      "Td": 0,
      "p": 0,
      "i": 0,
      "d": 0,
      "actuatorIsNegative": false,
      "outputActuator": {
        "kind": "ActuatorSetPoint",
        "targetSetPoint": {
          "kind": "SetPointSimple",
          "name": "fridgeset",
          "value": 4
        },
        "targetSensor": {
          "kind": "TempSensor",
          "name": "fridge",
          "sensor": {
            "kind": "TempSensorDisconnected",
            "value": null,
            "connected": false
          }
        },
        "referenceSetPoint": {
          "kind": "SetPointSimple",
          "name": "beer1set",
          "value": 4
        },
        "output": 0,
        "achieved": null,
        "minimum": -10,
        "maximum": 10
      }
    }
  ]
}

Any advice on how to stabilize this?

Is it correct to install the current 0.4.3 from the master branch?

I think the problem here is that your cooler Kp is much too low, causing the integrator to step in, and causing overshoot, because it is slow to respond.

With Kp at 10, when the beer is 1 degree to high, the pump is only running at 10%. I think 50 or even 100 would be a more reasonable value.
I would also increase Ti to 7200 at least. You want the integrator to increase very slowly, slower than normal fluctuations in temperature.

You could optionally run with a smaller period than 1200 for the pump. Maybe go with 5 minutes instead of 20. Also adjust your minimum ON and OFF time. (I hope I assume correctly that you are using a pump).

Thanks for the information Elco. I think I am starting to understand the influence of the different settings.

I increased Cooling Kp to 90, meaning the cooling pwm will be at 90% on if the offset is one degree celsius. I think I will even go to 100 since the cooling system is quite slow and git a lot of lag. If this is set for example to 200, would this mean that the the cooling PWM is already at 100% at 0.5 degrees celsius?

I also increased the cooling Ti to 10800. If I got this right this integrator winded up due to system reacting very slowly, which cause the BrewPi to cool further even though the beer temp is below setpoint. If I got this correctly this makes the integrator beeing calculated over the last 3 hours, it should therefore wind up less. I might even need to go further up.

I am using the Gamko cooler I described above, it has a built in pump, but BrewPi is controlling the complete cooler including the compressor, not only the pump. I set the cooling pwm period to 600, minimum on time to 120. I donā€™t think going further down would make sense since the system is very slow anyways.

I will post in a few days how this influenced the regulation.

It would be much nicer if you could control the pump separately, so the cooler can keep your glycol cold and pump cold glycol when needed.

Your calculations are correct.

The integrator winded up, because your proportional settings were not doing the trick so it needed to compensate with the integrator. The integrator will not wind up if your cooler is already maximally on, even though it is slowā€¦

@Elco , i would agree with Elco.

Iā€™m currently experiemnting with a Maxi 110 from Cornelius.
there is a small reservoir, with an integrated tap line pump, and a spiral inside. I connected the fermenters spiralā€™s pump to the spiral of the tap line cooler, and only ran the pump when needed. i tried using the tap pump, but i ended up disabling it and let the reservoir freeze up.
this worked really well and I can even cold crash beers now.
I am trading this one in for a Maxi 310, since it has a higher cooler capacity and 2 sp-irals, since i have 2 fermentersā€¦

The BrewPi is doing what it is supposed to do again. Temperature regulation as precise as the thermometer allows:


The cooler is running about 3-4 times per hour for about 5-10 minutes.

What advantages do you expect by only controlling the pump? The liquid is cooled so fast with these coolers I donā€™t know if it really makes sense to keep the glycol temperature down.

I would see and advantageā€¦ I have 1 TAp Cooler with double spiralā€¦ so I can run 2 of these fermenters on a single tap coolerā€¦

True. But no advantage in my use case.

so all the credits go to Chixxi for his ideasā€¦
but this is how far I got;

2 fermenters connected to a Gamko cooler. the water (54 liter) inside the Gamko is kept at 1 degrees and there is a 12 meter long stainless steel coil in each of them through which i can pump water and then through the stainless steel coil of the fermenter.

there is a pump in the Gamko to rotate the water, and a possibility for an additional line to cool something else :slight_smile:

my tests so far have proven itā€™s extremely easy to keep the liquid in both fermenters chilled, i can actually keep both of them at 3.5 degrees celsius :slight_smile:

I know ss brewtech will release a big glycol chiller and some Brite tanks as well, perhaps Iā€™ll upgrade in a year or soā€¦ till then iā€™m a happy camper :slight_smile:

1 Like

Looks like an impressive setup! No need for credits, I like when my ideas are succesfully used by others :wink:

i actually finished it this weekend :slight_smile:

added some coolboxes for the water storage so I would not loose any temperature thereā€¦ it was hot over the weekend, around 25 to 27 degrees outside, Gamko managed to get the fermenters from 20 degrees to 8 degrees and 1.5 hoursā€¦
so yeah Iā€™m happy.

For some reason I donā€™t get the purpose of the coolboxes :rolling_eyes:

Patrick, I guess it is the desired power to cool down 12Ā°C in 90min (stored cooling energy)? In my setup I def. dontā€™t manage to cool that quick but is it really necessary to cool down so fast?
My setup anyhow is much less sophisticated, Iā€™m also using a similar Python cooler. I have removed the big stirrer-pump, using instead a small silentless 5W circulation pump is sufficient (running all the time). And then there is space to isolate the cover of the water basin to save energy.
It finally works smooth in a fridge-like setup, Two stage regulation keeps beertemp within resolution of the sensor (+/- 0.1Ā°C) even when having cooling cycles more than 30min. I guess thats what youā€™re also having or had?

I have to admit that when cold crashing / storing to beertemp below 2Ā°C you have to take care not to get a thick layer of ice a the top of the cooler. Anomalies of water will show temp around 1.5Ā°C when measuring at the bottem and already building a thick layer at the top. Placing inflow and outlet of the at the top of the basin should avoid this.
I once made a quick experiment with glycol but I was not having enough glycol and then you get a daiquiri-like thick thing which blocks the pump.

Offtopic: When is your next session to come over to assist a bit?

Cheers, Andy

Hey Andy.

I donā€™t manage to get a cooling rate of 12Ā°C within 90 minutes. My setup is about 7Ā°C per 90 minutes. I donā€™t really know if the cooling rate needs to be so hight. When cold crashing a keg in the fridge I was not even getting 2Ā°C per hour, so I suppose almost all of the non-proffesional setups are below that rate. The beer gets very without any clearing agents at all, so I donā€™t see a problem.

Most of the liquid coolers are capable of building ice and even have an ice bank mode. When I coldcrash I get some ice too, but not on the surface, rather around the coils from the compressor in the liquid, I guess this is due to the stirer.

I have no clue when my next session will be. I will let you know. Tomorrow I will be here, offering my beer. If you got time come visit: https://www.facebook.com/events/478379249014686/

A new SS Brewtech Glycol-chiller: http://www.ssbrewtech.com/collections/accessories/products/glycol-chiller-1-3-hp

Looks interesting, but not cheapā€¦