csvファイルを読み込んだLED点滅回路の開発

-ArduinoとProcessingを連携させて脳波データのcsvファイルを読み込む-

目次

はじめに

 こんにちは、アンです。

 今年から、簡易脳波計による脳波のデータを用いた、ジェネラティブアートやインタラクティブアートについての表現を研究しています。最近、新しい簡易脳波計が研究室に届きました。10分ほど自分の脳波を測り、データのcsvファイルを手に入れました。ArduinoとProcessingを連携させて、脳波データのcsvファイルを読み込んだLED点滅回路を作ってみました。今回は、その回路の作り方を紹介します。

簡易脳波計と脳波データ

 今回使用した簡易脳波計はFocus Calmです。脳波データをやり取りするときに使用したアプリはGoodBrainです。Focus Calm を使うことで、GoodBrainのアプリからalpha、beta、delta、theta、gammaの5種の脳波データのcsvファイル(図1)を取り込めます。今回は、研究室にて英語の文献を読んだ時に10分ほど計測した、alpha波のデータを使用します。

図1:csvファイルのスクリーンショット

Arduino上のLED点滅

 これまで、電子工作の経験がなかったため、ゼロからArduinoについての知識を勉強しました。基本的な物理学の知識とプログラミングの経験があったため、Arduinoの入門や基本的な操作方法はそれほど難しくありませんでした。

  • 回路のデザインと部品のつなぎ

     今回の回路は、Arduino IDE 2.0.0のソフトウェアにある内蔵のスケッチ例のBlinkInputPullupSerialをもとにデザインしました。下の表のなかの部品を図2のように繋ぎます。

部品名 数量
ARDUINO UNO 1
ブレットボード 1
LED (5mm) 4
抵抗 (200R) 4
タクトスイッチ 1
USBケーブル 1
ジャンパーワイヤー 13

図2:Arduino回路

  • プログラミング

     下のように書きました。

boolean pushButton;
void setup() {
  pinMode(2, INPUT_PULLUP);
  pinMode(8, OUTPUT); // green
  pinMode(9, OUTPUT); // yellow
  pinMode(10, OUTPUT); // red
  pinMode(12, OUTPUT); // white
}
void loop() {
  int  myLightNow;
  if (!pushButton ) {
    myLightNow = int(random(0, 5));
  } else {
    myLightNow = 0;
  }
  switch (myLightNow) {
    case 1: // white
      digitalWrite(12, HIGH);
      delay(100);
      digitalWrite(10, LOW);
      digitalWrite(9, LOW);
      digitalWrite(8, LOW);
      break;
    case 2: // red
      digitalWrite(12, LOW);
      digitalWrite(10, HIGH);
      delay(100);
      digitalWrite(9, LOW);
      digitalWrite(8, LOW);
      break;
    case 3: // yellow
      digitalWrite(12, LOW);
      digitalWrite(10, LOW);
      digitalWrite(9, HIGH);
      delay(100);
      digitalWrite(8, LOW);
      break;
    case 4: // green
      digitalWrite(12, LOW);
      digitalWrite(10, LOW);
      digitalWrite(9, LOW);
      digitalWrite(8, HIGH);
      delay(100);
      break;
    default:
      digitalWrite(12, LOW);
      digitalWrite(10, LOW);
      digitalWrite(9, LOW);
      digitalWrite(8, LOW);
      break;
  }
}

  • デモ動画

     USBケーブルを使ってPCと繋げます。プログラミングをマイコンボードに書き込んだら、タクトスイッチを押しながら、4つのLEDをランダムで点滅させます。

csvファイルを読み込む方法

 次に、脳波データのcsvファイルを上記にあるランダムのデータと入れ替える方法を紹介します。調べてみたところ、直接にArduinocsvファイルを読み込むのは難しいと感じました。そのため、他のツールを探しました。今回使っていたのはProcessingです。主にProcessingにおけるTableを使います。

 次のようにProcessingでコードをを書くことで、csvファイルのデータを読み込めます。

Table a;
int[] lightIndex;
int data_Row;
int count;
void setup() {
  size(300, 300);
  a = loadTable("name.csv", "header");
  data_Row = a.getRowCount();
  lightIndex = new int[data_Row];
  count = 0;
  for (int i = data_Row - 1; i >= 0; i--) {
    lightIndex[i] = a.getFloat(i,0);
  }
}

(具体的な説明は参考資料[1]をご覧ください)

 そして、ProcessingのライブラリーのSerialを用いることで、Processingに読み込んだデータをArduinoに読み込めます。下にあるのはコードの例です。

