ESP32でタッチセンサーを使ってピアノを作ってみた

Pocket

ESP32でタッチセンサを使ってピアノを作ってみた

こんにちは!wak-techです。
今回はESP32を使って小さなピアノを作ってみました。と言ってもただタッチセンサから抵抗を伸ばし、それを鍵盤として使用しただけですが…

動いている様子

前提知識

ESP32のタッチセンサ関連の記事はこちら

今回は特に下の方のページの原理を使い、音を鳴らしてみます。
音を鳴らす方法などはESP32で圧電スピーカーを動かしてみた【wak-tech Advent Calender 2018】をご覧ください。

実行環境

ソフトウェア関連

  • windows10 home
  • Arduino 1.8.5
  • ESP32 core for arduino 1.0.0

使用部品

回路

  • GPIO27,14,12(それぞれT7,T6,T5)から伸びている青い線には、実際には3本の抵抗が付いています。
  • GPIO25にはただ圧電スピーカーをつなげただけ

以上のように、かなりシンプルな回路です。故にドレミしか音が鳴らせません。
同様の原理を使えば、残り7本のタッチセンサが使えるので鍵盤は再現できるはずです。

ソースコード(コピペで動く)

#define BUZZER_PIN 25
#define BEAT 200
//音階の設定
#define C4 261.6
#define C#4 277.18
#define D4 293.665
#define D#4 311.127
#define E4 329.63
#define F4 349.228
#define F#4 369.994
#define G4 391.995
#define G#4 415.305
#define A4 440
#define A#4 466.164
#define B4 493.883
#define C5 523.251

float default_values[] = {0.0,0.0,0.0};
uint8_t pins[] = {T7,T6,T5};
float tones[] = {C4,D4,E4,0};
float value_ratio = 1;

int i = 0;
int selected = 3; //デフォルトの音の波長を0Hz

//音再生関数
void playTone(float tone){
  ledcWriteTone(1,tone);
  delay(BEAT);
}

void setup() {
  Serial.begin(115200);
  delay(1000);
  Serial.println("ESP32 piano start");
  ledcSetup(1,12000, 8);
  ledcAttachPin(BUZZER_PIN,1);

  //タッチセンサの設定
  int i = 0;
  for(i=0;i<3;i++){
    default_values[i] = touchRead(pins[i]);
    Serial.println(default_values[i]);
  }
}

void loop() {
  selected = 3;
  for(i=0;i<3;i++){
    value_ratio = touchRead(pins[i])/default_values[i];
    if(value_ratio < 0.5){
      selected = i;
    }
    Serial.print(i);
    Serial.print(":");
    Serial.println(value_ratio);
  }
  if(selected == 3){
    ledcWriteTone(1,0);
    delay(100);
  }else{
    playTone(tones[selected]);
  }
  Serial.println("---------------------");
}

最後に

twitterアカウントの方で最新記事のお知らせや記事にならないような小さな情報を小出ししています。もしよろしければフォローお願いいたしますm(__)m

ご覧いただきありがとうございました!

Pocket

関連記事   ESP32のタッチセンサ3つを使って8個の状態を表してみた

2件のコメント

返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です