[ Main Page ]

エレクトレットコンデンサマイクで作る睡眠センサ

睡眠センサの概要

製作動機

この睡眠センサは、呼吸の時の鼻の空気の流れを計測する装置です。時間的な空気の流れを計測・記録することで、睡眠時無呼吸などの病気の発見や、睡眠の質の簡易的な評価に役立ちます。呼吸の波は1Hz以下なので、その計測のためには、入手性が比較的悪く高価な圧電フィルムや、歪みゲージによる圧力センサ等が必要となりますが、その代わりに、安価で入手容易なエレクトレットコンデンサマイクを低周波の圧力センサとして利用することで、誰でも手軽に鼻の空気の流れを計測することができるようになります。また、このシステムでは、XBeeによる無線モジュールでデータを送信することで、可搬性に優れた計測が可能となりました。
センサの仕様を表1に、全体像を図1に示します。

表1 センサの仕様

電源 1.5V乾電池 4本
稼働時間 2日(50時間)前後
圧力 ±50Pa前後
センサ応答周波数 3Hz前後
データ出力 無線でリアルタイム
サンプリング 20Hz前後

図1 計測システム例

センサと回路

鼻の空気の流れを感知するチューブは、鼻カニューラとしてインターネット通販などで、一般に入手可能です。チューブは、センサボックスの接合部を通して、エレクトレットコンデンサマイクと接続しました。
エレクトレットコンデンサマイクは、WM-61A相当とされているXCM6035-2022-354Rを使用しました。
左右のクロストークを抑えるため、エレクトレットコンデンサマイクからの信号のプリアンプ段は、カレントミラーを使用したトランスインピーダンスアンプとし、マイクからの高周波の信号の抑制及び消費電力の抑制を目的として、オペアンプのGB積は500kHz以下で、回路の簡素化を目的として、オフセットの調整が不要になるよう、入力オフセット電圧の低い高精度品種を選定しました。
本制作例では、マイクプリアンプ段ではLT1078を、XBeeのADCプリアンプ段には入出力Rail-to-RailのMAX492を使用しましたが、上記条件を考慮すれば、他の品種も使用可能でしょう。
XBee Series 2のADCの入力は0Vから1.2Vまでなので、定電流でダイオードを駆動し生成した約0.6Vを中点電圧として、ADCプリアンプ段で電圧を変換し、XBeeのADCに入力しました。 作例を図2に示します。

図2 制作した睡眠センサ

ワイヤレスデータ送信モジュール

電源は単三乾電池直列4本で、表1の仕様の2日(50時間弱)程度の稼働を可能にするには、無線モジュールの消費電力を考慮する必要があります。Panasonicのページに、乾電池の消費電流対稼働時間のグラフが掲載されており、単三乾電池の場合、グラフから読み取ると、40mA以下のモジュールを使う必要があります(図3)。なお、降圧にスイッチングレギュレータを使用すると、効率が高くなるので、もう少し条件は緩くなります。無線データ送信モジュールをいくつか調べてみたところ、表2の通り、WiFiを使用したモジュールはどれも消費電力が40mAの倍以上あり、今回の使用には適しませんでした。Bluetooth LEは消費電力が少なく、今回の使用には適しているのですが、Windows 8以下では対応しておらず、Windows 10でも安定しない場合があるため、今回は、Processing (Java)用のAPIライブラリのあるXBee S2を使用することとしました。XBeeは、一旦Coordinator及びPAN IDを設定すると、その後は電源を入れるだけで自動的にネットワーク探索・接続するので、その後の使用が非常に容易です。

図3 電池稼働時間

表2 無線モジュールの消費電力

モジュール 規格 消費電流 備考
XBee S2 ZigBee 送信 33mA 受信 28mA Java用SDKあり
TWE-Lite (TWE-001L) IEEE802.15.4 送信 17mA 受信 15mA Java用SDKが未整備
XBee S6 (WiFi) WiFi 送信 309mA 受信 100mA ×
ESP8266 (ESP-WROOM-02) WiFi 平均 80mA ×
ESP32 (ESP-WROOM-32) WiFi + Bluetooth LE WiFi送信 160-260mA ×
nRF51822 Bluetooth LE 送信時 16mA 要Windows 8.1以降
RN4020 Bluetooth LE 送信時 16mA 同上

