코코아팹은 누구나 창의적 아이디어를 현실로 만들어 낼 수 있도록
만들고, 공유하고, 배울 수 있는 터전이
되고자 합니다.
아이디와 비밀번호를 잊으셨나요?아이디 / 비밀번호 찾기
코코아팹 회원이 아니신가요? 회원가입
2014-09-12 14:57:17
NO | 부품명 | 수량 | 상세설명 |
1 | 아두이노 maga | 1 | 아두이노 |
2 | 점퍼케이블 | 30-50 | 건반의 개수에 따라 유동적 |
3 | 10k옴 저항 | 10-15 | 건반의 개수에 따라 유동적 |
4 | 쿠킹 호일 |
부품명 | 아두이노 우노 R3 | 점퍼케이블 | 저항 | 쿠킹호일 |
파트 |
#include <CapacitiveSensor.h>
//CapacitiveSensor라이브러리를 사용하여 좌표값을 지정하여 객체생성 CapacitiveSensor cs_2_3 = CapacitiveSensor(2,3); CapacitiveSensor cs_2_4 = CapacitiveSensor(2,4); CapacitiveSensor cs_2_5 = CapacitiveSensor(2,5); CapacitiveSensor cs_6_7 = CapacitiveSensor(6,7); CapacitiveSensor cs_6_8 = CapacitiveSensor(6,8); CapacitiveSensor cs_6_9 = CapacitiveSensor(6,9); CapacitiveSensor cs_10_11 = CapacitiveSensor(10,11); CapacitiveSensor cs_10_12 = CapacitiveSensor(10,12); CapacitiveSensor cs_10_13 = CapacitiveSensor(10,13); CapacitiveSensor cs_30_31 = CapacitiveSensor(30,31); CapacitiveSensor cs_30_32 = CapacitiveSensor(30,32); CapacitiveSensor cs_30_33 = CapacitiveSensor(30,33); CapacitiveSensor cs_40_41 = CapacitiveSensor(40,41); int Do; int Re; int Mi; int Pa; int Sol; int Ra; int Si; int Do_1; int DoSharp; int ReSharp; int PaSharp; int SolSharp; int RaSharp; byte ch = '9'; void setup() { cs_2_4.set_CS_AutocaL_Millis(0xFFFFFFFF); Serial.begin(9600); } void loop() {
//손가락이 접촉되었을때 값을 측정. 접촉이 없을 경우 0을 반환하고 접촉이 있을 경우 0보다 큰값을 반환한다 long total1 = cs_2_3.capacitiveSensor(30); long total2 = cs_2_4.capacitiveSensor(30); long total3 = cs_2_5.capacitiveSensor(30); long total4 = cs_6_7.capacitiveSensor(30); long total5 = cs_6_8.capacitiveSensor(30); long total6 = cs_6_9.capacitiveSensor(30); long total7 = cs_10_11.capacitiveSensor(30); long total8 = cs_10_12.capacitiveSensor(30); long total9 = cs_10_13.capacitiveSensor(30); long total10 = cs_30_31.capacitiveSensor(30); long total11 = cs_30_32.capacitiveSensor(30); long total12 = cs_30_33.capacitiveSensor(30); long total13 = cs_40_41.capacitiveSensor(30);
//각 건반마다 특정값 이상으로 출력될 경우 그 건반 상태를 1로 변경(신체와 접촉 상태)
//접촉이 없을 경우 건반 상태를 0으로 변경 if(total1 > 20) Do = 1; else Do = 0; if(total2 > 20) Re = 1; else Re = 0; if(total3 > 20) Mi = 1; else Mi = 0; if(total4 > 20) Pa = 1; else Pa = 0; if(total5 > 20) Sol = 1; else Sol = 0; if(total6 > 20) Ra = 1; else Ra = 0; if(total7 > 20) Si = 1; else Si = 0; if(total8 > 20) Do_1 = 1; else Do_1 = 0; if(total9 > 20) DoSharp = 1; else DoSharp = 0; if(total10 > 20) ReSharp = 1; else ReSharp = 0; if(total11 > 20) PaSharp = 1; else PaSharp = 0; if(total12 > 20) SolSharp = 1; else SolSharp = 0; if(total13 > 20) RaSharp = 1; else RaSharp = 0;
//시리얼 통신을 통해 프로세싱으로 전송 Serial.write(ch); Serial.write(Do); Serial.write(Re); Serial.write(Mi); Serial.write(Pa); Serial.write(Sol); Serial.write(Ra); Serial.write(Si); Serial.write(Do_1); Serial.write(DoSharp); Serial.write(ReSharp); Serial.write(PaSharp); Serial.write(SolSharp); Serial.write(RaSharp); delay(15); //안정성을 위해 지연시간을 준다 }
import processing.serial.*; import ddf.minim.spi.*; import ddf.minim.signals.*; import ddf.minim.*; import ddf.minim.analysis.*; import ddf.minim.ugens.*; import ddf.minim.effects.*; Minim minim = new Minim(this); AudioSample playDo; AudioSample playRe; AudioSample playMi; AudioSample playPa; AudioSample playSol; AudioSample playRa; AudioSample playSi; AudioSample playDo_1; AudioSample playDoSharp; AudioSample playReSharp; AudioSample playPaSharp; AudioSample playSolSharp; AudioSample playRaSharp; int wait; int Do; int Re; int Mi; int Pa; int Sol; int Ra; int Si; int Do_1; int DoSharp; int ReSharp; int PaSharp; int SolSharp; int RaSharp; Serial myPort; void setup(){ println(Serial.list()); myPort = new Serial(this, Serial.list()[0],9600); playDo = minim.loadSample("do.mp3"); playRe = minim.loadSample("re.mp3"); playMi = minim.loadSample("mi.mp3"); playPa = minim.loadSample("pa.mp3"); playSol = minim.loadSample("sol.mp3"); playRa = minim.loadSample("ra.mp3"); playSi = minim.loadSample("si.mp3"); playDo_1 = minim.loadSample("do_1.mp3"); playDoSharp = minim.loadSample("dosharp.mp3"); playReSharp = minim.loadSample("resharp.mp3"); playPaSharp = minim.loadSample("pasharp.mp3"); playSolSharp = minim.loadSample("solsharp.mp3"); playRaSharp = minim.loadSample("rasharp.mp3"); } void draw(){ if(myPort.available() >=1) { if(myPort.read() == '9') { Do = myPort.read(); Re = myPort.read(); Mi = myPort.read(); Pa = myPort.read(); Sol = myPort.read(); Ra = myPort.read(); Si = myPort.read(); Do_1 = myPort.read(); DoSharp = myPort.read(); ReSharp = myPort.read(); PaSharp = myPort.read(); SolSharp = myPort.read(); RaSharp = myPort.read(); } } background(255); print(Do); print(" "); print(DoSharp); print(" "); print(Re); print(" "); print(ReSharp); print(" "); print(Mi); print(" "); print(Pa); print(" "); print(PaSharp); print(" "); print(Sol); print(" "); print(SolSharp); print(" "); print(Ra); print(" "); print(RaSharp); print(" "); print(Si); print(" "); print(Do); println(" "); if(Do > 0) playDo.trigger(); if(Re > 0) playRe.trigger(); if(Mi > 0) playMi.trigger(); if(Pa > 0) playPa.trigger(); if(Sol > 0) playSol.trigger(); if(Ra > 0) playRa.trigger(); if(Si > 0) playSi.trigger(); if(Do_1 > 0) playDo_1.trigger(); if(DoSharp > 0) playDoSharp.trigger(); if(ReSharp > 0) playReSharp.trigger(); if(PaSharp > 0) playPaSharp.trigger(); if(SolSharp > 0) playSolSharp.trigger(); if(RaSharp > 0) playRaSharp.trigger(); }
myPort = new Serial(this, Serial.list()[0],9600);
이 구문을 통해 이루어 진다.
Serial.list()[0]은 현재 컴퓨터와 연결된 포트 중에서 첫번째 포트와 연결하겠다는 의미이다.
현재 컴퓨터와 연결된 포트의 리스트들은 아래 사진처럼 실행시킬때 하단부에 뜨게 된다.
위 사진에서는 COM7과 COM37이 떴는데 이 중에 COM7이 아두이노 포트일 경우 리스트 배열안에
Serial.list()[0] 0을 그냥 쓰면 되고, COM37이 아두이노일 경우 0이 아닌 1을 쓰면 된다.프로세싱에서는 minim이라는 내장 라이브러리를 사용한다. minim은 프로세싱에서 음악파일을 재생할 수 있게 해주는 라이브러리이다. 이 라이브러리를 사용한다면 피아노음계파일을 재생시켜 피아노처럼 보이게 할 수 있다.
(순서에 따라 배열안의 숫자를 늘려주면 된다. 첫번째는 1이 아닌 0부터 시작인점만 유의하면 된다.)
수박쨈