Pmod HATとマイクモジュール(Pmod MIC3)
スポンサーリンク
とりあえずゲットした部品を使えるようにしただけ。ものは7月末に届きました。
経緯
某コンテストの、部品提供キャンペーンに応募したらブツが送られてきたので。
みんなのラズパイコンテスト |ラズパイマガジン、 日経Linux、日経ソフトウエア 主催
応募しないと返却義務が発生するんで何とかしないといけない。
作品のアイディアはすでに固まっているのでマイクからの入力データの処理について調べさえすればあとは難しくないはず。
付属品など
本体の方はスペーサー×4。ただし両側がメスでネジが×2×4。ラジオベンチがないとバラすのに不便かも。
スペーサーは市販の片側メスのタイプを使ってます。
- 出版社/メーカー: サンワダイレクト
- メディア: エレクトロニクス
- この商品を含むブログを見る
サンハヤト Raspberry Pi用スペーサー 黄銅製 MPS-M2611
- 出版社/メーカー: サンハヤト
- メディア: Tools & Hardware
- この商品を含むブログを見る
環境・その他
ハード
ラズパイはRaspberry 3 model B+。
コンポーネントをつなぐ拡張基板の名称がPmod HATという名称。今回ゲットしたモジュール(子コンポーネント)はPmod MIC3というMEMSマイクモジュール。 マイク以外にもモジュールはたくさんあります。
- Pmod HAT Adapter [Reference.Digilentinc]
- PmodMIC: Microphone with Digital Interface (RETIRED) - Digilent
RETIREDってEOLってことですよね、売れなかった?
USBマイクでいいんじゃないかというツッコミはなしで。
ドキュメント
ライブラリ
- DesignSpark.Pmod — DesignSpark.Pmod 0.2.0 documentation
- DesignSparkrs/DesignSpark.Pmod: DesignSpark Python library for Pmods
セットアップ
ハードウェアの接続は普通のpHATと同じようにGPIOコネクタに接続するだけ。本体をセットしたらマイクユニットを取り付ける。GNDのピンが本体側とマイクモジュール側で一致していればOK。SPIプロトコルを使うのでJAまたはJBのコネクタのどちらかに接続する。
写真はJAAに接続しています。音量調整は黄色いネジを回して調整。初期状態はミュート最小音量(感度?)。
SPIの有効化
Raspbianのセットアップは完了しているものとする。
$ sudo rasp-config
特に難しくはない。忘れずに再起動する。
パッケージの追加
$ sudo apt install python3-pip python3-dev libfreetype6-dev libjpeg-dev libopenjp2-7-dev libtiff-dev build-essential
venv
モジュールもインストール。
$ sudo apt install python3-venv
Python環境のセットアップとライブラリのインストール
作業ディレクトリの作成。
$ mkdir myproject $ cd myproject
仮想環境の作成、有効化。
$ python3 -m venv venv $ . venv/bin/activate
本命のライブラリをインストール。
$ pip install designspark.pmod
ハードウェアの注意
- 初期状態はマイクボリュームが最小なので黄色いプラスネジを右に回す。
- JAでもJBでもいいが、2段になっている上の段に差し込む
動作チェック
リファレンスのサンプルの接続先のみ変更。
#!/usr/bin/env python # -*- coding: utf-8 -*- # Copyright (c) 2017 RS Components Ltd # SPDX-License-Identifier: MIT License """ Print a continous sound level reading out. """ from DesignSpark.Pmod.HAT import createPmod import time s = ':' lut = [s] for i in range(128): s+=':' lut.append(s) if __name__ == '__main__': mic = createPmod('MIC3','JAA') time.sleep(0.1) try: while True: int = mic.readIntegerValue() #print(int) print(lut[int>>5]) snd = mic.readPhysicalValue() #print(snd) #time.sleep(0.01) except KeyboardInterrupt: pass finally: mic.cleanup()
JBA
という箇所をJAA
に。
ref. 3. Basic Examples — DesignSpark.Pmod 0.2.0 documentation
動作の様子
上記のコードをsample.py
という名前で保存して、実行する際は以下のように。
$ python sample.py
音に合わせて出力される:
の個数が変動する。
readIntegerValue()
またはreadPhysicalValue()
でそれぞれ整数、実数で値が取れる。
まとめ
とりあえず動作チェックまで。日本語の情報が殆ど無いのが残念なところ。
接続さえ間違えなければ特に難しくない。
[2018/08/31 追記]
Python経由で扱うのは限界がある。まずLinuxはリアルタイムOSではないし、Pythonでマイクロ秒間隔でセンサからデータを取れるかというとちょっと微妙。
ALSA経由でデータを取れるようにするか、Cでがっつりコードを書くか、要検討。