프로젝트

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

손가락 키보드 장갑, 푸시버튼 드럼을 만들어 봅시다.

2014-09-05 15:55:02

개요

드럼, 기타, 키보드 등 모두 부피가 크고 비쌉니다.
또한 이미 이런 소리를 모두 낼 수 있고 녹음까지 할 수 있는 무료 작곡프로그램이 있습니다.

주변에 흔히 있는 물건들을 이런 프로그램과 연결 할 수 있다면
여러분은 여러분만의 독특하고 재미있는 악기, 더나아가 작곡 까지 하실 수 있습니다.
 

출처 : http://www.youtube.com/watch?v=jjvy_jzGlAQ

본문에서는 플로라 보드와 피에조를 부착한 장갑, 푸시버튼을 통해 드럼, 키보드를 만들어 보겠습니다.
 

푸시버튼 드럼

손가락 키보드 장갑

동영상 미리보기

시작전 개념 미리알기

 
 

부품목록

NO 부품명 수량 상세설명
1 Flora 보드 1  
2 피에조 부저  3 [TS10293S] 피에조 센서겸 부저를 사용했습니다.
3 푸시버튼 4  
4 1m Ω 저항 3  
5 10kΩ 저항 4  
6 점퍼 케이블 10  
7 바늘, 실 세트 1  

 

부품명 Flora  피에조 부저 푸시버튼 1m Ω 저항 10kΩ 저항
사진 x1 x3 x4 x3 x4

 

 

부품명 점퍼 케이블 바늘, 실 세트
사진 x10 x1

 

하드웨어 Making

푸시버튼 드럼 회로도

 

푸시버튼 드럼 브레드보드 레이아웃


 

 

손가락 키보드 회로도


 

손가락 키보드 브레드 보드 레이아웃

소프트웨어 Coding

// Keyboard - Version: Latest 
#include <Keyboard.h>

/*
  제목 : 푸시 버튼 드럼
  설명 : 이 스케치는 adafruit의 스케치를 참조하였습니다.
*/

const int button1 = A10;     //첫 번째 푸시버튼과 연결된 핀(D10)
const int button2 = A9;      //두 번째 푸시버튼과 연결된 핀(D9)
const int button3 = A7;      //세번째 푸시버튼과 연결된 핀(D6)
const int button4 = A11;     //마지막 푸시버튼과 연결된 핀(D12)

const int pins[] = {button1, button2, button3, button4};     //4개의 핀을 하나의 배열로 선언

char Keys[] =   {'z', 'x', 'c', 'v'};     //버튼이 누릴 때마다 시리얼로 전달 될 키보드 입력값

boolean currentPressed[] = {false, false, false, false};     //각 변수 누름 확인

const int threshold = 40;  //누름 감지 하기 위한 상수

void setup()
{
  Serial.begin(115200);
  Serial.println("start");
  Keyboard.begin();     //키보드 라이브러리 사용, 키보드의 동작 시작
}


void loop()
{
  for (int i = 0; i < 4; i++) {
    delay(1);
    long total1 = 0;
    long start = millis();
    long total =  analogRead(pins[i]);

    //버튼을 누르고 방금전에 눌린 것이 아니라면
    if ((total > threshold) && (! currentPressed[i])) {
      currentPressed[i] = true;          //누름확인

      Keyboard.press(Keys[i]);           //i번째 키보드 값으로 눌림
    } //방금전에 눌린 상태이거나 누르지 않은 상태이면
    else if ((total <= threshold) && (currentPressed[i])) {
      currentPressed[i] = false;         //누르지 않음 확인

      Keyboard.release(Keys[i]);         //i번째 키 누름 해제
    }

    delay(5);
  }
}

 

 

 

 

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

 

1. 하드웨어 설명

flora에도 아날로그 핀이 있습니다. D10(A10), D9(A9), D6(A7), D12(A11)핀은 모두 아날로그 또는 PWM용으로 사용할 수 있습니다.
본문에서는 푸시버튼, 피에조 부저의 입력값을 읽어오기 위해 아날로그 핀으로 사용하였습니다.

출처 : https://learn.adafruit.com/getting-started-with-flora/flora-pinout-diagram

2. 소프트웨어 설명

void setup()
{
  Serial.begin(115200);
  Serial.println("start");
  Keyboard.begin();     //키보드 라이브러리 사용, 키보드의 동작 시작            
}


