Skip to content

Deliverables

GANTT

Alt text

BoM bill of materials

The Bill of Materials described below are all that is required to...

  • Build a M1N0 coat
  • Install an LED light array and control electronics inside the M1N0
  • Install an RGB fan and control electronics on a Sandogasa hat

Materials

Qty Description Price Link Notes
2 8mm PE Rope 200m 14.00 $ local home center
2 1mm PE Cord 30m 10.00 $ local home center
1 Parcord 100ft 12.00 $ local home center
1 6mm OD Clear Silicone Tubing 5m 5.00 $ local home center
2 Arduino Nano MCU 16.00 $ amazon.com 3pack
2 Perf PCB Board 20.00 $ amazon.com 34pcs pack
1 Outdoor LED string 15.00 $ amazon.com
1 RGB Computer Fan 120mm 10.00 $ amazon.com 3pack
2 Rechargeable Lithium 9V Battery 16.00 $ amazon.com 2pack
1 Outdoor LED string 15.00 $ amazon.com
1 22awg Wire 20m 15.00 $ amazon.com
5 XH Connectors 3.00 $ amazon.com 230pcs kit
5 SM Connectors 4.00 $ amazon.com 200pcs kit
2 Female 2.54mm pitch Pin Header 15.00 $ amazon.com 10pcs kit
2 Slide Switch 3.00 $ amazon.com 20pcs kit
2 PIR sensor 3.00 $ amazon.com 3pcs kit

Slide show

Story telling script

I do not have the knowledge or skills to create a garment that is fashionable.

Fabricademy...has empowered me with enough skills and persepective to create a simple, utilitarian garment out of ordinary materials...that is thoughtful and sensitive to environmental and social issues.

The M1N0 project is an electronically enhanced wearable that addresses the issues of textile waste and garment making accessibility by the masses. It's simplicity is both a reflection of my skill (or lack there of) but also a nod of appreciation to a tradition of garment making that is beautiful because of its humility and usefulness.

Key Explorations - Abstraction > obscure the human body
- Precedent > historical design and fabrication reference
- Utility . emphasis on practicality and functionality
- Mythology > temporal agnostic form...not style
- Hybrid Fabrication > Analog & Digital fabrication

Key Intent - Simple to fabricate
- Economically accessible by anyone
- Culturally coded
- Timeless
- Electronically enhanced

Storyboarding

Flow Thematic > from history to the future

  • scene 1 Traditional Japanese flute music plays over a black screen...setting the atmosphere

  • scene 2 A rudimentary 2D animation plays while expository text is displayed..."Learn from the PAST, refactor for the PRESENT...and FUTURE fiction"

Alt text
- scene 3 The music changes as a blurry black and white image...suggestive of a Kurosawa movie from the 1970s appears Alt text
- scene 4 Still images transitions to motion pictures in black and white (heavily referencing Kurosawa)...emphasis on showing the M1N0 garment's form and flowing movement
Alt text
- scene 5 A black screen transitions to a screen of spring flowers in full color...panning to see the M1N0 in full-color...in a traditional Japanese context
Alt text

- scene 5 Stills and close-ups of the M1NO...showing form and details
Alt text Alt text
- scene 6 The 'Traditional' section ends and fades to black

- scene 7 Slow music changes to aggressive modern music...cyberpunk still images shows the electronic enhanced M1N0 in its night guise
Alt text
- scene 8 The electronic M1N0 is shown in motion...in the rain
Alt text
- scene 9 The modern M1N0 end section ends with a black screen...the music transitions again to upbeat rap music...and the closing credit section rolls
Alt text - scene 10 The video ends with a final shot of the modern M1N0 and Japanese kanji characters in red
Alt text

FABRICATION FILES

The M1N0 was primarily handcrafted...intentionally so, as the ability for the garment to be made by anyone was an important point. Some 3D printed parts were designed and fabricated to house and install electronic components into the M1N0.

Alt text M1N0 Controller Case

Alt text M1N0 PIR Case Top M1N0 PIR Case Bottom

Project Code

The code below is loaded to the M1N0 controller computer and triggers its various functions