センサの増幅回路の検討

オペアンプによるエレクトレットコンデンサマイクの一般的な増幅回路

エレクトレットコンデンサマイクの増幅回路としては、ポータブルでの使用が多いため、両電源よりは、乾電池等による単電源での回路で使われることが多く、その中でオペアンプを使用した回路としては、(1)反転増幅回路(図4)(2)非反転増幅回路(図5)が広く使われているようです。
これらの回路の問題点として、エレクトレットコンデンサマイクが電源に数kΩの負荷抵抗を通して直接つながっていることと、中点が抵抗2本とコンデンサでバイアスされていることから、この回路のまま単一の電源で複数のチャンネルを稼働させた場合、クロストークが問題になることが多い点が挙げられます。もう一つの問題点として、これらの回路では100dBSPL程度以上の音圧では電圧が飽和してしまい、正常に測れなくなってしまうという点があります。本センサでは、複数の気圧の差を検出する必要があるため、できる限りクロストークの低い回路構成とする必要があります。加えて、高い圧力まで計測できる回路が必要です。

図4 反転増幅回路の例

図5 非反転増幅回路の例

レギュレータを使用したクロストークの削減

これらの問題点を解決する方法として一つ考えられるのは、チャンネル毎に定電圧回路を入れてクロストークを減らす方法です。試しに3.3VレギュレータのNJM2863で両チャンネルに電圧を供給する回路としたところ、クロストークは減少しました。但し、電池駆動の場合、定電圧回路にシリーズレギュレータを使用した場合、消費電力が問題になることがあると考えられます。また、もう一つの問題点である高音圧時の計測では、高音圧印加後や静止時の出力電圧がふらついて安定しにくいという問題が生じました。原因としては、電源電圧の設計値が2V程度の低い電圧になっているために、コンデンサマイクからの信号が大信号時に飽和しバイアス電圧が変動してしまうことが挙げられます。この大信号時の問題を解決するために、コンデンサマイクの端子を切断してソースとグランドを切り離し、本来のソース接地回路からドレイン接地回路(ソースフォロワ)に変更して使用する方法が、一部の国内及び海外のオーディオ自作家から発表されていますが、この方法は1mm以下の精度のかなり難しい工作を必要とするため、これ以外の方法をとることとしました。

定電流負荷によるエレクトレットコンデンサマイクのバイアス

負荷抵抗を定電流負荷に置き換えることで、バイアス電圧となる動作点をコントロールし、より高い電圧でエレクトレットコンデンサマイクをバイアスできるようになります。また、出力インピーダンスは上がりますが、増幅率は上がるという利点があります。このバイアス方法の場合、オペアンプによるI/V変換を使用するか(図6)、非反転増幅回路で増幅する方法(図7)が挙げられます。定電流の定数については、エレクトレットコンデンサマイクに使用されているFETが明示されていない場合は(WM-61Aは2SK3372(最大Idss: 460μA)を使用しているという未確定情報あり)、エレクトレットコンデンサマイクのデータシートに示されている最大消費電流(0.5mA程度が多い)を基に決める必要がある他、動作点によって出力が電源電圧かグランドに張り付いてしまうので、手動またはサーボ等のフィードバックによる電流量の調整が必要となります。
サーボ付きI/V変換は、LT1677のデータシートの回路例に掲載されており、概要は図8のような回路です。非反転増幅回路の場合は、図9のように、サーボ回路から負荷抵抗を通してエレクトレットコンデンサマイクに供給するとよいでしょう。今回は、データシートにて実績のあるI/V変換の回路を採用しました。

図6 定電流によるバイアス及びオペアンプによるIV変換

図7 定電流によるバイアス及び非反転増幅回路

図8 サーボ付きIV変換

図9 サーボ付き非反転増幅回路

回路定数と部品の検討

電源電圧

乾電池2本(3V)ですと、無線モジュールに3.3V電源を供給するためのDC-DCコンバータが昇圧になり、効率が低いか十分な電流が得にくい品種が多くなってしまうことや、単電源またはrail-to-railオペアンプによる回路の設計の容易さ、電池ケースの種類から、乾電池4本による回路としました。

