Skip to content

9. Wearables

wk09_summary_photo

Learning outcomes

  • Research skills: the participant has acquired knowledge through references and Concept development
  • Design skills: the participant has learnt by programming a microcontroller, design a circuit and schematic
  • Fabrication skills: the participant acquired skills necessary to integrate inputs and outputs in a microcontroller wearable project
  • Process skills: Anyone can go through the process, understand it and reproduce it
  • Final outcome: Assembled project, functioning and complete
  • Originality: Has the design been thought through and elaborated?

Student checklist

  • Document the concept, sketches, references also to artistic and scientific publications
  • Create a swatch/sample using an ATTiny/Arduino/Adafruit with one input and one output, using hard-soft connection solutions and battery
  • Create 2 actuator swatches and test them with the Arduino or ATTiny, chosing from examples such as:

    • motors / mini vibration
    • leds / neopixels
    • flip dot / electromagnet
    • heat pad / with thermochromic coating
    • speaker / mp3 player
    • SMA (shape memory alloy)
    • Learn how to program an Arduino/ATTiny/Adrafruit, documenting your process, the libraries added, power requirements and source code
  • Document the schematic and circuit

  • Upload a small video of your object working
  • Integrate it to a project (extra credit)

Ideation

Considering the additional values for vehicle seat, following functions came up in my mind;
- Vehicle surrounding object notification by vibration at each body part as augmenting vehicle body area (vibrator, air or liquid inflator)
- Exercise rhythm guidance by vibration at fabric surface (vibrator), volume change at seat cushion area (air or liquid inflator), motion of seat frame part (servo motor with geometrical support force)
- Refreshing cooling and warming at sacrum area (Peltier device)

Research

Talking about haptic technology, I cannot ignore the amazing Ted Talk by David Eagleman in 2015 talking about how brain is flexible and could complement other sense. For example we are able to "hear" by our haptic sense.
David Eagleman haptic vest

I am also curious about electric control system reinforced by mechanical linkage to actuate force that would not be achieved by electric motor alone.
* Variable Geometry Actuator called "Delft Active Suspension system"
My focusing point is the following "cone suspension system" which can be controlled by little force of servo motor but output relatively big force.
cone suspension

Based on my Ideation list, I started to learn about "DC motor" and "Vibration Motor" control by Arduino.

DC Motor control by Arduino

Materials Needed

  1. Arduino (Uno, Nano, or any other compatible board)
  2. Breadboard
  3. DC Motor
  4. transistor
  5. push button switch
  6. potentiometer (if motor rotational speed need to be changed)
  7. external power supply

Set Up the Circuit

To set up the circuit, basic LED light circuit could be the reference to start.
However, motor requires a lot of current (larger than 100mA) to run which cannot be supplied from Aruduino IO-Pin.
Therefore, external power supply to run the motor is necessary.
Then, the transistor is needed.
In TinkerCAD, "nMOS" as the mosfet (metal oxide semiconductor filed effect transistor) might be the one to choose fot the transistor.
Be careful not to connect positive voltages of Auduino and external power supply, but make sure to have common ground (ground of external battery pack to ground of Arduino) for the entire circuit.

Below is an example of simple LED light press button circuit and code; Simple LED circuit with Arduino

// C++ code
// simple LED light button press circuit
// declare variables
const int LED_pin = 9;
const int button_pin = 2;
int state;

void setup(){
  // setpins
  pinMode(LED_pin, OUTPUT);
  pinMode(button_pin,INPUT_PULLUP);
}

void loop(){
  // read button state
  state = digitalRead(button_pin);
  // check if button is pressed
  if(state == HIGH){ //button not pressed
    digitalWrite(LED_pin, LOW); // turn LED off
  }
  else{ // button pressed
    digitalWrite(LED_pin, HIGH); // turn LED on
  }
}

Here under is an example of DC motor control circuit with Arduino.
simple DC motor control with Arduino

DC motor can be controlled with exactly the same code as LED light one as follows;

// C++ code
// simple DC Motor control
// declare variables
const int motor_pin = 9;
const int button_pin = 2;
int state;

void setup(){
  // setpins
  pinMode(motor_pin, OUTPUT);
  pinMode(button_pin,INPUT_PULLUP);
}

void loop(){
  // read button state
  state = digitalRead(button_pin);
  // check if button is pressed
  if(state == HIGH){ //button not pressed
    digitalWrite(motor_pin, LOW); // turn Motor off
  }
  else{ // button pressed
    digitalWrite(motor_pin, HIGH); // turn Motor on
  }
}
I made an actual circuit of Simple DC Motor with Arduino.
simple DC Motor circuit
video >>

Vibration Motor control by Arduino

Materials Needed

  1. Arduino (Uno, Nano, or any other compatible board)
  2. Breadboard
  3. ERM(eccentric rotating mass) motor
    or coin vibration motor <-very compact and all sealed
  4. solder set to solder the vibration motor thin wire with normal thickness wire to be able to put in breadboad hole
  5. electric tape to cover the solder part
  6. transistor
  7. push button switch
  8. potentiometer (if motor rotational speed need to be changed)
  9. external power supply

Here under is an example of simple vibration motor control with Arduino.
simple vibration motor control with Arduino

Code;

// C++ code
// Control vibration motor with buttun press
// declare pins
const int button_pin = 2;
const int motor_pin = 8;

// variable for button state
int button_state;

void setup() { 
  pinMode(button_pin,INPUT);
  pinMode(motor_pin,OUTPUT);
  Serial.begin(9600);
}

