「開発」カテゴリーアーカイブ

日本心理学会TWSの準備

今回の日本心理学会では、「自作計測器で学ぶ精神生理学」というチュートリアルワークショップを開催します。前半は、ポータブル皮膚温計で、自己紹介時の皮膚温変化を視覚化します。後半は、ポータブル心拍計を使って、タングラム課題中の心拍ゆらぎ(RMSSD)を観測します。で、ポータブル心拍計をチェックしていたのですが、液晶が半分映らないものや、電源のハンダがとれて接触不良になってしまってるものなど、いろいろな故障が見受けられました。

20150909-184459-67499794.jpg 20150909-184500-67500590.jpg

ケーブルも、かなり接触が不安定なものがあり、中身を確認すると、どこかで見たようなヒドイ状態のものがあったので、これも治しました。でも、全部で10台あるはずが、6台しかないんですよね。あとは、一台はBF機能を追加して福島が専有してて、もう一台は平良さんの手元にあるはず・・・、もう2台は??心当たりがあるかたは教えて下さい。まぁ作ればいいんですが、作るのが面倒くさくて。

皮膚温測定器生産

昨日今日とよしだ氏とともに皮膚温測定器を生産してきました。

image

昨日の段階では僕が2台、よしだ氏が1台、先生が作った1台を合わせて皮膚温測定器が計4台になりました。途中よしだ氏がディスプレイのはんだ付けに苦戦していましが、そんな中僕は3台目に突入。この時点であとは配線とプログラムの書き込みだけだったので、次の日に助手室のPC借りてやろうと思っていたのですが、なんと助手室のPCでは書き込めないという…
どうやら開発環境が違うらしく、結局は先生のPCを借りて書き込みをし、3台目を完成させました。僕がバイトに行く前になんとか皮膚温測定器が計5台になりました(写真は長野製作所無し)。

image

あの後台数増えたのかなぁ

PVアタッチメント

水曜の基礎実験終わりにHR,PV,SCのケーブルが何セットあるか確認している時、今まで使ってたPVアタッチメントは指の抑えがあまいよねということで新しく作ることに。
デザインはワークショップで使われるPVアタッチメントを元に、普段使ってるセンサーに合わせ設計をし直した。(デザインをスクショするの忘れてました…)
そして昨夜、新しいアタッチメントを3Dプリンターで作成。永田くんが「ABSなら浮くからアセトン塗った方がいいかもですね」と言ってたのでアセトンを塗ることに。この時どうやら塗りすぎていたらしく、今日のお昼に来てボードから剥がしたら悲惨なことに…

image

昨日のアタッチメントがこうなってしまったのでまた作り直した。

imageimage

この写真からだとわかりづらいかもだけど、地味に浮いてるんですよね……
まぁとにかく刷り終わったので既存のPVセンサーのアタッチメントを付け替えておきました。

あ、完成品の写真忘れてた……

ウェアラブル音声センサーの基板化

先日作成したウェアラブル音声センサーの基板化を行いました。ブレッドボードのままでは、頭部に装着しにくいので。話が長いので、結論から行きますと、ちゃんと基板化できました(下左)。Eagleの筋電図測定回路を一部改変して、音声を音圧に変換する回路のボードデータを作成しました(下右)。初段のアンプはLM358を使います。

20150704-221426-80066678.jpgvb

で、せっかくですので、imodelaではなくKitmillを使います。1)Eagleの設計ファイルをガーバーファイルに変換し、oriminPCBに読み込ませる、2)oriminPCBで、ガーバーファイルをNCデータに変換する、3)作成したncデータをUSBCNCに読み込ませて切削する、という順序です。がんばれkitmill(下左)。kitmillは切削中に、切削部位と経過時間が表示されます(下中央)。結構複雑な基板で、だいたい40分くらいで一枚完成します。このあたりは、oriminPCBの切削設定で変えられますが(下右)、今は刃物を折らないように、切り込み速度をすべて30mm/minにしてます。かなり慎重な設定なので、本当はもっと短時間で完成するものなのかもしれません。

20150704-221428-80068367.jpg20150704-221427-80067521.jpgorimin

