12주차 작업기록 (권예지)

2021.11.16 ~ 2021.11.22

* 수용성 양면테이프를 사용했어요. 천에 붙이면 잘 안 떼져서 좋았어요! 보통 원단 파는 사이트 들어가면 있던데, 제가 구매한 사이트도 공유할테니 참고하세요!
https://1000nara.com/front/php/product.php?product_no=302395&NaPm=ct%3Dkwbn6aj3%7Cci%3Dcheckout%7Ctr%3Dppc%7Ctrx%3D%7Chk%3D321a86d9f4953ba4a68c225dea3d6110cc9b81d7

진행사항
1. 시리얼 압력센서 8개
2. 순서도
3. 레퍼런스 리서치 및 디자인

시리얼 압력센서 8개
저번주에 3개로 진행했던 센서를 8개로 만들고, 그리고 입고 쓰다듬을 수 있도록 배에 두를 수 있는 형태로 만들었다.

위치를 먼저 표시했다.
배를 문지르는 부분에 전선이 있는 것이 싫어서 전도성 천을 위 아래로 쭉 연장했다.
velostat 천을 양쪽으로 감싼 전도성 천이 서로 닿지 않도록 만들었다. 그리고 velostat라는 전도성 천이 미끌거려서 생각보다 바느질이 어려울 것 같았다. 그래서 양면 테이프로 작업을 했는데, 생각보다 괜찮았다.
아날로그 핀과 GND 핀을 어떻게 연결할지 스케치
생각보다 오래 걸리고 섬세한 작업이었다…
다 했는데 안될까봐 중간중간에 테스트하면서 찍은 사진
먼저 센서 3개로 테스트를 했는데, 센서 하나만 눌러도 3개 다 반응해서 많이 당황했다… 몇 시간을 들여서 회로를 만들었는데… 다시 해야하나 싶어서 많이 당황했는데 다시 침착하게 브레드보드에 연결된 핀을 살펴봤더니 거기에 문제가 있었다. 핀을 잘못 연결해서 그런거였다… 정말 다행이었다.
스케치 한대로 선을 연결해서 완성했다.
나노를 사용했다. 센서를 8개 사용하니 매우 선이 복잡하다.
(연결하고보니 무지개처럼 생긴 것 같다.)
만든 센서 위에 천을 덧대어 배를 문지르는 것처럼 문질러봤다. 가장 작은 값을 가진 위치를 출력한다.
배에 둘러서 테스트를 하는 것은 영상을 찍지는 못했지만, 잘 된다. 다만 센서 위치가 흐트러지지 않도록 잘 고정해야할 것 같고, 그리고 센서 위치가 어디있는지 알기 힘들어서 바느질 자국으로 센서 위치 흔적을 남겨놔야할 것 같다.
#define sensorsNum 8
int sensors[sensorsNum]={0,1,2,3,4,5,6,7};

void setup() {
  Serial.begin(9600); 
  for(int i=0;i<sensorsNum;i++){ 
    pinMode(sensors[i],OUTPUT);
    digitalWrite(sensors[i],HIGH);
  }  
}

void loop() { 
  for(int i=0;i<sensorsNum;i++){
    if(analogRead(sensors[i])<100){
      Serial.println(i+1);
    }
  } 
  delay(100);
}

순서도

디자인

한복의 저고리 디자인을 묶는 형태가 아니라 벨크로로 고정할 수 있는 형태를 생각했다.

11, 12주차 작업 기록과 작업 개요 (이건)

[작업개요]

1.팀 구성원 : B699163/이건

2.작업 제목 : 작별도 아름답다.

3.개요:누군가와 작별할 때 포옹한 후 상대의 떠나가는 뒷모습에서 빛을 통해 위로를 줄 수 있는 자켓이다. 포옹할 때 신체와 접촉이 일어나는 부위에 소프트 버튼을 장착하여 포옹의 여부를 확인하고 이를 통해 등에 부착된 네오픽셀을 제어한다.