void loop() { 
  button_state = digitalRead(button_pin);
  if(button_state == HIGH){
    digitalWrite(motor_pin,HIGH);
    Serial.println("ON");
  }
  else{
    digitalWrite(motor_pin,LOW);
    Serial.println("OFF");
  }
}
I made an actual circuit of Simple Vibration Motor with Arduino.
simple vibration motor circuit
video >>

Pressure Sensor input -> 3 Vibration Motor control by Arduino

Materials Needed

  1. Arduino (Uno, Nano, or any other compatible board)
  2. Breadboard
  3. ERM(eccentric rotating mass) motor X 3
    or coin vibration motor <-very compact and all sealed
  4. solder set to solder the vibration motor thin wire with normal thickness wire to be able to put in breadboad hole
  5. electric tape to cover the solder part
  6. transistor (Nmos)
  7. Pressure sensor
  8. external power supply

I made following circuit with Arduino that as the load of Pressure Sensor increases the number of Vibration Motor increases up to three.

Code;

// One Pressure Sensors + 3 Vibration Motor by Kohshi Katoh
// declare variables
int sensor_pin1 = A0;  // sensor pin
int sensor1;          // sensor readings
// Vibration Motor pins
int VibMotor1 = 2;
int VibMotor2 = 3;
int VibMotor3 = 4;

void setup() {
  // put your setup code here, to run once:
  // set LED pins as outputs
  pinMode(VibMotor1,OUTPUT);
  pinMode(VibMotor2,OUTPUT);
  pinMode(VibMotor3,OUTPUT);
  // initialize seral communication
  Serial.begin(9600);
}

//
void motor_setting(int, int, int, int);

void loop() {
  // put your main code here, to run repeatedly:
  // read sensor value
  sensor1 = analogRead(sensor_pin1);

  // print sensor value
  Serial.println(sensor1);

  // turn on Motors if sensor reading
  // exceeds a certain threshold
  // sensor1
    motor_setting(sensor1, VibMotor1, VibMotor2, VibMotor3);
}

void motor_setting(int sens, int vmt_n1, int vmt_n2, int vmt_n3){
    if(sens > 900){
        digitalWrite(vmt_n1,HIGH);
        digitalWrite(vmt_n2,HIGH);
        digitalWrite(vmt_n3,HIGH);
    }
    else if(sens <= 900 && sens > 700){
        digitalWrite(vmt_n1,HIGH);
        digitalWrite(vmt_n2,HIGH);
        digitalWrite(vmt_n3,LOW);
    }
    else if(sens <= 700 && sens > 500){
        digitalWrite(vmt_n1,HIGH);
        digitalWrite(vmt_n2,LOW);
        digitalWrite(vmt_n3,LOW);
    }
    else{
        digitalWrite(vmt_n1,LOW);
        digitalWrite(vmt_n2,LOW);
        digitalWrite(vmt_n3,LOW);
    }
}

I made actual circuit with Arduino that as the load of Pressure Sensor increases the number of Vibration Motor increases up to three.
I used Jute Pressure Sensor that I made in "E-textiles week".
Jute Pressure sensor in Vibration Motor out
video >>

Air Pump blow in-out control with valve by Arduino

Materials Needed

  1. Arduino (Uno, Nano, or any other compatible board)
  2. Breadboard
  3. DC air pump X 2
  4. valve
  5. diode(IN4007) X 3
  6. transistor (Nmos) X 3
  7. Resistance 10kΩ
  8. external power supply 6V
  9. Soft inflator

Thanks to Kae, I learned that "diode" is required to block the spike currency might happen at valve and motor at transient drive.
spike of currency

  • Why Your Solenoid Needs a Diode

Circuit for Arduino
2_AirPumps_1_Valve

Code

/*******************************
 *  2 Air Pumps with 1 Valve
 *******************************/

int Valve = 8;
int pump1 =9;
int pump2 =10;


void setup() {
pinMode(Valve,OUTPUT);
Serial.begin(9600);
}

void loop() {

digitalWrite(Valve,HIGH);
Serial.println("on");
analogWrite(pump1,255); 
analogWrite(pump2,0); 
delay(5000);

digitalWrite(Valve,LOW);
Serial.println("off");
analogWrite(pump1,0); 
analogWrite(pump2,255); 
delay(5000);

}
I made actual "air pump blow in-out" circuit with Kae's guidance.
Inflator made for "Soft robotics" was used for the circuit confirmation.
air pump blow in-out circuit
video >>

Servo Motor with additional force function

I wanted to think about active control system to move human body with small motor.
Then, following suspension system designed by Delft University came in my mind.

  • Variable Geometry Actuator called "Delft Active Suspension system"
    My focusing point is the following "cone suspension system" which can be controlled by little force of servo motor but output relatively big force.
    cone suspension

Materials Needed

  1. Arduino (Uno, Nano, or any other compatible board)
  2. servo motor
  3. spring
  4. joint
  5. arm
  6. frame

Code for servo motor demo with Arduino shared by Gunjan Kaul in SkyLab team

#include <Servo.h>  // Include the Servo library

Servo myServo;  // Create a Servo object

void setup() {
  myServo.attach(9);  // Connect the servo to Pin 9
}

void loop() {
  // Sweep the servo from 0 to 180 degrees
  for (int angle = 0; angle <= 180; angle++) {
    myServo.write(angle);  // Move the servo to the specified angle
    delay(15);  // Wait for the servo to reach the position
  }

  // Sweep the servo from 180 to 0 degrees
  for (int angle = 180; angle >= 0; angle--) {
    myServo.write(angle);  // Move the servo to the specified angle
    delay(15);  // Wait for the servo to reach the position
  }
}
I made a "Cone Suspension" demo model with servo motor using above code and Arduino.
cone suspension demo model

video >>

For vehicle cabin application

I added an application idea into my NDA folder.

End of Documentation