で、完成した基板に部品を組み付けて、動作チェックをします。ランドが小さくてハンダ付けがめんどくせぇ・・・(涙)。パタンにもう少し手を入れないと量産はキツイな・・・。で、ブレッドボードと並べて動作チェック(下中央)。最初基板型の感度がえらく鈍くて、「やっちまったか!?」とビビったが、これはマイクモジュールの背面のはんだジャンパをショートさせてないのが原因だった。ちゃんと組み上がればホラ、どちらのモジュールも同じ(くらい)の音圧だ(下右)。

20150704-230032-82832594.jpg20150704-221425-80065805.jpgv

はぁやれやれ、ようやく音声測定回路を基板化して、kitmillも使ってみたけど、やっぱり慣れなくて、またしてもエンドミルを折ってしまった。まだほとんど新品状態だったのに。。。(涙)でもまぁ徐々に慣れていかなくてはね。

20150704-221525-80125928.jpg

Eagleファイル:voice

EMG

さて、久々の筋電図です。基本的な回路と動作については、伏田くんが報告してくれています。今回は、右手と左手の前腕部に電極を配置して(下図左)測ってみることにします。両手共に真ん中の電極は、一本にまとめてPatientGNDにつなぎます(下図中央)。回路は2系統用意します(下図右)。まだブレッドボード上で、電源は2セルのリチウムイオン電池です。初段の計装アンプLT1167は基本的に両電源が必要なので、通常は2セル合計7.4Vとして使うところを、+-3.7Vとして使っています。LT1167で増幅されたEMGは、次のLMC6484で、整流化とスムージング処理を受け、Arduinoでも扱いやすい0-5Vの値に変換されます。

20150505-171003-61803100.jpg 20150505-171004-61804714.jpg 20150505-171003-61803908.jpg

Arduinoは0-5Vしか読めず、測定値が-になると変化が追えないので、NIのUSB-6008(ADコンバーター)を使ってチェックを行います。正しく動作すると、下記のようになります。ピンクが右手、オレンジが左手です。この回路はノイズが乗りやすく、PCは電源を外し、近隣の電化製品もすべて電源OFFで測定していますノイズが混入した場合は、ノイズも整流化→スムージングされて、筋電位がないにもかかわらず、あたかも電位が発生しているかのように表示されます。筋活動がなくても、出力値がある程度高い場合は、ノイズの混入を想定したほうがよいでしょう。スムージングまでまとめてやってくれるのは良いですが、生波形が見えないのはこういうところが怖いですね。

emg

さて・・・。前回動作チェックをした時、①初段のLT1167から筋電位を検出できない②次のLMC6484から出る整流化波形が、変なところに出る(本来0Vを中心に出るはずなのに、+0.9Vほどカサ上げされた値が出る)などの問題があって、「???」となり、作業を断念した。今回の調査から判明した結論として、上記症状を呈するLT1167とLMC6848は破損している可能性が高い。新品にすげ替えると、設計通りに動作するからだ。たしか手塚さんが、「一回逆につないだ」と言ってたような・・・。おそらく問題は電源部分で、+-を逆につなぐと、IC達が死亡するものと思われる。なにせ用途が用途だけに、これは絶対に避けたい。よく注意してとかそういう問題でなく、逆刺し防止用にコネクタをちゃんとつける電源をリチウムイオン電池からチャージポンプ回路のマイナス電源に変えて逆刺しのダメージをなくす、などの工夫が必要なようだ。ともかく原因がわかったので前に進める。良かった・・・

20150505-171005-61805590.jpg

(↑壊れたICたち)

脈波カー(モータードライバ部分)

やってしまいました。昨晩、新ゼミ生の事をぼんやり考えながら、(子どもが納豆にネギを入れたいと言うので)ネギを刻んでいたら、かつてないくらい親指の先を包丁で・・・消毒して、止血して、痛み止めを飲んで、、、怖いので傷口はそれいらい見てません。くっつくかなー、くっつくといいなー。親指@左手が使用不能なので、キーボードを押すのが億劫です。

さて、脈波カーなのですが、肝心のドライバIC(写真1ブレッドボード上、黒いデカイやつ)が生産中止で、代替品の情報も無いので、とりあえず代わりになりそうなICをまとめ買いしました(写真2)。もともとMP4401というMOSFETトランジスタアレイというのを使ってたんだけど、SMA4032という奴が、見た目・形状的に(中身的にも)イケそうな気がする(写真3)。で、入れ替えてみると実際問題なく動作した(写真4)。・・・あとで気がつくのだが、私MP4401を結構沢山在庫している・・・代替部品なんてひつようないんじゃないかという事実(写真5)。
20150413-181444-65684890.jpg 20150413-181445-65685732.jpg 20150413-181449-65689196.jpg 20150413-181447-65687378.jpg 20150413-181448-65688307.jpg