import processing.serial.*;
Serial port;
Table a;
int[] lightIndex;
int data_Row;
int count;
void setup() {
  size(300, 300);
  port = new Serial(this, "/dev/cu.usbmodem14101", 9600);
  a = loadTable("BrainWaveData_0912_01_Samuel.csv", "header");
  data_Row = a.getRowCount();
  lightIndex = new int[data_Row];
  count = 0;
  for (int i = data_Row - 1; i >= 0; i--) {
    lightIndex[i] = int( a.getInt(i,0))/2;
 }
}
void draw() {
  if (count < data_Row) {
    port.write(lightIndex[count]);
    count ++;
  }
}

(具体的な説明は参考資料[2]をご覧ください)

  • Arduinoのコード

     Arduino側にもSerialを使ってprocessingからのデータを読み込めます。

boolean pushButton;
void setup() {
  Serial.begin(9600);
  pinMode(2, INPUT_PULLUP);
  pinMode(8, OUTPUT); // green
  pinMode(9, OUTPUT); // yellow
  pinMode(10, OUTPUT); // red
  pinMode(12, OUTPUT); // white
}
void loop() {
  int  myLightNow;
  if (Serial.available() > 0) {
    char data = Serial.read(); // データを読み込む
    if (!pushButton ) {
      myLightNow = int(data);
    } else {
      myLightNow = 0;
    }
    switch (myLightNow) {
      case 1: // white
        digitalWrite(12, HIGH);
        delay(100);
        digitalWrite(10, LOW);
        digitalWrite(9, LOW);
        digitalWrite(8, LOW);
        break;
      case 2: // red
        digitalWrite(12, LOW);
        digitalWrite(10, HIGH);
        delay(100);
        digitalWrite(9, LOW);
        digitalWrite(8, LOW);
        break;
      case 3: // yellow
        digitalWrite(12, LOW);
        digitalWrite(10, LOW);
        digitalWrite(9, HIGH);
        delay(100);
        digitalWrite(8, LOW);
        break;
      case 4: // green
        digitalWrite(12, LOW);
        digitalWrite(10, LOW);
        digitalWrite(9, LOW);
        digitalWrite(8, HIGH);
        delay(100);
        break;
      default:
        digitalWrite(12, LOW);
        digitalWrite(10, LOW);
        digitalWrite(9, LOW);
        digitalWrite(8, LOW);
        break;
    }
  }
}

  • デモ動画

     動画のように脳波データのcsvファイルを使ってLED点滅をさせました。

さいごに

  今回、脳波データのcsvファイルを使用したLED点滅回路の開発を簡潔に紹介しました。「電子工作」、「IoT」、「Arduino」の魅力を感じました。これからも、ジェネラティブアートやインタラクティブアートの表現についての機能などを開発し続けたいと思います。

参考資料

競プロ入門 - 探索問題の解法テンプレ-

はじめに

こんにちは,光岡です.

最近少しだけですが,競技プログラミングを始めました. コンテストに参加しているわけではなく,現状だとコーディングテスト対策がメインになっていますが,慣れてきたら参戦してみたいです.

まずは基本の全探索から始めてみるか〜と思い,AtCoderの問題を解いているのですが,単純にfor文を回すと時間切れ(TLE: Time Limit Exceeded)になる問題あたりから,すんなり正解できなくなってきました..

そこで,探索系の問題が出たときの自分用の解法のテンプレ集を作ってみました!

解き始めに確認すること

実行回数を見積もる

問題を解き始める際に最初に確認することは, ズバリ,単純にfor文を回すだけでOKな問題か確認することです!

AtCoderでは,処理の制限時間は1~2秒,1秒あたり108回程度の計算が可能と言われています.

つまり,単純なfor文を回した際に,2 * 108を超えないか,実行時間を見積もることが大事です.

自分は最初なんとなくコードを書き始めてしまっていたので,コードを提出してみたらTLE→修正のサイクルでやってしまってました..

工夫

単純にfor文を回すとTLEになってしまう...そんな時は,問題文を注意深く読み,処理が減らせないか考えます. そのために,全探索問題に出会った時に,使える可能性のあるテクニックをまとめてみます.

for文で考慮すべき上限を確かめる

atcoder.jp

問題文
正整数 X が与えられます。 X 以下の最大のべき乗数を求めてください。 ただし、べき乗数とは、ある 1 以上の整数 b と 2 以上の整数 p を使って bpとかける整数のことを指すこととします。

制約
1 ≤ X ≤ 1000
X は整数

この問題の制約では,べき乗数がいくつまでかの記載はありませんが,1以上の整数(1は何乗しても1のため,2で考える)と記載あるため,2x が1000を超える時が,べき乗数pの最大値になります.
つまり,210 = 1024 より,2 ≤ X ≤ 10を考慮して,for文を回すと余計な処理を行わずに,実装することができます.

条件から残りの変数を導き出す

