Hi, I'm Anthony.

Wearable Peltier Cooling

June 29, 2016

About a month ago, I managed to shatter my right ankle and shin. Thanks to modern medicine, those bones are now reinforced with slender lengths of titanium.

Besides the sudden limb shortage, though, the biggest issue has been the summer heat: intensive activities make the inside of the cast unbearably hot. Can we do better than an ice pack?

Introduction

Different textbooks about heat often use confusing or conflicting terms for common concepts. In that tradition, here are the confusing and conflicting terms we’ll be using:

Generally, something that’s 10 degrees above ambient temperature will dissipate energy at twice the rate of something that’s 5 degrees above ambient. A cooling unit takes advantage of this by taking thermal energy from one area and gathering all of it up in one place, so it’s able to dissipate into the environment.

If we rearrange the thermal conductance equation, we get \(\text{heat transfer rate} = \text{thermal conductivity} \times \text{surface area} \times \text{temperature difference} \times \text{thickness}^{-1}\). So to maximize the heat transfer rate:

Nowadays, it averages about 32 degrees Celsius outside. Normal human body temperatures hover around 37 degrees Celsius, radiating about 45 Watts per square meter of skin, though this can go over 300 Watts per square meter when performing intensive activities. After a few experiments heating bags of water with known temperature and volume with body heat, I’ve empirically determined that a small cooling pad can sink up to 5 Watts - more than enough to have a noticeable effect.

Materials and setup

All of the electronic components laid out on a desk

Preparation and setup

First, a quick test with the Peltier cooler to see how it works. It turns out that when red is power and black is ground, the side with text on it becomes hot and the other side becomes cold.

I originally meant to use a separate power transistor to turn the cooler on and off. Turns out it’s not necessary: according to the MP1584 datasheet, pin 2 is an Enable input, which allows us to turn the DC regulator on and off without the power transistor. Since this pin isn’t broken out, I soldered some enamel wire directly to it (this is the blue wire on the schematic):

Enamel wire soldered to pin 2 of the MP1584 on the DC regulator board

As mentioned earlier, our DC regulator will need a heat sink to handle the load. Where does the heat sink go? Well, if you look closely at the bottom side of the board, you can see 6 tiny holes, which happen to be directly below the MP1584 chip.

Close-up of the thermal vias, which are circled in blue, on the DC regulator board

Going off page 14 of the MP1584 datasheet, I’d guess that those are thermal vias - solder-filled holes that conduct heat from the chip into the ground plane. We’ll clean the board surface with 90% isopropyl, and then place the heat sink directly on top of them.

Same thing goes for the Peltier cooler. After cleaning the side that gets hot, we can just plant the remaining heat sinks in a grid pattern. The first one looks like this:

Peltier cooler with a single heat sink placed on the center of the side with text on it

Assembly and wiring

Fritzing schematics are really useful for showing how things fit together at a glance. Here’s one for this project:

Breadboard-view circuit schematic for the cooler

First, we’ll connect the female header to the Trinket as shown on the schematic. It’s glued to the bottom of the board to keep things organized:

Photo of the wired-up Trinket

It’s hard to hold steady when you’re leaning on one leg, but the connections are solid enough. Next, we attach the temperature sensor to a male header, so it can plug into the Trinket:

Analog temperature sensor plugged into female header on the Trinket

From top to bottom, the header pins are ground (white wire), temperature sensor reading (yellow wire), and 5V (red wire). The hot glue is a great way to keep the leads insulated, as long as the temperature doesn’t get high enough to melt it off while in use. Hopefully it doesn’t, or else my leg is going to be pretty unhappy.

Now the same thing, but for the leads on the Peltier cooler. Due to the current requirements, we use two pins in parallel for each wire (each pin is rated for about 3A):

Peltier cooler leads terminated with 4-pin male header

We can now attach the Trinket to the DC regulator (with hot glue, of course!), and connect the enamel wire jumper on the regulator to pin 1 on the Trinket. A 4-pin female header on the DC regulator output gives us a place to plug in the Peltier cooler:

