迷走の果て・Tiny Objects

迷走する日々の覚え書きです。自分で分かってることは省略してますので、念のため。

店の電飾(3)無限鏡(infinity mirror)

無限鏡

四年ほど前に作ろうとしたことがあります。
フルカラーLEDを多数購入しPSoC1で制御しようとしたのですが、LEDが次から次へと点かなくなるというトラブルに見舞われました。設計ミスを疑ったのですが、問題を見つけられず、どうやら買ったLEDが不良品だったようです。そういえばアノードコモンを注文したのに、送られてきたのはカソードコモン。文句言って交換となった経緯があります。

放置したままだったのですが、店の電飾コントローラを作ったついでに無限鏡も作り直し。
テープLEDを丸めただけのお手軽製作。

材料ですが、アクリルミラーとアクリルハーフミラーを使ってます。ミラーを下に、ハーフミラーを上に配置し、LEDを間に挟んでます。
これらははざいやさんにネット注文しました。
10センチ×10センチ、四隅に穴あけ加工を依頼、二組注文して送料込みで正確には覚えていませんが3000円ぐらいだったでしょうか。

光る様子を撮影しましたが、テープLEDが最大輝度になると画面にノイズが乗っかってしまいます、安物のコンパクトデジカメだから仕方ないのかな。


店に飾ってみましたが、奥まったサービスカウンターの壁につけたので目立ちません^^;;
もっと大きく作らないと。(写真撮影は店長の許可を得てあります。)
店に飾る


数時間動かしたあとで、以前に作った非接触温度計で内部温度を測ってみると、200オームの抵抗が9度ほど高め。
電圧降下が4.7Vなので消費電力は約110mW。単純に計算すると熱抵抗は82℃/Wとなりますが、こんなもんでしょうかね。
内部温度

スポンサーサイト

店の電飾(2)回路の変更とスケッチ

回路をちょっと変更、というか追加。
最初はMOS-FETを二個しか使ってませんでした、手持ちがそれだけだったからです。
先週、足りない部品を買いに行ったときについでにMOS-FETも買っておけばよかったんですが、急いでいたので全く考えが及びませんでした。

昨日、仕事帰りに共立電子で2SK4017を買いました。

電飾コントローラ回路2

これで三つのLEDを制御できるようにりました。

さてスケッチです。
LEDがふわっと明るくなって、ふわっと消える。要するに正弦波みたいな感じにしたいわけです。
まず次の関数で明るさをコントロールするようにしてみました。
w(x)=0.5-0.5*cos(2*pi*x) (pi は円周率)

実はこの関数はハン窓というFFTの窓関数と同じです。
それでいくつかの窓関数を試したのですが、見た目大差無かったのは先の記事で書きました。
そんななかで赤池窓を使うことにしました。
ところで、この赤池とは赤池啓次氏のことでしょうか?

式は
Akaike(x)=0.625-0.5*cos(2*pi*x)-0.125*cos(4*pi*x)
です。
これを反転させ、x方向に0.5シフトさせた式(INV_Akaikeと名づけました)も作りました。
INV_Akaike(x)=0.375-0.5*cos(2*pi*x)+0.125*cos(4*pi*x)

グラフです、上がAkaile(x)、下がINV_Akaike(x)です。
Akaike_inv_Akaike.jpg

これを元にさらに四つ輝度関数を追加しました。
具体的には x -> 2*x とします、このままでは 0<=x<=1の間にピークが二つ出来るので、x=0.5 で切り分けます。

下のグラフはAkaike(x)に上のやり方を行った結果で、赤をAkaike2(x)、青をAkaike3(x)とします。
Akaike2_3.jpg

INV_Akaike(x)にも同様の変換を行いました、グラフは省略します。

さらに、のこぎり波を使って二つ作りました。
Sawthooth(x)=x
Sawthooth2(x)=1-x

合計八つの輝度関数を作りました。

スケッチはこちら

あれこれやった名残りで使ってない輝度関数もあります。Welch() と Blackman()がそうです。
loop()内で乱数を使って三つのLEDにそれぞれ輝度関数を選んで点滅させています。

店の電飾

七夕に向けて店の飾りつけをしようという話で盛り上がっていたので、テープLEDを持って行って光らせたら、「電飾作ってね」との(元)お嬢様方からの下命(汗)。
数日中に社長巡回があるからそれまでにどうにか格好つけてくれ、って納期がタイトだ、こっちは趣味でやってるんだぞ。

手持ちの部品をかき集め、足りない部品は検索してから共立電子で求めました。
ネジ式端子台 6PとかスナップインタイプのDCジャックとか・・・。
電飾コントロール