atcoder.jp

問題文
2 つの整数 K,S が与えられます。
3 つの変数 X,Y,Z があり、0≦X,Y,Z≦K を満たす整数の値を取ります。
X+Y+Z=S を満たす X,Y,Z への値の割り当ては何通りありますか。

制約
2≦K≦2500
0≦S≦3K
K,S は整数である。

何も考えずに解き始めると,for文でX, Y, Zの3回分回そうとしてしまいがちですが,
X+Y+Z=Sより,for文2回で,X, Yを指定した段階で,Z=S-X-Yにより,for文2回のままZを導き出すことができます.

実行時間の見積もりも,for文3回だと,
2500^3 = 2.5^3 * 10^9 > 2 * 10^8
となりTLEしますが,for文2回だと,
2.5^2 * 10^6 < 2 * 10^8
となり,TLEしなくなります!

bit全探索

一回の操作が2通り(スイッチのON/OFF,硬貨が表/裏,...)の時,つまり*2N通りを全探索する際は,二進数を使います!

使える問題
複数ある商品(最大 2020 個程度)それぞれについて『買う』『買わない』とか、複数ある整数をそれぞれについて『選ぶ』『選ばない』といった、2 種類の選択肢が複数ある問題

bit全探索でやること
そのタイプの問題で、『ありえる選択肢の組み合わせ方を全てもれなく列挙』して、『一つ一つの組み合わせに対して計算や判定を行う』ことで、答えを見つけるアルゴリズム

こわくないbit全探索1 入門編: bit全探索ってなに?【競プロ解説】 - Qiita

bit全探索が主題された時のテンプレとしては下記の記事がとてもわかりやすく,参考にしています.論理積&, ビットシフトに関しての記載はここでは割愛しますが,気になったらぜひ確認してみてください!

bit全探索で沼った!! - Qiita

参考コード

for i in range(2**N):
    for j in range(N):
        if (i>>j) & 1:

bit全探索の注意点
組み合わせは2N通り.指数関数的に増えるため,実装時間の見積もりに注意が必要です.

Python3 → PyPy3 で提出

これはPythonを利用している方限定ですが,言語指定をPyPyにするだけで処理速度が速くなり,フィボナッチ数列の出力では約2.4倍速いそうです.ギリギリTLEしていたら,正解(AC: Accepted)になる可能性あります!


PyPyの説明については下記記事で確認してみてください!

www.sejuku.net

おわりに

まだまだ色々な全探索の解法があり,今回取り上げたのは一部ですが,今後もまとめたいものを追記していきたいと思います!

参考記事

atcoder.jp

qiita.com

atcoder.jp

atcoder.jp

atcoder.jp

www.sejuku.net

qiita.com

qiita.com

qiita.com

「質問力を鍛える」ことを決意しました

はじめに

こんにちは。ネットワークデザインスタジオM1の及川です。
更新が遅れてしまいました。
今回は、「質問力」に興味を引かれた理由と、「質問力を鍛えるぞ」という決意について書こうと思います。

なぜ質問力が欲しくなったのか

私が質問力に興味を引かれたのには、2つのエピソードが大きな影響を及ぼしています。

1つ目のエピソードは、大学および大学院の前期期末公開発表です。
前期期末公開発表とは、前期に進めてきた卒業制作や修士論文について発表し、学科の先生方から意見や質問をもらうことで研究を深める場です。この発表会を通して2つのことを感じました。

まず1つ目、学科の先生方はつい1分前に聞いたことに対して、どうしてすぐに質問を投げかけられるのだろうという疑問。

次に2つ目は、学科の先生から投げられた質問(そこまで深い質問ではない)に「それは考えられていませんでした、今後検討します。」と回答する学生の多さです。

これらの状況を見て、私は自分の研究に対する質問にはしっかりと自信を持って答えたいし、他の人の研究にももっと質問をしたいと思いました。質問を出せる、質問に回答をできるというのは、密接に関係しているのではないかと思います。質問を投げかけられる人は、おそらく自分の研究についても自問自答によって質問を投げかけていますし、答えを考えているのではないでしょうか。

2つ目のエピソードは、就活に向けたサマーインターンのための面接です。
企業の面接では、「逆質問の時間」が10分から20分程度設けられることが多いと思います。しかし、私は面接に向けて準備をする中で、質問が全く浮かび上がってきませんでした。

そこで、「面接 逆質問」と検索をしました。すると、「逆質問が思いつきません。どんなことを聞けばいいのでしょうか。」と言う内容の質問がYahoo!知恵袋にありました。この質問者に対する回答は厳しいものでした。「興味があるなら自ずと思い浮かぶはずだ。思い浮かばないなら受けるな。」などという回答が多いのです。その回答を見て、私としては興味を持ってその企業を見ているつもりなんだけどなあ、もしかしてどこにも就職できないのでは…と、悲しくなりました。

