第十五項 音響合成ライブラリMozzi

第十五項 音響合成ライブラリMozzi

電子工作創作表現(2019/10/18)

スライドPDF

Arduino単体で音響合成を行う

  • Arduino単体の機能で作れる音には限界がある
     
  • 「Mozzi」を使うとかなり幅が広がる
今週から、何度かにわたって音響合成ライブラリのMozziを解説していこうと思います。以前Arduinoに圧電素子をつないで簡単な音を出してみるのをやってみましたが、Arduinoの基本ライブラリだけだとああいったビープ音を出すのが関の山という感じです。そこでもっと幅広い表現ができるようにと作られたのがこの「Mozzi」です。

Mozziとは?

  • タイマー機能を活用した音響合成ライブラリ
     
  • オシレータ・エンベロープ・LPFなど
Mozziは、ArduinoでPWMに使われるタイマー機能を使って実現された音響合成ライブラリです。オシレータやエンベロープなど、ベーシックなシンセサイズをするための機能が備わっています。
https://sensorium.github.io/Mozzi/に情報がまとめられています。

何故こんなことができるのか

  • 1bitで表現し切る、仕組み的には「DSD」という方式に近い
     
  • タイマーライブラリを使うので、PWMなどを併用する時は注意が必要
     
  • 高速な音響処理を必要とする
中の仕組みを少しだけ話すと、PWMに使われているマイコンのタイマー機能を使い、ハイとローの切り替えを物凄く細かく切り替えていくことで実現しています。ハイレゾ音源等で使われる「DSD」という技術が近いそうです。

また、音響合成は常に出力を変化させ続けなくてはならないので、通常のanalogReadやanalogWriteの一部、またdelay関数などArduinoの主要な機能が一部使えなくなります。詳しくは後ほど解説しますが、楽器として音を出しながらNeoPixelをコントロールする、といったことは難しくなります。

なのではじめのうちは、Mozziを使用するArduinoは音響のみに用途を絞るのがおススメです。

インストール

lib_install

Mozziはライブラリマネージャに登録されていないので、「ライブラリのZIPファイルをダウンロードした後、スケッチ>ライブラリをインクルード>.ZIP形式のライブラリをインストール」からインストールをする必要があります。

インストールができたら、ファイル>スケッチ例にMozziが追加されるので、ここからサンプルファイルを開くことができるようになります。

Arduinoから線を出す

  • 9番ピンとGNDにオーディオ出力を付ける(モノラル)
     
  • PWMとして使いたいピンは3か11を使う

shield