どうにかでっち上げました。入れ物は百均のプラケース。格好悪いのはご勘弁。
電飾コントローラ工作終了

テープLEDとの接続はネジ式端子台を使いました、考えた中ではこれが一番安い。
電飾コントローラ表
Arduinoの取り付けはスペーサー三つ、四つ目は下の写真のようにピンソケットが干渉するのでつけませんでした。
UNO-R3取り付け穴

スケッチを書き換えられるように穴を開けました、不恰好ですが。
電飾コントローラ横

点灯試験中。
電飾コントロール点灯試験中

回路図です。時間がないのであまり考えずに作りました。
analogWrite()はPWMですのでこれでテープLEDの明るさを制御します。
電飾コントローラ回路
自分の手元になく、誰がどうさわるかわからない。テープLEDをショートでもされたらたまらないのでポリスイッチを入れましたが、二つは必要なかったですね。
R1は電圧ドロップ用です、Arduino上のレギュレーターの負担を減らすためですが、両端電圧を測ったら4.7Vでした。電流は23.5mAということになります。これぐらいだったらR1は必要なかったですね。

テープLEDが点灯したままでは全く面白くないので、ふわっと明るくなっては消えるようにあれこれ点滅パターンを試しましたが、あまり凝っても見た目は大差なかったです。

取りあえず社長巡回には間に合いました。
私はその前に帰ったので、どういう評価だったかはまだ知りません。

脈拍センサー MAX30102を試す(2)MAX30100と比較

MAX30100(左)とMAX30102(右)を並べて同時に測ってみました。
左手中指をMAX30100に、人差し指をMAX30102に乗せました。
30100vs30102_board.jpg

左:MAX30100出力、右:MAX30102出力。
センサーも表示周期もスケッチも違うので同じになるとは思ってませんでしたが、こんなものでしょうか。
30100vs30102.jpg

脈拍センサーMAX30102を試す(1)

AliEXpressでMAX30102モジュールを購入しました。
前の記事でも書きましたがMAX30102にはガラスのカバーが付いてます。

商品ページには下図のようなブロックダイアグラムがありますが、これはMAX30102のレファレンスデザインボードのブロックダイアグラムです。
買ったAliのモジュールはこうなっていません、紛らわしいです
まぁ、商品写真を見ればわかりますが。
Ali_MAX30102page.jpg


モジュール裏の写真です。
Ali_MAX30102module裏3

左側:662K というチップが3.3Vのレギュレータ、
中央下:65K5 というチップが1.8Vのレギュレータ、おそらくXC6206シリーズ(または互換品)と思います。

右側の6pinのチップは回路構成からするとI2Cバスレベル変換をやっているはずで、おそらくデュアルMOSFETでしょう、レベル変換チップだったら最低でも7pin必要ですから。秋月さんで売ってる2N7002DWと同等品かと思います。

MOSFETによるI2Cバスのレベル変換についてはリンクさせていただいているエアバリアブルさんのI2Cインターフェースで異なる電圧の接続が大変参考になります。

MaximによるMAX30102のデモ動画、Arduino UNOとmbedで動かしてます。

詳しいことやArduinoスケッチなどは
MAXREFDES117#: HEART-RATE AND PULSE-OXIMETRY MONITOR
にありますが、このページのFirmware Files: -> Arduino Platform でダウンロードできるファイルには(今現在)問題があってArduino IDEでコンパイルするとエラーになります。

修正されたファイルはGitHubにあります。
MAXREFDES117 firmware for Arduino platforms

手持ちのUno互換機(びんぼうでいいのの旧タイプ)で動かしてみました。
MAX30102_UNO.jpg

メモリーの残りが少ないから気をつけてね、と出ます(汗)
RD117_ARDUINOスケッチ

シリアルモニター出力。
red、irはそれぞれledおよびIR ledの電流値に関する数値のようですが、単位が不明です。
HRは脈拍、HRvalidはHRが正しく測れているか否かをあらわすようで、正しくないと0になるようです。でも1でもとんでもない数値が出ることがあります。
SPO2は酸素飽和度、SPO2validはHRvalidと同様です。
MAX30102シリアルモニター出力

とりあえず、動作はしました。
スケッチやデータシートはまともに読んでません(汗)

脈拍センサーMAX30100を試す(5)

心拍と脈拍は違うそうです。
MAX30100は脈拍センサーですので以後脈拍センサーと記します。過去記事の訂正までは(面倒なので)しません。

MAX30100データシートの1ページ目にこんな図があります。
ガラスのカバーが乗ってますが、MAX30100には付いていません。
(より新しいMAX30102にはガラスのカバーが付いています、Aliでポチりました^^;;)

