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부터 시작인점만 유의하면 된다.)

수박쨈
아두이노, 프로세싱, 라이브러리