センサー・アクチュエータ

マイク / スピーカー

音の入出力デバイス。

概要

マイクロフォン(マイク)は音波(空気の疎密波)を電気信号に変換する入力デバイスです。スピーカー(ラウドスピーカー)はその逆で、電気信号を音波に変換する出力デバイス(アクチュエータ)です。

組み込みシステムで使われる主なマイクの種類は以下の通りです。

  • アナログECMマイク(Electret Condenser Microphone): コンデンサーマイクの一種で、FETを内蔵しアナログ電圧を出力。安価で広く普及。ADCで読み取る。
  • デジタルPDMマイク(Pulse Density Modulation): MEMSマイクの一般的な出力形式。CLK信号に同期した1bitのパルス列でデータを出力(例:SPH0645、MP34DT05)。マイコンのPDMペリフェラルやI2Sで受信。
  • I2Sデジタルマイク: PDMよりも直接的なPCM(パルス符号変調)で数値データを出力。I2Sバスで接続。品質が高い。

スピーカーの駆動にはアンプ回路が必要です。組み込みでは以下が使われます。

  • DAC + アナログアンプ(Class D等): PWMやDACで生成したアナログ信号を増幅。
  • I2Sデジタルアンプ(Class Dアンプ内蔵IC): MAX98357A、PAM8302等がI2Sデジタル入力を直接受け取り、スピーカーを駆動。
  • PWMブザー: 圧電ブザーにPWM信号を直接印加するシンプルな方式。

歴史・背景

マイクロフォンの発明は1876年頃、アレクサンダー・グラハム・ベルとエミール・ベルリナーに帰せられます(電話の発明と並行して発展)。初期の炭素粒マイク(カーボンマイク)は、電話に使われましたが品質は低いものでした。

コンデンサーマイクは1916年にE.C.Wenteによって発明され、1930〜40年代にスタジオ録音の標準となりました。エレクトレットコンデンサーマイク(ECM)は1964年にベル研究所で開発され、恒久的な電荷を保持するエレクトレット材料を使うことでバイアス電源が不要になり、小型・低コスト化が実現しました。

MEMSマイクは2000年代初頭から量産が始まり、2000年代後半にはスマートフォンへの採用が広がりました。シリコンウェハ上に音響キャビティとダイアフラムを作り込み、回路チップと一体化したMEMSマイクは超小型・低消費電力を実現し、現代のスマートフォン・スマートスピーカー・補聴器の標準デバイスとなっています。

スマートスピーカー(Amazon Echo: 2014年、Google Home: 2016年)の登場により、音声認識インターフェースが一般化し、組み込み機器へのマイク搭載が急増しました。

技術仕様

マイクロフォンの比較

種類原理出力形式感度周波数応答価格代表例
ECMアナログエレクトレット静電容量アナログ電圧20Hz〜20kHz安価WM-61A
MEMSアナログシリコンMEMS静電容量アナログ電圧20Hz〜20kHzADMP401
MEMSデジタル(PDM)MEMS+ΔΣ変調1-bitパルス列20Hz〜20kHzSPH0645, MP34DT05
I2SデジタルMEMS+ADC内蔵I2S PCMデータ20Hz〜20kHz中〜高ICS-43434
コンデンサーマイク外部電荷バイアスアナログ非常に高い20Hz〜40kHz高価スタジオ用

スピーカー・ブザーの比較

種類原理用途出力I/F
ダイナミックスピーカーボイスコイル電磁力音楽・音声再生0.1〜数Wアナログ(アンプ必要)
  • 圧電ブザー(受動型): 圧電素子に交流印加 | 単音警報・ビープ | 数十〜数百mW | PWM直接駆動可 |
  • 圧電ブザー(能動型): 発振回路内蔵 | 単音警報 | DC直結でON/OFF | GPIO直接 | | I2Sデジタルアンプ | Class Dアンプ | 音楽・音声 | 3〜5W | I2S(デジタル) |

主要スペック(MEMSマイク SPH0645の例)

パラメータ
感度-26 dBFS(±1dB)
クロック周波数1.024〜3.072 MHz
SNR65 dBA
THD(全高調波歪率)0.031%(104 dBSPL時)
AOP(Acoustic Overload Point)120 dBSPL
周波数応答20Hz〜20kHz
インターフェースI2S(PDM出力)
動作電圧1.62〜3.6V
電流消費600μA(動作時)/ 9μA(スリープ)

動作原理

ECMマイクの動作原理

エレクトレットコンデンサーマイクは、薄い金属蒸着膜(バックプレート)と振動板(ダイアフラム)の間の静電容量変化を電圧変化として取り出す構造です。

ECMマイクの等価回路:
                Vbias(1.5〜10V)
                    |
                   [R_bias](2.2〜10kΩ)
                    |
   音波 → ダイアフラム変位 → 静電容量変化 C(t)
   C(t) = ε₀×A/(d ± Δd(t))
   
   電圧変化: ΔV = Q/C(t)(Q=一定電荷)
               ≈ V_bias × Δd/d(微小変位の近似)
   
   内蔵FETでインピーダンス変換して出力

