This 25’ coil would easily fit in the freezer.
https://www.northernbrewer.com/products/copperhead-immersion-wort-chiller?variant=30232177049644&gclid=CjwKCAjw3ueiBhBmEiwA4BhspOWqTsk7pH3VvEQq6-HeDgUodqlCS51VMeE3TM28-Ak07fVyHvHotxoCmb4QAvD_BwE
I would appreciate any advice the HN community has to offer!
All it took was sealing up the inside of the freezer with silicone caulk to make it waterproof. Then drill a 2" hole in the freezer lid for the filter power cord and ozone generator hose. I put a PVC pipe gasket on the hole to seal it up and prevent any heat transfer. This also allows me to switch the freezer back to regular freezer mode if I no longer wanted to use it as an ice bath. According to my FLIR, there's no heat transfer when the hole is sealed. So the modification doesn't have any downside for future use as a regular freezer.
I use an Inkbird temperature controller outlet to regulate the temperature. The freezer is plugged into the controller. A temperature probe is inserted into the water. The controller will turn on and off the freezer to keep the desired temperature (45 degree F in my case).
Total cost is <$1,000 USD where a commercial ice bath is upwards of $10k. The only real difference between the two is the aesthetics and safety concerns. With a commercial ice bath, you can keep it plugged in. With a DIY ice bath, you need to unplug it whenever you're using it for safety reasons. Even with a GFCI, it's best to just unplug the whole thing when in use.
Or…just get an ice maker.
Depending on the heat load, you either don't need the freezer, or you will burn the freezer out. Freezers are not designed to run continuously like an air conditioner or water chiller would. The freezer would be much better used over hours/days to make ice that you can use to chill the water in short bursts. Also, depending on the heat load, you probably don't need any ice, and don't need 40 whole gallons.
I did a little experiment a couple years ago overclocking an old C2 Q8200, using my laundry room sink (5 gallons at most) filled with cold tap water for cooling, circulating with a pond fountain pump. The water was coming out the tap at around 40F and I was seeing maybe a 1-2 degree F rise every half-hour or so.
So if the water started to warm up, I could just pull the drain plug and run the tap for a minute to cool the basin back down. I tried dumping in a substantial quantity of ice, but I saw basically no additional performance headroom (at least with that chip) at the cost of a bunch of condensation on everything.
Also, make sure your setup is connected to a GFCI power outlet. It might save your life if something goes wrong. This advice applies to your idea as well. When it comes to electricity, you can't be too paranoid.
I also hope you remember to add filtration and toss in a bit of bleach to inhibit microbial growth.
The DIY solution would likely look like what Homebrew Beer folks call a Keezer.
https://homebrewacademy.com/how-to-build-a-keezer/
Most Freezers have at least some to all of the walls filled with chiller lines, so a collar is the best way to enter the freezer as in the link. You'll also need to interrupt the freezer's own duty cycle control to run less than normal so as to not actually freeze the lines, or else, do as was said elsewhere and use Glycol as an intermediate loop. That gets rather inefficient and redundant (the freezer is already a loop of coolant cooling your water-loop and venting the heat out the back) so either do it quick-and-dirty with a pond pump, a board on top of your freezer, a temperature sensor-tripped outlet, and some tubing, or else get a proper chiller.
In any event what's missing is the environment. Is this a bath tub? Is it in a sealed room? What's the ambient temperature?
We once broke a bathtub at a houseparty filling it with ice water + salt, to cool the drinks.
If you do want to do it the way you suggest, probably better to run a closed loop as a heat exchanger in the tub to be cooled, rather than circulating that fluid directly. I'd have thought you'd also want the coil inside freezer to be submersed in something, even if just another tub of water (block of ice) to improve transfer, but that's just intuition/guesswork, not sure about that.
The obvious answer would be "make a bunch of ice in the freezer" but I'm sure you could get more complicated. If you do go with a circulator, will you also be treating the water for reuse?
Edit: looking at reddit, it appears a bunch of people just turn their chest freezers into the plunge tank? Check out r/coldplunge
a different approach to possibility the same target results would be to use "Termoeletric cooling" (https://en.wikipedia.org/wiki/Thermoelectric_cooling) often described as TEC/peltier to cold down a surface (metal surface in your loop?) to bellow air temperature.
the short description: it is a device has a hot side that will be kept X degrees above the cold side, so if the X of your tec is "50 ish", if you cool the hot side to 60c, the cold side will be 10c. (its often easy to go bellow 0c)
now the bad news... they are VERY power inefficient, you might spend 200w 12v DC on it to pull of 100w of heat on the cold side, so not for the "power consumption conscious" crowd. those are handy to create a cold water drinking fountain because they can be toggled quickly. (perhalps just run it when needed?)
#!/usr/bin/env python # coding: utf-8
# # Cold Plunge Tank - Ice Requirements #
import sympy import sympy.physics.units as u
sympy.init_printing()
print('''## Parameters ## - 130 gallon tank - 70F (21C) starting temp - 55F (12.8C) ending temp - Person sits in the tanks and it fills to the brim, so Vol of person + Vol of water = 130 gallon\n\n''')
vol_tank_total = 130 * 3.78541 * u.liter
T_hot = 21.11 * u.deg T_cold = 12.78 * u.deg T_ice = 0.0 * u.deg
den_water = 997.0 * u.kg / u.m*3 cp_water = 4.1955 * 1000.0 * u.joule / (u.kg * u.deg) hf_water = 333.55 * 1000 * u.joule / u.kg
den_human = 0.985 * den_water
print('''## Calculate required mass of ice ## - State 1: Solid Ice @ 32F + Initial Water @ 70F - State 2: Liquid Water @ 55 F\n\n''')
sympy.var('m_waterinit m_ice m_watertot'); sympy.var('E_1 E_2 Q W cp T_i T_c T_h u_hot u_cold u_icelq hf');
print('Conservation of Mass')
cons_m = sympy.Eq(m_waterinit + m_ice, m_watertot)
display(cons_m)
print('\nConservation of Energy')
cons_e = sympy.Eq(E_2 - E_1, Q - W) e1 = sympy.Eq(E_1, m_waterinit * u_hot + m_ice * (u_icelq - hf)) e2 = sympy.Eq(E_2, m_watertot * u_cold) cons_e_0 = sympy.Eq(e2.rhs - e1.rhs, 0)
display(e1) display(e2) display(cons_e_0)
print('\nSubstitute the conservation of mass in the the conservation of energy equation')
cons_e_1 = cons_e_0.subs(m_waterinit, sympy.solve(cons_m, m_waterinit)[0]).lhs cons_e_2 = cons_e_1.subs([(u_icelq, cp * T_i), (u_cold, cp * T_c), (u_hot, cp * T_h)]).expand().factor([cp, m_ice, m_watertot])
display(cons_e_1) display(cons_e_2)
print('\nSolve for the required mass of ice')
m_ice_expr = sympy.Eq(m_ice,sympy.solve(cons_e_2, m_ice)[0])
display(m_ice_expr)
print('\nCalculate the final mass of water in the tank and substitute the parameters into the equation\n')
vol_human = 77 * u.kg / den_human vol_tank_net = vol_tank_total - vol_human m_tank_net = vol_tank_net * den_water
print('Vol of tank total =', u.convert_to(vol_tank_total, u.liter)) print('Vol of Person =', u.convert_to(vol_human, u.liter)) print('Vol water in tank final =', u.convert_to(vol_tank_net, u.liter)) print('Mass water in tank final =', u.convert_to(m_tank_net, [u.liter, u.kg])) print('Mass water in tank final =', u.convert_to(m_tank_net, [u.liter, u.pound]))
m_ice_expr_1 = m_ice_expr.subs([(cp, cp_water), (T_i, T_ice), (T_c, T_cold), (T_h, T_hot), (hf, hf_water), (m_watertot, m_tank_net)]) dtemp_f = (T_hot - T_cold) * 9/5
print('Ice required =', u.convert_to(m_ice_expr_1.rhs, [u.liter, u.kg])) print('Ice required =', u.convert_to(m_ice_expr_1.rhs, [u.liter, u.pound])) print('Initial Water mass in tank =', u.convert_to((m_tank_net - m_ice_expr_1.rhs), [u.liter, u.kg])) print('Initial Water mass in tank =', u.convert_to((m_tank_net - m_ice_expr_1.rhs), [u.liter, u.pound])) print('lb ice / degree F =', u.convert_to(m_ice_expr_1.rhs, [u.liter, u.pound]) / dtemp_f)
print('Water/Ice Energy Balance Error =', (1.0 - (378.306 * (88.556 - 53.675)) / (34.149 * (53.675 - (-0.04) + 333.55))) * 100, '%')