아두이노 우노 2개
전선
9V 건전지 2개
조도 센서 8개
미니 브레드보드 8개
10k옴 저항 8개
스피커 2개
레이저 센서 8개
1.5V 건전지 2개
각 계단마다 레이저 모듈을 설치한 후 3V 전원에 병렬로 연결한다.
레이저 모듈의 세 개의 핀 중 두 개(+, -)만 사용한다. 나머지 한 개(S)는 사용하지 않는다.
브레드보드에 그림과 같이 조도 센서와 10k옴 저항을 끼워넣어 레이저 빛 감지를 위한 모듈을 만든다.
'도레미파솔라시도'의 음계를 만들 것이기 때문에 총 8개의 모듈을 제작한다.
조도 센서 모듈은 레이저 모듈이 위치한 계단의 반대쪽에 설치한다.
그림과 같이 각 계단의 양쪽에 조도 센서 모듈과 레이저 모듈을 설치한다.
이 때, 레이저가 조도 센서에 닳을 수 있도록 하나하나 세세하게 위치를 조정해야 한다.
스피커는 아두이노의 13번 핀과 GND에 연결해준다.
조도 센서 모듈은 그림과 같이 저항에서 나온 선(검정)은 GND에, 조도 센서에서 나온 선(빨강)은 5V에 연결해준다.
조도 센서와 저항이 만나는 지점에서 나온 선(주황)은 A0에 연결한다.
나머지 조도 센서 모듈도 같은 방식으로 연결해준다. 단, 주황색 선 부분만 각 계단마다 달리하여 연결해준다.
(첫 번째 계단 : A0에 연결, 두 번째 계단 : A1에 연결, 세 번째 계단 : A2에 연결, 네 번째 계단 : A3에 연결, 다섯 번째 계단 : A4에 연결, 여섯 번째 계단 : A5에 연결)
아두이노 우노는 아날로그 핀의 개수가 6개 밖에 되지 않기 때문에 8개의 계단을 만들기 위해서는 아두이노 우노가 하나 더 필요하다.
계단을 걸어 올라가게 되면 조도 센서를 비추고 있던 레이저가 사람의 발에 막혀 가려지게 된다.
이 가려지는 시점을 신호로 하여 아두이노에서는 스피커로 '도레미파솔라시도'에 해당하는 음계를 내보내주면 된다.
레이저 모듈을 위한 별도의 전원이 필요하다.
건전지를 수시로 갈아주어야 한다.
유지 보수가 쉽지 않다.
계단 청소로 인해 레이저 모듈이 모두 망가졌다.
그 밖의 문제점
일일이 레이저의 빛을 조도 센서에 맞춰주어야 하는 번거로움이 있다.
계단 청소, 전선의 장력 등과 같은 여러 이유로 기껏 맞춰놓은 레이저의 방향이 틀어지는 경우가 생긴다.
시간 또는 위치에 따른 계단의 밝기가 천차만별이어서 조도 센서의 감지값이 수시로 변할 수 있다.
레이저의 위치가 바닥으로부터 살짝 올라와 있어 한 계단을 두 번 이상 중복으로 밟을 때 음의 정확도가 떨어진다.
조도 센서와 레이저의 조합은 유지 관리가 쉽지 않아 감지 센서를 다른 것으로 바꿔보기로 했다.
피아노 계단 제작에 있어 가장 효과적이라 할 수 있는 압력 센서는 가격이 너무 비싸 이를 대체할 만한 센서를 찾던 중 피에조 진동 센서를 발견하였다.
기존 조도 센서와 레이저의 조합을 피에조 진동 센서로 대체한 후 테스트 해보았다.
하지만 예상치 못했던 문제점이 발생하였다. 진동 센서이다 보니 계단을 밟을 때도 반응하지만 발을 뗄 때도 반응을 하는 것이었다.
이를 해결할 방법을 찾아보았지만 결국은 모두 실패하여, 피에조 진동 센서는 조도 센서와 레이저 조합을 대체할 만한 적격 후보로서 최종 탈락하였다.
결국은 가장 최선의 방법인 압력 센서로 다시 시선을 돌렸다.
하지만 문제는 여전히 비용... 개당 만원 꼴하는 압력 센서를 그것도 8개씩이나 마련할 자신이 없었다. 그래서 직접 압력 센서를 만들어보기로 했다.
인터넷 검색을 해보면 'Velostat' 이라는 소재를 이용하여 압력 센서를 만드는 방법이 나온다. 이를 이용하면 저렴한 비용으로 나름 만족할 만한 압력 센서를 만들 수 있다.
Velostat
전선
아두이노 우노 2개
알루미늄 호일
박스 테이프
스피커 2개
알루미늄 호일을 준비한다.
적정 사이즈로 알루미늄 호일을 자른다.
테이프를 이용하여 자른 알루미늄 호일에 전선을 붙여준다.
나머지 한쪽도 붙여준다.
Velostat의 한 면에 알루미늄 호일을 올린 후 박스 테이프를 이용하여 고정해준다.
Velostat과 알루미늄 호일은 서로 맞닿아 있어야 한다.
알루미늄 호일보다 Velostat의 면적이 약간 더 커야 한다.
같은 방식으로 Velostat의 반대편 면에도 박스 테이프를 이용하여 알루미늄 호일을 고정해준다.
그림과 같이 두 장의 알루미늄 판 사이에 Velostat이 위치해있어야 한다.
필요한 만큼 Velostat 압력 센서를 만들어준다.
'도레미파솔라시도'의 음계를 표현하기 위해 총 8개의 압력 센서를 만들었다.
각 계단마다 압력 센서를 부착해준다.
압력 센서에서 나온 전선 두 가닥을 아두이노와 연결해준다.
스피커는 아두이노의 13번 핀과 GND에 연결해준다.
아두이노 우노는 아날로그 핀의 개수가 6개 밖에 되지 않기 때문에 8개의 계단을 만들기 위해서는 아두이노 우노가 하나 더 필요하다.
압력 센서를 그림과 같이 한 쪽은 GND에... 한 쪽은 아날로그 핀에... 연결해준다.
1) pitches.h
#define NOTE_C5 523
#define NOTE_D5 587
#define NOTE_E5 659
#define NOTE_F5 698
#define NOTE_G5 784
#define NOTE_A5 880
#define NOTE_B5 988
#define NOTE_C6 1047
2) 도, 미, 솔, 시
#include "pitches.h"
int speaker = 13;
int pin[] = {A0, A1, A2, A3};
int flag[] = {1, 1, 1, 1};
int temp[] = {500, 500, 500, 500};
int sen[] = {0, 0, 0, 0};
int melody[] = {NOTE_C5, NOTE_E5, NOTE_G5, NOTE_B5}; // 도, 미, 솔, 시
void setup() {
Serial.begin(9600);
for (int i = 0; i < 4; i++)
pinMode(pin[i], INPUT_PULLUP);
pinMode(speaker, OUTPUT);
}
void loop() {
for (int i = 0; i < 4; i++) {
sen[i] = analogRead(pin[i]);
if (temp[i] - sen[i] > 10) {
flag[i] = 1;
}
temp[i] = sen[i];
if (sen[i] < 25 && flag[i] == 1) {
tone(speaker, melody[i], 400);
flag[i] = 0;
delay(100);
}
}
delay(100);
}
3) 레, 파, 라, 도
#include "pitches.h"
int speaker = 13;
int pin[] = {A0, A1, A2, A3};
int flag[] = {1, 1, 1, 1};
int temp[] = {500, 500, 500, 500};
int sen[] = {0, 0, 0, 0};
int melody[] = {NOTE_D5, NOTE_F5, NOTE_A5, NOTE_C6}; // 레, 파, 라, 도
void setup() {
Serial.begin(9600);
for (int i = 0; i < 4; i++)
pinMode(pin[i], INPUT_PULLUP);
pinMode(speaker, OUTPUT);
}
void loop() {
for (int i = 0; i < 4; i++) {
sen[i] = analogRead(pin[i]);
if (temp[i] - sen[i] > 10) {
flag[i] = 1;
}
temp[i] = sen[i];
if (sen[i] < 25 && flag[i] == 1) {
tone(speaker, melody[i], 400);
flag[i] = 0;
delay(100);
}
}
delay(100);
}