ECM音センサの作り方

ラズパイで使えるECM音センサーの作り方

今回は、エレクレットマイク(ECM)を使って音センサーを作り、ラズパイで音が感知できるように実験してみた。この記事では音センサーの作り方をメインに紹介する。

マイクで拾った音の大きさに合わせて、LEDが点灯するようにラズパイでプログラムした動画がこちら。

音センサーは交流回路の勉強にもなって楽しいので、ぜひ一度作ってみてはいかがだろうか。

音センサーの製作

音センサーの仕組み

今回製作した音センサーの仕組みは次のようになる。

エレクトレットマイクからラズパイまでのフロー図
エレクトレットマイクからラズパイまでのフロー図

  1. マイクで音を拾い、Ampで信号を増幅する。
  2. 音声は交流信号なので、直流信号に直し、ADコンバータでアナログ電圧を読み取れるようにする。
  3. ADコンバータとラズパイ接続して、SPI通信でデータをやりとりする。

エレクレットマイク(ECM)

自作ECMセンサー
自作ECMセンサー

音を感知するためのECMマイクは、以前に自作したものを使う。

作り方はこちらの記事を参考に。

作るのが面倒という方は、ECMとアンプがモジュール化されたものを使うと便利。自作だと、ここまでの小型化は難しい。

可変ゲインブレイクアウトボード付きA r d u i n o 用 3個エレクトレットマイクアンプMAX4466モジュール、マイクアンプモジュール、GY-MAX4466ブレイクアウトセンサー
可変ゲインブレイクアウトボード付きA r d u i n o 用 3個エレクトレットマイクアンプMAX4466モジュール、マイクアンプモジュール、GY-MAX4466ブレイクアウトセンサー

わずか24μAの電源電流で200kHzの利得帯域幅を提供します。 解凍後、+ 5V / Vの最小安定利得が達成され、600kHzの利得帯域幅積が得られます

Amazon
HiLetgo 5個セット サウンドセンサーモジュール声検出声コントロールスイッチ [並行輸入品]
HiLetgo 5個セット サウンドセンサーモジュール声検出声コントロールスイッチ [並行輸入品]

操作電圧3.3V-5V 5 アウトプット形:デジタルの切り換えアウトプット ボルト穴を持つ容易なインストール 小さいPCBサイズ:3.2cm*1.7cm GNDと接続されるGND

Amazon

マイクアンプの製作

マイクアンプの説明
マイクアンプの説明

ECMで拾った音は電圧が数十mV程度と小さすぎるので、マイクアンプを通して十分大きな信号に変換してあげる必要がある。

使用した回路は次の非反転増幅回路で、1kΩと470kΩの抵抗により、470倍の増幅率となっている。

マイクアンプの電子回路図
マイクアンプの電子回路図

サイン波を鳴らした時の、マイクアンプの増幅前と増幅後の波形を観察。

マイクアンプの増幅をオシロスコープで観察
マイクアンプの増幅をオシロスコープで観察

写真のように10mVp-p程度だったECM出力の電圧が、アンプを通したことで4Vp-p程度まで増幅されている。ただ過増幅のため波形が歪んでしまった。人間の耳で聞けば割れた音になってしまっていると思うが、今回はセンサーの用途なので、あくまで音を感知できればよく、音質は気にしないのでこれで良しとする。

交流信号を直流信号に変換する(AC-DC)

マイクアンプで増幅された信号はGNDを中心とした交流信号である。このままではADコンバータに入力できないので、何らかの形で交流信号を直流信号に変えてあげる必要がある。

そこで使えるのがつぎの半波整流回路だ。

半波整流でAC-DC変換する電子回路図
半波整流でAC-DC変換する電子回路図

回路の原理は次の通り

  1. 0Vを中心に上下する交流信号のプラス側の信号のみダイオードで通過させる。
  2. 通過した信号はコンデンサに蓄電され、100kΩの抵抗へ流れていく。
  3. 3.3V以上の電圧にならないように、ツェナーダイオードでリミッターがかけられる。

ACからDCへ変換する説明
ACからDCへ変換する説明

下の写真はマイクアンプから出力された信号と、ダイオードのみを通した時の信号をオシロスコープで観察したものだ。