I/V抵抗

WM-61A相当と言われているXCM6035-2022-354Rの感度は-35dBVで、1Pa (94dB SPL)時の電圧は、10^(-35/20)=17.8mVrms、規定の抵抗が2.2kΩなので、電流は17.8mV/2.2kΩ=8.1μArms/Paとなります。マイク本体の最大音圧は規定されていませんが、チューブ内圧力計測では音圧としては比較的高い圧力まで測定するので、128dBSPL (50Pa)として、この時のI/V変換後のpeak-to-peak電圧値が1.5V乾電池4本分の6Vに収まるようにするには、I/V抵抗は6V/(50*8.1μ*2*sqrt(2)Ap-p)=5.2kΩで、余裕を持って少し小さめの値として、E系列から4.7kΩを選定しました。

LPF及びHPF

呼吸の回数は一分間に10回から20回程度と幅がありますが、この周波数より少し下の範囲を中心として計測できる範囲を決めることになります。この範囲は実際に何種類かを試して良い値を探して決めました。最終的に、トランスインピーダンスアンプのLPFは3.4Hz (4.7kΩ、10μF)とし、DCサーボ(HPF)は0.07Hz (2.2MΩ、1μF)としました。

基準電圧

基準電圧としては、シャントレギュレータのTL431が比較的有名で、今回はすぐに入手できたことからこれを採用しましたが、省電力という面からは他の品種を考慮することがあります。TL431はデータシート上、最大値で1mA以上の電流を流す必要があります。電圧降下による1.5V乾電池4本直列電圧の最悪値を4Vとして、4V-2.5V=1.5Vで1mA以上流れるためには1.5kΩ以下となり、少し小さめの1kΩとしましたが、消費電力の面からはあまり良くありません。乾電池駆動で稼働時間を少しでも延ばすためには、省電力のNJM2825 (最小電流 0.7?A)やLT1389 (最小電流0.7?A)の使用を考慮しても良いでしょう。但し、出力電流が限られてくるので、負荷抵抗を決定する時に、オペアンプの入力バイアス電流の上限には注意が必要となります。もっとも、入力バイアス電流が1?A以上のオペアンプ品種は比較的少数なので、選定に困ることは少ないでしょう。

XBeeのADCの中点電圧

XBee Series 1ではVref (ADC用のリファレンス電圧)を設定できましたが、Series 2以降では最大入力電圧が1.2V固定となっています。型番にProのついているProgrammable moduleでは、無線SoCとは別に搭載されているHCS08のADC用にVrefを設定できますが、ProではないモジュールではVrefを設定できません。最大1.2Vの入力において、中点(0.6V)を設定するためには、ダイオードのVF(順方向降下電圧)が0.6Vに近い電圧であることから、 FETか定電流ダイオードでダイオードを定電流駆動させる方法が考えられ、回路の簡易さから今回はこの方法を採用しました。定電流用のFETを、比較的入手容易な2SK117(GR)とした場合、最大で6mA近く流れるので、消費電力の割に絶対的な精度や温度特性が良くないという欠点があります。消費電力が問題になる場合は、Idssの低い品種を選ぶ方が良いでしょう。また、温度特性や電圧精度が必要な時は、出力電流に注意し、TL431の出力を分圧して使うと良いでしょう。

電池残量計測用の抵抗

電圧精度は要求しないので、120kΩと12kΩで分圧してXBeeのADCに直接入力する方法としました。消費電流は約45μAで、無線モジュールに比べればずっと少なく、電池稼働時間上問題になることはありませんが、XBeeのADCの入力インピーダンスは10kΩとなっており、電池電圧等の直流に近い値以外を読む場合は、誤差が問題になるので注意が必要です。

オペアンプ