これら2つのエピソードから、私は「質問力を鍛える」ことを決意しました。

おわりに

まずは、質問力に関する本を読んでいくことにしました。ひきたよしあき『博報堂クリエイティブプロデューサーが明かす 「質問力」って、じつは仕事を有利に進める最強のスキルなんです。 』(大和出版)と、北村 良子『1日1問! 面白いほど地頭力がつく思考実験』(PHP研究所)を購入したので、実践していきたいと思います。そして、その経過を自分の記録用としてこちらのブログに残せればと思います。 daiwashuppan.com www.php.co.jp 今回は決意表明のみでした。私は3日坊主になりがちなので、この場で皆さんに見張ってもらえればと思います。

ノイズとアートの間にはどんな関係があるのか

目次

はじめに

 こんにちは、アンです。

 最近、私の博士前期の研究テーマやタイトルについて悩んでいます。社会や他者からの「ノイズ(騒音)」が私たち人間に及ばす影響に興味があります。その影響に対する人間の脳の反応に着目し、ジェネラティブアートの制作を研究したいです。そこで、ノイズとアートに関連性がある概念や事例を調べました。

ノイズとは

 ノイズの概念は、分野によって違います。情報処理の分野では、ノイズは処理対象となる情報以外の不要な情報のことです。一方、日常生活のノイズは、日本騒音制御工学会によると、ノイズあるいは騒音、雑音とは、身の周りの様々な音のうち、人に好ましくない影響を及ぼす音、不必要な音、邪魔な音を指します[1]。しかし、ノイズ(騒音)は主観的な概念として定義されています。つまり、音の印象は聞く人とその人の状態によって大きく左右されます。ある人にとっては、快い音楽であっても、別の人には騒音になりかねません。たとえば、電車やバスのなかで隣の人のヘッドフォンから漏れた音などがそうです。さらに、ノイズ(騒音)は聞く人にとっての個人的問題であるばかりでなく、聞く人が属する社会や文化にも関わっています[2]。つまり、ある音がノイズかどうかを判断する基準は、主観的な基準であり、同時に、社会的あるいは文化的な基準でもあります。

