LoginSignup
7
1

More than 1 year has passed since last update.

Spresenseで楽器を作る第一歩

Last updated at Posted at 2022-12-19

はじめに

先日elchikaで開催された『2022年 SPRESENSE™ 活用コンテスト』にてギターを制作しましたので、
初期プロトの作成方法を共有したいと思います。

Arduinoについては情報が多いですが、Spresenseで同じようなことをやろうとすると、つまづくことも多いかと思います。
Spresenseを使って楽器を作ってみたい!、と思った方の第一歩になれば幸いです。

作るもの

タッチセンサーとスイッチを使った楽器を制作します。
ギターやバイオリン同様、左手で音程を決め、右手で音を出す方式です。

仕組み

  • 音程のコントロール(左手):
    • タッチセンサーの値をSpresenseのポートで読み取り、その値を周波数としてBeepライブラリに渡します
  • 発音のコントロール(右手):
    • スイッチのON/OFFをSpresenseのポートで読み取り、ONの間だけ音を鳴らします。
    • また、ONの時にLEDを点灯させます。

image.png

必要なもの

  • Spresense(本体、拡張ボード)
  • PC
  • USBケーブル
  • タッチセンサー
    • メーカー:spectrasymbol
    • 型番:TSP-L-0300-103-1%-RH
  • ブレッドボード
  • 抵抗(2kΩ)
  • ジャンパー線×9
  • スイッチ(4本足)
  • 赤色LED
  • イヤホン
  • 板(任意)
  • マジック(任意)

事前準備

以下セットアップが終わっている状態とします。
具体的な作業方法は、参考文献1の第1章に沿って実施しました。

  • Arduino IDE のインストール
  • Spresenseの初期設定
    • 拡張ボード取り付け
    • Spresense用USBドライバーのインストール
    • Spresense Arduino Board Packageのインストール
    • Spresense ブートローダのインストール

作り方

1. 配線

以下画像のように接続します。

  • 回路図
    image.png

  • 全体
    image.png

  • 基板
    image.png

  • タッチセンサー
    image.png

  • Spresense(拡張ボードにはイヤホンを挿しておきます)
    image.png

2. 組み込み

Arduino IDEを使用し、以下をSpresenseに書き込みます。

#include <Audio.h>

int LED_PIN = 13;  // 13ピンをLEDに割り当て
int INPUT_PIN = 8; // タクトスイッチからの入力を8ピンに割り当て
int val;
int beep_switch;

AudioClass *theAudio;

//初回セッティング
void setup()
{
  //シリアル通信。
  Serial.begin(9600);

  theAudio = AudioClass::getInstance();
  theAudio->begin();
  puts("initialization Audio Library");

  theAudio->setPlayerMode(AS_SETPLAYER_OUTPUTDEVICE_SPHP, 0, 0);

  pinMode(LED_PIN, OUTPUT);         // LEDに繋いだピンを出力に設定
  pinMode(INPUT_PIN, INPUT_PULLUP); // タクトスイッチに繋いだピンを入力に設定
}

//メイン処理(以下が無限ループする)
void loop()
{
  val = digitalRead(INPUT_PIN);   // 入力ピン(タクトスイッチ)の状態を読み取る
  digitalWrite(LED_PIN, 1 - val); // 入力ピンの状態によりLEDの点灯・消灯

  // アナログ入力をpotとして取得
  int pot = analogRead(0);
  int freq = 100 + pot/2; // ボトム100Hzにpot値を加えて音程を変化

  if (val == 0){
    // valが0の時、ビープをONにする
    beep_switch = 1;
    Serial.println(freq); //周波数をモニター
  } else{
    // valが0の時、ビープをOFFにする
    beep_switch = 0;
    Serial.println(freq);
  }

  // setBeep(ON/OFF,音量 0がmax, 周波数)
  theAudio->setBeep(beep_switch, 0, freq);

  // theNote(pos).timeだけ待つ。s→ms換算ため1000している。
  usleep(100); // ms
}

3. 音程をメモ(任意)

タッチセンサーは音程のコントロールが難しいので、音階をメモしておくと演奏しやすいです。
板に固定し、マジックでメモするのがオススメ。

image.png

終わりに

無事、作れたでしょうか?
ここまでできると、色々なアイデアを試しやすくなると思います。
Spresenseを使って、面白い楽器を作っていきましょう!

参考文献

  • Spresenseの初期設定
    • 「SPRESENSEではじめるローパワーエッジAI」、太田義則
  • タッチセンサーを使った楽器の作り方
    • 「Arduinoではじめる手作り電子楽器」、中西宣人
  • 『2022年 SPRESENSE™ 活用コンテスト』、elchika
7
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
1