Skip to content

8. Wearables

References & Inspiration

Hug shirt - CuteCircuit hovding - Airbag for urban cyclists Nadi X leggings - Smart leggings by Wearable X vibrate to correct imperfect yoga poses Movimiento - Fabricademy Final Project 2021 Maite Sosa Methol, FabLab MVD

Motion actuator

Shape Memory Alloy - Flexinol

Flexinol is a shape memory alloy (nickel-titanium). Its shape memory effect is temperature dependent between two phases. The contraction of the Flexinol wire occurs during the high temperature phase and the relaxation during the low temperature phase. This almost instantaneous effect is due to the internal reorganization of Flexinol for both phases1.

Process

Training Flexinol wire

The longer the length of Flexinol wire, the more power is needed to contract it. We have chosen to use a length of 400 mm of Flexinol. We want a tight spiral shape so the Flexinol wire is wrapped around a mm thick nut. We train it to keep this shape by heating it to 400°C for 10 minutes with a heat gun. We plunge it in cold water to stop the process.

Flexinol wire wrapped around a nut

We check the good training of the Flexinol wire by plunging it into boiling water. It must come back in its trained form.

via GIPHY

The trained wire is immersed in boiling water which return to its pre-memorized shape.

Arduino circuit

Now we place the actuator in a Arduino microcontroller circuit to choose the behavior of the contraction-relaxation cycle of Flexinol. Arduino pins (< 40mA from a pin) cannot provide the power we need to warm a heating element. So we use a secondary power source to provide more power thanks to a circuit driver with a Mosfet transistor.

Diode

A diode is a dipole that allows current to flow only in one direction (from the anode to the cathode (gray ring)).


Circuit driver composed by copper tape, a Mosfet transistor and a diode. This circuit is connected with a 9V battery, an Arduino microcontrolleur and the actuator (Flexinol wire). The black tape isolates both paths wich cross each other.

via GIPHY

The code
const int flexinolPin = 9; // the number of the flexinol pin
void setup() {

  pinMode(flexinolPin, OUTPUT); // initialize flexinol as an output.
}

void loop() {
  digitalWrite(flexinolPin,255);  // Flexinol contraction
  delay(1500);          // wait for a 1.5 second
  digitalWrite(flexinolPin,0);    // Flexinol relaxation
  delay(1500);          // wait for a 1.5 second
}

Vibration motor

This motion actuator can be connected to either a digital or analog output pin on the Arduino depending on how we want control the vibration. The duration, intensity and frequency of the vibration can be controlled. The vibrations of the vibration motor are only perceived by the wearer. It can therefore be a component for a discrete device.

Vibration motor circuit
  • Fade exemple

  • Gradual increase and then gradual decrease in power

const int motorPin = 9; // the number of the motor pin

void setup() {
  pinMode(motorPin, OUTPUT);

}
void loop() {
  ramp(motorPin);
}
void ramp(int motorPin) {
  int randn;
   randn = random(100);
   for (int intensity = 0; intensity < 255; intensity +=50) // pas de 50
   {     analogWrite(motorPin, intensity); 
         delay(100);   }  

   randn = random(100);    
   for (int intensity = 255; intensity > 0; intensity -=50) {
    analogWrite(motorPin, intensity);
    delay(100);
  }
}
  • Vibration according to heart pulse
const int motorPin = 9; // the number of the motor pin

void setup() {
  pinMode(motorPin, OUTPUT); // initialization of the motor pin as an output

}
void loop() {

   analogWrite(motorPin, 200); // atrial contraction
   delay(100);  
   analogWrite(motorPin, 0); // 
   delay(100);  
   analogWrite(motorPin, 200); //ventricle contraction
   delay(100);  
   analogWrite(motorPin, 0); // 
   delay(1000);   
}
  • Vibrations according to “Don’t stop me now by Queen” music
const int motorPin = 9;
const int intensity = 200;

