Hi HBT,
We have received several requests for info on how to set up a fermenter/glycol system using BruControl. Like anything, there are multiple ways to skin a cat, so here is my take.
@augiedoggy may weigh in, as he does this in real life. I am not fortunate enough to have such a system (yet!). This assumes BC will control the whole setup, rather than the glycol chiller maintaining its own temperature, etc.
A few key items:
1. Glycol chiller (can be legit or a modified AC setup, etc.), with temperature probe in glycol bath, and switchable power on/off (re-wired thermostat or power-feed).
2. Heater(s). Can be a glycol heater (e.g. immersion heater, element, or RIMS tube) to cool or heat all fermenters, or individual heating belts for each fermenter. Note: If there will be a need to heat one fermenter and cool another, then the latter is required (e.g. ale in one fermenter and lager in another and ambient temp is 50 degrees).
3. Glycol pump.
4. One two-way ball valve for each fermenter.
5. Relay board, controlled by the BC interface, which contains enough relays for all the items required: 1 for chiller power, 1 for glycol pump, 1 for each heater (must cover current requirement), 1 for each ball valve.
6. Temperature probes: 1 for the glycol reservoir (at the pump exit), 1 for each fermenter (location of choice - but ideal is 1/3 into wort in distance from cooling/heating surface to heat escape surface). Probes can be 1-wire, thermistor, or RTD (in order of recommended). Extra probes can be added where desired for monitoring.
7. 2x manifolds with # or ports = # fermenters + 2. 'A' manifold distributes glycol to the fermenters, and 'B' manifold receives the glycol from the fermenters.
8. Check valve, with a small cracking pressure.
9. Ball valve power supply (can be 12VDC which is shared with BruControl interface power).
The setup is this: The glycol chiller has a reservoir with an exit and entrance on opposite sides of the cooling coil. The exit is plumbed into the pump, then into manifold A's input port. Each A manifold exit port is plumbed to the input of a ball valve except one, which is plumbed to one side of a check valve. The exit of each ball valve goes to a respective fermenter, and the exit of each fermenter goes into the B manifold. The B manifold's two other ports are plumbed such that one goes back to the reservoir input, and the other is plumbed to the other side of the check valve. The glycol flow will pass from the reservoir, into pump, into the A manifold, through the ball valve (if open), throught the fermenter, through the B manifold, back to the reservoir. If none of the ball valves are open, the glycol will pass straight from manifold A to manifold B through the check valve. Depending on gravity/layout, a check valve may not be needed.
The wiring is set up such that the relay's contacts control the chiller power and the heater power (these are 120VAC but can be 240VAC also so long as the relay contact rating's exceed the chiller or heater's requirement). The relay's contacts switch 12VDC power to the ball valves. The pump can be switched by either 12VDC or 120/240VAC depending on its design. The relay board's inputs are wired directly to the BruControl interface (Arduino MEGA recommended, with WiFi connection for ease of integration). Schematics are on the website, but a 12V relay board is recommended.
The basic operation will be such that if a fermenter's temp is too high or too low, the glycol will be routed to that fermenter through its ball valve. Cooling or heating will be automatically called, and the glycol reservoir can be heated or cooled continuously, or simply as needed. Note: since the reservoir is likely small, running the heater/chiller continuously is probably not a good strategy. BruControl has discreet digital output device elements established for the heater, chiller, and pump. It has discrete input devices for each temperature measurement point. It has 2 hysteresis devices controlling each ball valve (one for heating, the other for cooling), using the fermenter temperatures as reference input devices.
Now there are multiple ways to handle the automation. First (recommended), implement Hysteresis devices (noted above) and use a simple script (example below) to call for heating/cooling when needed. This script would power on the chiller/heater when a ball valve is opened. Second, run a single script in a continuous loop to handle all the automation. This would take more skill since certain protections need to be put in place which already exist in the Hysteresis device elements, like turn-on delay to prevent short-cycling the compressor. This script would check each temperature (reservoir, fermenters, extras), open each valve as needed, and power on/off the heater/chiller/pump as decided.
Here is an example of the simple script noted in the first example above to run two fermenters (multiply as needed), where the glycol is heated or cooled together. If using group cooling but individual heating, a slightly different script would be required.
I know schematics/diagrams would help - I just need to find some time to draft them up!
Code:
[setup]
new bool NeedCooling //set up flag for cooling
new bool NeedHeating //set up flag for heating
new bool PumpOff //set up flag for pump been turned off
[loop]
NeedCooling = false //set flag that cooling is not needed
NeedHeating = false //set flag that heating is not needed
if "FermCool1" Value == on //check if fermenter 1 hysteresis device is on
NeedCooling = true //if so, set flag that cooling is needed
endif
if "FermCool2" Value == on //check if fermenter 2 hysteresis device is on
NeedCooling = true //if so, set flag that cooling is needed
endif
if "FermHeat1" Value == on //check if fermenter 1 hysteresis device is on
NeedHeating = true //if so, set flag that heating is needed
endif
if "FermHeat2" Value == on //check if fermenter 2 hysteresis device is on
NeedHeating = true //if so, set flag that heating is needed
endif
if NeedCooling == true //if flag for cooling needed is on
"Pump" State = on //turn on the pump
"Chiller" State = on //turn on the chiller
"Heater" = off //turn off the heater
PumpOff = false //reset the pump has been turned off flag
else
if NeedHeating == true //otherwise, if flag for heating needed is on
"Pump" State = on //turn on the pump
"Chiller" State = off //turn off the chiller
"Heater" = on //turn on the heater
PumpOff = false //reset the pump has been turned off flag
else
PumpOff = true //otherwise, set the pump has been turned off flag
Restart "Pump" //reset the Pump timer
"Chiller" State = off //turn off the chiller
"Heater" State = off //turn off the heater
endif
endif
if PumpOff == true //check if the pump has been turned off flag is set
if "Pump" Value >= 0:03:00 //if so, check to see if the Pump timer has passed 3 mins
"Pump" State = off //if so, turn the pump off
PumpOff = false //reset the pump has been turned off flag
endif
endif
sleep 15000 //pause for 15 seconds to reduce loop execution speed
goto loop //execute the loop again