ダイオードのみを通した時の信号をオシロスコープで観察
ダイオードのみを通した時の信号をオシロスコープで観察

ダイオードを通すと、プラス側の信号のみを取り出すことができる。当然ダイオードの向きを変えれば、マイナス側の信号のみを取り出せる。

また、0.6V程度電圧降下が起きていることが上の写真からもわかるだろう。ダイオードは0.6V以上の信号でないと動作しないため、マイクアンプで十分大きな電圧に変えてあげる必要があったのだ。

もしも0Vから動作するダイオードを使いたい場合は、理想ダイオード回路をオペアンプで組む必要がある。VUメーターやdB測定器などより精密な場合は理想ダイオードを使う。今回の用途ではその必要はないため、回路を簡単にするためにも小信号用のダイオードで済ませている。

ちなみに100kΩの抵抗値をもっと大きくすると、コンデンサに貯まった電流が逃げにくくなるため音声信号の追従が遅くなる。ここら辺は用途に分けて調整すると良い。

ADコンバータ

ADコンバータは2チャネル、シリアル8ビットのMAX1118を使った。MAX1118をラズパイでSPI通信する説明は、以前にこちらの記事で書いたので参考に。本記事ではMAX1118の使い方の詳細を省く。

音量に合わせてLEDを点灯させるPythonプログラム

音信号を直流のアナログ電圧に変えることができたので、マイクで拾った音量に合わせてLEDを点灯させてみよう。ラズパイのGPIOに、1kΩの抵抗を挟んでLEDを5個接続した。こちらのプログラムを実行すれば冒頭で紹介した動画のように、音に反応してLEDが点灯する。

# -*- coding: utf-8 -*-
import spidev
import time
import RPi.GPIO as GPIO

LED0 = 4 # GPIO番号
LED1 = 14
LED2 = 15
LED3 = 17
LED4 = 18

Vref = 3.336  # ラズパイの3.3V電源をテスターで実測

GPIO.setmode(GPIO.BCM)
GPIO.setup(8, GPIO.OUT)  # CNVST

GPIO.setup(LED0, GPIO.OUT)
GPIO.setup(LED1, GPIO.OUT)
GPIO.setup(LED2, GPIO.OUT)
GPIO.setup(LED3, GPIO.OUT)
GPIO.setup(LED4, GPIO.OUT)


spi = spidev.SpiDev()
spi.open(0, 0)  # bus0,cs0
spi.no_cs = True  # CSを使わない
spi.max_speed_hz = 1000000  # 1MHz
spi.bits_per_word = 8


def sendCNVST(CH):
    if CH == 0:
        GPIO.output(8, GPIO.LOW)
        GPIO.output(8, GPIO.HIGH)
        GPIO.output(8, GPIO.LOW)
    elif CH == 1:
        GPIO.output(8, GPIO.LOW)
        GPIO.output(8, GPIO.HIGH)
        GPIO.output(8, GPIO.LOW)
        GPIO.output(8, GPIO.HIGH)
        GPIO.output(8, GPIO.LOW)


def getVolts():
    adc = spi.xfer2([0x00])
    return adc[0] / 255.0 * Vref


try:
    while True:
        sendCNVST(0)
        v0 = getVolts()
        # print(v0)
        
        if v0 > 0.75:
            GPIO.output(LED0, GPIO.HIGH)
            GPIO.output(LED1, GPIO.HIGH)
            GPIO.output(LED2, GPIO.HIGH)
            GPIO.output(LED3, GPIO.HIGH)
            GPIO.output(LED4, GPIO.HIGH)

        elif v0 > 0.6:
            GPIO.output(LED0, GPIO.HIGH)
            GPIO.output(LED1, GPIO.HIGH)
            GPIO.output(LED2, GPIO.HIGH)
            GPIO.output(LED3, GPIO.HIGH)
            GPIO.output(LED4, GPIO.LOW)
        elif v0 > 0.45:
            GPIO.output(LED0, GPIO.HIGH)
            GPIO.output(LED1, GPIO.HIGH)
            GPIO.output(LED2, GPIO.HIGH)
            GPIO.output(LED3, GPIO.LOW)
            GPIO.output(LED4, GPIO.LOW)
        elif v0 > 0.3:
            GPIO.output(LED0, GPIO.HIGH)
            GPIO.output(LED1, GPIO.HIGH)
            GPIO.output(LED2, GPIO.LOW)
            GPIO.output(LED3, GPIO.LOW)
            GPIO.output(LED4, GPIO.LOW)

        elif v0 > 0.15:
            GPIO.output(LED0, GPIO.HIGH)
            GPIO.output(LED1, GPIO.LOW)
            GPIO.output(LED2, GPIO.LOW)
            GPIO.output(LED3, GPIO.LOW)
            GPIO.output(LED4, GPIO.LOW)
        else:
            GPIO.output(LED0, GPIO.LOW)
            GPIO.output(LED1, GPIO.LOW)
            GPIO.output(LED2, GPIO.LOW)
            GPIO.output(LED3, GPIO.LOW)
            GPIO.output(LED4, GPIO.LOW)

        time.sleep(0.01)