MAX30100datasheet_page1.jpg

MAX30100モジュールに指を乗せていると、ヘッダピンや部品に指が当たるのが気になります。
そこで手持ちにあった0.5ミリ厚のアクリル板の切れ端を乗せてみました。

アクリルカバー2

これでもどうやら動作してます。
指を乗せたり、リセットしたりしても、すぐには正しい値は出ず8~10秒ぐらい待つ必要があります。
下のシリアルモニター出力ですが指を乗せてからリセットしました。スケッチの測定周期は2秒に変更してます。
REPORTING_PERIOD_MS_2000.jpg

なおスケッチには他にもいくつか変更点があります。

LED currentを4.4mAに変更。
onBeatDetected() を変更。
脈拍値を整数型に変更、小数点二桁までは必要ないでしょう。
REPORTING_PERIOD_MS 2000に変更。

スケッチはこちらにアップしてます。

MT3608モジュールを使ったDSO Shell用電源

前の記事でテストしたMT3608モジュールを使ってDSO Shell用電源を作りました。
単三電池が四本入る電池ボックスを使い何とか押し込みました。
DSO_Shell用電源

蓋はぎりぎり閉まるんですが、電圧調整が出来ないんで格好悪いんですが、切り欠き作って収めました。
DSO_Shell用電源3

出力には手持ちにあった太陽誘電製の22μHのインダクタと1.5μFの積セラでフィルタを入れてあります。手持ち部品を使っただけで定数についてちゃんと検討したわけではありません。
DSO_Shell用電源4

DSO_Shell用電源2

フィルタの入出力波形です、負荷は200Ω抵抗三本並列。出力電圧8.0Vにセット。
上が(当然)出力波形です。
フィルタ追加

脈拍センサー MAX30100を試す(4)MAX30100_Registers.h を調べる。

スケッチMAX30100_Minimalの55行~57行に

// The default current for the IR LED is 50mA and it could be changed
// by uncommenting the following line. Check MAX30100_Registers.h for all the
// available options.


とありますので、調べてみました。
Arduino/libraries/MAX30100lib/src にあります。
MAX30100lib_src_20170513032653369.png


他にもいくつかヘッダファイルがあります。
これらを調べて理解しないと使いこなせないでしょうね、もちろんMAX30100のデータシートも。

MAX30100_Registers.h でLEDの電流設定に関する部分を抜き出してみました。

// LED Configuration register
#define MAX30100_REG_LED_CONFIGURATION 0x09
typedef enum LEDCurrent {
MAX30100_LED_CURR_0MA = 0x00,
MAX30100_LED_CURR_4_4MA = 0x01,
MAX30100_LED_CURR_7_6MA = 0x02,
MAX30100_LED_CURR_11MA = 0x03,
MAX30100_LED_CURR_14_2MA = 0x04,
MAX30100_LED_CURR_17_4MA = 0x05,
MAX30100_LED_CURR_20_8MA = 0x06,
MAX30100_LED_CURR_24MA = 0x07,
MAX30100_LED_CURR_27_1MA = 0x08,
MAX30100_LED_CURR_30_6MA = 0x09,
MAX30100_LED_CURR_33_8MA = 0x0a,
MAX30100_LED_CURR_37MA = 0x0b,
MAX30100_LED_CURR_40_2MA = 0x0c,
MAX30100_LED_CURR_43_6MA = 0x0d,
MAX30100_LED_CURR_46_8MA = 0x0e,
MAX30100_LED_CURR_50MA = 0x0f
} LEDCurrent;


MAX30100.h を読むとデフォルトでLED電流は50mAとなっており、明るすぎてセンサーが飽和したのが最初うまく動かなかった原因のようです。
MAX30100.h から抜き出しました。

#define DEFAULT_MODE MAX30100_MODE_HRONLY
#define DEFAULT_SAMPLING_RATE MAX30100_SAMPRATE_100HZ
#define DEFAULT_PULSE_WIDTH MAX30100_SPC_PW_1600US_16BITS
#define DEFAULT_RED_LED_CURRENT MAX30100_LED_CURR_50MA
#define DEFAULT_IR_LED_CURRENT MAX30100_LED_CURR_50MA
#define EXPECTED_PART_ID 0x11



