yoppa.org


バイオメディア・アート

ArduinoとProcessingの連携2:大きな値を送信する、データの流れを視覚化する

ArduinoとProcessingの連携2:大きな値を送信する、データの流れを視覚化する

今日の内容

先週の課題の講評会

センサーからの入力を視覚化する – ArduinoとProcessingの連携のつづき

  • 大きな値を送受信する – 大きな値 → 0〜1023 (1024段階 = 210 = 10bit)
  • 先週のように、0〜255にマッピングするのではなく、全ての値が反映されるように送受信する方法を学ぶ – ビット演算の使用
  • データの流れを視覚化する
  • ノイズの影響などを除去しながらデータが変化する様子を視覚化する

先週の課題の講評会

先週の課題:

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

大きな値を送受信する

先週の授業でのArduino → Processingのデータの送受信

  • Arduino – 0 〜 1023 (1024段階、210)
  • Serialで一度に送出できる範囲 – 0 〜 255 (256段階、28)
  • Arduinoの値をSerialにあわせるため、map() 関数で値を補正 – map(val, 0, 1023, 0, 255);
  • 値の解像度が1/4になってしまっていた – できることなら全ての値を送りたい

今日用いる手法:値を分割して送信する

  • 値を8bitずつで分解、2回にわけて値を送出する
  • bit演算を用いて、分解、再合成を行う

ビット(bit)とは

  • ビット (bit) は、デジタルコンピュータが扱うデータの最小単位 – “binary digit” の略
  • 2通りの状態しか表現できない – “0” または “1”

例:3bit – 3桁のbit

  • 3bitで表現できる数 → 0 〜 7 の8通り
  • bitで表現できる数は、2の乗数で計算できる
  • 3bit = 2^3 = 8

8bit = 1byte

  • 00000000 から 11111111
  • 10進数の数値にすると、0 から 255
  • Serial通信で一度に送れる数値は、1byte つまり 0 (00000000) 〜 255 (11111111)

Arduino – Processingの通信の流れ

  • 1024 = 16bit → ArduinoのAnalog inの精度
  • 255 = 8bit → Serial で一度に送出できる値
  • Arduinoの入力値16bitを、8bit のかたまり2つに分解する
  • 2回にわけて8bit( = 1byte) ずつSerialで送信

例:入力の値が、950 (0000001110110110)だったら

16bitの列から上位の8bitをとりだすには? – bit シフトを行う – 各桁を左または右に移動する

  • 右方向に1bitシフト
  • 0000001110110110 >> 1 = 0000000111011011
  • 右に1桁移動

16bitの列から上位の8bitを取り出すには

  • 右方向に8bitシフト
  • 0000001110110110 >> 8 = 0000000000000011
  • 右に8桁移動 → 上位の8桁をとりだした状態
  • 10進数で表現すると
  • 950 >> 8 = 3

16bitの列から下位の8bitをとりだすには?

  • bit マスクを行う – bit単位のAND計算

例:下位8bitだけをとりだす

まとめ – 16bitの数値の、上位 8bit と下位 8bit を分解するには

  • 上位 8bit:8桁 bitシフトを行う
  • 下位 8bit:下位 8bit をマスクする

例:入力が 950 (0000001110110110) の場合

  • 上位8bit:950 >> 8 = 3 (00000011)
  • 下位8bit:950 & 255 = 182 (110110110)

それぞれを、Serialで送信してあげればよい

以上の手順を、ArduinoとProcessing側双方で実装してみる

Arduino側

Processing側

データの流れを視覚化する

データの流れを視覚化する1

データからノイズを除去する

  • センサーからの入力値には、意図しない信号(ノイズ)がのってしまう場合がある
  • Processing側の工夫で、急激な入力信号の変化は除去したい
  • 実際の値の変化を、指定した値でeasingする → なめらかな変化となる

Arduino側

Processing側

データの流れを視覚化する 2

  • 視覚的な部分をもう少し工夫してみる
  • データを横にスキャンするのではなく、円形にスキャンしてみる

Arduino側のプログラムは同じ
Processing側

サンプルコードのダウンロード

今回の授業で紹介した全てのサンプルは、下記のリンクからダウンロード可能です

  • Pingback: log()