9. Wearables¶
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.
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.
Based on my Ideation list, I started to learn about "DC motor" and "Vibration Motor" control by Arduino.
DC Motor control by Arduino¶
- Useful tutorial for beginners; Control a DC Motor with Arduino (Lesson #16)
- Use motor controller device with Arduino; Control Big Motors with your Arduino (Step by Step Tutorial)
- Motor Rotational direction change with H-Bridge; DC Motor Control with an H-Bridge and Arduino (Lesson #17)
Materials Needed¶
- Arduino (Uno, Nano, or any other compatible board)
- Breadboard
- DC Motor
- transistor
- push button switch
- potentiometer (if motor rotational speed need to be changed)
- 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;
// 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.
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
}
}

video >>
Vibration Motor control by Arduino¶
- Useful tutorial for beginners;How to Use a Vibration Motor with Arduino (Lesson #25)
Materials Needed¶
- Arduino (Uno, Nano, or any other compatible board)
- Breadboard
- ERM(eccentric rotating mass) motor
or coin vibration motor <-very compact and all sealed - solder set to solder the vibration motor thin wire with normal thickness wire to be able to put in breadboad hole
- electric tape to cover the solder part
- transistor
- push button switch
- potentiometer (if motor rotational speed need to be changed)
- external power supply
Here under is an example of 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");
}
}

video >>
Pressure Sensor input -> 3 Vibration Motor control by Arduino¶
Materials Needed¶
- Arduino (Uno, Nano, or any other compatible board)
- Breadboard
- ERM(eccentric rotating mass) motor X 3
or coin vibration motor <-very compact and all sealed - solder set to solder the vibration motor thin wire with normal thickness wire to be able to put in breadboad hole
- electric tape to cover the solder part
- transistor (Nmos)
- Pressure sensor
- 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.
- my TinkerCAD model >>Pressure input Vibration output with Arduino
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".
video >>
Air Pump blow in-out control with valve by Arduino¶
Materials Needed¶
- Arduino (Uno, Nano, or any other compatible board)
- Breadboard
- DC air pump X 2
- valve
- diode(IN4007) X 3
- transistor (Nmos) X 3
- Resistance 10kΩ
- external power supply 6V
- 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.
- Why Your Solenoid Needs a Diode
Circuit for Arduino
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);
}
Inflator made for "Soft robotics" was used for the circuit confirmation.

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.
Materials Needed¶
- Arduino (Uno, Nano, or any other compatible board)
- servo motor
- spring
- joint
- arm
- 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
}
}

video >>
For vehicle cabin application¶
I added an application idea into my NDA folder.