4-pin female header for connection with Peltier cooler

An old USB-A to USB-micro-A cable can be cannibalized for the USB-A plug. We’ll connect the 5V and GND pins to 3 pins each on a 6-pin female header:

USB-A plug, with the 5V and GND pins connected to a 6-pin female header

The leftmost 3 pins on the header are all 5V, while the other 3 are ground. The power leads for the DC regulator and the Trinket are now ready to be connected!

5V and ground leads for the DC regulator and the Trinket, arranged in a row for use with the 6-pin female header

At this point, the cooler is more or less complete:

Bottom of the control board

Here’s the entire thing, with the power, Peltier cooler, and temperature sensor connected:

Fully assembled device

Programming the controller

For testing purposes, I whipped up a quick simple on/off sketch and loaded it onto the Trinket - turn the cooler on if the temperature is too high, turn it off otherwise:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
// digital pin that determines whether the cooler is on
#define COOLER_ENABLE_PIN 1
// analog pin to read the temperature from (in increments of 0.0195 V/K) - note that analog pin 1 is actually pin 2
#define TEMPERATURE_PIN 1

// temperature reading in hundreds of microVolts at 25 degrees Celsius, used for calculating absolute temperature (the temperature sensor isn't factory calibrated)
#define TEMPERATURE_REFERENCE_25 9560
// change in temperature reading in hundreds of microVolts given a 1 degree Celsius change in temperature
#define TEMPERATURE_SLOPE 195
// temperature in Celsius when reading 0 Volts
#define TEMPERATURE_MIN (25 - (TEMPERATURE_REFERENCE_25 / TEMPERATURE_SLOPE))
// temperature in Celsius when reading 5 Volts
#define TEMPERATURE_MAX (25 + ((50000 - TEMPERATURE_REFERENCE_25) / TEMPERATURE_SLOPE))

int target_temperature = 37; // target temperature in Celsius

void setup() {
  pinMode(COOLER_ENABLE_PIN, OUTPUT);
}

void loop() {
    int current_temperature = map(analogRead(TEMPERATURE_PIN), 0, 1023, TEMPERATURE_MIN, TEMPERATURE_MAX); // current temperature in Celsius
    digitalWrite(COOLER_ENABLE_PIN, current_temperature > target_temperature ? HIGH : LOW); // turn on the cooler if and only if the temperature is too high
    delay(1000); // only do this once a second, since we don't want to interfere with the DC regulator internal PWM
}

After programming, the cooler is ready to use - just insert the USB-A plug into a portable power bank and wait a second for it to initialize.

The cooling power is adjustable by changing the potentiometer on the DC step-down switching regulator (the screw on the non-heat-sinked side of the board) to change the board’s output voltage. This setting affects only how quickly the cooler will try to reach the target temperature. Higher voltages mean faster, but less efficient cooling, while lower voltages mean slower, more efficient cooling. This is because Peltier coolers work best when there is a large difference between the target temperature difference and the actual temperature difference.

Results

The first test took place on top of a wrist, with the temperature sensor just beside the Peltier cooler:

Device working while secured to arm

The green LED on the Trinket means that the device is on, and the red LED means that the cooler is active. The rubber bands weren’t that great at holding the assembly in place, so I switched to clear tape. In the future, it might be worth adding pins to accept a standard watch strap.

After a full day of use, it stopped working, probably due to being soaked in sweat. A quick rinse in deionized water fixed that. Covering all those parts in hot glue would probably make it waterproof (while also making it a lot more difficult to maintain), but it’s not a big deal for now.

When in use, the cooler manages to keep the temperature at a fixed, comfortable level. It’s definitely a big step up from an ice pack!

Downloads

Questions or comments? Drop me a line at me@anthonyz.ca.
Creative Commons License This work by Anthony Zhang is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. Copyright 2013-2023 Anthony Zhang.