次回以降の開催の予定(タップ or クリックすると開くよ)

次回以降の開催予定のCoderDojo岐阜は以下の日程で参加申込と開催を行う予定です。

参加申し込みの前に必ず参加の際のルールなどをご確認ください。

参加申し込み開始2024年5月18日(土)9時〜 (開催日より1週間前日)
開催日時・場所2024年5月25日(土)
時間:9時30分〜11時30分
場所:みんなの森 ぎふメディアコスモス かんがえるスタジオ

[Arduino]ESP32マイコンで電子リコーダを作る 第1回

  • -
    コピー

はじめに

私の家族は、私以外は吹奏楽部在籍(or在籍経験)がありピアノも演奏することができます。なので私も何か楽器を演奏できるようになりたいと思っていました。そこで、日本を代表するフュージョンバンド「T-SQUARE」の「TRUTH」という曲の演奏で使用されている「EWI」というウィンドシンセサイザーを思い切って購入しました。

「TRUTH」は私の世代ではF1レース中継のオープニングテーマ曲で有名で、聞けば誰もが「ああ、あの曲だ」とわかります。この曲で使用されている当時最先端のウィンドシンセサイザーEWIは憧れの楽器でした。

購入後、さっそく練習を始めたのですが、写真のように結構な長さがあるので気軽に持ち運ぶことはできないため、出張中は練習することができません。最近は比較的安価な「エレフエ」や「カリーナ」というような電子リコーダも発売されています。

しかし、これらは小学校のときに使っていたリコーダ電子化したもので、EWIとは運指(指使いのパターン)が異なっていて、練習になりません。そこで、運指の練習ができるEWIもどきの電子リコーダを作ろうと思い立ちました。

電子リコーダを実現するためのセンサを探す

マイコンは手元にある、じゃんけんのときと同じESP32を使用します。開発ツールも同じArduinoを使用します。ESP32マイコンを使った開発環境の構築のしかたは、じゃんけんの記事にありますのでそちらを見てください。

EWIは音階の指定をする縦笛の穴に相当する部分にはタッチセンサを使用しています。ESP32にはタッチセンサも内蔵していますが、数が足らないため別途タッチセンサユニットを追加します。

何か良いものが無いか探したところ、スイッチサイエンスから「Adafruit MPR121 静電容量センサ(12ch)」というモジュールが発売されていました。タッチセンサが12入力あり電子リコーダを実現するために十分な数があります。

https://www.switch-science.com/products/1867

電子リコーダを実現するには、息の吹込み状態を検出するセンサが必要なります。息の吹込み量をそのまま検出しようとすると、空気の流量センサということになります。

しかし、空気の流量を測定するセンサは大きな空気の流れを測定するようなものしかありませんでした。そこで、ちょっと発想を変えて空気の流れではなく、空気の圧力を検出するセンサを探しました。すると、気圧を測定するセンサがいろいろ見つかりました、その中でチューブを取り付けが可能なものを探しました。

偶然にも同じスイッチサイエンスから「MPRLS Ported 気圧センサモジュール(0~25 PSI)」というセンサモジュールが発売されていました。PSIはアメリカで使用されている圧力の単位です。地上の大気圧(1気圧)は約14.5PSIです。これを使って息を吹き込んだら圧力が上昇することを検出します。

https://www.switch-science.com/products/4084

今回、見つけて購入した2つのモジュールは、たまたまですがどちらもAdafruit Industriesというニューヨークに拠点を置くオープンソースハードウェア関連の企業です。マイコンに接続して使用できる各種センサモジュールを発売しています。マイコンで使用するための解説やライブラリが用意されていて、高度な知識がなくとも気軽に使用できます。今回使用するセンサ以外にも様々なモジュールを発売しています。日本ではスイッチサイエンスや秋月電子などの通販で取り扱いがあります。

MPR121 静電容量センサのテスト

まずは、静電容量センサのテストを行います。マイコン(ESP32)とは電源(Vin,GND)と2本の通信線(SCL,SDA)の4本を接続するだけです。マイコン(ESP32)と静電容量センサの間はI2Cという規格で接続します。このI2CはUSBのような通信規格のことです。マイコンと各種センサなどを接続する一般的な規格で、電子工作で使う分には難しい知識は不要です。いかに説明するようにセンサメーカからライブラリが提供されていますので、4本の線を正しく接続すれば簡単に使用することができます。