エレクトレットコンデンサマイク増幅用のオペアンプの条件
乾電池4本の場合、最大1.6V×4=6.4Vとし、余裕を持って最大7Vとしました。パッケージは扱いやすいPDIP (Plastic Dual In-Line Package)とします。
抵抗の数はできる限り少なく、半固定抵抗は使わない方法で考えてみます。I/V抵抗が4.7kΩなので、誤差が1mV以下とするとオペアンプの入力バイアス電流は0.2μA以下が条件となります。入力オフセット電流も帰還抵抗で同程度に誤差に影響するため、このパラメータも同じ条件とします。この回路では増幅率が低く、入力オフセット電圧はそれほど誤差には影響しませんが、ADCの範囲を1.2Vp-p、12bit ADCで±1bit以内の誤差に抑える場合、1.2V/2^12・2=0.6mV以内となりますが、一般的なオペアンプでは1mV程度なので、少し緩めの条件として1mVを条件とします。
扱う周波数は10Hz以下なので、広い帯域は必要なく、GB積は数百kHz以下で十分です。広い帯域でスルーレートの大きなアンプは消費電力が大きくなります。カレントミラーにつながる負荷抵抗をバイアスするため、エレクトレットコンデンサマイクの消費電流である0.5mAの数倍程度は十分に電流を引き込めるよう、sink電流は1mA以上を条件とします。
まとめると、(1) 2チャンネル、8pin-PDIP、最大電圧が7V以上、単電源対応、レールツーレールもしくは電源電圧以下1V程度までは出力可能、(2) 消費電流がなるべく少ない、(3) 入力バイアス電流及び入力オフセット電流が200nA以下必須、(4) 入力オフセット電圧は1mV以下、(5) GBWは数百kHz以下で良い、(6) 出力(sink)電流が1mA以上ある条件で、オペアンプを探します。
半導体メーカの提供するオペアンプ検索システムのサイトで上記条件を入れてみると、図10のような結果が出てきます。今回は、リストの中にあるLT1078が試作用部品ストックにあったので、これを採用しましたが、それ以外の図にある品種でもデータシートを精査して上記条件に合致すれば、動作すると思われます。
オペアンプの吸い込み電流
帯域が広くスルーレートの大きなオペアンプは消費電力が大きく、今回の用途には適しませんが、上記で挙げた品種以外の手持ちのオペアンプが正常に動くか試してみました。その結果、NJM2732、LMC6482では正常に計測できましたが、NJU7096では出力が電源電圧またはグランドにはりついてしまい、正常に計測出来ませんでした。それぞれのオペアンプの吸い込み電流の最大値をデータシートを確認すると、NJM2732は2mA、LMC6482では11mAで、コンデンサマイクの最大電流(Idss)である0.5mAより大きく、十分な性能を持つことが分かりますが、NJU7096では最大でも200?A程度でしかなく、吸い込み電流は不十分であることがわかります。メーカ提供の選定表ですべてのパラメータを比較することは難しいので、おおまかな選定後には、それぞれのデータシートを確認し、実際の回路で確認することが重要です。
オペアンプのノイズ
今回の回路では、0.07Hzから3.4Hzという比較的狭い帯域の信号を処理するため、ノイズが問題になることは少ないと思われますが、低周波のため、1/fノイズがどの程度になるか、LT1078のデータシートからノイズを見積もってみます。入力換算雑音電流密度は0.06pA/sqrt(Hz)@10Hzで、0.07Hzから3.4Hzでの1/f雑音は0.06pA・sqrt(10・ln(3.4/0.07))=0.24pArms、帰還抵抗が4.7kΩの時1.1nVrmsで大きな問題にはならないと予測されます。入力換算雑音電圧密度は1/fコーナが0.7Hz、29nV/sqrt(Hz)@10Hzで、データシートのグラフからは1/f雑音が支配的ではない領域で、帯域ノイズは30・sqrt(3.4-0.07)=55nVrmsで、大きな問題はなさそうです。
レベルシフト用のオペアンプ
XBeeのADCにつなぐ基準2.5Vから0.6Vへのレベルシフトを行うプリアンプのオペアンプは、上記より条件はやや緩いですが、出力電圧が0Vから1.2Vと低いので、レールツーレールの条件を必須とした以外は同等の条件とし、今回はサンプルを持っていたMAX492を採用しました。

図10 オペアンプ検索結果

図11に全体の回路図を示します。

図11 全体の回路図

圧力の校正

微圧センサ