MEMSマイクの構造

MEMSマイクの断面(模式図):
  音響孔(メッシュ)
  ┌─────────────┐
  │   ダイアフラム    │ ← シリコン薄膜(厚さ数μm)
  │                 │
  │   バックキャビティ │ ← エッチングで形成した空気室
  │                 │
  │   バックプレート  │ ← 参照電極(固定)
  └─────────────┘
  IC(ASIC)チップと積層またはワイヤーボンド接続

ΔC = ε₀ × A × Δd / d²
ASIC内のΔΣADCでC変化を量子化 → PDMまたはPCM出力

PDM(Pulse Density Modulation)とI2S

PDM信号の概念:
音声信号(アナログ)をΔΣ変調した1-bitパルス列
  ・パルス密度が高い = 振幅が大きい
  ・パルス密度が低い = 振幅が小さい

例(64倍オーバーサンプリング):
目標サンプリングレート: 48kHz
PDMクロック: 48kHz × 64 = 3.072 MHz
1ビット@3.072MHz → デシメーションフィルタ → 16bit PCM @ 48kHz

I2Sプロトコル(Inter-IC Sound):
・3本のライン: BCLK(ビットクロック), LRCLK(チャンネル選択), DATA
・PCM(16/24/32bit)データをシリアル転送
・48kHz/16bit/ステレオ の帯域: 48000 × 16 × 2 = 1.536Mbps

Class Dアンプの原理

PWMベースClass Dアンプ:
アナログ入力 → PWMコンパレータ → ハーフブリッジスイッチング → LCフィルタ → スピーカー

効率計算:
理想的なClass Dの電力効率: ≈ 90〜95%
(Class A: 25%, Class AB: 50〜70% と比較して高効率)

I2S入力Class Dアンプ(MAX98357A):
I2S PCMデータ → 内蔵DAC → PWMコンパレータ → MOSFET H-Bridge → スピーカー
出力: 3.2W(5V, 4Ω)

用途・ユースケース

音声認識・スマートスピーカー

Amazon Alexa、Google Assistant等の音声インターフェースは、PDMマイク(複数個のマイクアレイ)でキーワード検知(Wake Word Detection)を常時低消費電力で実施します。ESP32等にも音声認識ライブラリ(ESP-SR、TensorFlow Lite Micro)があります。

ドアベル・インターホン

玄関のマイク・スピーカーをWi-Fi経由でスマートフォンと接続し、リアルタイム双方向通話を実現するスマートドアベル(Ring、Arlo等)。

騒音計・音響測定

Raspberry Pi+デジタルマイクで環境騒音を連続計測するIoTセンサー。工場・道路・騒音規制区域のモニタリングに使われます。

産業用異常検知

モーター・ポンプ・工作機械の動作音や振動音を常時計測し、周波数特性の変化から異常(軸受け劣化、不均衡等)を早期検知する予知保全システム。

小型音声ガイドシステム

博物館・観光地の音声ガイド端末や、商業施設のアナウンスシステムに小型スピーカーと音声データの組み合わせを使います。DACまたは音声合成ICで音声を再生します。

聴覚障害者支援・補聴器

超小型MEMSマイク+DSP(Digital Signal Processor)+レシーバー(骨伝導or小型スピーカー)を組み合わせた補聴器。デジタル信号処理でノイズ低減・方向強調を行います。

実装・開発のポイント

ESP32でPDMマイク(I2S)読み取り

#include "driver/i2s.h"
#include <Arduino.h>

// I2S + PDMマイク(INMP441等)の設定
#define I2S_WS   15  // LRCLK
#define I2S_SCK  14  // BCLK
#define I2S_SD   32  // DATA

void setup_i2s_microphone() {
    i2s_config_t i2s_config = {
        .mode = (i2s_mode_t)(I2S_MODE_MASTER | I2S_MODE_RX),
        .sample_rate = 44100,
        .bits_per_sample = I2S_BITS_PER_SAMPLE_32BIT,
        .channel_format = I2S_CHANNEL_FMT_ONLY_LEFT,  // モノラル
        .communication_format = I2S_COMM_FORMAT_STAND_I2S,
        .intr_alloc_flags = ESP_INTR_FLAG_LEVEL1,
        .dma_buf_count = 8,
        .dma_buf_len = 64,
        .use_apll = false,
    };
    
    i2s_pin_config_t pin_config = {
        .bck_io_num   = I2S_SCK,
        .ws_io_num    = I2S_WS,
        .data_out_num = I2S_PIN_NO_CHANGE,
        .data_in_num  = I2S_SD
    };
    
    i2s_driver_install(I2S_NUM_0, &i2s_config, 0, NULL);
    i2s_set_pin(I2S_NUM_0, &pin_config);
}

void read_audio(int32_t *samples, size_t count) {
    size_t bytes_read;
    i2s_read(I2S_NUM_0, samples, count * sizeof(int32_t),
             &bytes_read, portMAX_DELAY);
    // 32bit中24bitが有効データ(右寄せ)なので18bitシフト
    for (size_t i = 0; i < count; i++) {
        samples[i] >>= 14;
    }
}