ハードウェア側について。Mozziでは9番ピンから音声出力が出るので、オーディオの端子は9番ピンとGNDに接続する必要があります。サンプル基板はイヤホン等で試せるよう3.5ミリのステレオジャックを使っていますが、RCA端子でも良いと思います。基板取付用端子はピン配置が特殊な形状をしていることが多いので、DIP化キットと呼ばれるものを使えばユニバーサル基板にもはんだ付けして使うことができます。(例:http://akizukidenshi.com/catalog/g/gK-06204/)

サインウェーブを鳴らす

  • オシレータOscilでサイン波を鳴らす
     
  • setup/loopに加えてupdateControl()とupdateAudio()が増える
まずは01.Basics>SineWaveのスケッチから、Mozziの基本構造を読み解いていきます。サンプルからコメントを省いたソースコードを以下に記載します。
Mozziで音を出すには、setupでstartMozziを呼び、loop内でaudioHookを呼ぶようにします。

updateAudioはオーディオ出力を決定する関数なので、ここは必要最低限の計算を書くようにします。
updateControlはボリュームやボタンのコントロール等の入力を反映させるためのコードを記述します。
#include <MozziGuts.h>
#include <Oscil.h>
#include <tables/sin2048_int8.h>

Oscil <SIN2048_NUM_CELLS, AUDIO_RATE> aSin(SIN2048_DATA);

#define CONTROL_RATE 64

void setup(){
  startMozzi(CONTROL_RATE);
  aSin.setFreq(440);
}

void updateControl(){

}

int updateAudio(){
  return aSin.next();
}

void loop(){
  audioHook();
}

Oscilオブジェクト

graph

  • オシレータを作るためのクラス。サイン波や矩形波のような波形データを用意する
     
  • tablesフォルダに様々な波形のテーブルが用意されている
このコードで最も重要なのが、出す音の波形を決めるオシレータです。このクラスに出したい波形のデータを格納して、周波数を設定した後updateAudio内で呼び出すことで様々な音を発します。サンプルコードでは、2048バッファのサイン波を入れて、setupで440ヘルツに設定しています。

next関数を呼ぶごとに次の位相へと進んでいくので、updateAudioでnextを呼び続けることによってサイン波が出力され、440Hzの音がなるという仕組みです。この波形データはtablesフォルダの中にたくさん定義されていて、使うことができますし、ここのフォーマットにならえば自分で作ることも可能です。

2048や512のような数字はバッファサイズで、データの細かさなのでこの数値が大きいほど音の解像度は高くなります。ただしプログラム領域のメモリを多く消費するようになるので、この辺りはコンパイル時に使用量を確認しながら使うバッファサイズを決めるようにする必要があります。
//オシレータの例
#include <tables/sin2048_int8.h>
#include <tables/saw512_int8.h>
#include <tables/square_no_alias_2048_int8.h>
#include <tables/pinknoise8192_int8.h>

Oscil <SIN2048_NUM_CELLS, AUDIO_RATE> aSin(SIN2048_DATA); //サイン波
Oscil <SAW512_NUM_CELLS, AUDIO_RATE> aSaw(SAW512_DATA); //ノコギリ波
Oscil <SQUARE_NO_ALIAS_2048_NUM_CELLS, AUDIO_RATE> aSq(SQUARE_NO_ALIAS_2048_DATA); //矩形波
Oscil <PINKNOISE8192_NUM_CELLS, AUDIO_RATE> pink(PINKNOISE8192_DATA); //ピンクノイズ

updateControlでパラメータを変更する

  • アナログ入力はmozziAnalogRead()を使う
     
  • updateControlが呼ばれる頻度はstartMozziのCONTROL_RATEで決定
このままではただ音が流れるだけなので、インタラクティブ性を持たせてみます。ボリューム抵抗の値を持ってくるにはanalogRead()関数を使っていましたが、Mozziでは音響処理を邪魔しないmozziAnalogReadという関数が別で用意されています。使い方はanalogReadと全く同じで、0番ピンから取得してきたアナログ入力の値を、setFreqでそのまま周波数としてつかいます。アナログ値は0~1023なので、1000hzまでのサイン波をグリグリと変化させることができます。

このupdateControlはupdateAudioよりも少ない頻度で呼ばれて、ソースコード頭にあるCONTROL_RATEで周波数が決定します。64hzか128hzくらいあれば十分でしょう。周波数は2の累乗を指定します。
void updateControl(){
  int val = mozziAnalogRead(0);
  aSin.setFreq(val);
}

足して和音を作ってみる

graph_2

  • もう一つOscilを用意して、二つを足した値をreturnする
     
  • returnの値は-244 ~ 243の間でクリップする
単音のサイン波では味気ないですが、コントロールしながらオシレータを合成することもできます。
オシレータを二つ、ここではaSinとbSinを用意してnextの値を足せば2つのサイン波が合成されます。

updateAudioのreturnに入れる値はSTANDARDモードで-244~243の間にしなくてはならず、その範囲を超える値を入れるとバッファオーバーフローが起きてグリッチ音が鳴りだします。サイン波の範囲は先ほどのテーブルを見ると-127~127なので、二つが重なると最大254まで行く可能性があります。コンプレッサーのようなエフェクターがあれば収まるように叩けますが、そうもいかないのでここではザックリ4で割って音が割れないようにおさめています。
#include <MozziGuts.h>
#include <mozzi_midi.h>
#include <Oscil.h>
#include <tables/sin2048_int8.h>

Oscil <SIN2048_NUM_CELLS, AUDIO_RATE> aSin(SIN2048_DATA);
Oscil <SIN2048_NUM_CELLS, AUDIO_RATE> bSin(SIN2048_DATA);

#define CONTROL_RATE 64

void setup(){
  startMozzi(CONTROL_RATE);
}

void updateControl(){
  int val = mozziAnalogRead(0);
  aSin.setFreq(val);
  bSin.setFreq(int(val * 1.2));
}

int updateAudio(){
  return int((aSin.next() + bSin.next()) / 4.0);
}

void loop(){
  audioHook();
}

第十四項 データシートの読み方

電子工作創作表現(2019/10/11)

スライドPDF

データシートと部品の選び方

  • 部品を選ぶ時に基準となる「データシート」
     
  • データシートを見比べることで、必要な部品を見定める
14回目は、データシートの読み方について解説していきます。殆どの部品は、買った時特に取扱説明書のようなものはついていません。その代わりメーカーが出している「データシート」という数ページ~数十ページのドキュメントが今はオンラインで殆ど公開されており、部品を使う時に必要な情報は基本的にその中に書かれています。

データシートで知れること

  • その部品ができること
     
  • その部品ができないこと、やってはいけないこと
データシートが読めるようになると「その部品で出来る事」が分かるようになります。使い方を書いた個人のWebページなど、使った人の記事では時々間違った事などが書いてある場合もあるのですが、(本講義の資料も気を付けていますが、もしかしたら勘違いなどがあるかも…)データシートは製造元が作っているので、とても信用できます。

反対にこの部品ではできないこと、やってはいけないことも書かれています。流してはいけない電圧や使ってはいけない温度などが書かれているので、部品本来の機能を発揮させるためにはこの範囲で使わなくてはいけません。

基本的なワード

  • 定格(Rating)
     
  • 特性(Characteristics)
     
  • 寸法(Dimension)
     
  • 評価・測定回路(Evaluation circuit)
一方で、データシートには実にたくさんの情報が載っています。パッと見難しそうですし実際難しいんですが、そういう情報というのは製品を作るような技術者に向けた情報なので、基本的な機能が使えれば良い我々は殆ど気にしなくて良い情報が半分以上あります。

必要な情報を見つけられるためには、上記4つのワードを覚えておくと良いでしょう。順番に解説していきます。

定格(Rating)

  • 部品が正しく機能するための条件
     
  • 定格電圧/電流/温度などがある
     
  • 多少OKな最大定格と、一瞬でも超えられない絶対最大定格がある

rating

まず定格について。これは部品が正しく機能するための条件のことで、先ほど言った「やってはいけないこと」の部類に入ります。これはトランジスタの回で使ったLED(http://akizukidenshi.com/catalog/g/gI-08956/)のデータシートにある定格です。
DC FowardCurrentが700なので、700mAしか流してはいけないよということになります。その下はPulseとあるので、瞬間的に流せる電流が、10msまでなら800mAまで流せるという意味になります。
他には温度なども記述されており、使用時の温度と保存時の温度が別で書かれています。
これを超える電流や温度で使用すると正しい動作は保証できないというのが定格表です。

特性(Characteristics)

  • その部品が持つ能力や性質
     
  • トランジスタの増幅率やセンサの入力範囲・精度など

chara

次の特性も定格とよく似ていますが、こちらは部品が「できること」を中心に書かれています。LEDのシートではコンディション欄の条件で出る部品の能力が書いてあり、700mAで200ルーメンの明るさ、半減角が120度というように書いてあります。自分が欲しい部品の性能を満たしているかどうかを確認するには、この特性欄を見るようにすると早く正確に知ることができます。特に明るさや色温度など、商品ページや店頭では確認しづらい情報が数字で比較できるので買い物の失敗を避けやすくなります。

寸法(Dimension)

  • サイズや形状の詳細が書いてある
     
  • パネルに付けるコネクタ等は必須情報
     
  • ピッチやリードの太さも時に注意。2.54ミリ(0.1インチ)が基本

dim

続いて寸法です。部品の大きさを表す寸法図で、ページの一番最初か最後に書かれていることが多いです。パネルにつけるオーディオ端子やDC電源のジャック等を選ぶ際には重要な要素になります。(画像はマル信無線のMJ073H(http://akizukidenshi.com/catalog/g/gC-06257/)最近はミリ単位で書かれていることが多いですが、英語のドキュメントではインチ、たまにmil(1/1000インチ)で書かれている事もあるので選ぶ際は注意しましょう。

ユニバーサル基板に実装する時は、ピッチやリードの長さにも注意が必要です。

評価・測定回路(Evaluation circuit)

  • より細かな特性を測るための回路だが、使い方の参考にもなる
     
  • アプリケーション(Application)として書かれている優しいデータシートもある

circuit

最後に評価回路・測定回路です。図はフォトトランジスタ(http://akizukidenshi.com/download/tlp621-1.pdf)と呼ばれる部品の時間測定回路で、立ち上がり時間の誤差を測定する回路ですが、そのまま部品の使い方としてこの回路は有効です。使ったことがなく、Webでも情報が少ないような部品を試したい時には、この評価回路・測定回路と呼ばれる回路を参考にするとヒントになることがあります。
中にはアプリケーション回路という形で、使い方が提案されている丁寧なデータシートも存在します。

3W LED
http://akizukidenshi.com/download/ds/optosupply/OSW4XNE3C1S.pdf

フォトトランジスタ
http://akizukidenshi.com/download/tlp621-1.pdf

温度センサLM35 丁寧で英語・日本語あり 
http://akizukidenshi.com/download/ds/ns/LM35_e.pdf
http://akizukidenshi.com/download/ds/ns/LM35_j.pdf

超音波センサ
http://akizukidenshi.com/download/ds/sainsmar/hc-sr04_ultrasonic_module_user_guidejohn_b.pdf

2SC3851
http://akizukidenshi.com/download/ds/sanken/2sc3851a_ds_jp.pdf

L6470 長い例
http://akizukidenshi.com/download/ds/st/L6470.pdf
http://akizukidenshi.com/download/ds/marushin/MJ073H.pdf

サンプル基板

Arduinoに挿して使えるお試し用の基板を研究室に設置しました。今後授業で扱ったモジュールや、前期で紹介したものも段々増やしていきます。

作品に使えるか実験したい時、復習してみたい時に借りて触って、自分用の部品を購入する際の参考などにしてください。
プラスチックケースに入れて、紹介した回と使われている部品の型番などを記載しておきます。以下設置している基板の種類です。

使い方

Arduinoに挿しこみ、それぞれの講義資料にあるソースコードを書き込めば使う事が出来ます。向きに気を付けてください。
ピンを曲げてしまったり、明らかに動作しなくなってしまった場合は直しますので電子工作創作表現のグループメッセンジャーか、sheep@tele-scope.jpまでメールで教えてください。

ケースにArduinoは入ってません。研究室所有のArduinoも何台か同じところに置いてもらおうと思いますが、うっかり壊したりとか、どれが誰のか分からなくなりがちなので自分用に一台買うのをおススメします。

第六項 Arduino開発基礎(ライブラリとモジュール)よりNeoPixel


3本線だけで複数のLEDを個別に光らせられます。

第七項 通信ケーブル・はんだ付けより ジャイロ傾きセンサMPU6050


傾きや回転速度をセンシングできます。

第十三項 トランジスタ


Arduinoではパワーが足りない強いLEDやモーターを動かすことができます。

第十三回 トランジスタ

第十三回 トランジスタ

電子工作創作表現(2019/10/4)

スライドPDF

後期の方針

  • もう少し踏み込んだ制御について
      
  • 具体的な部品やライブラリを使います
後期では、もう少し具体的な部品やライブラリを使った制御についてやっていきます。
前期は電子回路のベーシックな所を触ったという感じなので、後期はもう少し色々なことができるモジュールやライブラリを紹介していきます。
ただ、そうなってくると回路自体1個2~3000円したり、Arduinoに実装するだけで90分終わってしまうので、授業中全員に触ってもらうのが申し訳ないんですが難しくなってきます。

お試しデバイス

  • 講義で扱った参考部品を研究室に置いてもらうようにします

  • 「借りる→触る→自分で作ってみる」をやってみてください。

なので、講義中に扱ったデバイスについてはサンプル的に作ったものを研究室に置いてもらうことにしようと思っています。
興味があるもの、作品として使ってみたいものを授業後に借りてもらって、実際に動かしてみて良さそうだったら自分でそれを見ながら同じ物を作ってみる、という仕組みにしますので、試してみてください。

トランジスタを使う

photo

  • Arduinoから流せる電気は、5V20mA(=0.1W)程度
     
  • モーターやパワーLEDを使おうとすると電力不足
ということで今回はトランジスタについてやっていきます。ArduinoにはデジタルIOピンがあって、そこから5Vの電気信号をオンオフできるというところまでは前期でやりました。しかしこの出力は電気としては微弱です。小さなLEDくらいなら光らせることができますが、小さなLEDくらいしか光らせることができません。

プログラムで強い電気をオン・オフするためには、他からより多くの電気を引っ張ってくる必要があるわけですが、それを可能にするのがトランジスタです。

電流を増幅する

shield

  • 基本的なトランジスタは3本線

  • 1本から大きな電気を持ってきて、もう1本に流す

  • 残りの1本をArduinoなどにつないで、流す量を指示する

基本的には3本の線があり、2本の間を大きな電流が流れるようになっています。流れる量は残りのもう1本にArduinoから流す電気によって決定されるので、トランジスタを使えばArduinoから大きな電流をコントロールすることができるというわけです。

今回はトランジスタの2SC3851を使って200mA流れるLEDをサンプルとして用意しました。

コレクタ・エミッタ・ベース(NPN型の場合)

  • 必要な電流を集める端子なのでコレクタ(Collector)
     
  • 集めた電流を放出する端子なのでエミッタ(Emitter)
     
  • Arduinoから電気を送るベース(Base)
3つの端子にはコレクタ・エミッタ・ベースという名前が付いています。電気を集める線なのでコレクター、電気を放出する線なのでエミッター、ベースはちょっと関連付けしづらいですが、コレクタとエミッタさえ覚えれば消去法でどの線を繋ぐべきかわかると思います。

図のように接続をして、VCCとコレクタの間、もしくはエミッタとGNDの間に負荷となるモーターやLEDを繋ぎます。

流す電流量を決める

  • Arduinoから流す電流の数百倍の電流が流れる。
     
  • 倍率はトランジスタの種類で決まるが、計算が面倒

transistor_model

コレクタからエミッタに抜けていく電流の量は、Arduinoからベースに流れる電流と、トランジスタの増幅率で決まります。図の中ではArduinoに1kΩがついていておおよそ20mAが流れるので、2SC3851のIc-Vce特性では800mA弱までポテンシャルとしては流れます。

ただこれはザックリとした計算で、厳密に計算しようとするとベース側とエミッタ側の抵抗値、電圧を踏まえた上で計算しなくてはいけません。

十分な倍率を取り、抵抗で制限する

  • ベース電流の数十~数百倍の電流を流せるが、抵抗を使ってそれ以下に抑えることができる
     
  • 電流を多めに流すようにして、あとは抵抗で電流を必要な量に制限する
ただ作品制作でそこまで厳密にやる必要も無いので、ざっくりと十分大きな電流値を確保したら抵抗等で電流を落として使うという考え方がやりやすいと思います。
サンプルでは5Vに対して7.5Ω(15Ωを並列つなぎ)の抵抗を入れておよそ200mAが流れるようにしています。

サンプルコード

  • 接続したら、ベース電流に電気を流すだけ
     
  • digitalWrite()もしくはanalogWrite()で制御する
サンプルコードも以下に記載しておきます。6番ピンにつないでいるので、digitalWriteもしくはanalogWriteで電気を流すだけです。つけっぱなしになるとだんだん熱くなってくるので、試す時は気を付けてください。
void setup() {
  pinMode(6, OUTPUT);
}

void loop() {
  analogWrite(6, max(0, sin(millis() / 300.0) * 255));
}

オーソドックスなトランジスタ

  • 今日紹介したのは「NPN型バイポーラトランジスタ」
     
  • 2SC1815:定番中の定番。150mAくらいまでの時はこれがおススメ
     
  • 2SC3851:より大きな電流用で、定格は4A。長時間運用の際は熱に注意。
今回紹介したのは、NPN型バイポーラトランジスタというタイプです。PNP型や、電界効果トランジスタ、通称FETと呼ばれるトランジスタもあるので、購入する際は気を付けてみてください。
NPN型の中にもたくさん種類がありますが、自分が普段使うのも大体2~3種類です。ちょっとだけ電流を上げたくて小さく収めたい時は2SC1815、もう少し大きい電流を流したい時にはサンプルで使用した2SC3851を使うなど、で十分対応可能だと思います。

更に大きい数アンペアクラスのモーターやLEDを動かす時には専用のドライバを使った方が良いと思いますので、調べてみたり個別に聞いてみたりしてください。

Eagleで部品を作るメモ

Eagleにおけるパーツの概念

ひとつの部品は、いくつかの要素で構成されている。

  • Device...部品型番にあたる部分。
  • Footprint...Board側で参照するパターンの図
  • 3D Package...3Dモデル。Fusionとかでプレビューできるやつ?
  • symbol...回路エディタ上で表示されるシンボル。

続きを読む Eagleで部品を作るメモ

Arduinoでシリアル通信の送受信

Arduinoでシリアル通信

設定

設定はsetupでbeginを呼ぶだけ。最低限必要なパラメータは通信速度。

void setup()
{
    Serial.begin(9600);
}

9600bspはちょっと遅いけど定番。
マイコンが16MHzなら38400くらいが早くて安定しています。

送信

Serial.println(内容)が基本形。print/writeなどもある。以下が詳細

int value = analogRead(0);
Serial.println("message") //「message」+改行コードが付く。最もベーシックな形
Serial.print("message") // 改行したくない場合はこう

Serial.println(value); //intのような数値も変換して送ってくれる
Serial.write(value); //バイナリで1バイトとして送る時はこれ

受信

1文字ずつ読んで何かを実行するのなら、以下の通りで簡単に処理が可能。これでも一応、アルファベットの大文字小文字で50通り以上のパターンが作れる。

void loop()
{
    while (Serial.available())
    {
        byte data = Serial.read();
        if (data == 'H') digitalWrite(13, HIGH);
        if (data == 'L') digitalWrite(13, LOW);
    }
}

もう少しパラメータを与えたいなどの場合は、文字をある程度スタックして処理する必要がある。

String recv;
void loop()
{
    while (Serial.available())
    {
        char data = Serial.read();
        if (data == '\n')//改行コード
        {
            if (recv.substring(0, 1) == "A")
            {
                analogWrite(9, recv.substring(1).toInt());
            }
            if (recv.substring(0, 1) == "B")
            {
                analogWrite(10, recv.substring(1).toInt());
            }
        }
        else
        {
            recv += data;
        }
    }
}

こうすると”A128”や"A0"で9番ピンを、”B50"や"B256"と送る事で9番ピンと10番ピンから好きな値でPWM出力を指示することができ、デバッグや微調整がやりやすくなる。(改行コードを最後に入れるべし)

第十二回 回路・デバイスの仕上げ方

第十二回 回路・デバイスの仕上げ方

電子工作創作表現(2019/7/12)

スライドPDF

外装を作る

  • 基板やモーター等の機械を固定する
     
  • 綺麗に仕上げるのは安定性・安全性の上でも重要
電子部品を作品に組み込むフェーズでは、基板などがすぐ壊れたりしないようにケースにまとめたり、モーターやセンサー等位置決めが重要な部品を固定しておく必要が出てきます。
軽い物は両面テープ等で止めたりもできますが、美観的にもよくないですしすぐ剥がれてしまったりします。綺麗に仕上げるのは作品の安定性に加えて、怪我や事故を防ぐ安全性という意味でも重要なので、覚えておいて損はないでしょう。
綺麗に仕上げる方法の中でも、比較的電子工作と相性の良いデジタルによる造形について、どんな選択肢があるか紹介していきます。

デジタルで部品を作る

  • レーザー加工と板金加工
     
  • 3Dプリンタと切削加工
デジタルで1点物の造作物を作る手段のメインストリームとしてあるのが、レーザー加工と3Dプリントです。これらは個人で扱えるものでは基本的に木材や樹脂素材を扱うことになりますが、設計を意識すれば近いノウハウで板金加工や切削加工などの金属も扱える(発注できる)ようになります。

レーザー加工

  • MDFやアクリル板をレーザーで加工。積み重ねれば立体も
     
  • 平面加工なので、環境によってはIllustratorでも使える

レーザー加工は、強いレーザーを照射して板材を焼いたり溶かして切断する方法です。Illustratorなどでパスデータを作って自由な形にカットすることができます。写真は機械装置の試作で、レーザー加工したアクリル板を両サイドに配置して、スペーサーというネジのついた棒状の部品を使って固定しています。

レーザーの特徴

  • メリット:比較的一般的な材料で、加工も速い
     
  • デメリット:都内で個人導入するのは難しいので、使う度コストがかかる
メリットはホームセンターでも買えるような一般的な材料が使えて、加工も速い点でしょう。MDFという木材やアクリルを使うのが一般的です。塩化ビニル板というアクリルによく似た素材がありますが、これは有毒ガスが発生するので使えません。細かくは装置によっても変わってくるので、加工機を持っている施設の人等に聞いてみることをおススメします。

煙や匂いがすごいので基本的に換気をする必要があり、家同士が近い東京で自宅などに設置するのは難しいでしょう。そのため都内では都立大学駅のメイカーズベースやFabCafeのような時間貸しをしている場所を借りるのが一般的です。使う度に料金が発生するのでやや割高なのがデメリットでしょうか。

使うには?

  • AMCや企業の運営するシェア工房を使うか、外部発注する
     
  • 丸に穴開けのような簡単な加工なら「はざい屋」
芸大ではAMCにレーザー加工機があるそうです。UniversalとTrotecは代表的な加工機なので、レーザーで加工する基本的な素材は大体切れると思います。遊舎工房(https://yushakobo.jp/)のようにオンラインで加工サービスを行っているところもありますが、自分で加工するよりはどうしても割高になってしまいます。

アクリル素材で、丸に穴開け程度の簡単な形の加工であればはざいや(https://www.hazaiya.co.jp/category/process.html)のような場所に注文した方が安くて楽な場合もあります。時間がある時にどんなお店でどんな加工ができるのか、眺めてみるのもおススメです。
(2019/07/11現在)

レーザー→板金

  • レーザー部品は板金に置き換えやすい
     
  • 丈夫で、表面処理をすれば美観も優れる
     
  • 最近はウェブで発注できる業者もある

デジタルファブリケーション系のレーザー加工機は木材やアクリルを切るものですが、工場で使うようなレーザー加工機ではアルミやステンレスなども切断することができます。金属のレーザー加工だと「板金加工」という名前が比較的メジャーで、レーザーで切った板を曲げて箱を作ったりするためによく使われています。

加工法としては殆ど同じなので、厚み等をそろえればMDFで試作した物をそのまま金属に置き換えることが可能です。金属加工は値段が高いので、MDFで試して問題無さそうなら外側を綺麗なステンレス仕上げで発注する、という使い方がおススメです。

ネットに載っている工場でも企業相手でしかやってくれない場合が多いですが、曲げ加工ドットコム(https://www.magekako.com/)のようなところであれば個人でも対応してくれます。ただしこういったサイトではイラレのパスではなく図面を用意する必要があるのでご注意を。ちなみに写真のステンレス天板は好きな位置に穴加工ができて2000円しなかったです。安い

きりいた.com(https://www.kiriita.com/)はIllustratorやPDFでも見積もりを出してくれましたが、その分ちょっと割高な印象…?金属加工のネットサービス化は最近どんどん増えていて状況も絶えず変化しているので、都度色々調べてみるようにしてみてください。

3Dプリント

  • 個人でやれるオーソドックスな物はFDM(Fused Deposition Modeling)
     
  • PLAかABSなどの樹脂を溶かして重ねていく

続いて3Dプリントです。モデリングした3Dモデルと同じ形を造作してくれる装置で、色々な方式がありますが、オーソドックスなものはFDMと言われる、樹脂を溶かして重ねていく仕組みです。もう少し細かく出せますが取り扱いが少々煩雑な紫外線硬化樹脂を使った光造形方式、粉末を固めて作る粉末造形などがあります。

3Dプリントの特徴

  • メリット:やろうと思えば家にも設置可能
     
  • デメリット:時間がかかり、コンディションで失敗しやすい
最近は落ち着きましたが一時かなりブームのような感じになって色々な機種が出ています。サイズ・精度・値段に色々と選択肢があり、電気があれば動くのでやろうと思えば自宅にも設置可能です。少々樹脂が溶ける匂いがして、こもってると身体に良くないんじゃないかという研究が最近出ていますが、レーザーほど激しい匂いはしないので住宅地でも換気できる程度です。

デメリットとしては1つ出すのに結構時間がかかるのと、温度管理が甘かったり樹脂が引っかかったりして失敗することがあるので、あまり安物に手を出すとかえって手間がかかる可能性もあります。

平べったい形状を出力する時には「反り」と呼ばれる現象が発生するなど、形状によっても失敗しやすさが変わってきます。この辺りはまだ3Dプリント自体歴史が浅いので、経験者等を見つけて作りたい形状を見てもらう等すると良いでしょう。板状のものは時間もかかるので、基本的に3Dプリンタは量感のあるもの、平面的なものはレーザー加工などうまく使い分けをするようにしましょう。

使うには?

  • AMCにあるのはDavinci 2.0 Duo
     
  • DMM.makeやInter-cultureなどサービス系もたくさんある
これもAMCに設置されているそうなので、活用してみるのが良いでしょう。ただいかんせん一つ出すのに時間がかかるので、誰かが使い始めるとほぼ丸一日使えなかったりするので、共同で使う難しさのようなものもあります…こちらもやや高めでプリントサービスのようなものがたくさんあるのですが、設定する時間や失敗する手間を考えると、その辺のコストやリスクをお金で解決できるので案外妥当な値段かもしれません。

自分も含めて周りが皆使っているのがZortrax(https://www.zortrax.sin.jp/)という機種で、頻繁に使いたいなら思い切って買ってしまうのも手です。フィラメントと言う印刷用の樹脂やソフトウェアも専用で用意されていて、非常に失敗が少なく印刷精度も高い印象なので気に入っています。

3Dプリント→切削加工

  • 3Dプリントと切削加工も加工条件が近い
     
  • AMCにもあるが難易度が高いので、もしやるなら発注がおススメ

精度の良い3Dプリントであればとても細かく出力することができますが、どうしても積層痕というすじができてしまい「3Dプリントっぽさ」が悪目立ちしてしまいます。やすって仕上げるという方法もありますが、こういう立体物をもう一段階レベルアップした造形にしたいとなったら、樹脂や金属を削って作る「切削加工」がとても綺麗です。
 
AMCにも樹脂を削れる切削機がありますし、これもやっぱり発注できる業者がいくつかあります。
切削はまだまだ工場と直接メールや電話でやり取りするところが多いですが、プロトラブズ(https://www.protolabs.co.jp/)のようなWebが充実したサービスも徐々に増えてきています。

基本的に万単位でコストがかかるので、外装仕上げを必要とするくらい本気の作品で使うのが良いです。3Dプリントでよくよく検証してから発注するようにしましょう。写真は自分の作品用のパーツですが、左が3Dプリンタで検証したもの、右がアルミの切削加工+アルマイトという表面処理を施してもらったものです。

レーザーや3Dプリント用のデータを作る

  • 学生は3年無料のCADソフト「Fusion360」がおススメ(非営利ならその後も無料)
     
  • その他の選択肢としてはrhinocerosやtinkercadなどがある
という感じで、今はデジタルで作ったデータを機械や発注でかなり簡単に出力できる時代になりました。素晴らしいですね。
ではこれらのデータをどうやって作るのかという話になってきますが、これも昔は専門性が高く値段も高かった「CAD」というソフトウェアがかなり手ごろなコストで導入可能になっています。

一番勢いがあると言っても良いのがAutodesk社の「Fusion360」というソフトです。学生無料で、非営利であれば社会人でも無料で使えるので使えるようになるととても便利です。
他の選択肢としてはRhinocerosというCADソフトが学生でも比較的導入しやすかったり、実はtinkercadでもモデリングができますが、あまり込み入ったことはできないのでせっかくなら発展性のあるFusionを覚えるのが良いでしょう。

実際にどんな感じで作っていくのか、少しデモンストレーションをしてみます。

モーターハウジングを作る

例として、3Dプリントで日本電産コパルのギヤードモーターを板に取り付けられるような簡単なハウジングを作ってみます。モーターは大抵が円柱系の形をしているので壁や箱に取り付けづらいので、モーターを挟んでボルトで止められるようなパネルを作ってみます。

全てはスケッチから始まる

Fusionでモデルを作成する場合、スケッチを作ってからそれを立体にしていく、という手順を踏んでいきます。

あまり直感的でなく、3DCGをやってる人などからするとかなり取っつきにくいかもしれませんが、慣れると実際に造形するものを作る時にはとても便利な考え方です。

まずはパネルとなる四角形を長方形ツールで作った後、4隅に円ツールで穴となる円を配置します。この時寸法のガイドが出るので、ここは数値で入力するようにしましょう。このような数値や条件による図形の定義を「拘束」と呼び、後から形状を微調整する時にとても重宝します。

拘束も授業でやろうとするとえらい時間がかかってしまうので、ここでは割愛します…

スケッチから立体を作る

「スケッチを停止」でスケッチの編集を終了させたら、「押し出し」や「回転」でスケッチを立体にすることができます。押し出したい面を選択して、ここでは3mmの板材として作成しました。

穴用の円もちゃんと空いた状態で押し出してくれています。Shift+クリックで押し出し面を解除できるので、好きな面を押し出せます。逆に丸部分だけ押し出すというようなことも可能です。

面に対してスケッチを描く

再度「スケッチを作成」ボタンを押し、板の側面をクリックします。すると今度は側面を基準とした2Dスケッチが書けるようになるので、モーターを抱え込むための輪を描いていきます。3Dプリンタは性質上少し寸法よりも太る傾向があるので、寸法ピッタリでもややキツメに掴んでくれます。

再び押し出し

また同じように押し出します。上に溝を付けることで、寸法が過ぎても少し広がって挟んでくれるような設計になっています。

押し出しは切り取りもできる

押し出しは実は切り取りもできるようになっています。右側のオプションでも選択できますが、大体押し出したい方向に出すと自動で切り替えてくれ、切り取り状態の時は赤色になります。ここでは円柱の部分を少しえぐれる形に切り取りました。

角をまるめるフィレット

最後に、修正ボタンから角を丸める「フィレット」を行います。フィレットは見た目が良くなるということもありますが、切削など機械仕上げでは直角な角(ピン角と言います)が苦手な機械もあるので、そういう加工を前提とする場合にはフィレットを付けて加工しやすくしてあげる必要もあります。

継ぎ目にもフィレット

継ぎ目にも同じようにフィレットを付けてあげます。継ぎ目が角張っているとそこに負荷がかかり過ぎる「応力集中」が起きて折れやすくなってしまうので、力がかかりそうな部分はフィレットでなだらかな形に仕上げてあげるのがベターです。

エクスポート

出来上がったら、3Dプリント用にデータを出力します。3Dモデルデータは実に色々な種類がありますが、3Dプリントの場合OBJかSTLで出力するのがメジャーです。仮にこのデータをtouchDesignerに持っていきたい時は、FBXやOBJなどが使えます。

違うCADソフトに渡す時などは、IGESやSTEPといったCAD用の共有フォーマットが一般的でしょう。

完成!

完成です!実際はもっと大きく・小さくなど微調整が発生すると思いますが、Fusion360はそこでも強みを発揮します。このモデルの状態で実はスケッチを修正すると、ある程度形態を保ったまま長さを修正することができます。
これは「フィーチャーベースモデリング」と呼ばれる方式の強みで、少しずつバリエーションの違う部品なども作り分けが簡単にできるので、使いこなせると非常に効率的です。

図面の出力

また、Fusionには図面を作る機能も付いているので、外部の加工業者に発注したり他の人と協業する時に図面を作成しておくととても便利です。

回路の仕上げ

  • ブレッドボードで試作
     
  • ユニバーサル基板で制作
     
  • プリント基板で量産

と、ガワの話はこのくらいで、また電子工作に戻ろうと思います。
試作から完成に向けたステップがいくつかあります。

ブレッドボードは設計した回路が動くかどうか検証するツールなので、このまま作品として出そうとするとケーブルがすぐ抜けたり、ノイズを受けたりしてあまり適切ではありません。(写真上)
ブレッドボードで正しく動くことが確認できたら、ユニバーサル基板と呼ばれる基板に半田付けをして固定します。(写真中央)制作する基板が1個や2個程度であればこれで十分ですが、数が増えてくると基板を設計・発注して量産するのが便利です。(写真下)回路があらかじめ基板に用意されていて部品を取り付けるだけなので、ミスも少なくなります。

プリント基板の発注

  • 中国のプリント基板メーカーでかなり安く作れる
     
  • FusionPCB / PCB way / elecrow など…
プリント基板は意外と安く仕上げられて、小さいもので送料抜きだと10枚で5ドルなどかなり破格の物も用意されています。(逆に送料が結構高い…)PCB wayなどは24時間以内の出荷で

プリント基板の設計

Autodesk Eagle

このような専用のプリント基板を作るためのソフトウェアもいくつかあります。FritzingやDesignSpark PCBなどAutodesk Eagleがおススメです。Eagleは最近Autodeskに買収されたのですが、それによってAutodesk製品との連携も取れやすくなっています。

上のように図面上で回路を書いていって、回路図から実際に部品配置などを決めていくというスタイルになっており、ここで出力したデータをメーカーに送ることでオリジナルの基板を作ることができます。
(参考:https://tmegane.hatenablog.com/entry/2018/11/20/213520)

Fusionとの連携

基板形状をFusionでも変更可能

今日紹介したFusionとEagleの組み合わせはかなり強力です。Fusionで基板を固定する外装やパーツを調整しながら、Eagle側で部品の配置を調整するというような事もできるようになっているので、作品のパッケージング制作にとても役立ちます。特にUSBや電源ケーブルの配置などは出来上がってから干渉に気づく事も多いですが、このようなビジュアルで見て置けるとあらかじめそういったことも気づけるので無駄な発注を防ぐことができます。

電子部品を買えるお店リスト

電子部品を買えるお店を、通販を中心にざっくりとまとめています。
※学生向けに個人的な見解で紹介しているので、お手柔らかに見ていただますと幸いです…(最終更新日:2019/07/05)

初心者にもやさしいお店

秋月電子通商

定番中の定番。秋葉原にも1つ店舗がありますが、やや狭く土日は混雑するので、あまりゆっくりは見られません。買うものがハッキリと決まっている時に行くのがおススメ。
Webの商品ページはかなりまとまっていて、メーカーのデータシートの他独自の説明書が付いていたりするので、初学者にとってもかなり買いやすいお店です。多くの人が利用しているので、ここで売っているものは大抵誰かが試してブログ記事にしているというパターンも多いので、買う前に検索してみるのもおススメです。

初心者おススメ度:★★★★★

マルツパーツ

秋月と並び有名なお店。秋葉にいくつか店舗を構えています。説明は中級以上向けですが、こっちはわりと色々なパーツを眺めて見られます。

初心者おススメ度:★★★

千石通商

こちらも秋葉に実店舗をいくつか構えているお店。少し経験を積んできて、より細かい仕様の部品を探したい時はこちら。ギター部品や機械系パーツなど需要が少なめなパーツの品ぞろえもなかなか。

初心者おススメ度:★★★

スイッチサイエンス

SparkFunやAdafruit、Pololuなど海外の初心者向けモジュールが豊富です。説明もやさしく丁寧な印象です。

初心者おススメ度:★★★★

ストロベリーリナックス

昇圧モジュールや小型モータードライバなど、マニアックなオリジナル製品が揃っています。自社製品なので比較的丁寧な解説がされていますが、基本的に中級~上級者向けの基板が中心。痒い所に手が届きます。クレジット非対応で、会員登録できないのが少々つらい…

初心者おススメ度:★★

大分慣れてきた人・業務でも使える

Digi-key

海外の通販サイトで、種類がとにかく豊富です。説明などは基本的に書いてないので、型番やメーカー調べて、自分で情報を調べなくてはなりません。
在庫によっては国内発送ではなく海外から届く場合があるので、急ぎの場合は気を付けましょう。

RS-online

こちらも比較的業者向けのECサイトです。数年前に個人でも扱ってくれるようになりました。なので取り扱いは豊富です。

aliexpress

中国の超大手通販サイトで、電子部品以外にも色々あります。謎に安くて怪しい製品がいっぱいあるので、時々面白い掘り出し物が見つかります。
供給が安定しているわけではない上、情報があまり載っていなかったり偽物のICが売られていたりするので、バクチと思って使いましょう。

第十一項 アクチュエータ活用

第十一回 アクチュエータ活用

電子工作創作表現(2019/7/5)

スライドPDF

アクチュエータの具体例

前期課題のヒントとして、前回はセンサーの例を紹介していったので、今回は出力側にあたるアクチュエータを紹介していきます。

アクチュエーションの例

  • 表示・駆動・音響
     
  • 本来の使い方によらない使い方が可能
センサーの説明をした時に「商品説明によらない使い方が色々ある」という話をしましたが、アクチュエータについても同じようなことが言えます。
今日紹介する機器は大きく分けて、何か情報を示す「表示装置」、物を動かす「駆動装置」、音を鳴らす「音響装置」の3つ+アルファを紹介していきますが、あくまでその分類も基本的な使い方の紹介であって、センサー以上に表現の余地は色々あると思います。

モーターから音響

https://vimeo.com/52866292
 
BROTHER 'PRINTER ORCHESTRA'

例としてBROTHERの広告映像「PRINTER ORCHESTRA」では、ジャンクのプリンターやスキャナーに付いたままのモーターを制御して音楽を演奏する様子を記録した映像作品です。

ステッピングモーターを制御する時には、コイルの電流を1ステップごとに切り替えて駆動しますが、その駆動パルスの周波数が動作音となって聞こえます。普段はノイズ音ですが、この周波数を音階に当てはめて制御することでモーターを音響装置として扱っています。

スピーカーから映像

大城真 - モノビート・シネマ(2010)
https://www.ntticc.or.jp/ja/exhibitions/2010/emergencies-016-oshiro-makoto/

2010年にICCで展示された大城真さんの「モノビート・シネマ」は、ヴラウン管の前にスピーカーが設置された作品です。60fpsで画面を更新する画面に対して位相ずれが起きるようなサイン波を出すことでスピーカーのコーンが波うつように見えてくるという作品です。

このように音を出す装置、物を動かす装置でも使い方やそこで起きている現象を紐解いていくことで、色々な表現の可能性が見えてくることが分かります。

アクチュエータの色々

小型液晶モジュール(キャラクタ)

  • 価格:700円前後
  • 利点:I2C通信で、文字が出せる
  • 欠点:出せる情報が限定される

Arduinoは普通のモニター等には基本的に接続が難しいのですが、このような小型の液晶モニタを接続できるようになっています。
文字の表示機能があらかじめ搭載されていて、逆に言うと限定されているのですが、比較的簡単に情報を出すことができるのでちょっとした情報の表示などに便利なモジュールです。

グラフィックディスプレイモジュール

128x64ドットなど小さなグラフィックが出せるモジュール
 

  • 価格:1000円前後
  • 利点:コンパクトに好きな図や文字を表示できる
  • 欠点:制御がやや複雑(ライブラリがあるものも)

もう少し自由に表示がしたいということになると、任意の絵が表示できるグラフィックモジュールもいくつか出回っています。制御がやや複雑になりますが、レイアウトも自由に決められるのでもう少し見た目に自由が利きます。

小型液晶(HDMI)モジュール

フルHDクラスの解像度を表示できるモジュール。
Arduinoでは難しいので、Raspberry piなどが必要
 

  • 価格:10000円前後
  • 利点:小さく高い解像度の映像が出せる。
  • 欠点:値段が高く、繊細

Arduinoから少し脱線しますが、HDMI接続で表示ができる液晶モジュールというのも販売されています。スマホに使われる液晶モニタが流れてきた物などもあって、値は張りますがとても表示が綺麗なものも中にはあります。PCでも出せますし、Raspberry piやLatte pandaというワンボードPCを使っても色々と面白い事ができるでしょう。

マトリクスLED・7セグLED

簡単な図形や数字を表示するためのLED。
ダイナミック点灯という方式を使う。
 

  • 価格:100円前後
  • 利点:液晶などに比べ制御は簡単
  • 欠点:解像度に対して単価が高くなる

LEDやNeoPixelについては以前も紹介したので省略しますが、ほかにLEDを使った表示機器として「マトリクスLED」や「7セグLED」というものがあります。数字やドットを表現することに特化していますが、7セグなんかは使うとわりと雰囲気が出ます。配線を節約するために点灯するLEDを高速で切り替える「ダイナミック点灯」という方式を採用していることが多く、ダイナミック点灯をするための7セグ専用ICなども開発されています。

レーザーモジュール

レーザーポインターの中身にあたるモジュール
 

  • 価格:500円~3000円
  • 利点:スモークと組み合わせて光の線が出せる
  • 欠点:色が限られる。赤は安いが、緑などは少し高い

レーザー光源もモジュールとして売られている事があります。赤色が比較的安い値段で売っていて、緑や青~UV色のレーザーは数千円の値段がします。

レーザーはその強さによって「クラス」が定められていて、日本国内でレーザーポインターのような形で使えるのはクラス2までとなっているので、正規で買えるのはそのくらいのクラスまでです。

ネットで検索すると中国発の怪しいサイトで強い出力のレーザーを売ってる事がありますが…自己責任で、よくよく注意して使うようにしてください。ステージで使うようなクラスになると、天井を焦がすくらいのことはできてしまいます。(実体験)

DCモーター

電圧をかければ回るシンプルな構造。
回転数が遅いが力が強い「ギヤードDCモーター」は少し高い
 

  • 価格:100円~7000円など
  • 利点:ドライバも色々出ているので、制御が簡単。
  • 欠点:緻密なコントロールは苦手

最もシンプルな部品がDCモーターと呼ばれるモーターです。決められた電圧をかけると回りますし、プラスとマイナスを逆につなげば逆回転します。シンプルなのでArduinoに直接つないで動かせそうですが、わりと多めの電流を必要とするのでデジタルアウトからの電気だけでは動かせません。

そのため、フルHブリッジ回路などを内蔵したモータードライバと呼ばれるモジュールを使うのが一般的です。ドライバのチョイスは主にモーターの駆動電圧、駆動電流によって決まります。

ゆっくり動くタイプは「ギヤードモーター」とも呼ばれます。

ソレノイドコイル

電磁石で芯棒を動かす装置。何かを押したり引いたりする時に使用する。
 

  • 価格:1000円程度
  • 利点:DCモーターのように制御が簡単
  • 欠点:出来る事のわりに値段が高め

これもDCモーターと同様コイルに電流を流すだけで動くアクチュエーターで、電気を流すとピンが出たり入ったりします。流した時に出る物をプッシュタイプ、引っ込むものをプルタイプと呼びます。
モーターでもギヤやクランクを使い何かを押し引きする事は可能ですが、構造が複雑になるため、シンプルなものであればソレノイドコイルを使うのが簡単です。
http://www.takaha.co.jp/

PWMサーボモーター

PWMで行きたい角度を指示する。
小型ロボットやラジコンなどに使われている。
 

  • 価格:700円~5000円など
  • 利点:決まった方向を向く装置の中ではとても簡単
  • 欠点:角度に制限がある(270度~360度など)

次に制御が簡単なのがこのPWMサーボです。Arduinoがあればドライバが基本的に不要な分、こちらの方が簡単かもしれません。Arduinoの場合Servo.hというライブラリが用意されています。

電源、PWM入力、GNDの3本線でPWMを送ると決まった角度を向いてくれます。
DCモーターは基本的に軸がずっと回り続けますが、PWMサーボは270~300度くらいまでの範囲を行ったり来たりできるのが一般的です。

ステッピングモーター

 
回転速度や角度の指定など、緻密なコントロールが可能。

  • 価格:1500円~50000円など様々
  • 利点:モーターの中では最も精密
  • 欠点:制御が難しく、ドライバと合わせると値段も高い。

角度の指定、スピードのコントロール、無限回転とわりと何でもござれなモーターがステッピングモーターです。
バイポーラステッピングモーターではA相・B相という二つのコイルユニットがあり、これらをスイッチすることで1ステップずつ(1.8°刻みが多いです)軸の角度を動かしていくことができます。

緻密に制御できる分、難易度も上がります。ステッピングモーターは後期に動かし方を解説しようと思っています。
参考:http://akizukidenshi.com/catalog/g/gP-05372/

ブラシレスモーター

ステッピングモーターと並び精密な制御ができる。ドローンで使われているのはこのモーター。
 

  • 価格:3000円~(アマゾン調べ)
  • 利点:ステッピングと比べなめらかで高速・高応答な制御が可能。
  • 欠点:制御が難しくドライバは必須。

精密に制御できる部類としてもう一つ上げられるのが、ブラシレスモーターです。ステッピングモーターに比べ、より緻密で応答性の高い動作に用いられることが多く、ドローンのプロペラ部分やカメラスタビライザーのジンバル部分等によく使われています。

コーンスピーカー

一般的なスピーカー。アンプキットなどもあるので、自作多チャンネルなども自作すれば幅が広がるかも
 

  • 価格:100円~
  • 利点:好きな形、好きな数のスピーカーが作れる
  • 欠点:製品の音質にはやはり劣る

電子部品屋ではスピーカーも買うことができます。ポータブルアンプキットなどもあるので、組み合わせて作品用にオリジナルのスピーカーを作ることもできるでしょう。ただ音質を上げるにはスピーカー音響の知識が必要になってきます。

スピーカーに関してはFOSTEXのフルレンジスピーカーなどもあるので、やや値段は張りますがそういった選択肢もあります。
https://www.fostex.jp/speaker-unit/
http://akizukidenshi.com/catalog/g/gP-10984/

パラメトリックスピーカー

超音波を使って単一指向性のある音が出せる。

  • 価格:10000円~
  • 利点:特定の場所でだけ聞こえる音が作れる
  • 欠点:音質は良くなく、レンジは写真のもので400~5kHz程度

超音波スピーカーを並べて指向性の高い音を作るパラメトリックスピーカーというものもあります。レーザーのように特定の範囲でだけ、より遠くまで音が聞こえる装置で聞くと不思議な感覚がします。ただ周波数特性はあまり良くないので、出せる音はかなり限られてきます。

http://akizukidenshi.com/catalog/g/gK-02617/