【自作】ArduinoとMozziでつくるクラドニ図形【簡単】

#クラドニ図形とは？
![BC6915DB-2529-4949-9471-EB8B44526322.jpeg](https://qiita-image-store.s3.amazonaws.com/0/285932/c3c26879-14e3-0f88-a0c7-1f3bb4df419e.jpeg)
ハイレゾウォークマンの広告でも使われていたような。
 [出典: クラドニ図形 - Wikipedia](https://ja.wikipedia.org/wiki/%E3%82%AF%E3%83%A9%E3%83%89%E3%83%8B%E5%9B%B3%E5%BD%A2)
クラドニ図形は、ドイツの物理学者エルンスト・クラドニの名にちなんだ図形。

金属・プラスチック・ガラスなどのピンと張った平面にスピーカーなどで振動を与え音程を変えると、共鳴周波数において平面の強く振動する部分と、振動の節となり振動しない部分が生じる。
ここへ塩や砂などの粒を撒くと、振動によって弾き飛ばされた粒体が節へ集まることで、幾何学的な模様が観察される。

波長が短くなる（音が高くなる）ほど、現れる幾何学模様の構造も細かいものになる。
#使用ハードウェア・電子部品
###Arduino UNO x 2
ほとんどの種類のArduinoでなら、互換品も含め、動作するはず。
2台とも同じスケッチ（プログラム）を書き込む
###ステンレス板
音の減衰率を調べると、[鉄、ステンレス、アルミの順に低い](http://www.valtech.to/photo/36112/music.html)ことが判明したため、手元にあったステンレス板を使った。
###ダイソー３００円ステレオスピーカ x 2
スピーカは、アンプがある方がいい。
外を覆う黒い箱を外し、ステンレス板がたるまないように裏側に貼り付けた。
[スピーカの詳しい特性はこちらから](https://www.hmcircuit.jp/daiso300yenusbsp/daiso_usbsp.html)
スピーカーへは、USBで電源を供給する必要があるため、モバイルバッテリー等あれば。
アンプ基板のはんだ付けが杜撰なので、付け直したあと、グルーガンでガッチガチに。
###[３．５ｍｍステレオミニジャックＤＩＰ化キット: 半導体 秋月電子通商-電子部品・ネット通販](http://akizukidenshi.com/catalog/g/gK-05363/)
###ジャンパワイヤ
###ローパスフィルター用に330[Ω]抵抗と10[μF]コンデンサ
Mozziの弱点である、高周波ノイズを消すためにLPFを用意する。
遮断周波数はここから計算した。[CRローパス・フィルタ計算ツール](http://sim.okawa-denshi.jp/CRlowkeisan.htm)
そのほかでは、ノッチフィルタを使う方法も公式GitHubにて公開されている。
#使用ライブラリ
###Mozzi
オープンソースで配布されているArduinoの音響合成ライブラリ。
Mozziを使えば、正弦波だけでなく、矩形波や、和音合成、　ディレイなど多彩な出力が可能。
アイデア次第で、Arduinoでテルミンやシンセサイザーなどの電子楽器を作ることも可能。
詳しくはこちらから。 [Mozzi.ws | Yoshihito NAKANISHI](https://yoshihito-nakanishi.com/mozzi/)
#ArduinoでMozziを使えるようにする
[GitHub - sensorium/Mozzi: sound synthesis library for Arduino](https://github.com/sensorium/Mozzi)
Mozziライブラリ本体をダウンロード、解凍して、ArduinoにMozziライブラリを追加
![Screenshot 2018-10-11_19-32-34-538.png](https://qiita-image-store.s3.amazonaws.com/0/285932/0e831318-ad85-2917-6e4f-ab5e20cd7176.png)
Mozziは軽量化されたとはいえ、Arduino側で併用するセンサによっては、処理落ちするかも。
#回路図・組立図
Fritzingで思うようなイヤホンジャックがなかったため、画像を拝借。 
![Fritzingで思うような](https://yoshihito-nakanishi.com/wp-content/uploads/Mozzi2.png)
下記のローパスフィルタを回路に挿入して高周波ノイズをカット（できてるはず…）
![LPF回路図.png](https://qiita-image-store.s3.amazonaws.com/0/285932/09e2a6ee-79f7-1425-8cc1-9dd85ff45019.png)

#プログラム
それぞれの関数の意味はこちらを参照するとわかりやすい [ArduinoのオーディオライブラリMozziの基礎 - Qiita](https://qiita.com/yoshihiroo/items/f8e3c40730bdb24eba12)

```c++:Chladni.ino
#include <MozziGuts.h>
#include <Oscil.h> // oscillator template
#include <tables/sin2048_int8.h> // sine table for oscillator
// use | Oscil <table_size, update_rate> oscilName (wavetable), look in .h file of table #included above
Oscil <SIN2048_NUM_CELLS, AUDIO_RATE> aSin(SIN2048_DATA);
// use #define for CONTROL_RATE, not a constant

#define CONTROL_RATE 64 // powers of 2 please

void setup(){
  startMozzi(CONTROL_RATE); // set a control rate of 64 (powers of 2 please)
  aSin.setFreq(440); // ここの周波数を変化させることで、異なる図形をつくることができる
}

void updateControl(){
// put changing controls in here
}

int updateAudio(){
  return aSin.next(); // return an int signal centred around 0
}

void loop(){
  audioHook(); // required here
}

```
#クラドニ図形
##220[Hz]
![560414690.111327 2.jpg](https://qiita-image-store.s3.amazonaws.com/0/285932/6ceb723d-2af6-e5b9-ebeb-d7862c35ecb7.jpeg)

##440[Hz]/真ん中のラ
![IMG_4492 2.jpg](https://qiita-image-store.s3.amazonaws.com/0/285932/a554fb7a-467b-2736-96fa-54727343251f.jpeg)

##880[Hz]
![IMG_4490 2.jpg](https://qiita-image-store.s3.amazonaws.com/0/285932/34645a7e-13fb-f5da-6d32-8ad65a297243.jpeg)

##1760[Hz]
![IMG_4493 2.jpg](https://qiita-image-store.s3.amazonaws.com/0/285932/1b890b27-2053-fec7-aa0e-75884d58ef9f.jpeg)

意外とクッキリ出るんだな。スピーカの位置を工夫してみると面白くなるかも

#今後の展望
テルミンの仕組みを応用して、cdsセルを応用した動的なクラドニ図形も作ってみたい。

#追記
2018/10/12 LPFの回路を修正。