우리는 가까운 사람과 인사의 의미로 포옹을 하곤 한다. 모든 인사법이 그러하듯 작별의 순간에 떠나가는 사람의 뒷모습을 보는 것은 쓸쓸한 감정을 불러 일으킨다. 유명한 <낙화>라는 시에서는 ‘떠나는 자의 뒷모습의 아름다움’에 대해 말하고 있다. 이 자켓도 비슷한 맥락에서 ‘작별도 아름답다’ 작업물을 통하여 쓸쓸한 감정보다는 떠나는 자의 뒷모습을 보고 아름다움과 위로를 느끼도록 하고싶다.

[작업 진행]

11. 12주차는 전체적인 점검과 이를 토대로 필요한 재료들을 가공하는 것을 중점적으로 진행했다.

1.회로 그리기

버튼과 네오픽셀에 필요한 연결을 그려보았다. 네오픽셀을 개별적으로 제어할 필요는 없어서 독립적으로 핀을 부여하지 않아도 될 것 같다.

2.코드 작성

#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
#include <avr/power.h>
#endif
#define PIN        11
#define NUMPIXELS 6
Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);

const int led = 10;
const int bt = 7;//button
const int bt2 = 4;
int lightR = 0;
int lightG = 0;
int lightB = 0;

void setup() {
    Serial.begin(9600);
  pixels.clear();
  pinMode(led, OUTPUT);
  pinMode(bt, INPUT);
  digitalWrite(bt, HIGH);
  pinMode(bt2, INPUT);
    digitalWrite(bt2, HIGH);
#if defined(__AVR_ATtiny85__) && (F_CPU == 16000000)
  clock_prescale_set(clock_div_1);
#endif

  pixels.begin();

}

void loop() {
  pixels.clear();
  int btState = digitalRead(bt);
  int btState2 = digitalRead(bt2);

 /*
    //디지털 제어 
  if(btState==LOW){  //소프트버튼
Serial.println("BUTTON1");
digitalWrite(led, HIGH);
}else{
  digitalWrite(led, LOW);
}
if(btState2==LOW){ //소프트 버튼
Serial.println("BUTTON2");
digitalWrite(led, HIGH);
}else{
  digitalWrite(led, LOW);
}

*/

//버튼 갯수에 따라 else if문으로 버튼을 추가해야한다

  if (btState == LOW) { //button1
  Serial.println("BUTTON1");
       lightR++;
    if (lightR >= 255) {
      lightR = 255;
    }
    analogWrite(led, lightR);
    pixels.setPixelColor(0, pixels.Color(lightR, 0, 0));
    pixels.setPixelColor(1, pixels.Color(lightR, 0, 0));
    pixels.setPixelColor(2, pixels.Color(lightR, 0, 0));
    pixels.show();
    delay(30);
  }else if (btState2 == LOW) { //button2
    Serial.println("BUTTON2");
    lightR++;
    if (lightR >= 255) {
      lightR = 255;
    }
    analogWrite(led, lightR);
    pixels.setPixelColor(0, pixels.Color(lightR, 0, 0));
    pixels.setPixelColor(1, pixels.Color(lightR, 0, 0));
    pixels.setPixelColor(2, pixels.Color(lightR, 0, 0));
    pixels.show();
    delay(10);
  } else { //아무 버튼도 안 눌렸을 
        lightR--;
     if (lightR <= 0) {
      lightR = 0;
    }
    analogWrite(led, lightR);
    pixels.setPixelColor(0, pixels.Color(lightR, 0, 0));
    pixels.setPixelColor(1, pixels.Color(lightR, 0, 0));
    pixels.setPixelColor(2, pixels.Color(lightR, 0, 0));
    pixels.show();
    delay(10);
  }
  

//bt2
/*
 if (btState2 == LOW) {
 Serial.println("BUTTON2");
    digitalWrite(led, HIGH);
  } else {
    digitalWrite(led, LOW);
  }
  */
  
  /*
  if (btState2 == LOW) {
    Serial.println("BUTTON2");
    lightR++;
    if (lightR >= 255) {
      lightR = 255;
    }
    analogWrite(led, lightR);
    pixels.setPixelColor(0, pixels.Color(lightR, 0, 0));
    pixels.setPixelColor(1, pixels.Color(lightR, 0, 0));
    pixels.setPixelColor(2, pixels.Color(lightR, 0, 0));
    pixels.show();
    delay(10);
  }  else {
      lightR--;
    if (lightR <= 0) {
      lightR = 0;
    }
    analogWrite(led, lightR);
    pixels.setPixelColor(0, pixels.Color(lightR, 0, 0));
    pixels.setPixelColor(1, pixels.Color(lightR, 0, 0));
    pixels.setPixelColor(2, pixels.Color(lightR, 0, 0));
    pixels.show();
    delay(30);
  }*/
  
  /*
  if(btState==LOW){  //일반 버튼 
Serial.println("BUTTON1");
digitalWrite(led, LOW);
}else{
  digitalWrite(led, HIGH);
}
if(btState2==LOW){ //소프트 버튼
Serial.println("BUTTON2");
digitalWrite(led, HIGH);
}else{
  digitalWrite(led, LOW);
}
*/

}