//M1N0 Final Project Control Program
//by Rico Kanthatham, Fabricademy 2023
//License: Creative Commons Non-Commercial Attribution

//Debug LED
const int ledPin = 13;

//LED String
const int LEDstrings[] = {5, 6, 9, 10, 11};
int brightness = 5;
int fadeRate = 1;
int delayShort = 100;
int delayLong = 100;
int size;

//PIR Sensor
const int inputPin1 = 2;               // input pin PIR sensor 1
const int inputPin2 = 3;               // input pin PIR sensor 2
int pirState1 = LOW;             // initial PIR1 state...no motion detected
int pirState2 = LOW;             // initial PIR2 state...no motion detected
int val1 = 0;                    // PIR1 read value
int val2 = 0;                    // PIR2 read value

//Button
const int buttonPin = 4;     // pushbutton pin number
int buttonState = 0;         // initial pushbutton state

void setup() {
  Serial.begin(9600);

  pinMode(ledPin, OUTPUT);    
  pinMode(inputPin1, INPUT);    
  pinMode(inputPin2, INPUT);     
  pinMode(buttonPin, INPUT);    

  size = sizeof(LEDstrings) / sizeof(int); //determine the size of the LED Strings Array

  for (int i = 0; i < size; i++) {
    pinMode(LEDstrings[i], OUTPUT);
  }
}

void loop() {

  //Status Quo expression of LED String Array
  for (int i = 0; i < size; i++) {
    slowFade(i);
  }

  //Check PIR sensor for detected motion
  sensor1();
  sensor2();

  //Check Button for press
  button();
}

//Slow Fade LED pattern
void slowFade(int s) {
  analogWrite(LEDstrings[s], brightness);
  brightness += fadeRate;

  if (brightness <= 5 || brightness >= 255) {
    fadeRate = -fadeRate;
  }
  delay(delayLong);
}

//Flash LED Pattern
void flash(int n) {
  digitalWrite(LEDstrings[n], HIGH);
  delay(50);
  digitalWrite(LEDstrings[n], LOW);
  delay(20);
}

//PIR sensor 1
void sensor1() {
  val1 = digitalRead(inputPin1);  // read input value
  if (val1 == HIGH) {            // check if the input is HIGH
    digitalWrite(ledPin, HIGH);  // turn LED ON
    for (int i = 0; i < size; i++) {
      flash(i);
    }
    if (pirState1 == LOW) {
      // we have just turned on
      Serial.println("Motion detected PIR1!");
      // We only want to print on the output change, not state
      pirState1 = HIGH;
    }
  } else {
    digitalWrite(ledPin, LOW); // turn LED OFF
    if (pirState1 == HIGH) {
      // we have just turned of
      Serial.println("Motion ended PIR1!");
      // We only want to print on the output change, not state
      pirState1 = LOW;
    }
  }
}

//PIR sensor 2
void sensor2() {
  val2 = digitalRead(inputPin2);  // read input value
  if (val2 == HIGH) {            // check if the input is HIGH
    digitalWrite(ledPin, HIGH);  // turn LED ON
    for (int i = 0; i < size; i++) {
      flash(i);
    }
    if (pirState2 == LOW) {
      // we have just turned on
      Serial.println("Motion detected PIR2!");
      // We only want to print on the output change, not state
      pirState2 = HIGH;
    }
  } else {
    digitalWrite(ledPin, LOW); // turn LED OFF
    if (pirState2 == HIGH) {
      // we have just turned of
      Serial.println("Motion ended PIR2!");
      // We only want to print on the output change, not state
      pirState2 = LOW;
    }
  }
}

//Button Action
void button() {
  // read the state of the pushbutton value:
  buttonState = digitalRead(buttonPin);

  // check if the pushbutton is pressed. If it is, the buttonState is HIGH:
  if (buttonState == HIGH) {
    // turn LED on:
    digitalWrite(ledPin, HIGH);
    for (int i = 0; i < size; i++) {
      flash(i);
    }
  } else {
    // turn LED off:
    digitalWrite(ledPin, LOW);
  }
}

How-Tos & Tutorials

Fabrication methods are reasonably well described in the Process pages of the M1N0's design development.


Last update: 2023-05-15