Backpack
The "backpack" is basically a modified hydration pack with a pump, an Arduino Pro Mini and a battery strapped to it.
The Hydration Pack
The pack I chose (see parts list below) was not a wise choice. The opening for adding ice/water is not very large and isn't as good as something like a Camelbak. I chose it because it was cheap and, at the time, I wasn't sure if this project would work so I was limiting my investment.
Regardless, there are 3 modifications I made to the hydration pack:
- I modified the filler cap to add a swivel hose barb fitting for the return water line (see picture below).
- I melted a hole in the insulated carrier to bring the cold water feed line (the drinking tube) out to the back of the pack and installed a 3D printed grommet there.
- I added a second DS18B20 temperature sensor to the water bladder to monitor the reservoir water/ice temperature (so the Arduino can beep angrily when the water is too hot to be useful for cooling).
The Pump Unit
![]()
The pump sits in a 3D printed housing with an Arduino and the supporting circuitry. The "supporting circuitry" is really just a MOSFET to turn the pump on and off and some resistors for measuring battery voltage and running the 1-Wire bus for the temperature sensors.
The pump (see Parts List below) comes with a set of nice rubber vibration damping mounts so I printed a housing that has the same hole pattern and is simply held together with sheet metal screws (#6 I think, just what I had laying around).
The housing has a little section for the Arduino and the perf board I put it on, a slot in the bottom for the water lines and some holes in the top for the battery connector pigtail and the control box wire (which is just another DS18B20 that I stole the wire from).
The Control Box
![]()
The control box was designed to thread onto the webbing of the hydration pack shoulder straps. It's only components are a waterproof button (see Parts List below) and a peizo buzzer. I didn't add anything visual since it's meant to be operated wearing a helmet and you can't really look at your shoulder (where the box sits) with one on.
The two halves of the control box are held together with a #4 machine screw and captive nut in the opposite side. The communication with the Arduino is all in beeps and is surprisingly intuitive. Like most things, holding the button for a long time turns the unit "off" (it actually puts the Arduino in sleep mode and it draws only about 1.5mA). More details about this are in the firmware code.
This control strategy is adopted from dive computers that only have a single button and not much in the way of display real-estate.
Arduino Controller
The reason for the Arduino and sensors instead of something simply "on or off" like the Veskimo linked earlier is related to the nature of the problem. If we just pump all the ice water around continuously, we would get the wearer really cold and uncomfortable. We'd also burn through our ice supply very quickly. The Veskimo people seem to sell some sort of add-on timer switch to let the user set a duty cycle for their unit. I'm a bit lazier and don't like fiddling with things while I ride, so I use the Arduino as a PD controller (a PID controller without the "I" bit) to keep the return water line at 1 of 5 temperature settings (adjustable via the control box button).
It took me a while to understand the control problem since it isn't like the PID control of a robot motor. The system reacts very fast (you can chill the crap out of the vest in under 10 seconds), but the dead time of the temperature sensor is huge (like 15 seconds to register any change at all in temperature) so my initial tuning had crazy overshoot problems and the integral wind-up that happens when you have an error for a long time that makes your controller go crazy after you hit your set-point.
What eventually helped me get things fixed was de-tuning my PID controller to have a 10 second update interval (I was initially updating ever 2), removing the "I" portion and having a very strong "D" coefficient that basically stops all cooling if we go down .4 degrees F or more since the last update because we know we're probably going to coast at least 5 more degrees with any cooling effort at all and bumps us with a good blast as soon as we start increasing in temperature at all since the wearer is probably going to start feeling hot in only a few seconds since we're so far behind the curve.
Here is a graph from my final controller:
You can see it overshoots a bit, but I kept it this way so it approaches the set point from the colder side of things (I'd rather be too cool waiting for it to settle rather than baking in my jacket) but it holds the temperature surprisingly well after it hits the set-point. Most importantly, it feels like it's holding the set-point correctly wearing the vest. It feels like outdoor air conditioning rather than a vest that gets too hot or too cold and it does this with sub-par hardware (the whole reason for these type of controllers to begin with).
The Umbilical
The "umbilical" is really just two tubes and an electrical line wrapped in insulation tape and covered with braided sheathing. The unit terminates at the vest connector as seen here:
The left side of the connector (the leftmost component in the picture above) has two hose barbs to accept the cold water feed and return lines and has two o-ring sealed protrusions on the opposite side that mate with the manifold side of the connector to feed the vest cooling circuits. There is a cut-out for the female MTA156 2-pin connector that is at the end of the electrical line.
The big "U-shaped" part on the top is a clip that has a hole for a #6 machine screw which pins the umbilical connector in place so it doesn't accidentally come apart while in use but allows the vest to be separated for maintenance if needed.
I 3D printed little clips to keep the tubes and electrical cable aligned and slightly separated underneath the insulation tape. These aren't strictly necessary but made it easier to assemble (shown below):
Parts List (possibly not complete)
Tools Required
- Needle and Thread (heavy duty polyester is preferred)
- Soldering Iron (for assembling board)
- Acetone (for smoothing/sealing water fittings)
- Silicone Grease for lubricating O-rings
- Drill (hand or drill press, doesn't matter)
Electronics Components
- Arduino Pro Mini (5V)
- FQP30N06L (N-Channel MOSFET)
- Small Peizo Buzzer
- 1N4004 Diode (or similar for free-wheel diode)
- 4.7K resistor (for 1-Wire bus parasitic power)
- 3x10K Resistors for voltage divider and MOSFET pull-down
- DS18B20 Waterproof Temperature Sensors
Everything Else
- DC Power Pigtail 5.5mm x 2.5mm
- Mesh Hunting/Sport Vest
- Waterproof metal Button
- Hydration Pack
- 8.4V Waterproof Battery Pack
- 12V Diaphragm Pump
- 1" Braided Sleeving
- 1/2" Braided Sleeving
- 2 x Silicone Air Tubing
- #6 x 1.5" Machine screw and nut (acts as lock pin for Umbillical fitting)
- Pipe insulation tape (I used 1/4" by 2")
Assembly
TBD. I'll do a write-up on assembly procedure if there is enough interest in it, for now, this page exists to share the high-level ideas and firmware so others might be able to build on what I made and improve it.






öéèåè ääåãòä áúâåáä