下手の横好きのスクラップブック!!

下手の横好きの、いろいろな記録です。
電子工作・PIC・Arduino・太陽光発電・写真などetc

パルスセンサ-(心拍センサ)のテスト(4-1)

2014-05-13 | Arduino

パルスセンサーSEN-11574の出力を、Arduino(ArduinoIDE)とProcessingで視覚化するテストしてみました。
Processingはビジュアルデザイン用のプログラミング言語で、ビジュアル表現に特化したツールです。
また、Arduinoとは相性が良く、ArduinoIDEとペアで利用することが可能で、Arduinoで計測したデータをProcessingで視覚化することが可能です。

Processingのインストール
Processingの公式ページ http://processing.org/に行き、上部メニューからDownloadを選びます。
No Donation(寄付なし)チェックを入れ再度Downloadをクリックする。
自分のPCにあったバージョンを選びダウンロードを実行します。
ダウンロードしたファイルを解凍すればインストールが完了です。

最初にオライリージャパン発行の「Processingをはじめよう」を参考に、光センサのCDS出力をArduinoで計測しProcessingで視覚化してみました。

回路図
   

Arduino用スケッチ

//Arduino用
int sensorPin = 0;  //入力ピン
int val = 0;

void setup() {
  Serial.begin(9600);  //シリアルポートを開く
}

void loop() {
  val = analogRead(sensorPin) / 4;  //センサを読む
  Serial.write((byte)val);  //値を送信
  delay(100);                //100ミリ秒待つ
}


主な内容
センサはArduinoボードのアナログ入力ピン(A0)に接続
センサからの情報はanalogRead()でよみとる。
値は0~1023の範囲なので、4で割って0~255の範囲に変換しvalに代入
0~255の範囲であれば単一のbyteデータで送信ができる
Serial.writeで送信

 

Processing用スケッチ

import processing.serial.*;

Serial port; //Serialクラスのオブジェクト 
float val;  //シリアルポートから受信したデータ

void setup() {
  size(440,220);

  //重要
  //Serial.list()で取得したリストの、最初のシリアルポートがArduinoボードの
 //はずですが、実行環境によってはそうならないことがあります。
  //動作しない場合は println(Serial.list());を実行して、シリアルポートの
  //状態を確認し、次の行の[0]を、Arduinoボードが接続されているポートの
 //番号へ変更します。

  println(Serial.list());  //この行を有効にするとリストが表示される。
  String arduinoPort = Serial.list()[0];
  port = new Serial(this,arduinoPort, 9600);
}

void draw() {
  if(port.available() > 0) {  //データが届いているなら
    val = port.read();   //読み込んで、変数valに格納
    val = map(val, 0, 255,0, height); //値を変換
  }
  rect(40, val-10, 360, 20);
}

主な内容
Serialライブラリの読み込みは1行で行っている。
setup)()ないでシリアルポートが開かれ、シリアル通信が有効となる。
draw()ブロックの中で、Serialオブジェクトのread()メソッドを使って値を読み込む
新しいデータが届いたときだけ、読み込みが行われる。
map()関数を使って画面に納まるようにする

使い方
最初にArduino用コードをArduinoボードにアップロードしておきます。
次にProcessingにコードを記入し RUN すると、Arduinoボードからシリアル通信で送られてきたデータを読み取り、画面表示に適した値に変換した後描画ウインドウに表示されます。

processinngの表示画面

光センサCDSの上で手をかざし、光の加減を変化させると表示画面に変化が現れる。
受信した値の大小により横線が上下に移動する。

Arduinoからのデータ受信とprocessingによるそのデータの表示が確認できましたので、別のフォーマットで視覚化します。
光センサの出力データとそれを平均化したデータを上下に配置して表示します。
光センサからの信号は上半分に、それを平均化して滑らかになった線を下半分に表示する。

Processing用スケッチ

import processing.serial.*;

Serial port; //Serialクラスのオブジェクト
float val; //シリアルポートからの受信したデータ
int x;
float easing = 0.05;
float easedVal;

void setup() {
  size(440,440);
  frameRate(30);
  String arduinoPort = Serial.list()[0];
  port = new Serial(this, arduinoPort, 9600);
  background(0);
}

void draw() {
  if(port.available() > 0) {   //もしデータが届いていたら
    val = port.read();    //読み込んでvalへ代入
    val = map(val, 0, 255, 0, height/2); //値を変換  
  }
 
  float targetVal = val;
  easedVal += (targetVal - easedVal) * easing;
  stroke(0);
  line(x, 0, x, height);   //黒い線
  stroke(255);
  line(x+1, 0, x+1, height);   //白い線
  line(x, 220, x, val);    //生データ
 line(x, 440, x, easedVal + 220 );  //平均値
 
 x++;
 if(x > width) {
   x = 0;
 }
}

processinngの表示画面
Arduinoは前回と同じくボードにスケッチを書き込み動作状態にしておき、processingをRUNします。


引き続き心拍センサー(パルスセンサー)のテスト(4-2)で、SEN-11574の視覚化を掲載します。

コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« 我が家の太陽光発電 201... | トップ | 心拍センサー(パルスセンサ... »
最新の画像もっと見る

コメントを投稿

Arduino」カテゴリの最新記事