エレクトレットコンデンサマイクの周波数応答の表では、一般的に下限が50Hz程度までしか掲載されておらず不明なので(図12)、50Hzより下の周波数の応答を測ってみます。本センサで扱う気圧は数百Paという微圧のため、一般的な気圧計で測ることは困難です。今回の測定では、長野計器 小型デジタル微差圧計(GC30) GC30-101-C9N380 (±100Pa) (図13; *長野計器 製品情報より)を使用して、本回路でエレクトレットコンデンサマイクがどの程度の圧力を感知可能か測定してみました。
測定に際して、正弦波で微圧を生成する校正用の機器は、探した範囲では見つかりませんでした。そこで、耳挿入型のイヤホンを製作する要領で、ノートパソコンやポータブル機器等に使われる超小型のダイナミックスピーカーにPISCO LC-0425-M5 / 日東工器 MC-05PMカプラをつなげて使用することにしました(図14)。
デジタル微差圧計(GC30)は、サンプリングレートが20Hzで、時定数の設定でアンチエイリアシングフィルタを入れない設定の場合は、DC近辺から10Hzまでは殆ど平坦な特性でした(図15)。
エレクトレットコンデンサマイクの測定では、トランスインピーダンスアンプの10μFのコンデンサを除いて、LPFを省いた場合、DCサーボの0.07Hzより高い周波数である10Hz付近をカットオフ周波数とする6dB/octのHPFの応答となり、トランスインピーダンスアンプで3.4Hz のLPFを設定した場合、約5HzのBPFの応答となりました(図16)。なお、周波数応答から、今回使用した微圧発生器のマイクロスピーカの共振周波数は2kHz付近と考えられます。エレクトレットコンデンサマイクの振動膜かその周囲が密閉されていないために、DCまでの応答がないと考えられました。低周波騒音の簡易的な計測はできますが、インフラサウンドの計測までは難しい周波数応答です。

図12 WM-61Aの周波数応答

図13 長野計器 小型デジタル微差圧計(GC30)

図14 微圧発生器

図15 微圧発生器の周波数応答

図16 エレクトレットコンデンサマイクの周波数応答

歪み率

今回の用途である気圧の簡易的な計測には問題ありませんが、大信号の時は、Id- Vgsの二乗特性の通り、二次歪みがかなり見られます。この問題を解決する方法としては、前掲の、エレクトレットコンデンサマイクを改造してドレイン接地回路にする方法以外に、カスコードのような回路を使って二乗特性を打ち消す方法が海外で提案されています(図 17)。定電流に使用するJFETをうまく選定すれば低い歪みで大信号まで対応することができますが、この回路のゲインやオフセット電圧はVpoやIdssに強く依存するため、JFETの選定及び選別が必須となります。

図17 コネクタ

製作及び記録側プログラム

製作

ケースはタカチ電機工業 LM-140Cを使用しました。回路はユニバーサル基板を使用し、1.5V電池4本から3.3Vへの電圧コンバータには秋月電子通商のLXDC55使用DCDCコンバータキット(3.3V)を使用しました。 普通のストローを8mmに切ってエレクトレットコンデンサマイクをはめ込み、内径3mm外径6mmのシリコンチューブ9mmで、ミニフィッティング隔壁コネクター(VFB226/VFBL10)と接続し、鼻につなげるカニューラは、左右鼻の部分で一旦切ってから中を接着剤で充填してから再度繋げ、左右を分離しました(図 18)。 XBee親機側には、Processingを用いた表示及び記録プログラムを作成し、ファイルに結果を逐次記録できるようにしました。Processing用のプログラムは、文献に記載のホームページより入手可能です。

図18 コネクタ

使い方

センサ子機側は、電源をオンにするだけで、親機を検索し始め、自動的に接続します。親機側でProcessingによる計測プログラムを開始し、子機を登録して記録を開始できます。気流の計測データは、一定期間画面に表示するとともに、テキストファイルにも保存されるので、計測後に結果を処理することができます(図19)。

図19 Processingによる計測インターフェース

特許文献

PCT/JP2019/005287(WO2019167643) 鼻腔通気度検査装置 (pdf)

参考・引用文献

