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.
We check the good training of the Flexinol wire by plunging it into boiling water. It must come back in its trained form.
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)).
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.
-
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);
}