초급 예제

누구나 쉽게 따라해볼 수 있는 쉬운 예제들입니다. 가볍게 도전~!

초음파 센서-테레민(Theremin) 만들기

2015-01-20 15:59:02

개요

 

테레민이라는 악기를 들어보신 적이 있으신가요?

 

만약 들어보신 적이 없다면 아래의 영상을 먼저 봐주세요!

 



 
 
 
 
공중에서 손만 흔들었을 뿐인데 소리가 나는것이 신기하지 않나요??
 
테레민은 다른악기들과 다르게 음향적으로도 특이한 소리를 내는것이 특징이기도 합니다.
 
 

테레민은 러시아의 음향 물리학자이자 첼리스트이기도 한 테레민(Léon Theremin)이 개발한 악기로써 두 고주파 발진기의 간섭에 의해 생기는 소리를 이용하여 1920년에 발명한 전자악기 입니다. 

 
테레민에 달려있는 수직 안테나와 루프 안테나에 손을 가까이하여 각각의 거리로 음계를 구분하여 출력합니다.
 
 

 

 
 
 
이번 예제에서 초음파 거리 센서를 사용하여 초음파 거리 센서와 손과의 거리를 통해
음계를 출력하는 테레민을 만들어봅니다.
 

초음파 거리 센서는 테레민의 안테나 역할을 하게되고, 피에조부저는 스피커 역할을 하게 됩니다.
 




 

 

부품 목록

No 부품명 수량
1 오렌지 보드 1
2 초음파센서 1
3 피에조 부저 1
4 점퍼 케이블 11
5 브레드 보드 1

 

부품명 오렌지 보드 초음파 센서 피에조 부저 점퍼 케이블 브레드 보드
부품 사진

 

 

 

 

 

하드웨어 making

브레드보드

 

 

 

소프트웨어 coding

/*
 * site : Kocoafab.cc
 * date : 2018.06.01
 */

//모듈의 핀 번호 선언
int piezoPin = 3;
int echoPin = 13;
int trigPin = 12;

void setup() {
  //모듈 핀모드(pinMode) 선언
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  pinMode(piezoPin, OUTPUT);
}

void loop() {
  digitalWrite(trigPin, LOW);
  digitalWrite(echoPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);

  unsigned long duration = pulseIn(echoPin, HIGH);

  float distance = duration / 29.0 / 2.0;

  
/*
 * 측정된 거리값을 사용하여 거리에 맞는 음계 출력(6옥타브 음계 출력)
 * 50cm 미만일 때 소리가 출력됩니다. 50cm를 초과하면 소리 X
 * 5cm간격으로 5, 10, 15, 20, 25씩 소리가 출력됩니다.
 */
  if (distance < 50) {
    if (distance <= 5) {
      tone(piezoPin, 1047);            //도
    } else if (distance <= 10) {
      tone(piezoPin, 1174);            //레     
    } else if (distance <= 15) {
      tone(piezoPin, 1318);            //미
    } else if (distance <= 20) {
      tone(piezoPin, 1396);            //파
    } else if (distance <= 25) {
      tone(piezoPin, 1567);            //솔
    } else if (distance <= 30) {
      tone(piezoPin, 1760);            //라
    } else if (distance <= 35) {
      tone(piezoPin, 1975);            //시
    } else if (distance <= 40) {
      tone(piezoPin, 2093);            //도
    }
  }
  else {
    noTone(piezoPin);
  }
  delay(100);
}

 

코드에서는 초음파 거리 센서에서 손과의 거리를 측정한 이 후에 거리값을 통해 5cm단위로 구분하여 tone()함수로 소리를 출력합니다.

 

 

 

 

 

 

kocoafabeditor

항상 진취적이고, 새로운 것을 추구하는 코코아팹 에디터입니다!

초음파 센서, 아두이노, 오렌지보드

심불석 2016-10-13 19:42:45

아니 도대체 왜 명령어 안되는거죠??

심불석 2016-10-13 19:42:47

아니 도대체 왜 명령어 안되는거죠??

신예주 2016-11-21 15:32:35

계속 같은 음만 나는데 이유가 뭘까요??ㅠㅠ

kocoafab 2019-01-07 15:14:46

@심불석
위 코드는 따로 명령어가 없습니다. 초음파 센서에 손을 올린 후 거리를 바꿔보세요.

@신예주
초음파센서가 제대로 측정되지 않아 같은 거리만 측정되어 같은음만 나올 수 있습니다. Serial통신을 이용하여 초음파센서로 측정되는 거리가 제대로 나오는지 확인해보세요.

닭돼지 2019-01-07 23:56:32

오옹 신기방기

닭돼지 2019-01-07 23:57:16

근데 부저 소리를 조그맣게 하는 방법은 없나요? 부저 소리가 너무 커서..

fprh63 2021-01-14 05:07:55

초음파 센서 말고, 실제 테레민악기 처럼 안테나를 이용한 명령문은 어떻게 하면 될까요?