IC買っただけじゃないかと?いやいや、基板の設計もしたよー。まだ切ってないけど・・・。切削と組み立て作業は、まだこれからです。ご期待を!(誰が?)

PVCB

EagleFile: PVC_B

参考資料:MP4401

 

脈波カー(計測部分を基板化する)

脈波カーは,1年の時を経て,割りとまじめにバージョンアップ中だ。どうにも複雑でカサが張るので,脈波アンプ+電源+マイクロコンピュータ部分を専用基板にまとめモジュール化した。単4一本で駆動する。ペン先部分は,0.38mmの三菱リフィルが使いやすい事がわかった。アームの尖端にうまく固定するのは課題だが,きちんと固定すれば美しく測れる(サムネイルを御覧ください)。

脈波カー 20150406-211309-76389420.jpg 20150406-211310-76390232.jpg 20150406-211308-76388616.jpg

EagleFile:PVcar

あとは,ステッピングモーター制御部分を基板でモジュール化するだけ・・・なんだが,難航しとります。というのも,ステッピングモーター駆動に使ってたモータードライバICMP4401がディスコン(生産中止)になってしまったのだ。現在代替品を探してる最中ですが,なんせ不慣れなものでさっぱり・・・まぁ明日には部品が届くので,どうにかなるのでは。

調査ファイル:replace4401

部品表:PVcarParts

スタンドアロン心拍計(3)

だんだん出来上がってきた。前回までは、アンプ部分と液晶部分がバラバラで、持ち運びや操作に不安があったが、どうにかコンパクトにまとめることができた。
20150328-173218-63138128.jpg
今回のバージョンアップは、
1) 液晶ディスプレイ・マイクロコンピュータ・EEPROM用の基板の作成
2) スタンドアロン心電計用に心電図アンプの基板を修正
など。
二枚の基板を(物理的に)どう接続したものか悩んだが、いろいろ試した末に、厚さ9mmのブロック型のスペーサーを3Dプリンタで作成し、間を粘着テープでとめるという方式に落ち着いた。あまりかっこよくないけど、これが一番楽で、コンパクトに仕上がりそうなもので。ECGの微分波形をひっかけるスレッショルドの設定は、前回までは可変抵抗だったけど、ディスプレイの基板にタクトスイッチを4つ搭載できたので、スイッチでポチポチ押す形式に改めた。青いボタンで上がり、白いボタンで下がる。最後に設定したスレッショルドがEEPROMに記録され、次回起動時にも反映されるしくみ。心電図基板は、マイクロコンピュータの電源も心電図基板からいただく都合で、背面に手修正が必要だったが、めんどいので表面にケーブルを這わせる形式に改めた。あと、どのみち厚みが25mmくらいになるため、電池は単三形に変更した。これで、倍くらいロングランになる。
IBI
とりあえず、ウロウロ歩きまわった状態と、座位でぼんやりした状態で400ポイントずつ計測してみた。・・・やはり何ポイントかは、Rを逃したり、Rじゃないものを余計に採ったりで、修正しなければならなかった(図は修正済み)。ゆらぎ分析に書ける際は、このようなアーチファクトが悪さをするので、どの程度悪影響があるか正保先生に相談しなくちゃ。

Arduinoソフトウェア:SimpleIBI150328
ディスtプレイ&ボタン動作確認ソフトウェア:tactTest
貼り付け用ブロック3Dファイル:interblock
計測結果:WALK_SIT

肝心のEagleファイルがアップされていないので上げなくちゃ!
ディスプレイ側基板:SAHRM
心電図側基板:SAHRM_B

スタンドアロン心拍計(2)

今日は、永田・新井・中山の三氏が訪れた。スタンダロン心拍計を作成し、ジェットコースターで心拍を測ってみることにした。

20150321-133617-48977805.jpg 20150321-133616-48976945.jpg 20150321-133615-48975704.jpg

壱号機はフセダ氏に譲与したため、写真を頼りに復活を試みた。感度の調整など、少々ソフトウェアの更新も行った。測定結果はHR表示で、上から永田、新井、中山氏の順。安静2分→コースター2分→安静2分の6分間。IBIデータなので、ひとによってサンプル数が異なる。