void setup() {
  pinMode(motorPin, OUTPUT);

}
void loop() {

  /*
  Don't stop me now
  */
   analogWrite(motorPin, 200); // Note
   delay(192);  
   analogWrite(motorPin, 0); // Silence
   delay(384); 

   analogWrite(motorPin, 200); // Note
   delay(192);  
   analogWrite(motorPin, 0); // Silence
   delay(192); 

   analogWrite(motorPin, 200); // Note
   delay(192);  
   analogWrite(motorPin, 0); // Silence
   delay(192); 

   analogWrite(motorPin, 200); // Note
   delay(768);  
   analogWrite(motorPin, 0); // Silence
   delay(961); 

/*
  Don't stop me, cos I'm
  */

   analogWrite(motorPin, 200); // Note
   delay(192);  
   analogWrite(motorPin, 0); // Silence
   delay(384); 

   analogWrite(motorPin, 200); // Note
   delay(192);  
   analogWrite(motorPin, 0); // Silence
   delay(192); 

   analogWrite(motorPin, 200); // Note
   delay(192);  
   analogWrite(motorPin, 0); // Silence
   delay(576); 

/*
  having a good time
  */
   analogWrite(motorPin, 200); // Note
   delay(192);  
   analogWrite(motorPin, 0); // Silence
   delay(10); 

   analogWrite(motorPin, 200); // Note
   delay(192);  
   analogWrite(motorPin, 0); // Silence
   delay(10); 

   analogWrite(motorPin, 200); // Note
   delay(192);  
   analogWrite(motorPin, 0); // Silence
   delay(10); 

   analogWrite(motorPin, 200); // Note
   delay(384);  
   analogWrite(motorPin, 0); // Silence
   delay(10); 

   analogWrite(motorPin, 200); // Note
   delay(192);  
   analogWrite(motorPin, 0); // Silence
   delay(384); 

/*
  having a good time
  */

   analogWrite(motorPin, 200); // Note
   delay(192);  
   analogWrite(motorPin, 0); // Silence
   delay(10);

   analogWrite(motorPin, 200); // Note
   delay(192);  
   analogWrite(motorPin, 0); // Silence
   delay(10);

   analogWrite(motorPin, 200); // Note
   delay(192);  
   analogWrite(motorPin, 0); // Silence
   delay(10);

   analogWrite(motorPin, 200); // Note
   delay(384);  
   analogWrite(motorPin, 0); // Silence
   delay(10);

   analogWrite(motorPin, 200); // Note
   delay(192);  
   analogWrite(motorPin, 0); // Silence
   delay(10);

   analogWrite(motorPin, 200); // Note
   delay(192);  
   analogWrite(motorPin, 0); // Silence
   delay(10);

   analogWrite(motorPin, 200); // Note
   delay(192);  
   analogWrite(motorPin, 0); // Silence
   delay(10);

/*
shooting star leaving throogh the
  */

analogWrite(motorPin, 200); // Note
   delay(192);  
   analogWrite(motorPin, 0); // Silence
   delay(10);

   analogWrite(motorPin, 200); // Note
   delay(192);  
   analogWrite(motorPin, 0); // Silence
   delay(10);

   analogWrite(motorPin, 200); // Note
   delay(384);  
   analogWrite(motorPin, 0); // Silence
   delay(10);

   analogWrite(motorPin, 200); // Note
   delay(192);  
   analogWrite(motorPin, 0); // Silence
   delay(10);

   analogWrite(motorPin, 200); // Note
   delay(192);  
   analogWrite(motorPin, 0); // Silence
   delay(10);

   analogWrite(motorPin, 200); // Note
   delay(192);  
   analogWrite(motorPin, 0); // Silence
   delay(10);

   analogWrite(motorPin, 200); // Note
   delay(192);  
   analogWrite(motorPin, 0); // Silence
   delay(10);


/*
sky like a tiger
  */

analogWrite(motorPin, 200); // Note
   delay(1730);  
   analogWrite(motorPin, 0); // Silence
   delay(10);

   analogWrite(motorPin, 200); // Note
   delay(192);  
   analogWrite(motorPin, 0); // Silence
   delay(10);

   analogWrite(motorPin, 200); // Note
   delay(192);  
   analogWrite(motorPin, 0); // Silence
   delay(10);

   analogWrite(motorPin, 200); // Note
   delay(384);  
   analogWrite(motorPin, 0); // Silence
   delay(10);


}

Last update: 2023-04-13