Final Project: Earthquake Skirt

The Earthquake Skirt is a skirt made of debris that rumbles and shakes with near-real-time seismological data.  Beneath the layers of debris are three vibrating motors, which have their intensity scaled to the magnitude of the occurring earthquakes.


At its core, this skirt is about compassion.  One is literally wearing and being reminded of someone’s trauma.  Its relevance to fashion is that like fashion fads, natural disasters pass by us –especially those of us who are geographically immune.  How quick we are to forget about the ongoing struggle of victims in Japan, Haiti, Chile, China, and other places that major earthquakes strike but of which we never learn.

I wanted to play with the idea of glamorizing disasters, of bringing disasters into the fashion world by creating a scenario in which a person wears the debris of someone’s life.  I see this paralleling the torture of animals in the name of fashion items (fur coats, boots made from the skin of exotic animals, etc.), and in this way the piece becomes a big cheeky.  “Are those your new seal skin boots?  They match perfectly with your Chilean 2010 earthquake dress!”.


In order to inform myself on the material process of the making the skirt, I had to do some research on debris from earthquakes.  I looked at many images from around the globe, ultimately deciding on a palette, materials, and shapes.  In addition, I researched other skirts that may have incorporated real-time data, but found only one: Nancy Paterson’s Stock Market Skirt.

A Study of Debris

The data is pulled from the United States Geological Survey website, which tracks seismological data from around the globe.

USGS website
Incoming Data via Processing



  • Arduino Uno
  • Vibrating motors with enclosures (foam, acrylic)
  • Transistors
  • Resistors
  • Terminals
  • Perf board
  • DC Jack
  • 6V 2A wallwort
  • Wire, solder


  • Misc. debris from gutted houses in downtown Toronto
  • Scrap metal from a scrap yard
  • Metal wire
  • Metal caging
Modified Motor – Body Attachment and Additional Vibration Offset

Circuit for Powering the Motors

Testing the Circuit

Building the frame


Arduino: Running Standard Firmata at 9600 Baud


/*Earthquake Skirt
Erin Lewis
Wearable Tech 2
April 2011

import processing.serial.*;
import cc.arduino.*;
//PFont f;
Arduino arduino;
Serial myPort;

int motor1 = 3;
int motor2 = 5;
int motor3 = 9;
int motor4 = 10;
float pulseWidth;
int timeVal = 50;
String URL = “”;
String[] data;
EarthquakeData[] myArray;

class EarthquakeData {
String date = ” “;
String time = ” “;
float magnitude = 0;
String region = ” “;

void setup() {
// f = loadFont(“Arial-BoldMT-48.vlw”);
arduino = new Arduino(this, Arduino.list()[0], 9600);
arduino.pinMode (motor1, arduino.OUTPUT);
//text(“test”, 0, 0, width/2, height/2);
arduino.pinMode (motor2, Arduino.OUTPUT);
arduino.pinMode (motor3, Arduino.OUTPUT);
// arduino.pinMode (motor4, Arduino.OUTPUT);

void draw() {
int eventNumber = 1;
int maxValue = 0;
int pulseWidth = 0;
float timeout;
float currentTime;

do {
if (loadData() == true) {
eventNumber = 1;

do {
println(“Playing event:” + eventNumber + ”  [” + myArray[eventNumber].region + ” – ” + myArray[eventNumber].magnitude + “]”);
maxValue = int(myArray[eventNumber].magnitude)*20;
timeout = hour();
timeout *= 60;
timeout += minute();
timeout *= 60;
timeout += second();
timeout *= 1000;
timeout += millis() + (myArray[eventNumber].magnitude * 1000);

do {
pulseWidth = int(sq(random(maxValue)));
currentTime = hour();
currentTime *= 60;
currentTime += minute();
currentTime *= 60;
currentTime += second();
currentTime *= 1000;
currentTime += millis();
while (currentTime < timeout);

// turn the motors off
println (“Delaying 15 seconds…”);
delay(15000); //30000 = 30 seconds;  300000 = 5 mins;

/*///////TEXT TO SCREEN///////////////
String r = (myArray[eventNumber].region);
String m = “Magnitude: ” + (myArray[eventNumber].magnitude);
String t = (myArray[eventNumber].time);

println(“printing text”);
fill(255); //text colour
text(r, 0, 0, width/2, height/2);
text(m, 30, 75, 70, 70); //test parameters
text(t, 45, 90, 70, 70); //test parameters

while (eventNumber < data.length);
while (true);

boolean loadData() {
boolean OK = false;
data = loadStrings(URL);
myArray = new EarthquakeData[data.length];

for (int i=0; i<data.length; i++) {
myArray[i] = new EarthquakeData();
String[] noaaEarthquakeData = data[i].split(“,”);
if (noaaEarthquakeData.length == 12) {
OK = true;
myArray[i].date = noaaEarthquakeData[4];
myArray[i].time = noaaEarthquakeData[5];
myArray[i].magnitude = float(noaaEarthquakeData[8]);
myArray[i].region = noaaEarthquakeData[11];
return (OK);

Leave a Reply

A sample text widget

Etiam pulvinar consectetur dolor sed malesuada. Ut convallis euismod dolor nec pretium. Nunc ut tristique massa.

Nam sodales mi vitae dolor ullamcorper et vulputate enim accumsan. Morbi orci magna, tincidunt vitae molestie nec, molestie at mi. Nulla nulla lorem, suscipit in posuere in, interdum non magna.