코코아팹은 누구나 창의적 아이디어를 현실로 만들어 낼 수 있도록
만들고, 공유하고, 배울 수 있는 터전이
되고자 합니다.
아이디와 비밀번호를 잊으셨나요?아이디 / 비밀번호 찾기
코코아팹 회원이 아니신가요? 회원가입
2014-09-05 15:55:02
드럼, 기타, 키보드 등 모두 부피가 크고 비쌉니다.
또한 이미 이런 소리를 모두 낼 수 있고 녹음까지 할 수 있는 무료 작곡프로그램이 있습니다.
주변에 흔히 있는 물건들을 이런 프로그램과 연결 할 수 있다면
여러분은 여러분만의 독특하고 재미있는 악기, 더나아가 작곡 까지 하실 수 있습니다.
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 |
// 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);
}
}
flora에도 아날로그 핀이 있습니다. D10(A10), D9(A9), D6(A7), D12(A11)핀은 모두 아날로그 또는 PWM용으로 사용할 수 있습니다.
본문에서는 푸시버튼, 피에조 부저의 입력값을 읽어오기 위해 아날로그 핀으로 사용하였습니다.
출처 : https://learn.adafruit.com/getting-started-with-flora/flora-pinout-diagram
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핀만 선언하시고, pins[], Keys[]의 갯수를 3개로 조정하세요.
또 for 반복문의 횟수도 조정해주세요.
-----------------------------------------------------------------------------------------------
만드는 법 1. 피에조 부저에 선을 납땜합니다.
본문에서 사용된 TS10293S의 경우 GND를 금속 부분에 다른부분은 하얀 원부분에 납땜하셔야 합니다.
만드는 법 2. 장갑에 피에조 부저를 바느질 합니다.
해당 링크(NanoStudio)에 가서 프로그램을 다운받은 후 설치 하세요.
이 프로그램을 실행시키시고 원하는 악기를 선택하시고 테스트 해보세요.
여러가지 소리를 녹음 한 후 한 곡으로 편집해서 만드실 수도 있습니다.
kocoafab