프로젝트

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

가방 속 빛 비추기!

2014-08-29 11:19:00

개요

어두운 곳 집 열쇠를 찾거나 혹은 물건이 많이 든 가방에서 볼펜과 같은 작은 물건을 찾을 때 보이지 않아서 불편할 때가 있습니다.
그럴 경우 버튼을 누르면 가방 속을 비춰주게 만들어 보는 것이 어떨까요?

본문에서는 웨어러블 컴퓨팅 제어보드를 사용해서 버튼을 누르면 빛이 나고 
다시 누르면 불이 꺼지는 가방을 만들어 보겠습니다.

대표적인 웨어러블 컴퓨팅 제어보드로는 릴리패드, 플로라가 있습니다.


출처 : blog.daum.net


출처 :  www.amazon.co.uk

본 예에서는 플로라를 사용합니다.
이런 웨어러블용 보드를 시작하기에 좋은 예제입니다.
또 버튼을 누르는 순간만 불이 켜지는 게 아니라 버튼을 누르면 커지고 꺼지는 코드는
간단하지만 많이 사용되는 코드입니다.

미리보기 동영상

부품 목록

NO 부품명 수량 상세설명
1 Flora 보드 1  
2 네오픽셀 RGB LED  2  V2를 사용했습니다.
3 전도성 실 1  
4 일반 실, 바늘 세트 1  
5 1  
6 인두기 1  
7 리튬이온 전지 1 3.7V Lipo 1000mA
8 푸시버튼 1  
9 와이어 3  
10 10kΩ 저항 1  


부품명 Flora 보드 네오픽셀 RGB LED 전도성 실 실, 바늘 세트
부품사진 X1  x2  x1  x1  x1


부품명 인두기 리튬이온 전지 푸시버튼 와이어 10KΩ 저항
부품사진 X1 X1 X1 X1 X1

하드웨어 making

회로도


브레드보드 레이아웃



* 네오 픽셀 RGB LED 연결시 화살표 방향을 주의하세요.

연결방법

1. 푸시 버튼, 저항을 Flora에 납땜합니다.

푸시 버튼 한 극  Flora GND
위와 동일 저항
푸시 버튼 다른 한 극 3.3V
저항 한 극 9번 핀


2. 가방에 일반 실로 Flora를 고정합니다.

 

3. Flora와 네오 픽셀 RGB LED를 전도성 실로 연결합니다.

   전도성 실을 사용하여 +끼리, 연결해주세요.
   다음 -끼리 연결해주세요.
   6번 핀과 네오픽셀 RGB LED의 화살표 방향대로 연결해주세요.
   * +, -실이 붙으면 스파크가 일어날 수 있으니 붙지 않게 꿰매주세요.


4. 건전지를 연결합니다.


소프트웨어 Coding

아래의 코드를 아두이노에 업로드 합니다.

/*
가방 속 빛추기

이 코드는
adafruit의 strandtest와 여러 커뮤니티 소스를 응용하여

kocoaFab에서 만들었습니다.
무료로 누구나 사용할 수 있습니다.
*/

#include <Adafruit_NeoPixel.h> //네오픽셀을 사용하기 위한 라이브러리 #define PIN 6 //네오픽셀과 연결된 디지털 6번 핀 선언 //네오픽셀 객체 선언
Adafruit_NeoPixel strip = Adafruit_NeoPixel(2, PIN, NEO_GRB + NEO_KHZ800); int button = 9; //버튼과 연결된 디지털 9번 핀 선언 int color = 0; //색 저장 변수 선언 int oneTimeFlag; //버튼 누름을 확인하기 위한 변수 선언 void setup() {
pinMode(PIN, OUTPUT); digitalWrite(button,HIGH); //버튼 핀을 HIGH로 출력 pinMode(button, INPUT); strip.begin(); //네오픽셀 사용하기 위한 초기설정 strip.show(); //네오픽셀이 off되도록 초기화 } void loop() { if ( digitalRead(button) == LOW) { //버튼이 눌리지 않은 상태에서
if( oneTimeFlag==0) { //전에 버튼이 눌렸으면 oneTimeFlag = 1; //버튼 누른 후로 상태 구분하기 위해 1 저장
if(color ==0) { //전에 버튼이 눌린 후 컬러가 검정이였으면 color = 255; //흰색으로 }else { //버튼 눌린 후 컬러가 흰색이면 color =0; //검정으로 } } } else { //버튼이 눌렸으면 oneTimeFlag = 0; //버튼 눌렸음을 알기 위해서 0을 저장 }
colorWipe(strip.Color(color, color, color), 50); //저장된 color값으로 네오픽셀 색 표출 }
/*
네오픽셀 색을 바꾸는 함수
*/ 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); } }