기존에는 일반 LED와 일반 버튼으로 제어를 했었다. 소프트 버튼 여러개로 네오픽셀을 제어해보진 않아서 테스트를 해보았다. 기존 코드로 소프트 버튼을 달아서 실행해보니 예측한 일이었지만 정상적으로 구동되지 않았다. 그래서 버튼 2개로 네오픽셀을 제어하는 것과 소프트버튼으로 LED를 제어하는 것을 섞어서 코드를 짰다.

처음에는 어떤 시도를 해봐도 계속 비정상적으로 작동을 해서 애를 먹었다. (계속 깜빡거리는 증상, 아예 불이 안 들어오는 증상) 계속 일반 버튼으로 시도해보고 디지털 제어도 해보다가 안 돼서 else는 통합하고 else if 구문으로 조건을 추가했더니 정상작동 했다. 결국 버튼으로 LED를 제어하는 간단한 기술인데도 잘 안 되서 잠깐 넋이 나갔다. 코딩은 잘 안 될 때마다 식은땀이 흐른다…

3.납땜

원래 처음 중간 발표 때의 계획보다 LED의 갯수에 변경이 생겼다. 더 촘촘한 LED를 사용하기로 했고 때문에 총 72cm의 길이에 101개의 네오픽셀이 들어간다. 전력은 휴대전화 보조배터리를 사용하기로 했다. 부피 대비 아주 안정적인 전원 공급이 가능하기 때문이다.

납땜은 처음에는 어려웠으나 점점 익숙해져서 깔끔하게 작업이 가능하게 되었다. 그래도 납땜은 시간이 엄청 오래 걸린다.

4.재료 가공

이제 본격적으로 바느질을 하기에 앞서 재료들을 가공했다. 구멍이 일곱개라서 재료 하나를 가공하는 것도 금방금방 할 수가 없다. 바느질이 정말 걱정이다!

김태은 이주형 12주차 작업 기록

동작 확인

외부전원 9v를 5v로 낮춰주는 레귤레이터를 통해 전원 공급

옷 스케치

LED를 어디에 숨길지에 대한 스케치 진행. 삼각형의 형태를 통해 깊이감을 주어 led 빛이 고루 퍼지도록 디자인

1차로 1.5cm 의 깊이를 주어 삼각형 모양의 공간을 만들어 네오픽셀을 배치

1.5cm는 부족하다는 결론을 통해 2.5cm의 깊이로 재진행

얇은 플라스틱, led, 면발광 필름, 천을 통해 시제품 완성

11주차 작업기록 (권예지)

2021.11.09 ~ 2021.11.15