Raspberry Piでの音声録音・再生(Python)

import sounddevice as sd
import soundfile as sf
import numpy as np

# サンプリング設定
SAMPLE_RATE = 44100
CHANNELS = 1
DURATION = 5  # 秒

# 録音
print("録音中...")
recording = sd.rec(int(DURATION * SAMPLE_RATE),
                   samplerate=SAMPLE_RATE,
                   channels=CHANNELS,
                   dtype='int16')
sd.wait()  # 録音完了まで待機
print("録音完了")

# WAVファイル保存
sf.write('output.wav', recording, SAMPLE_RATE)

# 再生
data, fs = sf.read('output.wav')
sd.play(data, fs)
sd.wait()

簡易FFTによる周波数解析

import numpy as np
from scipy.fft import fft, fftfreq
import sounddevice as sd

SAMPLE_RATE = 44100
BUFFER_SIZE = 4096

def analyze_frequency():
    """マイクから取得した音声の周波数スペクトルを表示"""
    audio = sd.rec(BUFFER_SIZE, samplerate=SAMPLE_RATE,
                   channels=1, dtype='float32')
    sd.wait()
    audio = audio.flatten()
    
    # FFT計算
    fft_data = fft(audio)
    freqs = fftfreq(BUFFER_SIZE, 1/SAMPLE_RATE)
    magnitude = np.abs(fft_data[:BUFFER_SIZE//2])
    freqs_pos = freqs[:BUFFER_SIZE//2]
    
    # 最大ピーク周波数
    peak_idx = np.argmax(magnitude)
    peak_freq = freqs_pos[peak_idx]
    print(f"主要周波数: {peak_freq:.1f} Hz")
    
    return freqs_pos, magnitude

圧電ブザーのPWM制御(メロディ再生)

// STM32でPWMブザーにメロディを再生
#include "stm32f4xx_hal.h"

extern TIM_HandleTypeDef htim4;  // ブザーPWM用タイマー

// 音符の周波数(Hz)
#define NOTE_C4   262
#define NOTE_D4   294
#define NOTE_E4   330
#define NOTE_F4   349
#define NOTE_G4   392
#define NOTE_A4   440
#define NOTE_B4   494
#define NOTE_C5   523

void buzz_tone(uint32_t freq_hz, uint32_t duration_ms) {
    if (freq_hz == 0) {
        HAL_TIM_PWM_Stop(&htim4, TIM_CHANNEL_1);
        HAL_Delay(duration_ms);
        return;
    }
    
    // タイマー周期設定(APB1クロックから周波数を計算)
    uint32_t prescaler = 84;  // 1MHz タイマークロック
    uint32_t period = 1000000 / freq_hz;
    htim4.Instance->PSC = prescaler - 1;
    htim4.Instance->ARR = period - 1;
    htim4.Instance->CCR1 = period / 2;  // 50% デューティ
    
    HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_1);
    HAL_Delay(duration_ms);
    HAL_TIM_PWM_Stop(&htim4, TIM_CHANNEL_1);
    HAL_Delay(50);  // 音符間の無音
}

// きらきら星を演奏
void play_twinkle(void) {
    int notes[] = {NOTE_C4, NOTE_C4, NOTE_G4, NOTE_G4, 
                   NOTE_A4, NOTE_A4, NOTE_G4, 0,
                   NOTE_F4, NOTE_F4, NOTE_E4, NOTE_E4,
                   NOTE_D4, NOTE_D4, NOTE_C4, 0};
    int durations[] = {400, 400, 400, 400, 400, 400, 800, 400,
                       400, 400, 400, 400, 400, 400, 800, 200};
    for (int i = 0; i < 16; i++) {
        buzz_tone(notes[i], durations[i]);
    }
}

他技術との比較

マイクロフォンの方式比較

比較項目ECMアナログMEMSアナログMEMSデジタル(PDM/I2S)
サイズ大きめ(円筒形)非常に小型非常に小型
コスト非常に安価
耐熱性リフロー不可(熱に弱い)リフロー対応リフロー対応
落下衝撃脆弱強い強い
ノイズ低い(デジタル)
インターフェースアナログ(ADC必要)アナログ(ADC必要)I2S/PDMデジタル
長距離配線ノイズに弱いノイズに弱い問題なし(デジタル)
用途低コスト・教育スマートフォン組み込みIoT・スマートスピーカー

スピーカー駆動方式の比較

比較項目PWMブザーアナログClass DアンプI2Sデジタルアンプ
音質単音のみ(ビープ・メロディ)良い非常に良い
実装難易度非常に簡単(GPIO直結)中程度容易(I2S接続)
消費電力低(90〜95%効率)低(90〜95%効率)
ノイズPWMスイッチングノイズ少ない非常に少ない
代表ICなし(MCU PWM直接)PAM8403, TPA2005MAX98357A, NS4168
用途警報・通知音音楽・音声(アナログ入力)音楽・音声(デジタル入力)

関連用語

参考リンク