5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Rustとwio-terminalでギターチュナーを作る(ギター以外も可?)

Posted at

始めに

最近Rustをかじってみました。普通にPCで動かすのも何かな?と思っていたところ、『基礎から学ぶ 組込みRust』なる本が出ました。この中ではseeedのwio-terminalという端末を使用して、組み込み向けのRustプログラミングを行っています。早速書籍とwio-terminalを購入しやってみました。本では最終的にwio-terminalのマイク入力のFFTを行い、LCDにリアルタイムに表示するアプリケーションを作成いたします。これに刺激を受け何か作りたいなーと思い、そういえば、ギターに使えるチュナーなどもできないかと思いつき、プロジェクトをスタートさせました。ググるとアナログをうまく使った方法ストロボLEDを使った方法がありますが、今回考えている、周波数を計算して平均律との差を出力する方式は見つかりません。なければ作ってしまおうということで、一から作ることとしました。

参考文献、サイト

  • 『基礎から学ぶ 組込みRust』
    この本が無ければ始まっておりませんでした。wio-terminalでRust使うときの環境設定がすべて書かれております。
  • 上記本のgithubサイト
    用例のファイルが入っております。が、虫食いになっており本が無いと使えません・・・。
  • 12平均律と周波数
    12平均律についての数式とサイン波のサンプルが付属しています。このサイトをもとに計算式を作成しました。

作り方

  1. 前提条件:上記『基礎から学ぶ 組込みRust』をもとにwio-terminalの環境構築を行ってあること。基本はarmのthumbv7em-none-eabihfのクロスコンパイル環境とRust環境(cargo等)、そしてwio-terminalのUSB接続設定、シリアル設定が必要です。筆者はひねくれているので、Raspberry pi 4のサーバ上に環境を構築し動作に成功しております。もちろんPCのUbuntuなどでも動くはずです。

  2. 以下のアドレスからRustのプロジェクトをダウンロードします。

$ git clone https://github.com/yoshiki9636/gtuner_wio_terminal
  1. 接続したwio-terminalを書きこみモードにして、プロジェクト内でrunさせます。この時--releaseオプションをつけてください。(つけないとADCが動作しないようです。)
$ cd gtuner_wio_terminal/
$ cargo run --release

使い方

1.楽器で音を出すと、LCDにその時の音名と高さ、どれだけ平均律からずれているかが表示されます。

2.ピッチは初期値がA=440Hzに設定されています。変えたい場合は、上部のボタンで変更できます。左のボタンで1Hzずつ上昇します。真ん中のボタンで1Hzずつ降下します。

アルゴリズム

難しくないので、コード見てください。一応コメントもつけております。

最後に

かなり久々に新しい言語でプログラムを書いてみました(試しにPHP書いて以来)。基本的にPythonみたいなものとCを知っていれば、概念的なものの理解にはそう難しくないかもと感触を受けました。(まだ知らない大変なものが居るのかもしれませんが・・・) wio-terminalはコンパクトにI/Oが揃っていて、お手軽にプロトタイプを作れそうな気がしますので、また何か思いつくことがあったら、これで作ってみようと思います。最後に数々の情報を与えてくれた『基礎から学ぶ 組込みRust』の作者の方々に感謝いたします。

5
4
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
5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?