Lappの覚え書き

過去ログ40 2023/2/9 10:58

▼Tessho
Lの表記
大文字 L
小文字 l
○L ℓ
が使えるか?
↔はどうか? Up 2/9 10:58


▼Tessho
さらに35分間
ついでなので,PC作業中に,左手の人差し指に「脈波センサ」を固定し,作業を続けた。
左手は使わない作業で,資料閲覧やネット検索をやって,約35分間,脈波を気にせず
勝手にArduinoにデータ収集をさせた結果が図1。平均は38%で,前とそれほど変わらないが
今回のデータの方が,信頼度が高そう。データロガーは,値をSDに書き込んでいくもの
だが,この程度で,データがとれるのなら,ロガーにしなくてもいいかな・・・と
「めんどうくさい病」が叫んでいる・・・

https://i.imgur.com/XJ3EFlU.jpg
https://i.imgur.com/MN8Wt8W.jpg


▼Lapp
脈拍計・成功 !!!!!
aitendoから買った\385で買った「脈波センサモジュール」は,出力が数V単位で
出てくる優れものではあるんだが,医学的に脈波波形とは言えない「微分波形」で,
脈拍を数えるためのものと考えれば許せるし,設計意図も分からなくもない。
そこで,下で示したように,出力をSchmittに入れて「方形波」に整形したパルスの
周期(周波数)を検出する方法を考えた。
実は,この脈波センサのメーカーは,これを使った「脈拍計」のArduinoスケッチを
発表はしているんだが,かなり複雑で,インストールもメンドウなので,自分で考える
ことにした。「方形波の周期」の一般的なプログラムなんて探せばあると思ったんだが
それが見つからないので,やり方を考えた。
検出プログラムの基本的な考え方を図1に示す。
毎回パルス電圧V(t)を検出して,V(t)が0→5000(mV)に変わる「瞬間」を捉え,ここを
パルスの始まり時間time1とし,次のパルス始まり時間time2を検出すれば,周期は
time2-time1として求まる・・・というのがコンセプト。
この手順を図2にしめす。これに従って,作ったのが図3に示す今回のスケッチである。
注釈(//で始まる)をつけたので,読み解いてください。実際のスケッチには//はつけない。
(要望があれば,詳細説明をするけど・・・・)
図4は,このスケッチの出力ではないが,前回示した脈波波形,方形波変換波形とともに
検出した周期T(ms)を同時計算させ,シリアルプロッタでグラフ表示したものである。
Tの表示が波形と合っていないようにみえるが,表示したTは「前のパルスの周期」で
あるので,注意してみれば,パルス間隔に従って上下しているが分かる。
図5は今回のスケッチ図3で出力したHR(心拍数)を取り出し,エクセルでグラフ化
したものだが(私も初めて見るんだが),脈拍は低頻度(37付近)と高頻度(78付近)を行き来
しているのが分かった。低頻度は,二段脈時の脈拍で,間で発生したPVCは無効収縮
としてカウントしていないので,周期が長くなっているのである。高頻度が本来の私の
脈拍(整脈)なのである。平均すると61くらいで,これが私の(有効)心拍数となる。
低頻拍が発生している回数を検出すれば,PVC発生率を検出することができるので,
いずれ「PVCロガー」を作ろうかなとは思っている。
パルス周期検出プログラムの「自力更生(?)」成功で気をよくしている。
https://i.imgur.com/znn5JrP.jpg
https://i.imgur.com/k6hv6ol.jpg
https://i.imgur.com/xJoUL36.jpg
//脈波計・心拍計のスケッチ
//vhl:1つ前の方形波の状態(0 or 5000)(mV)
//time0:前回の計測周期(ms)
//period:今回計測した周期(ms)
//HR:心拍数(/分)
int vhl,time0,period,HR;//実数に定義
void setup()
{
Serial.begin(9600); //通信速度
}
void loop()
{
int val1 = analogRead(A1);//方形波に変換した脈波を読む(0~1023)
val1=map(val1,0,1023,0,5000);//AD読取値→電圧(0 or 5000)(mV)に変換
if (vhl<10 && val1>4500)//前に計測した方形波がlow(<10mV)で今回計測した方形波が
//high(>4500mV)なら,以下を実行する。なければ処理しない。
{           //ifの条件を満たしたら実行するプログラム
period=millis()-time0;//周期は(現時点での経過時間−前回検出時の経過時間)(ms)
time0=millis(); //現在の経過時間を前回検出時の経過時間に置き換える
HR=60000/period; //周期period(ms)を心拍数HRに変換する(60s=60000ms)
Serial.println(HR); //HRをコンピュータに送って表示する
}
vhl=val1; //現在の電圧値を1つ前の値vhlとして覚える
}  //以上を永久に繰り返す
https://i.imgur.com/bm3aSYa.jpg
https://i.imgur.com/0lFaZr5.jpg


▼Tessho
Arduinoオシロについて
“Aruduino”で旧テッショウ塾を検索すると,実に510個のワードがヒットする。
かくも,私はArduinoが好きだし,これ以外のマイコンは触ったことがないし,また
これからも,他の勉強をする気もない(そんな時間もないが)。
Arduinoは純正品(本家のイタリア製のもの)も,その互換機(Arduinoはオープン
ソースで,全て公開されているので,だれでも作って販売していい)も使っているが,
数えたことはないが,たぶん20台くらい(それ以上)はある(そんなに何に使うのか!
って話はあるが)。手に入れるには電子部品通販と同じで,いろいろな売り手がある。
まず,秋月では,純正品が¥3630,他の売り手でも,この程度かこれ以上である。
互換機は図1のように沢山ある。最安値では\720なんてのが,あるが使ったことはない。
他でもそうだが,安いものはPCと通信するICが純正と異なるものが使われていて,その
ドライバーのインストールが必要で,初心者向きではない。
安い国際通販では,図2(Ebey)や図3(AliExpress)などがあるが,純正品はない
(あっても,秋月と同じか高い)。安いことは安いが,1〜2か月待つ覚悟が必要である。
Amazonで互換機を探すと図4のようなのが見つかった。左は純正品に近いIC構成である。
これらはprimeと記してある通り,送料無料で翌日配達なので便利である。
私のここでの使用も互換機が多いが,注意して使えば,純正品と遜色はない。

さて,Arduinoの使い方は,手引書も多いし,ネット記事も多いので「その気」になったら
検索するとして,肝心なのは,基本プログラムであるArduino IDEのインストールである。
図5のように,“Arduino IDE”で検索し,Arduinoの本家のページに行くと,直ぐに
見つかるし,ダウンロードできる。手順は上記資料を参照すること。

最後に本題である「Arduinoオシロ」の話だが,図4のようなスケッチをArduino IDEで
書いて,動かせばよい(このスケッチは注釈が一切ない,悪いプログラムの見本。「自分が
分かればよい」人向き)。Arduinoの命令形式や文法などはそれなりに勉強が必要だが,
「人の作ったスケッチ」をcopy&pasteすれば,たいていは動くので,勉強は後回しでもよい。
図4に一応,それぞれの機能(働き)は書き込んだので,勉強の参考に・・・。
これを動かして(スケッチをArduinoに送り込むと自動で動き出し,電源を落とすまで
永久に止まらない),PCにデータを送り,IDEのシリアルプロッタ機能を使うと,図5の
ような波形(グラフ)が描かれる。スケッチとグラフの対応は図5に書き込んだので
見比べながら「想像」してほしい。これらの波形を数値データとして取り出す方法などは
また,おいおい説明しよう。今日は,Arduino基礎講座である。

https://i.imgur.com/uFjItd1.jpg
https://i.imgur.com/uA8q6Ex.jpg
https://i.imgur.com/vbj5eyn.jpg
https://i.imgur.com/6ZlqTep.jpg
https://i.imgur.com/va6wqRV.jpg
https://i.imgur.com/NskN5or.jpg
https://i.imgur.com/nR4qwof.jpg


▼Tessho
波形出力をSchmittに入れて方形波に
脈波の数を数えて心拍数に変換するには,脈波を方形波に変換できれば,何かと(?)
便利である(利用方法はまた解説・実験をするが)。そこで,脈波センサーの出力を
Schmitt triggerに入れて,方形波に変換できるかやってみた。図1のように74HC14
のSchmitt2個を使って,その出力(方形波)を脈波と同時にArduinoオシロに入れて
観測した。図2のように,脈波出力はA0端子に,Schmittを2個通した(1台目で位相
が反転するので2台目で正立にもどす)出力をA1端子に繋ぐ。スケッチは,1ch用のを
2ch用に改変して使う(1ch分をコピーするだけなので手間はかからない。変数に注意)。
結果は図3に示すように,飽和するような大きな入力時は確実に方形波に変換できる。
しかし,図4のように上手く変換できないことも多い。74HC14のヒステリシス特性は
Vcc=5Vでは,high=3V,low=1.8Vとなっているが,図4を見て分かるように,脈波の
ベースラインが1.8V付近にあり,時にlowと判定しないので,2つの脈波を1つと判定
するなどの不具合が生じるものと思われた。そこで,図5のように,脈波の出力に100kΩ
の抵抗を3本付けて(200kΩと100kΩでいいんだが,手近の100kを3本使ったまで),
出力を2/3にしてSchmittに入れてみた。これがピンポンで,図6のように確実に方形波
変換ができるようになった(schmittの特性があるので,本来は微調整が必要)。また,
二段脈の際のPVCは小さい脈波を呈し,これが「無効収縮(ほとんど拍出をしない収縮)」
になるのだが,図7に示すように,無効収縮のPVCは検出しないという「当初の私の目的」
が達成された。ウレシイ。
さて,この方形波に変換された脈波をどう利用するかは,またこの次のテーマである。

https://i.imgur.com/5TqxKdb.jpg
https://i.imgur.com/d7cM7S4.jpg
https://i.imgur.com/QWc2SXJ.jpg
https://i.imgur.com/uOM3iJZ.jpg
https://i.imgur.com/8m3GGOF.jpg
https://i.imgur.com/MjrqG1u.jpg
https://i.imgur.com/z7nUcCN.jpg


4139

掲示板に戻る