今日も微速転進

ここではないどこかへ

Pmod HATとマイクモジュール(Pmod MIC3)


スポンサーリンク

とりあえずゲットした部品を使えるようにしただけ。ものは7月末に届きました。

経緯

某コンテストの、部品提供キャンペーンに応募したらブツが送られてきたので。

みんなのラズパイコンテスト |ラズパイマガジン、 日経Linux、日経ソフトウエア 主催

応募しないと返却義務が発生するんで何とかしないといけない。

作品のアイディアはすでに固まっているのでマイクからの入力データの処理について調べさえすればあとは難しくないはず。

付属品など

本体の方はスペーサー×4。ただし両側がメスでネジが×2×4。ラジオベンチがないとバラすのに不便かも。

スペーサーは市販の片側メスのタイプを使ってます。

環境・その他

ref: ラズパイを使った試作に便利! Pmod HAT

ハード

ラズパイはRaspberry 3 model B+。

コンポーネントをつなぐ拡張基板の名称がPmod HATという名称。今回ゲットしたモジュール(子コンポーネント)はPmod MIC3というMEMSマイクモジュール。 マイク以外にもモジュールはたくさんあります。

RETIREDってEOLってことですよね、売れなかった?

USBマイクでいいんじゃないかというツッコミはなしで。

ドキュメント

ライブラリ

セットアップ

ハードウェアの接続は普通のpHATと同じようにGPIOコネクタに接続するだけ。本体をセットしたらマイクユニットを取り付ける。GNDのピンが本体側とマイクモジュール側で一致していればOK。SPIプロトコルを使うのでJAまたはJBのコネクタのどちらかに接続する。

f:id:atuyosi:20180829220035j:plain

写真はJAAに接続しています。音量調整は黄色いネジを回して調整。初期状態はミュート最小音量(感度?)。

SPIの有効化

Raspbianのセットアップは完了しているものとする。

$ sudo rasp-config

f:id:atuyosi:20180829215757j:plain:w480

特に難しくはない。忘れずに再起動する。

パッケージの追加

$ 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段になっている上の段に差し込む

f:id:atuyosi:20180829215003j:plain:w480

動作チェック

リファレンスのサンプルの接続先のみ変更。

#!/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

f:id:atuyosi:20180829215246j:plain

音に合わせて出力される:の個数が変動する。

readIntegerValue()またはreadPhysicalValue()でそれぞれ整数、実数で値が取れる。

まとめ

とりあえず動作チェックまで。日本語の情報が殆ど無いのが残念なところ。

接続さえ間違えなければ特に難しくない。

[2018/08/31 追記]

Python経由で扱うのは限界がある。まずLinuxリアルタイムOSではないし、Pythonでマイクロ秒間隔でセンサからデータを取れるかというとちょっと微妙。

ALSA経由でデータを取れるようにするか、Cでがっつりコードを書くか、要検討。

参考URL

広告