진행사항
1. 센서 변경 및 테스트 (시리얼 압력 센서)
2. 회로 그리기
3. 디자인

센서 변경 및 테스트 (시리얼 압력 센서)
1. 준비물
velostat / 전도성 천 혹은 은박지 / 아두이노 / 전선 / 저항(10k 옴) / 절연 소재
2. velostat?
velostat 혹은 linqstat 라고 불리며, 일종의 전도성 천이다.
짜는 형태(squeezing)의 압력이 감지되면 저항이 감소한다.
휘어져서 사용가능하기에 웨어러블 기기나 센서에 사용하기에 적절하다.단 무게 측정에는 적합하지 않다.
3. 만드는 방법

압력을 감지하면 저항 값이 감소한다. 압력이 없으면 값이 400 이상이고, 꾹 누르면 100 밑으로 내려간다. 손으로 살살 쓰다듬어도 400 밑으로 내려간다.
각 센서마다 값의 범위가 많이 다를까봐 걱정했는데, 다행이 비슷했다. 그런데 만약에 센서가 휘거나 조금 눌리게 되면 범위가 달라질 수 있지 않을까.
압력이 감지 되었을 때 세 개의 센서 중에서 저항값이 가장 작은 센서를 출력한다. 아래에 코드
int val0 = 0;
int val1 = 0;
int val2 = 0;

void setup() {
  Serial.begin(9600);
  digitalWrite(A0, HIGH);
  digitalWrite(A1, HIGH);
  digitalWrite(A2, HIGH);

}

void loop() {
  val0 = analogRead(A0);
  val1 = analogRead(A1);
  val2 = analogRead(A2);

  //  Serial.print(val0);
  //  Serial.print("\t");
  //  Serial.print(val1);
  //  Serial.print("\t");
  //  Serial.println(val2);
  if (val0 < 100 || val1 < 100 || val2 < 100) {
    if (val0 < val1) {
      if (val0 < val2) {
        Serial.println("1");
      } else {
        Serial.println("3");
      }
    } else {
      if (val1 < val2) {
        Serial.println("2");
      } else {
        Serial.println("3");
      }
    }
  }else{
    
  }
  delay(100);
}

회로 그리기

디자인

디자인이 가장 어렵네요… 지금 일단 배를 문질러도 밀리지 않도록 착용할 수 있는 형태를 스케치하고 있고, 아직 디자인은 더 발전시켜보려고 합니다.

김태은 이주형 11주차 작업 기록

코드 작성 완료

양쪽으로 동시에 진행하게 되는 코드에서 어려움을 겪었지만, 교수님께서 pin num은 하나로 지정을 하고, 두개의 다른 네오픽셀을 병렬로 연결하는 방법을 알려주셨다. 해당 방법대롤 진행을 하여 양쪽이 일체감 있는 모습을 보여주게 되었다.

몸쪽 회로도팔
팔 회로도

해당 코드를 기반으로 회로도를 작성해 보았다. 외부 전력의 개수는 미정.

회로도 작
배치도

10주차 작업 기록 (이건)

이번주는 LED의 빛 확산에 대해 테스트를 진행하고 소프트버튼을 제작했다.

LED의 빛 확산은 3가지정도의 테스트를 했으나 두께를 줘야한다는 결론을 내렸다. 확산필름과 LED와의 간격이 없다면 빛이 확산되지 않는다.

+LED를 틈 양쪽 옆에 부착해서 빛이 새어나오는 효과를 실험해보기로 했다.

버튼은 순조롭게 진행이 되었다. 총 6개의 버튼을 제작했다.

소프트 버튼으로 네오픽셀을 제어하는 코드를 아직 안 만들어 두어서 차후 테스트가 필요한 부분이다.

9.5(?)주차 작업기록_김보현