jet

エクセルファイル:ジェットコースター

ソフトウェア:SimpleIBI150320

ノズルが詰まる

わりとよく聞くノズル詰まりだが、今まであまり深刻な症状は体験してなかった。しかしとうとう来た。何度フィラメントを送っても、ノズルの先端まで行くと止まる・・・送る部分を掃除しても、フィラメントを変えてもダメ。
通常ノズルが詰まった時は、ノズルをChangeFilamentで温めてから、一番細い六角レンチの長い辺をホットエンドの穴に押し込むと、中にたまったフィラメントが押し出されてニュルニュルと出てくる。これは割りと一般的な対処法のようだ。
今回はいくら押しても全く出る気配がない・・・つまり、ノズルに何かが詰まって便秘状態になっているのだ。ノズルの構造は・・・直径は2.38mmで意外に広い。ここに溶けたフィラメントが貯まるのだね。先端は細くなっている・・・この細くなっている部分に何か詰まったのだ。240℃に熱しても溶けない何かが。心当たりがある。多分Woodフィラメントが詰まったのだろう。
nozzle

ノズルを温めた状態で、反対側から細いものを突っ込んでやれば良いと思われるが、何が良いのだろう?と思ってると以下の様な手法を紹介する動画があった。金属のハケの繊維を使う手法だ。

hude

・・・・探すが無い。同じくらい細いもの・・・ニクロム線?太すぎるようだ。はんだ吸い取り線の銅線?細すぎる・・・。マルピンヘッダーの細い方・・・まだ太すぎる。削ってみよう・・・よく見えないけど、ちょっと細くなったような・・・。ちょっとだけ穴に刺さった。試しに上から六角レンチで押してみると・・・出るわ出るわ、不純物だらけで黒く変色したフィラメントのカスが(↓)。

20150215-153631-56191406.jpg

ああ、きつかった・・・。メインマシンのHPノートではMakerWareが起動しなくなっちゃうし、ノズルは詰まるわとトラブル続きで、3Dプリンタライフは踏んだり蹴ったりだ。日本の大手メーカーが手を出したがらない理由はこういうところにあるのかもね。

フィラメント衝動買い

20150203-154923-56963433.jpg

woodフィラメントは、木材由来の材料が40%入っているらしい。PlyFlexは伸縮性のあるゴムっぽい素材。ただの茶色いプラスチックだという話もあるが、自然由来のポリ乳酸+木材で、使うときにエコな気分になれる(ような気がする)。PolyFlexでピッタリサイズのストッパーを作れば、輪ゴムともおさらばできる。柔らかい素材なので、他にもいろいろ使い道がある気がする・・・。

RM141129

・サンプリングレートについて
プログラム中のwaitによって決まります。単位はmsです。

・GOOD/BADの判定について
緑の丸に入ったらGOODとなります。

・データのセーブ
ちゃんとできているようです。

・ブロックの管理方法
プログラムの冒頭でtrialによって試行数を指定し、達すると終了するようにしました。

・ゴール位置のランダム化
シーケンスを作成し、順序を入れ替える方式に改めました・・・。
同じ位置に連続して出てしまう点はまだ改められておりません(すいません)。

・その他
プログラム冒頭で様々な設定値を変えられるようにしました。
boolean cursor=true; カーソルの表示非表示
float rotd=15; 回転角度
int targetSize=100; ターゲットの大きさ
int wait=20; データ保存の間隔
int trial=16; 試行数
int wait1=1000; 反応終了時からGOOD表示までの時間
int wait2=2000; 反応終了時から軌跡表示までの時間

とりあえず今日のところはここまでとさせてください。

ファイル:RMove

圧縮ファイル中のRM3を使用してください。

RM141012

(1)軌跡データが出力されるように、(2)Arduinoがなくても動作するように、修正しました。
プログラム:RMove
(RM1をProcessingで実行してください)

g2

実行するたびに、軌跡のxy座標がcsvで保存されます。3本ほどまとめてエクセルで散布図を描いてみました。ターゲットがランダムなので全方向描くのに手間がいりそうですが。

g1

エクセルファイル:sample

何枚かキャプチャ画像ものせておきます。

4 1 2 3

 

RM141010

