프로젝트

나도 메이커! 메이커스 여러분들의 작품/프로젝트를 공유하는 공간입니다.

RGB스니커즈 만들기

2014-09-16 13:23:18

개요

각 개인마다의 다양성이 존중되는 요즘 시대라 대부분 자기 자신의 개성을 표현할 수 있는 아이템 하나씩은 가지고 있을 것이라 생각합니다.



만약 신발중에서 그냥 그저그런 평범한 신발이 아닌 주위 시선을 확 사로잡을 수 있는 눈에 튀는 신발이 신고 싶으시다면
아두이노를 사용하여 휘황찬란한 신발을 제작할 수 있습니다.(물론 그 시선이 따가운 시선이든 부러운 시선이든 감수해야 합니다 :D) 






Adafruit의 NeoPixel제품과 압력센서, 3축 가속도 센서를 사용하여 주위 시선을 한몸에 받을 수 있는 운동화를 만들어 봅시다.

동영상


필요한 사전지식

NeoPixel
3축 가속도 센서
압력센서

부품 목록

NO 부품명 수량 상세설명
1 아두이노 플로라(Flora) 1 아두이노
2 NeoPixel 1  
3 압력 센서 1  
4 3축 가속도 센서 1  
4 3.7V 리튬 이온 폴리머 전지 1 리튬전지
5 점퍼케이블 10 점퍼케이블
6 10KΩ 저항 2 저항

부품명 아두이노 플로라 NeoPixel 압력 센서 3축 가속도 센서
부품 사진
부품명 3.7v 리튬 전지 점퍼 케이블 220옴 저항  
부품 사진  

하드웨어 making

브레드보드



전자회로도




각 센서와 NeoPixel은 플로라보드에 납땜질을 통해 연결한다.




압력센서는 깔창의 뒤꿈치 부분에 아래와 같이 붙여준다.(깔창이 더러운 관계로 극단적으로 사진을 화이트닝 처리함....)




플로라 보드는 다음과 같이 신발 옆면 안쪽에 설치하고 3축 가속도 센서는 신발 위쪽 끈매는 부분에 설치해주면 된다.(프로토타입인 관계로 선이 엉망이다)

소프트웨어 coding


#include <Adafruit_NeoPixel.h>

#define PIN 12

Adafruit_NeoPixel strip = Adafruit_NeoPixel(30, PIN, NEO_GRB + NEO_KHZ800);


//3축 가속도 센서 핀번호 설정 const int xPin = 6; const int yPin = 3; const int zPin = 10; //3축 가속도 센서의 최소값과 최대값 설정 int minVal = 265; int maxVal = 402; //x,y,z변수 선언 double x; double y; double z; int i = 0; void setup() { strip.begin(); strip.show(); } void loop() { int sensorval = analogRead(9);//9번핀에서 압력센서가 측정한 값을 받아온다
//압력센서 측정값이 100이상일 경우
//무지개색을 차례대로 출력 if(sensorval > 100) { if(i == 0) colorWipe(strip.Color(255, 0, 0), 10); //빨강 else if(i == 1) colorWipe(strip.Color(255, 94, 0), 10); //주황 else if(i == 2) colorWipe(strip.Color(255, 255, 0), 10); //노랑 else if(i == 3) colorWipe(strip.Color(0, 255, 0), 10); //초록 else if(i == 4) colorWipe(strip.Color(0, 255, 255), 10); //하늘 else if(i == 5) colorWipe(strip.Color(0, 0, 255), 10); //파랑 else if(i == 6) colorWipe(strip.Color(255, 0, 255), 10); //보라 colorWipe(strip.Color(0, 0, 0), 10); //LED off i++; if(i > 6) i = 0; } //3축 가속도 센서에서 값을 읽어온다 int xRead = analogRead(xPin); int yRead = analogRead(yPin); int zRead = analogRead(zPin); //3축 가속도 센서 값 변환 int xAng = map(xRead, minVal, maxVal, -90, 90); int yAng = map(yRead, minVal, maxVal, -90, 90); int zAng = map(zRead, minVal, maxVal, -90, 90); x = RAD_TO_DEG * (atan2(-yAng, -zAng) + PI); y = RAD_TO_DEG * (atan2(-xAng, -zAng) + PI); z = RAD_TO_DEG * (atan2(-yAng, -xAng) + PI);
//y축 기울기 각도가 318도 미만일 경우 NeoPixel에서 무지개색 출력 if(y < 318) { rainbow(5); } colorWipe(strip.Color(0, 0, 0), 10);
delay(20); //지연시간 20ms 설정 } void colorWipe(uint32_t c, uint8_t wait) { for(uint16_t i=0; i<strip.numPixels(); i++) { strip.setPixelColor(i, c); strip.show(); delay(wait); } } void rainbow(uint8_t wait) { uint16_t i, j; for(j=0; j<256; j++) { for(i=0; i<strip.numPixels(); i++) { strip.setPixelColor(i, Wheel((i+j) & 255)); } strip.show(); delay(wait); } } uint32_t Wheel(byte WheelPos) { if(WheelPos < 85) { return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0); } else if(WheelPos < 170) { WheelPos -= 85; return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3); } else { WheelPos -= 170; return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3); } }
Adafruit의 NeoPixel을 사용하기 위해서는 별도의 라이브러리가 필요하다.
아래 링크에서 받아서 사용이 가능하다.

NeoPixel 라이브러리 받기

외부라이브러리 설치하는 법
압력센서는뒤꿈치부분에서 발이 누르는 압력을 측정하여 일정값 이상으로 값이 측정될 경우 NeoPixel에 불이 들어오게 한다.
3축 가속도 센서는 각 축마다 기울어진 각도를 측정하게 되는데, 사용자가 정해준 값 이상, 이하로 측정 될 경우 NeoPixel에 무지개색의 불이 들어오게 한다.

NeoPixel을 사용하는 방법은 라이브러리에 포함된 예제에 설명이 잘 되있기 때문에 예제를 응용한다면 다른색, 다른 형태로 빛나게 할 수 있다.

수박쨈

아두이노, NeoPixel, 압력센서, 3축 가속도 센서