3DCG屋さんの活動記録

PROFILE ★★こんな人です

3DCGを活用した映像や没入体験コンテンツの制作をしています。テクノロジーの社会実装に興味があり。テクニカルディレクター。面白いこと新しいことにワクワクする気持ちに『素直』でいつづける。

ラベル sensor の投稿を表示しています。 すべての投稿を表示
ラベル sensor の投稿を表示しています。 すべての投稿を表示

2019年4月12日金曜日

Arduinoと超音波センサーとProcessingで簡易モニター 検証


検証備忘録


仕事でAftereffecstのモーショングラフィック作業してるとき
ふと「キーで気持ち良いボヨヨンとかの動きをさっと作りたいので、PysicalUI作りたい。USB繋げてすぐセンシングして、テキストファイル書き出しして、AEにコピペして」みたいな完全オリジナルPUI作りたいと思って

帰ってから検証して見たのメモ。


実験
Arduino UNO + 超音波センサー
Processing + 可視化グラフ(まずは)

手を自由に動かしてインタラクティブにグラフ確認と、テキスト出力までしたい


結果
全然ダメ

超音波センサーは手のひらでセンシングすると20〜30cmくらいでもうノイズ目立ってくる。
まぁノイズなら調整で正せるかもだけど、反応性が悪い気がする。ついてこない。
(スケッチの問題だと思われる。時間かかるのでまた今度)



次のチャレンジ
MIDIコントローラのスライダーと
Processingを繋げてインタラクティブなUIとテキスト出力
したい!
➡️ここを参考にしてやりたい



とりあえず、今回試したスケッチはこちら。


Arduino



//********************************************************************
//*超音波センサを使って距離を表示するプログラム
//********************************************************************
//********************************************************************
//*超音波センサを使って距離を表示するプログラム
//********************************************************************
#define echoPin 3 // Echo Pin
#define trigPin 5 // Trigger Pin


double Duration = 0; //受信した間隔
double Distance = 0; //距離
void setup() {
Serial.begin( 9600 );
pinMode( echoPin, INPUT );
pinMode( trigPin, OUTPUT );
}
void loop() {
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite( trigPin, HIGH ); //超音波を出力
  delayMicroseconds( 10 ); //
  digitalWrite( trigPin, LOW );
  Duration = pulseIn( echoPin, HIGH ); //センサからの入力
  if (Duration > 0) {
    Duration = Duration/2; //往復距離を半分にする
    Distance = Duration*340*100/1000000; // 音速を340m/sに設定
    Serial.print(Distance);
    Serial.write("\n");
  }
  delay(1); //シリアルモニタで確認するときは100
}




Processing
/*
 * Arduino - Processingシリアル通信
 * センサーの値をグラフにプロット
 * Processing側サンプル
 */
import processing.serial.*;


int NUM = 1; //センサー個数。今回は1個。「ショックセンサーの例」では2個
Serial myPort; // シリアルポート


float sensors = 2; //センサーの値を格納する配列
int cnt; //カウンター


// グラフの線の色を格納
color[] col = new color[6];
int pSize = 2;  //異なる2つのプロットサイズで


void setup() {
  //画面設定
  size(1600, 400);
  frameRate(240);


  // シリアルポートのリスト取得
  //println(Serial.list());
  // ポート番号とスピードを指定してシリアルポートをオープン
  String portName = Serial.list()[1];
//  myPort = new Serial(this, portName, 9600); //Win
  myPort = new Serial(this,"/dev/cu.usbmodem1421",9600); //Mac
  // 改行コード(\n)が受信されるまで、シリアルメッセージを受けつづける
  myPort.bufferUntil('\n');
  //グラフ初期化
  initGraph();
}


void draw() {
  // センサーの数だけ、グラフをプロット 。今回は1個。複数個のときは「ショックセンサーのプログラム参照」
  fill(col[1]);
  float tx = map(cnt, 0, width, 10, width); //左に余白10
  float ty = map(sensors, 0, 100,height-10,10); //上端がy=0のため、下端をベースに描画するにはこのリマップ← ※上下余白 100
  ellipse(tx, ty, pSize, pSize);
  if (cnt > width) {
  initGraph();
  }
  //カウンタアップ
  cnt++;
}


//グラフの初期化
void initGraph() { 
  background(47);
  noStroke();
  cnt = 0;
  // グラフ描画の線の色を定義
  col[0] = color(255, 127, 31);
  col[1] = color(31, 255, 127);
  col[2] = color(127, 31, 255);
  col[3] = color(31, 127, 255);
  col[4] = color(127, 255, 31);
  col[5] = color(127);
}


void serialEvent(Serial myPort) {
  // シリアルバッファーを読込み
  String myString = myPort.readStringUntil('\n');
  // 読み込んだ文字列を 小数(数字)に変換して、関数に代入
  sensors = float(myString);
}





-----------

参考サイト
今後「Arduinoからのシリアル通信結果をProcessingでテキスト出力」はこれまんま
https://kenyu-life.com/2018/11/24/pulsesensortxtdata/




2017年3月3日金曜日

風船ポンポン 1.入力装置作成


ずっとやりたかった、風船を使ったインタラクティブな作品にとりかかります!
目標は、1ヶ月間でこどもに遊んでもらえるようなカタチまで作る

・・・頑張ります!汗

これ、本当は昨年末のクリスマスに大々的に実践したかったんですが、
当時は公私でバタバタしてて自主制作どころじゃなかったです。。
海外から極小Arduinoとか面白アイテムとか大量に買い込んでたんだけどなぁ、トホホ。
結局、風船にレインボーLED入れて床に置いただけでした。
それはそれで、子供もはしゃいで楽しんでくれたのでよかったですけどね!

 やっぱり「触れる」のって楽しい!
 2016.クリスマス



さて、とりあえず今回は、風船タッチテストに便利なように入力装置作ってみた。
風船の中にショックセンサー入ってます。
空気抜けないように、ホットボンド多用しました。

データの流れは
風船の中のショックセンサー → Arduino → Mac (Processing)

とりあえず今日はここまで笑。



以下は、昨年末のショックセンサー初テストメモ(書きなぐりですが)を転載。
yoppaさんのサイトにはいつもお世話になってます。

---------------------
2016.10.15 memo
---------------------

初のアナログデータのグラフ(プロット)視覚化!!!!たのしい。
ショックセンサーからArduinoにアナログ入力(0~1024)、
それをProcessingでグラフ化!!

今回のミソ
※複数個のデータが1つにまとまったデータ群(時系列データ)のシリアル通信 ★★
→要は、Arduinoで , で区切ってひとまとめにして送信。Processingで , で区切って分解。



【テスト】

目的:
ショックセンサーの入力をProcessingに送信してビジュアル化

手順:
①ショックセンサーから値入力 (アナログ 0~512)
 それをArduinoで 0~255にリマップ

②シリアルでProcessingに通信。 <ここまでArduino処理>
 ・・・例: 0,0 \n 512,255 \n 200,100 

③Processingでグラフにプロット , を読み取り値を分解。
   シリアル通信を読み取る。読み取ったデータをyの値としてsensors[]に一旦格納。
 それをx方向に追加していく。端までいったら新しいページに描画。

以下スケッチ
===========Code: Arduino ===============

===========Code: Processing=============


スケッチと実行結果
横が時間軸、センサーが反応したところで点が上下している。