오타마톤 제작 방법

오타마톤 (Otamatone, オタマトーン) 이란?

일본의 아트 유닛 메이와 덴키가 개발한 휴대용 전자 악기. 노크맨의 디자인과 츠쿠바/에델바이스 시리즈가 합쳐진 형태이다. 2009년 도쿄 토이 쇼를 통해서 처음으로 발표를 하였다. 웃기지만 귀여운 디자인과 특이한 소리로 인기를 끄는 아이템이기도 하다.

미들사이즈의 경우 65×70×270mm의 크기로 오카리나와 동일하게 13개의 음역으로 이루어져 있다. 대다수의 다른 악기와 다르게 건반이나 구멍 같은 음역이 표시되어 있지 않기 때문에 사용자 스스로가 사용설명서를 보며 막대 부분을 눌러서 찾아 가야 한다. 운지법이 동봉되어 있긴 한데 매우 애매하다. 1번이 여기인지 아니면 살짝 아래인지 알 수가 없다.

이 작품을 선택한 이유는 럭키비키조에서 자유 작품 대상으로 토론을 거쳐 선정되었다.

아두이노로 오타마톤이 구현 가능할까?

위의 오타마톤 연주 동영상을 보면 입으로 불지 않아도 되고, 손가락으로 특정한 위치를 눌러주면 소리가 나는 구조이다. 이는 피아노와 유사한 구조로 보였다.

ChatGPT를 이용하여 아두이노로 피아노를 구현하는 방법을 검색하니 다음과 같이 3가지 방법이 제시되었다.

  1. 버튼을 이용 : 푸시 버튼 누르면 특정한 음이 재생되는 원리
  2. 터치 센서를 이용 : 터치 센서를 누르면 특정한 음이 재생되는 원리
  3. 포텐시오미터를 이용 : 가변 저항기를 이용하여 음을 재생되는 원리

이중 오타마톤을 가장 비슷하게 구현하는 방법은 포텐시오미터를 이용한 방법으로 판단이 되었다. 상품 검색을 통해 Softpot membrane potentiometer를 찾을 수 있었다.

주요 부품 (포텐시오미터)

Softpot membrane potentiometer는 얇고 유연한 필름 형태의 가변 저항기입니다. 이 장치는 주로 위치 감지, 터치 감지, 또는 기타 유사한 애플리케이션에서 사용됩니다. Softpot의 작동 원리는 다음과 같습니다:

1.구조:

• Softpot은 일반적으로 세 개의 층으로 구성됩니다: 상부 전도층, 저항층, 그리고 하부 전도층.

• 상부 전도층과 하부 전도층은 전기적으로 전도성이 있는 물질로 코팅되어 있으며, 저항층은 저항성 물질로 코팅되어 있습니다.

2.작동 원리:

• Softpot의 상부 전도층을 눌러 하부 전도층과 접촉시키면, 전기 회로가 형성됩니다.

• 이때, 접촉 지점의 위치에 따라 저항값이 달라집니다. 접촉 지점이 저항층의 어느 위치에 있는지에 따라 저항값이 선형적으로 변합니다.

• 예를 들어, 접촉 지점이 저항층의 한쪽 끝에 가까울수록 저항값이 낮고, 반대쪽 끝에 가까울수록 저항값이 높습니다.

3. 전압 분배:

• Softpot에 전압을 인가하면, 접촉 지점에서의 전압이 저항값에 따라 달라집니다.

• 이 전압을 측정하여 접촉 지점의 위치를 알 수 있습니다. 이를 통해 위치 감지나 터치 감지 등의 기능을 구현할 수 있습니다.

(위 그림으로 연결하면 위로 갈수록 1023, 아래로 갈수록 10에 가까워짐)

4. 응용:

• Softpot은 다양한 응용 분야에서 사용됩니다. 예를 들어, 로봇 공학에서 로봇의 관절 위치를 감지하거나, 사용자 인터페이스 장치에서 터치 입력을 감지하는 데 사용될 수 있습니다.

Softpot membrane potentiometer는 그 유연성과 얇은 두께 덕분에 다양한 형태와 크기로 제작될 수 있으며, 이는 다양한 애플리케이션에서 유용하게 사용될 수 있는 이유 중 하나입니다.

설명

회로도

SoftPot left pin아두이노 나노 3.3V
SoftPot signal pin(middle)10kW 저항
SoftPot right pin아두이노 나노 GND
10kW 저항아두이노 나노 A0, 아두이노 나노 GND
스피커 In아두이노 나노 D8
스피커 GND아두이노 나노 GND
스피커 VCC아두이노 나노 5V
[SoftPot을 사용한 오타마톤 구현을 위한 회로도]

하드웨어 제작/조립 방법

  1. 입이 벌려지는 Mouth 물체내에 스피커를 넣고 선을 연결한다.

