SyntaxHighlighter

2010-06-14

MTM05で買ってきた脈拍センサ回路

この前と言っても、一ヶ月くらい前ですが、オライリーのMake Tokyo Meeting 05に行ってきたときに、koress projectのA.P. Shieldのキットを買ってきたのだけど、ようやく組み立てることができたので、ブログに記録しておきます(買ってから時間がかかったのは、知り合いの結婚式とか試験とか色々忙しかったのよ・・・)。

A.P. Shieldは脈拍を測るセンサ回路なのです(作者さまの解説)。
おもしろいツールを作成くださった作者さまに感謝いたします。

とりあえず、Arduino用のコード本体はこれ
A.P. Shieldデータの平均値からの外れ値が大きい時を心拍としてカウントしています。最初、作者さまのサンプルコードを見ずに、フルスクラッチしてました。。。(汗)
一定時間ごとにシリアルから「データ値,H or 空白(丁度心拍と判定したらH),1分当たりの心拍数」を吐き出しています。

指を置いていないとき


指を置いているとき

で、折角なので、心拍数に応じて再生速度を変えるプログラムを作ってみました。何故かvvvvで・・・。たしか音声制御のパッチにスピードが変えられるpinがあったよな~というだけの理由です。久しぶりに触ってみましたが、相変わらず動作不穏で、無駄に作るの苦労しますた・・・(けど、それを差し引いても、ビデオとかサウンドファイルを扱うのは便利なんだよなあ、と思いつつ)。
心拍が速いと再生速度も速くなる、書いてみると単純な作りです。
シリアルからデータを取得するんですが、どうもポロポロとデータを取りこぼしているようで、動作は微妙です。。。




動画を記録してみました。
曲はhttp://minorsoft.so.land.to/の自動生成アプリを利用しました。肝心の音声がよく撮れていないのはよく分かりません。どうせ私の撮影がへたなのでせよう。。。




YouTube: 脈拍センサ回路



・・・どうも、不安定です。まあ自分が昔から心雑音ありと、不整脈(?)なけがあるためも知れませんが・・・・

ちょっと前に回路だけ作って放ったらかしにしてあるマイク回路と似ているので、そのうちちゃんと整理して、マイクも作ってみようかと。。。

2010-05-06

OpenGL

OpenGLをhttp://www.wakayama-u.ac.jp/~tokoi/opengl/libglut.htmlで勉強中に、勝手にロボットハンドの演習に挑戦してみました。。。
画面中でマウスを左クリックすると、ロボットハンドの一番上の四角い部分がマウスカーソルを追従するようにしてみました。単純実装なので、マウスカーソルにアームが届かないと、アームがぐるぐる回ってしまいますが。。。

アームを追従するために、モデル座標系にある点を画面上の位置を求めますが、http://m-forest.ddo.jp/wiki_college/wiki.cgi?page=%BA%C2%C9%B8%B7%CF%CA%D1%B4%B9を参照しました。
ここによると、
オブジェクト座標系 →世界座標系 → 眼点座標系 → クリップ座標系 → 正規化デバイス座標系 → ウィンドウ座標系
順に計算していくらしい。

プログラム的にはここ。

void calcHandCenter() {
GLfloat m[16];
GLfloat p[4];
glGetFloatv(GL_MODELVIEW_MATRIX, m);
p[0] = m[12];
p[1] = m[13];
p[2] = m[14];
p[3] = m[15];
glGetFloatv(GL_PROJECTION_MATRIX, m);
GLfloat clip[4];
clip[0] =m[0]*p[0] + m[4]*p[1] + m[8]*p[2] + m[12]*p[3];
clip[1] =m[1]*p[0] + m[5]*p[1] + m[9]*p[2] + m[13]*p[3];
clip[2] =m[2]*p[0] + m[6]*p[1] + m[10]*p[2] + m[14]*p[3];
clip[3] =m[3]*p[0] + m[7]*p[1] + m[11]*p[2] + m[15]*p[3];
clip[0] /= clip[3];
clip[1] /= clip[3];
clip[2] /= clip[3];
clip[3] /= 1.0f;
float leftF = -1.0;
float ratio = (float)centerRow/(float)centerCol;
targetCol = (clip[0] - leftF) * centerCol;
targetRow = (1.0 - (clip[1] * ratio)) * centerRow;
}
m: 行列
p: 三次元点
targetCol, targetRow: アームの立方体中心部分の投影点


マウスをクリックした時に、アームの投影点とマウスの位置からアームの回転量を計算してます。

void changeArmsParam() {
baseR += 0.05*((double)deltaCol - (double)targetCol)/(double)centerCol*360.0;
handR += 0.05*((double)deltaRow - (double)targetRow)/(double)centerRow*360.0;
}
baseR: 台座の回転量(左右方向の移動)
handR: 関節の回転量(上下方向の移動)
deltaCol、deltaRow: マウスの位置
targetCol, targetRow: アームの立方体中心部分の投影点
centerCol, centerRow: 画面サイズの半分(移動量調整のため)


テキストの表示もどこかのサイトを参考にしたはずですが、失念してしまいました。すいません・・・・

プログラム

・・・全く分からないでしょうけど

アートのための数学

図書館で見つけた本。

カメラや音楽、CGを扱う上で知っておくと良い情報をまとめたような本でした。どちらかというと今更聞けない系かも知れません。カメラのF値?テレビのパンフレットについているxy色度図?音階ってどう決めているの?などが書かれているのがためになりました。
数学と書いてあってもそれほど難しい内容じゃなかったです。

アートのための数学アートのための数学
価格:¥ 2,100(税込)
発売日:2008-05
Related Posts Plugin for WordPress, Blogger...