키보드 동작을 사용하기 위해 키보드 라이브러리를 사용했습니다.
Keyboard.begin()은 Serial.begin과 같이 키보드 라이브러리를 초기화하고 시작합니다.

 

 

    //버튼을 누르고 방금전에 눌린 것이 아니라면
    if ((total > threshold) && (! currentPressed[i])) {
      currentPressed[i] = true;          //누름확인
 
      Keyboard.press(Keys[i]);           //i번째 키보드 값으로 눌림
    } //방금전에 눌린 상태이거나 누르지 않은 상태이면
    else if ((total <= threshold) && (currentPressed[i])) {
      currentPressed[i] = false;         //누르지 않음 확인
      
      Keyboard.release(Keys[i]);         //i번째 키 누름 해제
    }


읽어온 아날로그 핀의 값이 일정 값 이상인지,
currentPressed 값이 true, false인지를 동시에 확인하므로써 
방금 전에 누르지 않은 버튼을 구분합니다.

또한 키보드라이브러리의 press, release함수를 사용하면 전달된 키 값을 누르거나 누름을 해제하는
동작을 수행합니다.

 

 

 

 

const int button1= A10;      //첫 번째 푸시버튼과 연결된 핀(D10)
const int button2= A9;       //두 번째 푸시버튼과 연결된 핀(D9)
const int button3= A7;       //세번째 푸시버튼과 연결된 핀(D6)
const int button4= A11;      //마지막 푸시버튼과 연결된 핀(D12)

const int pins[] = {button1, button2, button3, button4};     //4개의 핀을 하나의 배열로 선언

char Keys[] =   {'z','x','c','v'};  


누르고 싶은 키를 바꾸거나 연결핀의 순서, 갯수를 바꾸실 수 있습니다.

 

 

 

3.손가락 키보드 장갑 만들기

손가락 키보드 장갑의 스케치는 푸시버튼 드럼의 스케치는 같습니다.
본문에서 사용된 예에서는 피에조 부저가 3개만 사용되었으므로
스케치에서 핀선언을 연결된 3핀만 선언하시고, pins[], Keys[]의 갯수를 3개로 조정하세요.
for 반복문의 횟수도 조정해주세요.
-----------------------------------------------------------------------------------------------

만드는 법 1. 피에조 부저에 선을 납땜합니다.

본문에서 사용된  TS10293S의 경우 GND를 금속 부분에 다른부분은 하얀 원부분에 납땜하셔야 합니다.




만드는 법 2. 장갑에 피에조 부저를 바느질 합니다.

 

 

4. NanoStudio 사용하기

해당 링크(NanoStudio)에 가서 프로그램을 다운받은 후 설치 하세요.
이 프로그램을 실행시키시고 원하는 악기를 선택하시고 테스트 해보세요.
여러가지 소리를 녹음 한 후 한 곡으로 편집해서 만드실 수도 있습니다.

 

 


해당 악기에 키보드 값을 확인 하신 후 스케치 키 값에 입력하셔서 사용하세요.

kocoafab

키보드라이브러리, 나노스튜디오, 드럼, 키보드, 손가락키보드, nanostudio
profile

김수현 2016-02-11 18:43:15

잘 봤습니다. 함 해 봐야겠네요~!

profile

배지수 2016-05-16 10:46:05

소스를 아두이노 프로그램에 실행해봤는데 const int button1= A10,A7,A11,A9이 was not declared in this scope 이랑
'#include '가 없다고 해서 입력는 해놨는데 이 위에꺼는 어떻게 해야할지를 모르겠어요.... 알려주세요!!!

profile

Klant 2016-05-19 13:01:03

안녕하세요 배지수님
위 프로젝트는 키보드 컨트롤 함수를 사용하고 있습니다.
키보드 컨트롤 사용이 가능한 보드는 아두이노 레오나르도와 마이크로입니다.
이 보드의 호환보드들도 당연히 사용이 가능하겠죠.
보드 설정에서 레오나르도를 설정하고 컴파일을 하시면 컴파일 에러가 나지 않은 것을 확인하실 수 있으십니다.

profile

김종윤 2016-06-09 10:21:20

위에 댓글에서 레오나르도를 설정하라고 하셨는데 레오나르도가 정확히 무엇인지 알수 있겠습니까?