장갑의 편의성을 위해 아두이노 나노를 사용합니다. 처음 사용해 보는 아두이노 나노
터치 센서 테스트를 위해 목장갑에 구리 테이프를 부착하였고 전선이 자꾸 떨어져 악어핀^^;으로 집어보았더니 인식이 잘 됩니다. 실제로는 전도성 천과 선을 연결하여 사용할 것입니다.
인식이 잘 됩니다

직접 장갑에 테스트해보니 회로도의 구체적인 수정 방향이 잡히는 것 같습니다.

9주차 테크박스 : 오르골

B975072 문서정
테크박스 : 투명 케이스 오르골

내부가 투명하게 잘 보여서 오르골이 어떠한 기계적인 원리로 작동하는지 잘 볼 수 있어서 흥미롭다.

TOP
BOTTOM
SIDE 1

SIDE 2
SIDE 3
SIDE 4

10주차 작업기록 (권예지)

2021.11.03 ~ 2021.11.08

진행사항
1. 시리얼 소프트 버튼 제작 및 테스트
2. 외부전력 사용하여 열선 패드 작동
3. 회로도 작성

구매한 부품
1. 전도성 천, 스펀지5T, 린넨천
2. 열선패드, 트랜지스터(Tip120), 9V 건전지, 저항(10k옴)

시리얼 소프트 버튼 제작
1. 전도성 천을 둥글게 배치하여 소프트 버튼 제작
2. 6개 천을 디지털핀에 각각 연결

문지를 때마다 린넨 천이 조금씩 찢어진다…

시리얼 소프트 버튼 테스트

//코드 1_시리얼 소프트 버튼에 해당하는 디지털 입력 프린트
#define buttonsNum 6
int buttons[buttonsNum]={2,3,4,5,6,7};

void setup() {
  Serial.begin(9600); 
  for(int i=0;i<buttonsNum;i++){ 
    pinMode(buttons[i],OUTPUT);
    digitalWrite(buttons[i],HIGH);
  }  
}

void loop() { 
  for(int i=0;i<buttonsNum;i++){
    if(digitalRead(buttons[i])==LOW){
      Serial.println(i+1);
    }
  } 
}
//코드2_시리얼 소프트 버튼 값과 이전 값을 비교하여 시계방향 or 반시계방향 프린트
//프린트_현재 값, 이전 값, 현재값-이전값, 1 또는 -1, 시계방향 or 반시계방향
#define buttonsNum 6
int buttons[buttonsNum]={2,3,4,5,6,7};
int val=0;
int preVal=0;
int dir=0; 

void setup() {
  Serial.begin(9600); 
  for(int i=0;i<buttonsNum;i++){ 
    pinMode(buttons[i],OUTPUT);
    digitalWrite(buttons[i],HIGH);
  }  
}

void loop() { 
  for(int i=0;i<buttonsNum;i++){
    if(digitalRead(buttons[i])==LOW){
      val=i+1;
    }
  } 

  dir=check(val-preVal); 

  Serial.print(val);
  Serial.print("\t");
  Serial.print(preVal);
  Serial.print("\t");
  Serial.print(val-preVal); 
  Serial.print("\t");
  Serial.print(dir); 
  Serial.print("\t");
  
  if(dir==1){
    Serial.println("clockWise");
  }else if(dir==-1){
    Serial.println("counterClockWise");
  }
  preVal=val; 
  
  delay(500);
}

int check(int val){
  if(val<0){  
    return 1;
  }else if(val>0){
    return -1;
  }
} 

열선패드 작동 (외부전력사용x)
1. 체온보다 조금 더 따뜻한 정도의 온도
(열선패드: 최대 600mA 소비 / 디지털 핀에서 나올 수 있는 최대 전류: 400mA)
2. 열선패드을 천으로 덮어두지 않으면 금방 식어버림

열선패드 작동 (외부전력 사용o)
1. 정확한 온도는 모르지만, 아두이노만 사용했을 때보다 따뜻함
2. 마찬가지로열선패드을 천으로 덮어두지 않으면 금방 식어버림
3. 버튼 필요할까?

회로도