少し修正しました。ゴールに到達したら、Arduinoからトリガが出ます。トリガが出たら赤ランプが光るようになっています。また、ゴールに到達してから2秒後に軌跡がでるようにプログラムを修正しました。
ProcessingとArduinoの間はシリアル通信で接続されているので、遅延なしというわけにはいきません。検証してみないとわかりませんが、あまり遅延が気になるようであれば、ディスプレイにフォトダイオードを貼り付けて、トリガにすればよろしいかと思われます。動作画面を貼り付けて起きます。

プログラム:RMove

RM1(Processing側)とRMA1(Arduino側)が必要です。Arduinoと通信するので、Arduino側を動かさないとProcessing側も動かないかもしれません。

刺激呈示プログラム/Processing

マウスカーソルの位置に比べ、赤いカーソルの位置が時計回りに30°回転して表示されるプログラム。画面キャプチャ時に、マウスカーソルが消え失せましたが、実際はマウスカーソルも同時に表示されます。

rotated

以下、プログラムです。・・・いろいろ難所があり、予想以上に長くなってしまいました。rotation moveのあたりで、カーソル位置の回転変換を行っています。d=30の値を変えれば、回転角度を変えられます(単位は「度」、回転方向は時計回りです)。ちなみに、//norcursor;の//を除去してやると、カーソルを非表示にすることができます。

pro

プログラム:rotatedMove

processingの開発環境はフリーです。インストール方法は、こちらをご覧ください。rotatedMoveのフォルダの中の、rotatedMove.pdeを開発環境のショートカットにドラッグアンドドロップすればプログラムが開きます。開発環境の▶ボタンで、実行できます。(たぶんそのままで動きますが、実行マシンにjavaがインストールされている必要があるかもしれません。)

3Dプリントに必要なもの

我々も何かとお世話になっている3Dプリンタ。ABSはプラットフォームから作成物が剥がれやすいのが悩ましいよね。そこで、必要なのがScotchマスキングテープ50mm幅と、固形アラビックヤマトのり。印刷がはじまる前に、アラビックヤマトのりをヌリヌリしておくと、あら不思議!なんとプラットフォームから剥がれないのでした。プラットフォームがのりで凸凹になるって?マスキングテープを定期的に張り替えれば良いのさ! 皆さん知ってました??・・ もっと早くに試せばよかった。。。

20140807-231024-83424231.jpg 20140807-231025-83425078.jpg

 

生体反応をランプの明るさに

生体反応を身近なものとして生活に取り込むことを目的として、様々な研究を進めています。その成果として、指先に伝わってくる心臓の拍動に応じて明滅の仕方が変わるランプを作成しました。まだ試作段階ですが、遠く離れた人の拍動を記録し、それを再生することでランプ越しに記録された人を感じることも可能となるかもしれません。Arduinoなどのオープンハードウェアを用いており、シェードの部分は3Dプリンタで作成しているため、自分好みのランプも作ることができます。また、赤・青・緑の3色が出せるLEDライトを使っているので、黄色や紫、ピンクなど多彩な色を表現することができます。

EmoTrig1

Emotiveにトリガを出すための装置をArduinoで作成しました。いちおう2chのトリガを入れられます。ch0,ch1両方2.5V以下の時はAをシリアルポートに出力します。ch0のみ2.5V以上の時はBを・・・という具合に、トリガの状態をA-Dの文字で出力します。ボーレートは9600bpsにしてあります。delayを入れて、100HzでAD変換値のチェックと文字送信を行うようにしています。ニッケル水素電池4本で、TTLのかわりに5V入れてみましたが、正しく動作しているようでした。
Trig1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
int a0;
int a1;
String str;
void setup()
{
pinMode(13, OUTPUT);
Serial.begin(9600); // baud rate of serial communication
}

void loop()
{
a0 = analogRead(0); //ADC 0ch
a1 = analogRead(1);

if(a0 if(a0>512 && a1<512){str="B";} //ch0=HIGH && ch1=LOW output B
if(a0512){str="C";}
if(a0>512 && a1>512){str="D";}

Serial.print(str);
Serial.println();

delay(10); //check AD voltage with 10ms interval
}

Arduino用プログラム→
EmoTrig1
Arduino1.0.5開発環境で動作チェックしました。

追記(131210):

その後実際に接続して確認したところ、トリガが出た瞬間と終わった瞬間だけ値を変更する仕様に変更する必要があった(現場において来ちゃいました・・・)&57600bpsしないとトリガを逃すことなどもわかりました。