コンデンサマイクによる簡易SASチェッカー
呼吸の検出方法
以前作成したハードマスク+気圧センサー方式では、少しでもずれて隙間ができると測定に失敗しました。
また圧力変化を検出するために吸排気口を小さめにしたので息がしずらく、就寝中に無意識にマスクを外してしまうことがありました。
そこで息が楽にできるオープンエアータイプのマスクにコンデンサマイクをつける方法を試してみました。
マイクに鼻や口から出た息が直接当たると、いびきをかかなくても風切り音(ウィンドノイズ)が発生するのでそれを呼吸の判定に使います。
コンデンサマイク出力はそのままマイコンに入力できないので、いつものように秋月電子通商で探してアンプ付きの[105757]高感度マイクアンプキットAE-MICAMPを購入しました。
増幅されたアナログ信号はマイコン内蔵のA/Dコンバーターでデジタルに変換します。
また圧力変化を検出するために吸排気口を小さめにしたので息がしずらく、就寝中に無意識にマスクを外してしまうことがありました。
そこで息が楽にできるオープンエアータイプのマスクにコンデンサマイクをつける方法を試してみました。
マイクに鼻や口から出た息が直接当たると、いびきをかかなくても風切り音(ウィンドノイズ)が発生するのでそれを呼吸の判定に使います。
コンデンサマイク出力はそのままマイコンに入力できないので、いつものように秋月電子通商で探してアンプ付きの[105757]高感度マイクアンプキットAE-MICAMPを購入しました。
増幅されたアナログ信号はマイコン内蔵のA/Dコンバーターでデジタルに変換します。
【マイクアンプキットAE-MICAMP】
【AE-MICAMPの回路】
【AE-MICAMPの回路】
テスト結果と使用感等
覚醒時テストでは問題なく動作しました。
オープンエアータイプにしたのでマスクを装着しても息はしやすいです。
ただしマイクを使うので静かな就寝環境でないと使えません。
またマスクずれなどによって息がマイクに当たらなくなると測定出来なくなります。
マスク方式のSASチェッカーは装着ずれの問題が置きやすく、今回息はしやすくてもマスク装着が煩わしいのであまり良い方法ではないと感じました。
このMIC方式と加速度センサー方式のSASチェッカーを同時に装着して就寝時測定を行なったところ、残念ながらMIC方式では感度不足であることが判明しました。
就寝時の勢いの弱い呼吸では風切り音が発生しにくいためと推測しています。
オープンエアータイプをやめて吸排気口にマイクを配置すれば感度を大幅アップできますが、暑苦しくてなって装着感が悪化します。
というわけで圧力センサー方式と同様に失敗作になってしまいましたが、PICマイコンのソフトを修正すれば枕元に置く、いびきのチェッカーにできそうです。
失敗作ではありますが、製作と平行して以下の記事を作っていたので添付します。
オープンエアータイプにしたのでマスクを装着しても息はしやすいです。
ただしマイクを使うので静かな就寝環境でないと使えません。
またマスクずれなどによって息がマイクに当たらなくなると測定出来なくなります。
マスク方式のSASチェッカーは装着ずれの問題が置きやすく、今回息はしやすくてもマスク装着が煩わしいのであまり良い方法ではないと感じました。
このMIC方式と加速度センサー方式のSASチェッカーを同時に装着して就寝時測定を行なったところ、残念ながらMIC方式では感度不足であることが判明しました。
就寝時の勢いの弱い呼吸では風切り音が発生しにくいためと推測しています。
オープンエアータイプをやめて吸排気口にマイクを配置すれば感度を大幅アップできますが、暑苦しくてなって装着感が悪化します。
というわけで圧力センサー方式と同様に失敗作になってしまいましたが、PICマイコンのソフトを修正すれば枕元に置く、いびきのチェッカーにできそうです。
失敗作ではありますが、製作と平行して以下の記事を作っていたので添付します。
【マイク方式簡易SASチェッカー】
回路
電池はコイン電池CR2032、PICマイコンは表面実装型の小型パッケージを選びました。
スイッチや液晶表示も無しにしてマスクに取付しやすいサイズにしました。
電池電圧3Vで呼吸測定中の電流は1.13mAでした。
CR2032の電池容量を200mAhとすると約170時間の駆動時間になります。
電源ON(電池挿入)で記録を開始し、測定終了後にUSB-Serialインターフェイスで記録データをPCへ転送します。
回路関連の資料を以下に添付します。
露光マスクで穴径は部品装着に適した穴径ではなく、自作する場合の穴あけガイド用に小径になっています。
回路図 APNEA_M_circuit.pdf
裏面マスク(ポジ) POS_APNEA_M-B_Cu.pdf
裏面マスク(ネガ) NEG_APNEA_M-B_Cu.pdf
表面部品配置図 APNEA_M-F_Silkscreen.pdf
裏面部品配置図 APNEA_M-B_Silkscreen.pdf
ドリルマップ APNEA_M-PTH-drl_map.pdf
部品表 APNEA_M_Parts.pdf
スイッチや液晶表示も無しにしてマスクに取付しやすいサイズにしました。
電池電圧3Vで呼吸測定中の電流は1.13mAでした。
CR2032の電池容量を200mAhとすると約170時間の駆動時間になります。
電源ON(電池挿入)で記録を開始し、測定終了後にUSB-Serialインターフェイスで記録データをPCへ転送します。
回路関連の資料を以下に添付します。
露光マスクで穴径は部品装着に適した穴径ではなく、自作する場合の穴あけガイド用に小径になっています。
回路図 APNEA_M_circuit.pdf
裏面マスク(ポジ) POS_APNEA_M-B_Cu.pdf
裏面マスク(ネガ) NEG_APNEA_M-B_Cu.pdf
表面部品配置図 APNEA_M-F_Silkscreen.pdf
裏面部品配置図 APNEA_M-B_Silkscreen.pdf
ドリルマップ APNEA_M-PTH-drl_map.pdf
部品表 APNEA_M_Parts.pdf
【APNEA_M回路】
MICキット基板は2.54mmピッチのピンヘッダを介してハンダ付けし、ピンヘッダの不要部分をカットしました。
マスクと基板ケース
ハードマスクと基板ケースは3Dプリンタで製作しました。
ハードマスクの顔に当たる曲線は側面に穴あけしたオープンエアータイプのマスクから自分の顔の3Dモデルを引き算して作成しました。
手順は
スマホで顔を多方向から撮影-->無料のフォトグラメトリソフトRealityCaptureまたはMeshroomで3Dモデル作成-->Meshmixerで細かい凹凸等を修正-->3Dプリンタ用スライサーでサイズ調整-->Fusion360に読み込んでマスクモデルとの論理演算
3Dプリント用データ
オープンエアーハードマスク APNEA_M_MASK.stl
基板ケース(上蓋)APNEA_MIC_BOX_T.stl
基板ケース(スペーサー)APNEA_MIC_BOX_B.stl
組立て手順は以下の通り。
・ハードマスクに基板ケース(スペーサー)を接着剤で貼り付けて2か所の穴をM3タップ加工
・10mm長のM3なべねじ2本でハードマスク、基板、基板ケース(上蓋)を固定
・マスクにゴムひも+長さ調整用のコードストッパーを取り付ける
・コネクタの挿入方向を示すラベルをTEPLAで作成して貼る
(・電池を外さずに電源OFFするには薄いプラ板の小片を電池押さえのバネ下に差し込む)
ハードマスクの顔に当たる曲線は側面に穴あけしたオープンエアータイプのマスクから自分の顔の3Dモデルを引き算して作成しました。
手順は
スマホで顔を多方向から撮影-->無料のフォトグラメトリソフトRealityCaptureまたはMeshroomで3Dモデル作成-->Meshmixerで細かい凹凸等を修正-->3Dプリンタ用スライサーでサイズ調整-->Fusion360に読み込んでマスクモデルとの論理演算
3Dプリント用データ
オープンエアーハードマスク APNEA_M_MASK.stl
基板ケース(上蓋)APNEA_MIC_BOX_T.stl
基板ケース(スペーサー)APNEA_MIC_BOX_B.stl
組立て手順は以下の通り。
・ハードマスクに基板ケース(スペーサー)を接着剤で貼り付けて2か所の穴をM3タップ加工
・10mm長のM3なべねじ2本でハードマスク、基板、基板ケース(上蓋)を固定
・マスクにゴムひも+長さ調整用のコードストッパーを取り付ける
・コネクタの挿入方向を示すラベルをTEPLAで作成して貼る
(・電池を外さずに電源OFFするには薄いプラ板の小片を電池押さえのバネ下に差し込む)
ソフトウェア
PIC16F1829用ソースコード(MPLAB X ide プロジェクトファイル)をZip圧縮したものと
コンパイル済みの書き込み用データを添付します。
APNEA_M.X.zip
APNEA_M.X.production.hex
(プログラム書き込みについては「PICマイコンと開発ツール」のページやWeb情報を参照)
コンデンサマイク出力はマイクアンプキット内のオペアンプで増幅されます。(オフセット=1/2*電源電圧)。
それを10msec毎のインタラプト処理(interrupt_manager.c)の中でA/Dコンバータで変換して取り込んでいます。
コンパイル済みの書き込み用データを添付します。
APNEA_M.X.zip
APNEA_M.X.production.hex
(プログラム書き込みについては「PICマイコンと開発ツール」のページやWeb情報を参照)
コンデンサマイク出力はマイクアンプキット内のオペアンプで増幅されます。(オフセット=1/2*電源電圧)。
それを10msec毎のインタラプト処理(interrupt_manager.c)の中でA/Dコンバータで変換して取り込んでいます。
測定方法と機能
電源を入れる(=電池を入れる)と電池電圧が2.5V未満で0%~3V以上で100%の電圧比例幅で、1秒周期*3回、LEDが点滅します。
その後1秒まってから測定を開始します。
測定開始から1分間のみ、呼吸(音)を検出するとLEDが点灯します。
10秒以上呼吸が停止した場合、停止秒数と呼吸を再開した時刻を記録します。
記録件数は300件まで、停止秒数は255秒以上は255秒と記録されます。
データ転送手順は以下の通り。
下記のpythonプログラムをダウンロード(右クリックでリンク先を保存)してPCの作業フォルダに置きます。
APNEA_M.py
SASチェッカーとPCをUSB-Serial変換基板を介して接続します。
PC側でPythonプログラムファイルを置いたフォルダでコマンドウインドウを開き
python APNEA_M.py
で起動します。
すると以下の1文字コマンドリストが表示されます。
s : stop measurement & display result
w : write result to file
r : run (itialization and start measurement)
k : read and set sensitivity
p : run & continuous print of mic_level readings
m : continuous print of breath-holding period
v : read battery voltage
[Enter]: end mesurement or end program
その後1秒まってから測定を開始します。
測定開始から1分間のみ、呼吸(音)を検出するとLEDが点灯します。
10秒以上呼吸が停止した場合、停止秒数と呼吸を再開した時刻を記録します。
記録件数は300件まで、停止秒数は255秒以上は255秒と記録されます。
PC間通信と機能
測定結果はUSB-Serial変換インターフェースでPCへ転送できます。
またPCからの操作で検出テストや電池電圧確認、感度変更等ができます。
PCとの接続にはUSB-Serialの変換基板とUSBケーブル、UART接続用コネクタ付き配線を使います。
USB-Serial変換基板は信号レベルが3.3Vのもの、または5V/3.3Vが切り替えられるものを3.3Vの設定で使います。
私はFT232RQ USBシリアル変換モジュールキット(秋月電子通商注文番号109951)を使用しDIPスイッチ切替で3.3Vの設定にして使っています。
FT234X 超小型USBシリアル変換モジュール (秋月電子通商注文番号 108461)なら信号レベルが3.3Vでそのまま使えます。
変換基板とSASチェッカー間は両端に2.54mmピッチソケットを付けた3線コードを作って接続します。
接続時の注意として変換基板側のTx端子はSASチェッカー側のRx端子へ、変換基板側のRx端子はSASチェッカー側のTx端子へ接続します。
またPCからの操作で検出テストや電池電圧確認、感度変更等ができます。
PCとの接続にはUSB-Serialの変換基板とUSBケーブル、UART接続用コネクタ付き配線を使います。
USB-Serial変換基板は信号レベルが3.3Vのもの、または5V/3.3Vが切り替えられるものを3.3Vの設定で使います。
私はFT232RQ USBシリアル変換モジュールキット(秋月電子通商注文番号109951)を使用しDIPスイッチ切替で3.3Vの設定にして使っています。
FT234X 超小型USBシリアル変換モジュール (秋月電子通商注文番号 108461)なら信号レベルが3.3Vでそのまま使えます。
変換基板とSASチェッカー間は両端に2.54mmピッチソケットを付けた3線コードを作って接続します。
接続時の注意として変換基板側のTx端子はSASチェッカー側のRx端子へ、変換基板側のRx端子はSASチェッカー側のTx端子へ接続します。
データ転送手順は以下の通り。
下記のpythonプログラムをダウンロード(右クリックでリンク先を保存)してPCの作業フォルダに置きます。
APNEA_M.py
SASチェッカーとPCをUSB-Serial変換基板を介して接続します。
PC側でPythonプログラムファイルを置いたフォルダでコマンドウインドウを開き
python APNEA_M.py
で起動します。
すると以下の1文字コマンドリストが表示されます。
s : stop measurement & display result
w : write result to file
r : run (itialization and start measurement)
k : read and set sensitivity
p : run & continuous print of mic_level readings
m : continuous print of breath-holding period
v : read battery voltage
[Enter]: end mesurement or end program
s[改行]と打つと測定が停止し、結果がコマンドウィンドウに表示されます。
w[改行]と打つと出力ファイル名を効いてくるのでファイル名(*.txtまたは*.csv)を入力すると測定結果がそのファイルに出力されます。
r[改行]と打つと測定結果が消去されて測定を開始します。
k[改行]で感度の確認または変更ができます。
数値を入力すると感度変更でき、改行のみだと変更なしで値の確認ができます。
感度は1~255で指定できます。
値が小さいほど小さな音(ウィンドノイズ)で呼吸ありと判定しますが、小さすぎると誤検出が増えます。
p[改行]で周期的にMIC測定値を表示し、改行で表示が止まります。
m[改行]で周期的に呼吸停止秒数(気圧変化なしの期間)を表示し、改行で表示が止まります。
v[改行]で電池電圧を表示します。
pythonプログラムを終了するには改行します。
w[改行]と打つと出力ファイル名を効いてくるのでファイル名(*.txtまたは*.csv)を入力すると測定結果がそのファイルに出力されます。
r[改行]と打つと測定結果が消去されて測定を開始します。
k[改行]で感度の確認または変更ができます。
数値を入力すると感度変更でき、改行のみだと変更なしで値の確認ができます。
感度は1~255で指定できます。
値が小さいほど小さな音(ウィンドノイズ)で呼吸ありと判定しますが、小さすぎると誤検出が増えます。
p[改行]で周期的にMIC測定値を表示し、改行で表示が止まります。
m[改行]で周期的に呼吸停止秒数(気圧変化なしの期間)を表示し、改行で表示が止まります。
v[改行]で電池電圧を表示します。
pythonプログラムを終了するには改行します。