ノイズとアート

 ノイズは、それぞれの分野で定義が違います。しかし、必ず不要、邪魔、余計などの意味を含んだ定義がされています。つまり、どんな分野においても、ノイズは良くないものです。

 一方、アートまたは芸術とは、作品の創作と鑑賞によって精神の充実体験を追求する文化活動を指します。精神の充実体験として、アートは人間に良い影響を与えるといえます。

 このように意義が対立している二つの概念には、密な関係があります。音楽、ジェネラティブアートの二つの分野で、ノイズとアートの関連性を検討します。

  • ノイズと音楽(ノイズ・ミュージック)

 もともと、音楽美学の分野では、音楽にふさわしい音、ふさわしくない音の区別を研究されていました。たとえば、ジゼール・ブルレは、「楽音」と「騒音」を対比させて以下のように論じます。「騒音は私たちを世界へとつなぎとめるが、音楽は私たちを世界から解放してくる。騒音は動揺を引き起こすのに対して、楽音は安らぎを与える」[2]。しかし、イタリア未来派ルイージルッソロがノイズに美的な価値を見出しました[3]。そのさい『騒音の芸術(The Art of Noises)』という宣言を発表しました。自動車のエンジン音など日常生活のなかでのノイズ(騒音)は抽象的な素材となり、音楽の作品が作られます。ルッソロはノイズを用いた表現と電子音楽の先駆者と考えられています。

  • ノイズとジェネラティブアート

    3D Noise_colorful(https://openprocessing.org/sketch/1609947)
     ジェネラティブアートとは何かを前回のブログで紹介しました。私の場合は、p5.js、processing、glslなどのプログラミング言語を使ってジェネラティブアートの表現を研究しています。これから、p5.jsを使用して作れた例を挙げながら、ジェネラティブアートでのノイズを紹介します。

     p5.jsでのnoise関数とperlin noise 

     p5.jsのnoise関数の説明によれば、noise()関数は指定された座標での パーリンノイズ(Perlin noise)値、あるいはランダムの値を返します。random() 関数と比較すると、より自然な順序で調和のとれた一連の数値を生成するランダムシーケンスジェネレータです。パーリンノイズは、1980年代にKen Perlinによって発明され、手続き型のテクスチャ、自然な動き、形状、地形などを生成するためにグラフィカルアプリケーションで使用されています。

     パーリンノイズは、無限のn次元空間で定義されます。p5.jsには、指定された座標の数に応じて、1D、2D、および3Dノイズを計算できます。結果の値は常に0.0 から 1.0 の間になります[4]。

     p5.jsで、一次元のnoise(x)、二次元のnoise(x, y)と三次元のnoise(x, y, z)それぞれを使って1D、2D、3Dの例(下の図)を作りました。

    noise関数の例(左から右までは1D2D3Dの表現)

    池田亮司と《test pattern》

     池田亮司は、日本の電子音楽実験音楽のミュージシャン、現代美術作家として知られています[5]。超音波、周波数、そして音そのものの持つ本質的な特性の細部に徹底してこだわる池田の作品は、音の物理的特性や人間の知覚との因果関係、音楽としての数学的類推、時間、空間を活用する[6]といわれています。2008年から、代表的なシリーズ制作の《test pattern》が始まりました。《test pattern》は、あらゆる種類のデータ(テキスト、サウンド、写真、映画)を2つの形式「バーコード」と「0/1バイナリー」に変換するシステムです。下の写真は、2017年の「test pattern [nº13]」です。

    「test pattern [nº13]」(photo: Martin Argyroglo)[7]
     私の感想

     シリーズ作品の《test pattern》は、私にとってはじめて理解できた池田の作品であり、また一番印象的な作品でもあると思います。《test pattern》では、ノイズのような実験的な音楽と、白黒のパターンが長年試行錯誤されています。音の持つ本質的な特性を細部まで検討、音だけではなく画像や映像のノイズに活用していることを池田の作品から学びました。

さいごに

 今回はノイズの定義、音楽とジェネラティブアートの分野でのノイズについての概念を簡潔に紹介しました。同時に、池田亮司の代表作とそれに対する私の感想を書きました。私のこれからの研究と制作に参考にしたいと思います。

参考文献

ISUCON12に参加します!

はじめに

こんにちは,光岡です.2本目の記事になります.

前回はGo言語を使ったソートアルゴリズムに関して書き,今回も当初はアルゴリズム関連の予定でした.しかし2本目にして早速路線変更することにしました.(綺麗なシリーズ化はできそうにないので,アルゴリズムを学んで,また書きたくなったら書こうと思います..)

今月何があったかな..と振り返った時に思い出したのが,

"無事に"ISUCON12の参加登録ができた!

ってことですかね.

ISUCONとは?については後述しますが,3回あった申し込みのうち,1回目は2分44秒で220枠が埋まってしまい,2回目で無事に参加登録できました.ちなみに2回目は1分10秒で予約215枠が埋まったそうです💦

まるで,有名なアーティストのライブチケットの争奪戦のようでした...

ということで,今回はISUCONについて,その中でも先日の事前講習座学&ハンズオンにも参加してきたので,座学で学んだことについて書いていこうと思います.

ISUCONとは

ISUCONとは,お題となるWebサービスを決められたレギュレーション内で,高速化を行いその点数を競う大会になります. ISUCONの名称は,Iikanjini(いい感じに)SpeedUp Contest から取られています.この名称の由来を聞いたら緩そうな大会に感じるかもしれませんが,中身はガチな大会となっています.

年一回で行われており,1チーム3人まで,最近は約600チームが参加しています.有名企業がスポンサーを務め,予選大会で上位30チームまで絞られ,本戦で優勝したチームには賞金100万円です!前述しましたが,今年のISUCONはまず参加するのが一苦労でした. つまり,Webエンジニアにとってはロマンあふれる大会ということですね!

私は去年初めて参加しましたが,正直な感想は難しすぎて何が何だか分からないっていうのが本音でした.結局SQLの最適化・インデックスを貼ったぐらいで全然戦力になりませんでした. ということで,今年もチャレンジです!

事前講習座学編の学び

事前講習座学編の資料に関しては,既に公開されているため,気になる方は下記を見てみてください!

isucon.net

今回の記事では,本当に一部を抜粋して書いています.

「やっていいこと」は明言されていない

ISUCONはレギュレーションに禁止事項がしっかりと書かれており,開始直後にまずそのルールを確認することがとても大事です.反対にやっていいことに関しては,特に制限がありません.挙動が変わらず,禁止事項に触れていなければ基本的には何をやっても大丈夫です.3台のサーバーが渡されますが,役割も自由です.ある年ではサーバー2台をDBにあてることで良いパフォーマンスが出ることもあったそうで,その時々のお題のサービスの特徴を掴んで対応する力が必要になります.

ISUCONではクライアント以降全てが対象領域

ISUCONでは,対象となる技術領域がとにかく広いです.サーバーもEC2が渡されるため,OS等の知識がもちろん必要です.最近はECSばかり触れていた自分は楽をしていたなという気持ちにさせられます笑.そしてnginxからアプリケーションコード,RDB,KVS,Cacheなどてんこ盛りです.その分学びもたくさんあり楽しいですが..

デプロイに1分以上かけない

改善した内容を反映するデプロイは,脳死でできるように準備しておきましょう.改善して負荷試験をしてログを見て次の改善ポイントを探す一連の流れが制限時間内で何回行えるかが大事になります.そのため繰り返し行う手順はとにかく素早く行えるように準備しておこうとのことでした.

ISUCONから学べること:世界中にクライアントが増えていく

座学も面白かったのですが,個人的にその後の,「世界中にクライアントが増えていく」というお話がとても興味深かったです. IoT化が進み,いつか日本世帯全ての炊飯器が通信すると5000万台がサーバーに,「ご飯が炊けましたよ」の時代が来るかもねというお話でした.この大量の通知でサーバーが死ぬかもしれません.こういった時代が来るのであれば,性能改善の重要性はますます高まります.危機的なお話ですが,ワクワクしながら聞いてました!将来そういった部分も担当したいなと思ったり..

さいごに

だいぶかいつまんで書いてしまいましたが,ISUCONの雰囲気が少し分かる感じならいいかなと思います.まだまだ2回目のISUCON初心者なので,予選までに練習を重ね,色々知見を深めたいなと思います.

Bluetoothの活用法を調べてみた

はじめに

はじめまして、及川です。今回は、Bluetoothのさまざまな使用例についてまとめたいと思います。Bluetoothと聞くと、イヤホンやマウス、キーボードの無線接続が思い浮かびますが、他にどのような使用方法があるのか気になったので調べてみました。今回は、普段目にしないところまで手を伸ばして、Bluetoothの使用例を見ていきたいと思います。

そもそもBluetoothとは

Bluetoothとは

毎日使っているBluetoothについて、基本情報を確認してみます。デジタル大辞泉によると、Bluetoothは以下のようにまとめられています。

スマートホン、パソコンの周辺装置などの無線接続に用いられる通信規格。ケーブルを使わずにデータの送受信や機器の連携が可能となる。

Bluetoothとは何? わかりやすく解説 Weblio辞書

ぼんやりと持っていたイメージと同じでした。 無線接続と聞くと一番に思い浮かぶのはWi-Fiですが、Bluetoothならではの特徴はどのようなものがあるのでしょうか。

Bluetoothの特徴

Bluetoothの特徴
・省電力
・近距離(~10m程度)
・そこそこ速い通信速度
・音楽系に強い
・パーソナルユースの機器に強い

【サルでもわかるBLE入門】(1) BLEの基礎 - 株式会社ムセンコネクト

Bluetoothは、Wi-Fiよりもはるかに消費電力が小さいことが最大の特徴です。
通信距離も通信速度もWi-Fiより小さいのですが、消費電力が小さい点を最大限に活用した使用用途が多いようです。

Bluetoothで何ができるのか

では、実際にBluetoothを使用してどのようなことができるようになったのでしょうか。

イヤホン・ヘッドフォンをワイヤレス接続

イヤホン・ヘッドフォンに関しては特に意外ではありませんね。多くの方が普段から使用しています。

バイス間でのデータ共有

バイス間のデータ共有とは、AppleユーザにはおなじみのAirDropなどが該当します。パソコンとスマートフォン間でデータを簡単に移動できたり、友人同士で簡単に写真の共有ができたりして、データの共有が簡単に行えます。

テザリング

スマートフォンルーター化して他の端末でインターネットを使用するテザリングにもBluetoothが使われています。筆者もカフェで作業する際などにもっぱら活用しています。

ここまでは、日常生活に溶け込んでいるBluetoothの活用法でした。
次項目からは、別の視点の活用方法や研究を見ていきましょう。

健康管理

ヘルスケアで有名なタニタは、Bluetoothを活用した体重計が発売されています。
これは、体組成計で取得したデータをBluetoothを通してスマートフォンに送信し、専用のアプリケーションを活用することで健康を管理しやすくしています。 自身で記録を取るのと比べると、労力が減るのはもちろん、いつでもどこでも確認することができます。
また、データがあれば、見やすいグラフなどへの転換が容易に行え、視覚的に健康を管理できます。

接触確認アプリCOCOA

Covid-19が流行しはじめてから注目されたのが接触確認アプリCOCOAです。
このアプリもBluetoothを活用しています。 ユーザのスマートフォンから電波を発信し、周囲の人のスマートホンと互いにデータを保存することで接触確認を行なっています。
消費電力が少ないことを最大限に活用しています。

AED設置場所への屋内誘導アプリ

AED設置場所への屋内誘導アプリでは、Bluetoothを活用することで、スマートフォン操作者とAEDとの距離や方向を計算し、AED設置場所へ誘導してくれます。
普段行き慣れていない場所で、もしもの時に役に立つアプリケーションです。
(野口ら 2020)

屋内避難におけるスマートフォンへの画面通知

屋内避難におけるスマートフォンへの画面通知は、先ほどのAEDの例と少々似ていますが、逆の使い方をしています。
Bluetoothを活用し、災害時に立ち入りが危険な場所に近づくと通知がくるという仕組みです。
災害が多い日本において、このような活用が是非広がってほしいと思います。
(濱田ら 2018)

認知症高齢者見守りのための徘徊履歴可視化

認知症高齢者見守りのための徘徊履歴可視化に関する研究は、認知症の高齢者の方にBluetooth発信機を持ち歩いてもらい、固定型受信機を街中に設置することで徘徊している方を素早く見つけようという試みです。発信機はお守りの形をした袋に入っており、抵抗なく持ち歩けます。
高齢化が進んでいる日本では、こうしたBluetoothの活用も鍵になりそうです。
(荒川ら 2018)

おわりに

よく知っているような活用法から、研究途中の活用法までまとめてみました。
普段の生活に溶け込みすぎるあまり、目を向ける機会の少ないBluetoothですが、多岐にわたる分野で活躍していることがわかりました。今後の活用方法にも目を向けていきたいと思います。

参考記事・参考文献

Bluetoothとは何? わかりやすく解説 Weblio辞書

【サルでもわかるBLE入門】(1) BLEの基礎 - 株式会社ムセンコネクト

Bluetooth機能でできること7つ!音楽・アプリ・カーナビ | iPhone格安SIM通信

接触確認アプリ利用者向けQ&A|厚生労働省

野口裕之介,田中寿弥,森澤勝明,皆月昭則,2020,「BLE Beaconを用いたAED設置場所への屋内誘導におけるスマートフォンアプリケーションの開発」 第81回全国大会講演論文集,1巻,341-342

濱田大祐,大段一真,中道上,渡辺恵太,小滝泰弘,2019,「屋内避難におけるスマートフォンへの画面通知タイミングによる誘導効果」 第81回全国大会講演論文集,1巻,53-39

荒川智哉,白松俊,岩田彰,マウリシオクグレ,2018,「認知症高齢者見守りのための徘徊履歴可視化機構の開発 」第80回全国大会講演論文集,1巻,679-680

ジェネラティブアートとは

はじめに

 こんにちは、アンです。
 現在、聞いたことがない⼈がいないほど、世界中でNFTブームが起きています。私が注⽬しているジェネラティブアートの分野でもたくさんの作品が NFT 化しています。2021年、タイラー・ホッブス(Tyler Hobbs)のシリーズ作品《Fidenza》が販売されました。現時点で(2022年5月9日)、オープンシー(OpenSea)で販売されている合計999点の作品の総価値が45.9K ETH(約14,670,642,000円)になっています。NFTとNFTアートのブームのおかげで、私も含めてジェネラティブアートの作者が増えています。しかし、ジェネラティブアートとはいったい何なのでしょうか。今回、ジェネラティブアートの歴史を紹介します。

ジェネラティブアートとは

NoisePlanet_Echo_V4 - Samuel YAN, 2022 (https://openprocessing.org/sketch/1548117)

 簡潔に説明すると、ジェネラティブアートとは、ある程度の自律性を備えたシステムによって作成された作品、または人の介入がほとんどなくても機能できる作品を指します。言語ルール、マシン、アルゴリズムなどを使用して作者がシステムを設計します。設計したシステムに従って、作品が生成されます。これらのシステムは、デジタル、または化学、建築、詩、文学、アニメーション、視覚芸術など、さまざまな分野で実践されています。
 私の場合は、p5.js、processing、pythonなどのプログラミング言語を使って、ジェネラティブアート作品を制作しています。

ジェネラティブアートの歴史

萌芽

 19 世紀末に、ジェネラティブアートの芽が出始めました。キュビズムの原則の基礎を築いたポール・セザンヌのような芸術家たちは、彼らの作品の中で幾何学図形や、矛盾した視点などを使いはじめました。そこから、未来派構成主義がテクノロジーと機械を⽤いて 作品の魅⼒を広めます。その後、ダダイズムシュルレアリスム、抽象表現主義などの芸術運動が続きます。それぞれ、芸術を再定義しようとチャレンジしました。こうした芸術運動は、ジェネラティブアートの中心的な構成要素につながっています。

発展

 ビジネス用のコンピューターが登場した1960年代と1970年代に、ジェネラティブアーティストは、一つの部屋のような大きなサイズの計算機を使って、実験を行い、芸術とコンピューターサイエンスの関係を研究し始めました。1965 年にドイツのシュトゥットガルトで、初めての精選されたジェネラティブアートの展覧会が開催され、ゲオルク・ニース(Georg Nees)の作品が注目されました。その後、パイオニアであるニースとフリーダー・ナーケ(Frieder Nake)は、別の展覧会で彼らの作品を一緒に展示しました。その展覧会(Computer-Grafik (Nake & Nees))では、プログラムされ、コンピュータで制御されたドローイングマシンが制作した作品が特集されています(Generative Art: Origins, Artists, and Exemplary Works - Invaluable)。

Polygon of 23 Vertices (23-Ecke) — Georg Nees, 1964
13/9/65 Nr. 2 ("Hommage à Paul Klee") - Frieder Nake, 1965

 その間、⼥性の作家もジェネラティブアートの分野で活躍しました。たとえば、ジェネラティブ・アーティストで研究者のリリアン・シュワルツ(Lillian Schwartz)は、1968年から34年以上にわたってベル研究所のアーティスト・イン・レジデンスをつとめました。彼女は、MoMAが買い上げたはじめてのジェネラティブ・アートの作家としてよく名前があがります(Why Love Generative Art? — Artnome)。

Pixillation, photographic film stills - Lillian Schwartz, 1970

現状と展望

 コンピュータの普及で、アーティストたちがアルゴリズムを使用し始めました。数⼗年にわたって、芸術をコード化することができるコンピュータ・プログラムは、1990年代後半に開発されました。これらの革新があるため、コンピュータさえあれば、誰でもジェネラティブアートを作ることができます。2014年から、人工知能の飛躍的な発展により、AIが生み出すジェネラティブアート(AIアート)は開花しました。人間の脳のように考えるアルゴリズムが設計されており、ジェネラティブアートを制作することに成功しています。

ジェネラティブアートの種類

 今まで紹介したのは、最も一般的なタイプのジェネラティブアートであるビジュアルアート(視覚芸術)の分野の作品です。世界中のアーティストは、さまざまな⾃律的なシステムを⽤いて、有機的な⾃然界のものから⼈⼯的なものまで、さまざまな作品を制作してきました。コンピュータが利⽤しやすくなったので、コンピュータをベースとしたジェネラティブアートが増加しています。⽂学、⾳楽、建築、詩など、他のさまざまな分野でも実践されています。

ジェネラティブアートの魅力

 他のジャンルの芸術と⽐べ、私にとってジェネラティブアートの魅⼒がいくつかあります。これから、p5.jsを使用した自身の作品例を挙げながら紹介します。

ランダム性

 ランダム性は、ジェネラティブアートの⼀番魅⼒があるところだと思います。random関数を使って、色、位置、線の太さなどにランダム性を与えると作品に変化が生まれます。ランダムな値のおかげで、コードを実⾏するたびに異なる画像を⽣成し、さまざまな出⼒が⽣まれます。
 たとえば、次の画像では、色、線の太さ、幅の広さなどをrandom関数で設定しました。

MetalWave_3.0 - Samuel YAN, 2022 (https://openprocessing.org/sketch/1559761)

対象の可変性

 アルゴリズムやシステムを作った上で、「対象(object)」を変換すれば、生み出される結果(画像などの出⼒)が変わります。ここでの「対象」は、円、四角形、三⾓形、線などの基本的な幾何学的図形だけではなく、複数のシンプルな図形を組み合わせて作った複雑なパターンや模様も含まれます。
 たとえば、次のシリーズ作品の《urbanME》で、「対象」に異なる要素を入れることで結果が変わりました。

urbanME series - Samuel YAN, 2021~ (https://openprocessing.org/curation/73130#)

双方向性(インタラクティブ

 インタラクティブとは、相互に作⽤する、対話的な、双⽅向の、相乗効果の、などの意味を持つ英単語で、メディアコンテンツでは、 内容を利⽤者に⼀⽅的に与えるのではなく、利⽤者の働きかけにより刻々と内容が変化することをインタラクティブであるといいます(IT用語辞典e-Words)。アートの場合は、インタラクティブアートというジャンルや分野が存在します。ジェネラティブアートでも双⽅向性(インタラクティブ)がある作品が作れます。
 たとえば、次の作品では、外部の⾳源の⾳量によって、画⾯の中の点が移動しています。

Pulse Wave_1.2.2 with Music - Samuel YAN, 2022 (https://openprocessing.org/sketch/1546845)

さいごに

 ジェネラティブアートの歴史を遡って、歴史的な作家や作品を紹介しました。最後に私にとってのジェネラティブアートの魅力にも触れました。今回、たくさんの文章を読んだことで、ジェネラティブアートの分野でパイオニアたちが試行錯誤したことや考え方を知ることができました。この調査を、今後の私の研究と制作に役立てていきたいと思います。