yoppa.org


バイオメディア・アート

ArduinoとProcessingの連携1 : センサーの情報を視覚化する

今日の内容

  • ArduinoとProcessingを連携する
  • Arduinoのアナログインにセンサーからの情報を入力
    • 可変抵抗
    • 光センサー
    • 温度センサー
  • ProcessingからArduinoの情報を取得してリアルタイムに情報を視覚化
  • 今後のBio Media Artの肝となってくる部分!!

ArduinoとProcessinの連携方法

  • Serial 通信による連携
  • Funnelによる連携
  • この授業では、Serial通信のほうを採用
  • 参考として、Funnelを使用した方法も紹介

シリアル通信:全体の構成

サンプル1:可変抵抗の値を送信

  • まずはシンプルな構成で連携をテスト
  • ブレッドボードとArduinoの配線
    • 可変抵抗1つ
    • ArduinoのAnalog in 0に抵抗値を接続
    • USBケーブルで、ArduinoをPCに接続
  • Arduino
    • Analog in の値を取得 – analogRead()
    • シリアルで値を送信 – Serial.print()
  • Processing
    • シリアルポートに接続
    • シリアルポートから値を読み取る
  • 可変抵抗器 (ポテンショメーター)
    • 抵抗値を変更することができる抵抗器
    • 今回は、10KΩの可変抵抗器を用意

  • 可変抵抗器の抵抗値をとりだす

  • 全体の配線例

  • Arduino側のプログラム
    • setup() – 初期設定
      • シリアル通信を開始
    • loop() – メインループ
      • Analog in 0 の値を読み取る
      • Analog in の値の範囲は、0〜1024
      • Serialで一度に出力できる範囲は、0〜255 (1 BYTE)
      • 入力値を、0〜255の範囲にマッピング (map関数)
      • シリアルで補正した値を送信
      • 一定間隔静止して、繰り返す

  • Processing側プログラム
    • setup() – 初期設定
      • シリアルポートを設定
      • Serialクラスを初期化
    • serialEvent() – シリアルイベント
      • シリアル通信でデータを受信した際に発生するイベント
      • read() で値を取得する (0〜255)
      • 取得した値をモニタする – println()
    • draw() – 描画
      • 取得した値を背景のグレースケールのレベルに対応させている

  • 完成!
  • 可変抵抗の値を変化させると、背景色の濃度が変化する

サンプル2:複数の値を送信

  • 複数のセンサーからの値を取得するには
  • Arduinoには、Analog in が最大5つまで使用できる
  • 複数のAnalog入力の値を取得してみる
  • まずは可変抵抗でテスト
  • ブレットボードとArduinoの配線例

  • ArduinoとProcessinを連携する際の注意
  • Arduinoからのシリアル出力は、値が順番に送られる
    • 例:入力が3つ(byte0, byte1, byte2)の場合
    • byte0, byte1, byte2, byte0, byte1, byte2, ….
  • Processingの受信方法を工夫しないと、値がずれてしまう場合がある
  • 例:
    • 012012012012… – 想定した値
    • 120120120120… – 順番がずれた値
  • 順番がずれてしまわないように、Processing側で値のセットを受け取ったら読み込み完了の合図を送る
  • 同期のイメージ

  • Arduino

  • Processing

  • 可変抵抗の設定で、背景色、描画色、円の大きさが変化する

サンプル3:光センサーを使う

  • 可変抵抗でなくても、変化するアナログ値であれば、なんでも利用可能
  • 可変抵抗を各種センサーに入れ替えてみる
    • 光センサー (CdSセル)
    • 測距センサー (赤外線センサー)
    • 感圧センサー
    • 振動センサー
    • 曲げセンサー
    • 温度センサー
    • 傾きセンサー
  • まずは、光センサーを使用してみます
  • Arduinoと、Processingのプログラムは、そのまま流用可能
  • ブレットボードとArduinoの配線例

  • センサー部分拡大

サンプル4:温度センサーを使う

  • 温度センサーをつかって、温度に反応するようにしてみる
  • LM35DZ – 温度センサー、0℃で0V、20℃で200mVになる

  • ブレットボードとArduinoの配線例

課題:センサーの値を視覚化する

  • Generative Gestaltungのコードを活用して、Arduinoにとりつけたセンサーや可変抵抗、スイッチなどを操作すると形態や動きが変化するプログラムをProcessingで作成する。
  • 使用するセンサーは自由に選択してください。温度センサー、光センサー、可変抵抗以外のものでもOK
  • 複数のセンサー、可変抵抗を組み合せても構いません
  • 次回の月曜の授業まで!

課題のサンプル

  • Generative Gestaltungの”M_1_2_01″を改造して作成
  • マウスのX座標によって変化する変数”faderX”を、シリアル入力の値に変更
  • 色も微妙に変化させている
  • Arduino側のコードは、サンプル1と一緒

  • Processing側コード
  • Generative Gestaltung M_1_2_01 を改造

  • Pingback: log()