except KeyboardInterrupt:
    spi.close()
    GPIO.output(LED0, GPIO.LOW)
    GPIO.output(LED1, GPIO.LOW)
    GPIO.output(LED2, GPIO.LOW)
    GPIO.cleanup()

この記事で使った関連製品はこちら

可変ゲインブレイクアウトボード付きA r d u i n o 用 3個エレクトレットマイクアンプMAX4466モジュール、マイクアンプモジュール、GY-MAX4466ブレイクアウトセンサー
可変ゲインブレイクアウトボード付きA r d u i n o 用 3個エレクトレットマイクアンプMAX4466モジュール、マイクアンプモジュール、GY-MAX4466ブレイクアウトセンサー

わずか24μAの電源電流で200kHzの利得帯域幅を提供します。 解凍後、+ 5V / Vの最小安定利得が達成され、600kHzの利得帯域幅積が得られます

Amazon
HiLetgo 5個セット サウンドセンサーモジュール声検出声コントロールスイッチ [並行輸入品]
HiLetgo 5個セット サウンドセンサーモジュール声検出声コントロールスイッチ [並行輸入品]

操作電圧3.3V-5V 5 アウトプット形:デジタルの切り換えアウトプット ボルト穴を持つ容易なインストール 小さいPCBサイズ:3.2cm*1.7cm GNDと接続されるGND

Amazon
Raspberry Pi Zero W - ヘッダー ハンダ付け済み - ラズベリー・パイ ゼロ W ワイヤレス
Raspberry Pi Zero W - ヘッダー ハンダ付け済み - ラズベリー・パイ ゼロ W ワイヤレス

Amazon
正規代理店商品 Raspberry Pi 4 Model B (8GB) made in UK element14製 技適マーク入
正規代理店商品 Raspberry Pi 4 Model B (8GB) made in UK element14製 技適マーク入

Amazon

オススメ参考書籍

写真や図解でよくわかる ラズパイZeroを使い倒す本 Raspberry Pi Zero/Zero W対応
写真や図解でよくわかる ラズパイZeroを使い倒す本 Raspberry Pi Zero/Zero W対応

本書ではRaspberry Pi Zero / Zero Wの概要から必要な周辺機器の説明、OSの導入やセットアップなどといった準備、そしてLinuxに初めて触れる人に向けてLinuxの基礎やシェルの操作などを解説しています。また、準備が整ったら実際に電子部品をRaspberry Pi Zero / Zero Wで制御する方法も解説しました。

KindleAmazon
Raspberry Pi クックブック 第2版 (Make:PROJECTS)
Raspberry Pi クックブック 第2版 (Make:PROJECTS)

本書は、全世界で多くのユーザーの支持を集めているマイコンボード「Raspberry Pi」を使いこなすためのレシピ集です。ハードウェアの基本、オペレーティングシステムの使い方、ネットワーク接続、Pythonプログラミングの基本を紹介した上デ、実際の作品製作に必要になる、高度なPythonプログラミング、GPIO(汎用入出力)、モーター、センサー、ディスプレイなどの使い方へと解説を進めていきます。

Amazon

Amazonでお得に購入するなら、Amazonギフト券がオススメ!

コンビニ・ATM・ネットバンキングで¥5,000以上チャージすると、プライム会員は最大2.5%ポイント、通常会員は最大2%ポイントがもらえます!
Amazonギフト券

あなたにおすすめ