マイクで遊ぶ (3) MSM261S4030H0

 これまでアナログ出力のマイクを利用しました。ここでは、スイッチサイエンスから入手した「Sipeed 1マイクモジュール」を使います。MEMSマイクロホンのMSM261S4030H0を搭載していて、出力はI2Sです。I2Sはオーディオ用D-Aコンバータのインターフェースとして利用されていますが、入力にも使えます。マイクのユニットは一つなので、ステレオで使うときは二つ用意し、信号はLR端子で指定します。

 Arduinoは、I2Sのライブラリが用意されているMKRZEROを使います。

 I2S信号のWS(もしくはLRCLK)信号は、DataがRightとLeftのどちらの信号を送り出しているかを示します。CDプレーヤやUSBプレーヤでは、D-Aコンバータはシリアルで流れてくる両方の信号を受けて、D-AコンバータがLRCLK信号をもとに内部で二つに分け、ステレオで出力します。
 一つのマイク・モジュールでは、どちらか一方の信号しか扱えません。そのため、RightとLeftのどちら側の信号であるかをLR端子で指定してDataに載せます。

Sipeed 1マイクモジュールのおもなスペック

  • 電源電圧 3.3V
  • 動作電流 1mA以上
  • 音圧レベル 140dB SPL
  • SN比 57dB
  • ひずみTHD 1%以下

接続

 Arduino.ccのI2S libraryのページに従って接続します。

Sipeed 1マイクモジュール MKRZERO
G(GND) GND
V(Vcc) Vcc
WS(LRCLK) 3
LR(Left/Right選択) GND
CK(BCLK) 2
DA(SD;Serial Data) A6

スケッチ

 I2S libraryのページから、サンプルのInput Serial Plotterへ行きます。ここに掲載されているスケッチをそのまま動かします。

 そのまえに、ライブラリをインストールします。ツールからライブラリを管理を選択し、i2sを検索します。ArduinoSound by Arduinoをインストールします。

 そのまま実行できました。

2個使う

 Sipeed 1マイクモジュールを2個使います。一つはLR端子をGNDへ、一つはLR端子をVccへつなぎます。残りの端子は同じ場所につないでいます。

 I2S libraryのページには、なぜかread関数の説明がありません。インストールされているソース・コードを見ます。

  C:\Users\ユーザ名\Documents\Arduino\libraries\ArduinoSound\src

 AudioInI2S.cppのread関数です。

int AudioInI2SClass::read(void* buffer, size_t size)
{
int read = I2S.read(buffer, size);
if (read) {
samplesRead(buffer, read);
}
return read;
}

 Left、Rightのデータを別々に扱うようには書かれていません。

 i2sでライブラリを検索したときにAdafruitのライブラリがありました。これをインストールします。

 このソースを見ます。

  C:\Users\ユーザ名\Documents\Arduino\libraries\Adafruit_Zero_I2S_Library

 Adafruit_ZeroI2S.cppのread関数はLeft、Rightのデータを別々に扱っています。

  void Adafruit_ZeroI2S::read(int32_t *left, int32_t *right)

 スケッチです。

#include <Adafruit_ZeroI2S.h>

Adafruit_ZeroI2S i2s;

void setup() {
Serial.begin(9600);
if (!i2s.begin(I2S_32_BIT, 44100)) {
Serial.println("Failed to initialize I2S!");
while (1); // do nothing
}
i2s.enableRx();
}

void loop() {
int32_t Left;
int32_t Right;

i2s.read(&Left,&Right);
Serial.println(String(Left) + "," + String(Right));
delay(50);
}

 実行結果です。

 i2s.begin(I2S_32_BIT, 96000)

に初期化し、流れているデータをADALM2000のI2Sでデコードした波形です。マイクは一つだけ接続したので、Rightのデータは入っていません。

 マイクを二つつないだときの波形です。RightとLeftの両方にデータが入っています。

コラム MKRZERO

 このモデルは、国内では秋月電子通商が扱っています。筆者は、Arduino.ccのshopから入手しました。バッテリはスイッチサイエンスの扱っているリチウムイオンポリマー電池400mAhがコネクタに挿せ、利用できます。

 何かのタイミングで、USBのCOMポートが反応しなくなることがあります。リセット・スイッチを素早く2度押しするとブート・モードになり、仮想COMポートが生きます。そのまま何らかのスケッチを書きこむと、復活します。

 MKRZEROの利用例は、こちらを参照ください。

前へ

マイクで遊ぶ (2) MAX9814

次へ

回すだけ IQ2306 (1) IQ Position Module​のセットアップ