2.아두이노 나노와 빵판에 회로를 연결한다. 아두이노와 빵판은 Stem에 넣어야 하므로 최소 크기를 사용하기 위하여 아두이노 나노와 빵판중 (+,-)에 해당되는 부분을 분절하여 사용한다.

3.회로 연결후 모습

4. 최종 모습. Stem 앞면에 Softpot Membrane Potentiometer를 붙인다. 둿면에 9V 배터리 홀더와 스위치를 설치한다.

코드

아두이노 UNO 보드를 사용하기 위해 다음과 같이 설정을 한다. 아두이노 프로그램을 구동후, 상단의 툴 메뉴 중,

  • 보드 : Arduino Nano
  • 프로세서 : ATmega328
  • 포트 : 검색되는 포트를 선택 (예, COM52)


보드 설정 후, 아래의 프로그램을 복사하여 입력해주고, 실행해준다.

const int softpotPin=A0;
const int buzzerPin=8;
const int notes[]={262,294,330,349,392,440,494,523};

void setup() {
// put your setup code here, to run once:
pinMode(buzzerPin,OUTPUT);
Serial.begin(9600);
}
void loop() {
  // put your main code here, to run repeatedly:
int sensorValue=analogRead(softpotPin);

Serial.println(sensorValue);
int notelndex=map(sensorValue,0,1023,0,7);

if (sensorValue<105) {
  notelndex=0;
}

else if (sensorValue<220) {
  notelndex=1;
}

else if (sensorValue<320) {
  notelndex=2;
}

else if (sensorValue<420) {
  notelndex=3;
}

else if (sensorValue<530) {
  notelndex=4;
}

else if (sensorValue<660) {
  notelndex=5;
}

else if (sensorValue<860) {
  notelndex=6;
}

else {
  notelndex=7; 
}

if(sensorValue > 30){
tone(buzzerPin,notes[notelndex]);
delay(100);
}
noTone(buzzerPin);
}

코드 설명:

1.Softpot의 아날로그 값 읽기: analogRead(softpotPin) 함수를 사용하여 Softpot의 아날로그 값을 읽습니다. 이 값은 0에서 1023 사이의 값을 가집니다.

2.음계 주파수 배열: notes 배열에 각 음계의 주파수를 저장합니다. 여기서는 C4부터 C5까지의 음계를 사용합니다.

3.값 매핑: map(sensorValue, 0, 1023, 0, 7) 함수를 사용하여 Softpot의 값을 0에서 7 사이의 값으로 매핑합니다. 이 값은 notes 배열의 인덱스로 사용됩니다.

그러나 실제 SoftPot을 누르면 선형적인 출력값이 나오지 않는다. 트러블 슈팅 과정 No.3 참조

C4DEFGABC5
Stem Swith 위치1/82/83/84/85/86/87/88/8
sensorValue0~105105~220220~320320~420420~530530~660660~860860~1023

4.음 재생: tone(buzzerPin, notes[noteIndex]) 함수를 사용하여 부저로 해당 음을 재생합니다.

5.잠시 대기 후 부저 끄기: delay(100) 함수를 사용하여 잠시 대기한 후 noTone(buzzerPin) 함수를 사용하여 부저를 끕니다.

이 코드를 업로드하고 회로를 연결하면, Softpot의 위치에 따라 다른 음이 재생되는 간단한 피아노를 구현할 수 있습니다. 필요에 따라 음계나 기능을 추가하여 더 복잡한 피아노를 만들 수도 있습니다.

트러블 슈팅 과정

  1. ChatGPT를 이용하여 SoftPot을 이용한 회로도를 검색하면 저항 연결이 언급되어 있지 않다. 이 경우에, SoftPot을 누르지 않더라고 200~300의 신호가 측정이 된다. 저항을 사용하면 기존 출력이 40미만이 된다.
  2. 따라서 코드에 출력이 40이상인 경우에 소리가 나도록 수정하였다. 그런데 여러 SoftPot을 쓰다보면 누르지 않았을 때 기본 출력이 40이상이 나올 수 있으니, 출력값 모니터링을 하여 조정할 수 있다.
  3. SoftPot의 위치에 따른 출력값이 0~1023이나 위치정보가 선형적이지 않다. 예를 들어 SoftPot의 중앙을 누른다고 해서 525가 출력되지 않는다. 따라서 SoftPot을 길이방향으로 8등분하여 음계를 맵핑하기 위해서, 각각의 영역 경계에서 출력값을 확인하여 음계를 지정해야 한다. 이때 아두이노 프로그램에서 >Tool>시니얼 모니터에서 출력값 모니터링을 사용한다.
  4. 9V 배터리를 사용하여 조립시, Stem 내부에 위치하면 수명이 다된 배터리 교체가 어렵다. 이를 위해 배터리 홀더를 Stem 뒷면에 장착하고, 커버를 열어 배터리 교체가 가능하도록 구성한다.