2本の通信線と+電源は「プルアップ抵抗」と呼ばれる抵抗器で接続します。これはI2Cの通信を安定させるために必要で、1k~10kオームの抵抗器を使用してください。このプルアップ抵抗器は無くても動作する場合が多いですが、通信線が長くなると不安定になったりしますので、できれば装着したほうが良いです。

Arduino IDE(開発ツール)を使ってテストします。センサメーカのホームページにチュートリアルがあり、これに従って操作するだけでテストすることができます。チュートリアルではESP32マイコンではなく、通常のArduinoマイコンボードを使用していますので、配線が異なります。

https://learn.adafruit.com/adafruit-mpr121-12-key-capacitive-touch-sensor-breakout-tutorial/wiring

Arduino IDE(開発ツール)を起動したら
「スケッチ」→「ライブラリをインクルード」→「ライブラリを管理」
メニューを開きます。

※ライブラリをダウンロードするので、パソコンがインターネットに接続されている必要があります。

ライブラリマネージャーが開きます。
検索欄に「Adafruit MPR121」と入力すると、Adafruit MPR121ライブラリが出てきますので、「インストール」ボタンをクリックします。

インストール確認画面が開きます。
「Install all」ボタンをクリックします。

インストールが完了すると、Adafruit MPR121ライブラリが「INSTALLED」と表示されます。

これでライブラリの準備は完了です。
「閉じる」をクリックしてライブラリマネージャを閉じます。

Adafruit MPR121ライブラリをインストールすると、プログラム例(スケッチ例)も用意されます。
「ファイル」→「スケッチ例」をクリックすると、いろいろなプログラム例が表示されます。
この中から「Adafruit MPR121」→「MPR121test」を選択します。
テストプログラムが開きます。
「スケッチ」→「マイコンボードに書き込む」でコンパイルしてマイコンボードに書き込みます。
※コンパイルでエラーが出るときには、次の節「ボードマネージャーの更新」を確認してみてください。

コンパイル&マイコンボードへの書き込みが成功したら、シリアルモニタを使って、センサの状態を取得できていることを確認します。
「ツール」→「シリアルモニタ」でシリアルモニタを開きます。

シリアルモニタが開きます。
テストプログラムではSerial.begin(9600);と記述されており、通信速度が9600bpsで動作しますので、シリアルモニタの通信速度を「9600bps」に変更します。

あるいは、テストプログラムの記述を
Serial.begin(115200);
として、シリアルモニタの通信速度と同じにします。
※コンパイル&マイコンボードへの書き込みをやり直す必要があります。

マイコンボードをリセットすると、当初は文字化けした文字が表示されますが、プログラムが起動すると
Adafruit MPR121 Capacitive Touch sensor test
と表示されます。センサとの接続に成功すると「MPR121 found!」と表示されます。

タッチセンサモジュールのセンサ端子0~11に触れると、

  • 「6 touched」→6番端子に触れた
  • 「6 released」→6番端子から離した

とシリアルモニタに表示されて、タッチセンサの状態を取得できていることがわかります。

ボードマネージャーの更新

私の場合はじゃんけんプログラムを作ってから、かなり日がたつので使っているマイコンボード(ESP32)のボードマネージャーが古くなっていました。そのため、MPR121のライブラリが正しく動作しませんでした。
「ツール」→「ボードESP32 Dev Module」→「ボードマネージャー」を呼び出します。
※使用しているマイコンボードがESP32の場合です。

ボードマネージャーが立ち上がります。
「タイプ」のコンボボックスから「ESP32」を選択します。

私が使用しているのは
「esp32 by Espressif Systems」です。
状態が「INSTALLED」なっています。
現在のバージョンは1.0.4になっています。

新しいバージョンがあるときには、「更新」ボタンが表示されますので、クリックします。

状態がインストール中となり、更新が始まりますので完了まで待ちます。

更新が完了しました。
バージョンが2.0.11と新しくなっていることがわかります。

私の場合はこのバージョンアップ後にコンパイルしてマイコンボードに書き込んだところ、正しく動作しました。

次回予告

次回は「MPRLS Ported 気圧センサモジュール」をこのタッチセンサと同様にライブラリを導入して、テストプログラムを動作させます。

  • -
    コピー

この記事を書いた人

アバター

かとう あきのり

半導体製造・検査装置メーカでエンジニアしています。制御ソフトウェア作成がメインですがハード設計もやります。休日はDIYか庭のバラの手入れをしています。