Introduction: Warming Band

This pressure-sensitive band warms up as you rest your hand on it, and cools down with firmer pressure. The jersey sash stretches to hug your body and ties easily around your waist. Made with women in mind, it’s a cozy, hands-free hot pad for your crampiest days!

Remix Suggestion: If you tweak the code and put the circuit into a box or a bag, you can use this same circuit to ripen your avocados, and other fruit quickly!

Supplies

CIRCUIT

  • Loomia Mega Pressure Matrix (x1)
  • Loomia S-Curve Bus (x1. Optional. I like the look/feel of the bus, but you can just use wire instead!)
  • Loomia 3.7V-5V Heater (x1)
  • Arduino Nano Every with header pins and micro USB cable
  • N-Channel MOSFET 60V, 30A
  • Resistor, at least 150 ohm (x1)
  • LED (x1)
  • Wire
  • Breadboard
  • Candybar battery pack with 2AMP draw and micro USB cable
  • Soldering iron, solder
  • Hot glue (optional)

SASH

  • Jersey/spandex
  • Velcro
  • Neoprene
  • Thread
  • Sewing needles/sewing machine
  • Snap button tape (optional)

Step 1: Start With the Circuit

Some notes about this circuit

  • I’ve used a battery pack with a 2AMP draw. You can use up to 7.2V to get the heating pad really toasty!
  • The MOSFET is used because the Arduino can’t push out high current through the GPIO pins. So you have to use the Arduino to switch the gates on the MOSFET to high or low to allow current to flow through the transistor to the heater.
  • I chose to stick with a breadboard. Use a protoboard for permanent connections!
  • In the picture above, I've soldered the wires to the pin holes. In retrospect, soldering to the pads would have been better!

Step 2: Wire It Up!

Solder the heating pad to the S-curve bus

  • Cut the edge of the S-curve bus so it’s flush with the bottoms of the gold pads.
  • Place the S-curve bus on top of the heating pad so the pads align and overlap slightly.
  • Solder the pads together.
    • I made a bit of a mess with the soldering, but the goal is to just solder the gold pads on the Loomia parts, and avoid any black coating. Refer to this Loomia tutorial for more information.


Solder wires to the the S-bus

  • Solder wires onto the pads of the S-Bus. I recommend color coding them so you know which are the voltage wires versus ground wires.
    • If you’re using stranded wire, twist the strands together and solder them.
    • If you press the wires directly into the breadboard like I did, you can add a ball of hot glue around the wire where it exits the insulation to provide some strain relief!


Solder wires to the the pressure matrix

  • Solder wires onto the pads of the pressure matrix. I recommend using 6 different colors for easy recognition later!
    • Again, if you’re using stranded wire, twist and solder the strands together.
    • You can also use the hot glue trick again 😉.

Connect all the components together - use the images for reference!
When the breadboard is all wired up, add a twist tie to keep everything in place.

Step 3: Use the Arduino IDE to Load the Code Onto the Arduino. Test It Out!

/*
This file adapts the code originally found at >> https://www.kobakant.at/DIY/?p=7443:
Pressure Sensor Matrix Code
parsing through a pressure sensor matrix grid by switching individual
rows/columns to be HIGH, LOW or INPUT (high impedance) to detect
location and pressure.

Instead of using external resistors for the pressure matrix, this code uses the
internal resistors of the Arduino.
*/
#define numRows 3
#define numCols 3
#define sensorPoints numRows*numCols

int rows[] = {A0, A1, A2};
int cols[] = {5,6,7};
int outputLED = 9;
int outputMos = 10;

int incomingValues[sensorPoints] = {};
int sensorValue = 0;
int voltage = 0;

////////////////////////////////////Functions

// Check every value in the grid to see if any point is being pressed hard

bool ifAnyPadHardPressed(void) {
  for(int i=0; i < numRows*numCols; i++) {
    if ((incomingValues[0]<700) || (incomingValues[1]<700) || (incomingValues[2]<700) || (incomingValues[3]<700) || (incomingValues[4]<700)
    || (incomingValues[5]<700) || (incomingValues[6]<700) || (incomingValues[7]<700) || (incomingValues[8]<700)) {
      return true;
    }
  return false;
  }
}


// Check if the grid is being softly pressed

bool ifAnyPadSoftPressed(void) {
    for(int i=0; i < numRows*numCols; i++) {
        if ((700 < incomingValues[i]) && (incomingValues[i] < 1015)) {
            return true;
        }
    }
    return false;
}


// Check if nothing is being pressed on the grid

bool nothingPressed(void) {
 for(int i=0; i < numRows*numCols; i++) {
        if (incomingValues[i] < 1015) {
        return false;
        }
    return true;
    }
}

////////////////////////////////////Main Code

void setup() {
  // set all rows and columns to INPUT (high impedance):
    for (int i = 0; i < numRows; i++) {
      // Enabling 5V on all sensors
    pinMode(rows[i], INPUT_PULLUP);
    }

    for (int i = 0; i < numCols; i++) {
      //Turning off GND from all sensors
    pinMode(cols[i], INPUT);
    }

  pinMode(outputLED, OUTPUT);
  pinMode(outputMos, OUTPUT);
  Serial.begin(9600);
}