(1) A-Dコンバータ活用成功のかぎ、松井 邦彦
(2) OPアンプ活用 成功のかぎ、川田 章弘
(3) *アルカリ・マンガン乾電池の電池容量はどれ位? PZ29060 単三形アルカリ乾電池Panasonic
(4) Digi XBee S2C 802.15.4 RF Modules Datasheet、Digi International Inc.
(5) Digi XBee Wi-Fi (S6B) Datasheet、Digi International Inc.
(6) ESP8266EX Datasheet、Espressif Systems
(7) ESP32 Datasheet、Espressif Systems
(8) nRF51822 Product Specification v3.1、Nordic Semiconductor ASA.
(9) RN4020 Datasheet、Microchip Technology Inc.
(10) TWE-Lite (TWE-001L) 仕様書 Ver2.1 (MAR-2016) 、モノワイヤレス株式会社
(11) LT1677 Datasheet、Linear Technology Corporation (Analog Devices)
(12) TIDU765 TI Designs - Single-Supply, Electret Microphone Pre-Amplifier Reference Design、John Caldwell
(13) *長野計器 製品情報 GC30 http://products.naganokeiki.co.jp/product/2/19/25/325.html
(14) Using the Panasonic WM61A as a Measurement Microphone http://www.johncon.com/john/wm61a/
(15) Processing用プログラムリスト http://freeverb3vst.osdn.jp/sodan/tools/xbee/xbee-api.html
    <polak>  mauke: so how does that "translate" into eng
   <merlyn>  "eng"?
    <mauke>  I spe eng goo
  <rindolf>  mauke: I spe eng wel
  <rindolf>  I spe goo eng
      <sts>  just a short question. besides personal preference is there
             any difference if you use if(! or unless(?
  <rindolf>  sts: no.
  <rindolf>  sts: they do the same thing.
    <Botje>  sts: pfft. Real Men(tm) use unless(!...)
  <rindolf>  Botje: heh.
      <sts>  lol unless(! makes sense. thanks Botje, i'll rather use this
             one. =D
  <LeoNerd>  For me it's a readability thing - I express what seems more
             likely
  <rindolf>  Botje: File::HomeDir used to have a triple or quadruple
             negative in one of its test files.
    <Botje>  unless(! $str !~ /(?!foo)/)
  <rindolf>  Botje: heh
   <merlyn>  whoa
   <merlyn>  unless (!) makes no sense to me at all
    <Botje>  of course not.
      <sts>  Botje: wow!
    <Botje>  it's still cool to confuse people with :]
  <LeoNerd>  Heh.. Should just use !!! in there anywa y:)
   <merlyn>  it's 7 characters too many
     <xand>  some people don't understand double negatives
   <merlyn>  I don't want no complaints!
    <Botje>  xand: you mean don't not understnad?
  <LeoNerd>  We don't know nobody who don't want no double-negatives
      <sts>  Botje: what does (?!foo) do?
 <nanonyme>  lol
     <xand>  Botje: don't not misunderstand
    <mauke>  Botje: that always executes the block
   <merlyn>  there's an argument that can be successfully made that "I
             don't want no complaints" doesn't necessarily work logically
    <Botje>  xand: oh, I don't not think I didn't not misunderstand you.
    <Botje>  mauke: I know. it just looks cool.
    <mauke>  and you want !($str !~ /.../)
     <xand>  don't you?#
   <merlyn>  so it might actually mean what people think they're meaning

    -- N-uple negative on Freenode's #perl
    -- #perl, Freenode

"Okay, I think that I can now return to my country and my village. By the way,
how many forbidden books do you have?"

"Oh,", one of them said to me, " their number grows up geometrically. When I
checked two weeks ago, their number was 2,148,763. A week ago there were
4,278,109 forbidden writings. Now there must be about 8,600,000."

"You are wrong.", I said to him.

"I beg your pardon?"

"There are now exactly 8,517,559 or 8,517,560 forbidden books."

"Why is it so important?"

"Why, it means that meanwhile you have 82,440 or 82,441 extra books you can
read at bedtime if you can't fall asleep!"

"The Enemy and how I Helped to Fight It"
Shlomi Fish

    -- Shlomi Fish
    -- Shlomi Fish's Aphorisms Collection ( http://www.shlomifish.org/humour.html )


Powered by UNIX fortune(6)
[ Main Page ]