소프트웨어&하드웨어 설명

1. 스케치 설명


#include <Adafruit_NeoPixel.h>        //네오픽셀을 사용하기 위한 라이브러리

#define PIN 6                         //네오픽셀과 연결된 디지털 6번 핀 선언

//네오픽셀 객체 선언
Adafruit_NeoPixel strip = Adafruit_NeoPixel(2, PIN, NEO_GRB + NEO_KHZ800);


네오픽셀 RGB LED를 사용하기 위해서는 Adafruit_NeoPixel 라이브러리를 사용해야 합니다. 
라이브러리는 이곳 에서 받으세요.

객체를 선언하기 위해서는 갯수, 연결된 핀, 버전정보 및 세부정보를 알아야 합니다.

 Adafruit_NeoPixel(갯수, 연결된 핀, 버전정보 및 세부정보)

* 버전 정보 참고
버전정보 세부 사항
NEO_KHZ800 800 KHz bitstream정보로 대부분 네오픽셀이 여기 속함(V2 포함)
NEO_KHZ400  400 KHz V1
NEO_GRB GRB bitstream정보로 대부분 네오픽셀이 여기 속함(V2 포함)
NEO_RGB RGB bitstream정보로 V1 포함

void loop() {
  
  if ( digitalRead(button) == LOW) {        //버튼이 눌리지 않은 상태에서
if( oneTimeFlag==0) { //전에 버튼이 눌렸으면 oneTimeFlag = 1; //버튼 누른 후로 상태 구분하기 위해 1 저장
if(color ==0) { //전에 버튼이 눌린 후 컬러가 검정이였으면 color = 255; //흰색으로 }else { //버튼 눌린 후 컬러가 흰색이면 color =0; //검정으로 } } } else { //버튼이 눌렸으면 oneTimeFlag = 0; //버튼 눌렸음을 알기 위해서 0을 저장 }


푸시 버튼이 눌린 상태만 불을 키려고 하는 게 아니라
버튼이 눌렸을 때마다 상태를 변하게 할 것입니다.
그래서 버튼이 눌렸을 때 마다 상태를 저장하기 위해 
oneTimeFlag라는 변수를 사용할 것입니다.

oneTimeFlag가 0이면 버튼이 눌렸다는 뜻입니다.
버튼이 눌리지 않은 상태 즉 LOW일 경우 
oneTimeFlag가 0이면 버튼이 방금 전에 눌렸음을 의미하게 됩니다.

그 때 색이 변경됩니다.

/*
네오픽셀 색을 바꾸는 함수
*/ 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); } }
이 함수에서는 라이브러리에 저장된 함수를 사용합니다.
for문을 사용하여 네오픽셀 하나씩 색을 지정하고 
지정된 색으로 표시해줍니다.

unit32_t, unit8_t는 변수타입으로 양수 long, 양수 char타입을 의미합니다.

기술문서 

  • 부품목록
  • 스케치
  • 브레드보드 레이아웃
  • 회로도



kocoafab

flora, 가방, 빛 비추기, neopixel RGB LED, 납땜, 푸시버튼