void loop() {

//// Check the readings from the pressure matrix grid

    for (int colCount = 0; colCount < numCols; colCount++) {
      pinMode(cols[colCount], OUTPUT); // set as OUTPUT
      digitalWrite(cols[colCount], LOW); // set LOW

    for (int rowCount = 0; rowCount < numRows; rowCount++) {
      incomingValues[colCount * numRows + rowCount] = analogRead(rows[rowCount]); // read INPUT
      }// end rowCount

    pinMode(cols[colCount], INPUT); // set back to INPUT!

    }// end colCount

  // Print the incoming values of the grid:
    for (int i = 0; i < sensorPoints; i++) {
    Serial.print(incomingValues[i]);
    if (i < sensorPoints -1) Serial.print("\t");
    }
    
    Serial.println();
  
 //// Set the heating pad according to the incoming values
 
    if (ifAnyPadHardPressed()) {
      //decrease the voltage, LED brightness and heat decreases
        analogWrite(outputLED, voltage--);
        analogWrite(outputMos, voltage--); 
        Serial.print(voltage);
    }
    else if (ifAnyPadSoftPressed()) {
      //increase the voltage, LED brightness and heat increases
        analogWrite(outputLED, voltage++);
        analogWrite(outputMos, voltage++);
        Serial.print(voltage);
    }
    else if (nothingPressed()) {
      //maintain the voltage, LED brightness and heat stays the same
        analogWrite(outputLED, voltage);
        analogWrite(outputMos, voltage);
        Serial.print(voltage);
    }     

    if(voltage>=255) {
      voltage = 255;
      /* Capping the voltage will make it easier to reduce the heat of the pad,
       * since the voltage will continue to count up, but the max analogWrite value is 255.
      */
    }
    
    Serial.println();
   
    delay(5);
}

Step 4: Time to Make the Band Itself

Size the sash and place the components to fit your body!

  • The sash I have is about 50” long, this gives me plenty of fabric to tie together when I wear the sash.
  • I positioned the heating pad to be centered on my abdomen, with the pressure matrix directly on the other side. This way, as I lay around rubbing my belly, I’m also warming up the heating pad!
  • The breadboard and battery sit around the side of my hip, about 6” from the pressure sensor. So when I’m lying on the couch, or sitting in a chair, nothing is pressing against my back! I planned to tie the sash on the opposite hip for the same reason. 💡
    • The jersey is also stretchy enough that I can shift the breadboard and battery around a little while I’m wearing the band. It’s all about maximizing comfort!!

Cut your fabric

  • The piece of neoprene I have is 15” x 6.5”. The angled side helps make the band look less bulky while wearing it. Again, adjust the size to best fit your body.
  • Get two pieces of jersey/spandex. Mine are 50” x 10”.
  • Get a little extra jersey to make the battery pocket. My fabric is ~5"x3", while the battery is ~1.75"x3.75"

Note, the circuit is mounted onto a piece of neoprene for a couple reasons:

  • In case the outer sash ever needs to be washed, the electronic components can be removed.
  • It provides squishy structure to the sash, so it’s easy to put on and take off, while keeping the components and wires organized, and undamaged.
  • If you don’t have access to neoprene, get inventive! Try sewing together multiple layers of fabric, or use other comfy materials around your home.

Step 5: Assemble the Core of the Warming Band

Position the circuit on the neoprene, but don't adhere them yet!

  • (The sewn border is optional!)
  • Place the heating pad on one side of the neoprene
    • I placed it 2” from the edge of the neoprene with the S-curve bus extending past the top edge.
  • On the other side of the neoprene, place the pressure matrix
    • Approximately align the edge of the pressure matrix with the edge of the heating pad
  • Fold the S-curve bus over the neoprene
  • Place the breadboard on the neoprene and mark the corners

Add fasteners to the neoprene core

  • Cut a piece of neoprene to be the same width of your breadboard, and at least one inch longer than the length.
    • Optional: sew around the edges of this piece with a zig-zag, and on either side of the center
  • Cut this piece of neoprene in half to make a V
  • Sew small pieces of velcro to the tops of the V
  • Sew the base of the V above the top edge of the breadboard
  • Sew two small pieces of velcro at the corners of the breadboard for the V to attach to
  • Sew velcro to the edges of the neoprene on the side with the heating pad

Adhere the circuit to the neoprene

  • If you’re afraid of commitment like the rest of us, you can peel a small piece of the backing off each Loomia component to test their placement. This makes it easy to take them off/move them. Try not to do it too much though, they may lose their stickiness or get damaged.
  • Secure the breadboard
  • Position the wires and sew them into place

Step 6: Make the Outer Sash

Time to use the jersey!

  • Position the neoprene core in the center of one piece of jersey
  • Position and pin the velcro to the jersey so it matches with the neoprene core
  • Sew the velcro onto the jersey
  • Make a pocket for the battery
    • I sewed a tube from a small piece of jersey. The tube was about 1” shorter than the battery, and had about ½” extra material around the battery. When sewing the bottom of the tube, leave an opening for the USB cable to exit.
  • Sew the pocket next to the velcro on the jersey. Leave enough clearance so the pocket sits next to the neoprene core.
    • I sewed the two sides and the inner top edge to the sash
  • Optional: I added the snap button tape for a little extra structure and alignment, but the sash works fine without it.
  • Sew the bottom edges of the two pieces of jersey together. I focused on joining the section under the neoprene and battery, but you can opt to sew the entire length.
  • Sew the left and right sides of the jersey together.

Step 7: Final Assembly

Attach the neoprene core to the jersey

  • Lay the jersey flat on the table
  • Align the velcro on the back of the neoprene to the velcro on the jersey
  • Press it into place

Plug in your battery

  • Pull the micro USB cable through the hole in the bottom of the battery pocket
  • Insert the battery into the pocket and tuck in any extra cable length

"Tuck in" your circuit

  • Bring the bottom piece of jersey over the neoprene core
  • Tuck the top edge of the jersey over the other piece of jersey/neoprene to keep the sash from flapping open

Congratulations! You've completed this build 🎉
Try on your masterpiece and make tweaks as you see fit!

Enjoy✨