ただ闇雲にあれこれやってもダメですね、ちゃんと理解しないと。
というわけでデータシートとヘッダファイルを読んでみます。次の更新は未定・・・ほかに面白そうなことを見つけたら放置かも。
いつものことですが(汗

脈拍センサー MAX30100を試す(3)正常動作??

MAX30100のデータシートも、スケッチもろくに読まずに実験するものだからダメなんですね。

先の記事で使ったスケッチMAX30100_Minimalの58行目のコメントアウトを外しました。
これでLEDの電流が50mAから7.6mAに減ります。
コメントアウトを外す

どうやらまともな数値が出るようになりました。
正常動作?



脈拍センサー MAX30100を試す(2)スケッチとライブラリー

まだちゃんと動かせてませんが(汗
現状のアップを続けます。

こちらのスケッチとライブラリーをそのまま使わせていただきました。
Arduino library for MAX30100, integrated oximeter and heart rate sensor


Clone or download をクリック
oxullo_MAX30100.jpg


Download ZIP をクリックして保存、このZipファイルは展開(解凍)しないでおきます。
oxullo_MAX30100_DOWNLOAD_ZIP.jpg


Arduino IDE(私はver1.8.1を使いました)のスケッチメニューから ライブラリをインクルード -> ZIP形式のライブラリをインストールとし、先に保存したZipファイルを選びます。
ZIPライブラリインストール


Max30100libが表示されればOK。
ライブラリ確認


サンプルスケッチがあるので、ファイルメニューから スケッチ例 -> MAX30100lib で選びます。
スケッチ例


MAX30100_Testerを動かしたところです、ちゃんとつながっていればこのようにシリアルモニタに出ます。
MAX30100_Tester_OK.jpg


わざとMAX30100モジュールを外すと当然エラー。
MAX30100_Tester_NG.jpg


MAX30100_Minimal を走らせます、指をモジュールの上に置くとなにやらそれらしい数値が出ますが・・・、
Heart rate が30 ??、安静時心拍数は、人間の場合、男性で60~70程度ですから明らかにおかしいです。
MAX30100_Milimal1.jpg


指をどけると今度は200越え?!、机の蛍光灯スタンドを消すと0になりました。外光の影響があるようです。
MAX30100_Milimal2.jpg


指をモジュールから少し離すとそれらしい数値が出ますが、安定しませんし、それで正しいのかも判断できません。
さてどうしたものやら。





 | HOME |  古い日記に行く »

文字サイズの変更

プロフィール

edy

最新記事一覧(サムネイル画像付き)

店の電飾(3)無限鏡(infinity mirror) Jun 25, 2017
店の電飾(2)回路の変更とスケッチ Jun 25, 2017
店の電飾 Jun 18, 2017
Arduino Pro Microを試す。(3)HIDとして使う(2) Jun 15, 2017
Arduino Pro Microを試す。(2)HIDとして使う Jun 04, 2017
Arduino Pro Microを試す。(1) Jun 03, 2017
脈拍センサー MAX30102を試す(2)MAX30100と比較 May 29, 2017
脈拍センサーMAX30102を試す(1) May 25, 2017
脈拍センサーMAX30100を試す(5) May 20, 2017
MT3608モジュールを使ったDSO Shell用電源 May 16, 2017

全記事表示リンク

全ての記事を表示する

ブログリンク

リンク

このブログをリンクに追加する

月別アーカイブ

06  05  04  03  02  01  12  11  10  09  08  07  06  05  04  03  02  01  12  11  10  09  08  07  06  05  04  03  02  01  12  11  10  09  08  07  06  05  04  03  02  12  11  10  09  07  05  04  03  04  03  01  12  11  10  08  07  06  05  03  02  01  12  11  10  09  08  07  06  05  04  03  02  01  12  11  10  09  08  07  06  05  04  02  01  12  10  09  08  07  06  05  04  03  02  01  12  11  10  09  08  07  06  05  03  02  01  12  11  10  09  08  07  06  05  04  03  02  01  12  10  09  08  07  06  05  04  03  02  01 

カテゴリ

プログラミング (0)
freescale (1)
AVR (3)
テルミン (16)
緊急警報放送 (3)
78K (1)
PSoC (295)
地上デジタル放送 (2)
電子工作 (404)
HX711 (2)
ACS712 (6)
数学 (6)
パソコン (12)
PLC (14)
未分類 (39)
ブログ関係 (20)
スカイプ (37)
ロボット (1)
LTSpice (8)
OCXO (0)
arduino (31)
maxima (1)
フランクリン発振回路 (3)
GPS (3)
DTMF (1)
Linux (1)
KOMAINO (7)

タグリスト

最近のコメント

最近のトラックバック

メールフォーム

名前:
メール:
件名:
本文:

検索フォーム

アクセス

RSSリンクの表示

フリーエリア

FC2Ad

まとめ

Template by たけやん