前編:ArduinoとTOF距離センサでつくるドーナツプレーヤ
今回は、Arduinoを使った電子工作を前編、後編の2回に分けてお届けしていきます。ここでユニークな電子工作を紹介してくれるのは、物事の関係性をテーマに活動するアーティストである平原真さんです。大阪芸術大学准教授でもある平原さんは、これまでもコンピュータや電子デバイスを使ったメディアアートを多数制作されており、Device Plusでもこれまでに、「Arduinoを使ったソーラーパネルで動くデジタル飼育箱」の制作を紹介して頂いております。そんな平原さんが今回紹介してくれるのは、ArduinoとTOF距離センサでつくるドーナツプレーヤ。前編では動作テストまでを紹介しましたが、いよいよ今回は完成までを紹介していきます。果たしてどんな音色が流れるのか、どうぞお楽しみください!
はじめに
みなさん、こんにちは。平原です。前編ではドーナツプレーヤの動作テストまでおこないましたが、今回は外装の制作から仕上げまでを紹介していきたいと思います。最後に3Dプリンタでつくるミュージックドーナツの紹介もありますので、ぜひオリジナルのミュージックドーナツも作ってみてください!
配布ファイル
作成例をつくるために必要なデータをダウンロードしてください。Arduinoのスケッチや、3Dプリンタで出力するためのモデルデータ、シナベニヤをカットするための形状データなどが含まれています。
- ArduinoSketch:Arduinoのスケッチ
- MusicDounuts:音階の形をしたドーナツのモデルデータ
- SensorArm:センサアームの部品のモデルデータ
- CutData:レーザー加工機で箱の部品を切断するためのデータ
外装
完成予想図
外装はシナベニヤを組み合わせて箱を作り、天板にモータ、ボリューム、スピーカなどを取り付けます。3Dプリンタで作成するパーツとアルミパイプを組み合わせてアームを作り、先端にセンサを取り付けます。回転するテーブルは、シナベニヤでベースを作ります。
作業手順
外装制作の手順は以下のとおりです。
- 3Dプリンタでパーツを出力する
- アルミパイプを切断する
- アームを組み立てる
- レーザ加工機で材料の切り出し
- 天板に電子部品取付け
- ブレッドボードの組み立て
手順1:3Dプリンタでパーツを出力する
センサを取り付けるアームのパイプを固定する部品と、テーブルとモータを連結する部品を3Dプリンタで作成します。配布ファイルの中の5つのstlファイルを出力してください。サポート材の有無や積層方向などは、お使いの3Dプリンタに合わせて設定してください。
SensorHead センサを固定します。
PipeJoint パイプ同士を90度で接続します。
PipeBase パイプを天板に固定します。
PipeBaseNut PipeBaseを固定するためのナット。
TableJoint 回転テーブルとモータを接続します。
手順2:アルミパイプを切断する
直径10mmのアルミパイプを切断して、130mm, 50mmにします。パイプを切断するには、金切のこぎりでもいいですが、パイプカッターを使うと簡単で綺麗に切れます。
手順3:アームを組み立てる
センサの電線をパイプに通してアームを組み立てます。
3Dプリンタで作成したパーツ(SensorHead)にネジでセンサを固定します。3Dプリントで作ったパーツの穴にはネジ山はありませんが、M3ネジなら直径3mmの穴を開けておくと、ちょうど樹脂を切り込みながらネジが入り固定できます。
SensorHead → パイプ50mm → PipeJoint → パイプ130mm → PipeBase の順番に、センサの電線を通していきます。
テスタの通電チェックを使い、パイプを通した電線がセンサのどこにつながっているかを調べ、先端に接続先(5V、GND、SDA、SCL)を書いたテープを貼ります。
パイプと3Dプリントしたパーツを接続します。押し込んでもゆるい場合は接着剤で固定してください。ただし、パイプ130mmとPipeBaseは高さ調整に使うので、接着せずにつまみネジを横からねじ込んで固定してください。
手順4:レーザ加工機で材料の切り出し
配布ファイルの中のCutData.aiを使い、レーザ加工機で厚さ4mmのシナベニヤから部品を切り出します。嵌合の調整は、お使いのレーザ加工機に合わせて設定してください。
手順5:天板に部品を取付ける
スイッチ、ボリュームx2、スピーカ、モータ、ボールキャスタx3を、ブレッドボードやArduino UNOから一旦外し、天板に取り付けます。
スイッチとボリュームは表から差込み裏からナットで固定します。左側にモータ速度調整用の可変抵抗器(回路図中のVR1)、右側にスピーカーにつながる可変抵抗器(回路図中のVR2)を取り付けます。ボリュームには別売りのツマミを取り付けてください。ツマミはデザインを左右する重要な部品です。軸経(シャフト経)が6mmものなら、可変抵抗器に取り付けられるので、お好きなものを選んでください。
>> 可変抵抗器用ツマミ一覧
スピーカーは白い樹脂製のホルダーを使ってM3x15mmのネジとM3ナットで固定します。
ボールキャスタは、説明書に従って25mmの高さで組み立て、天板に付属のネジとナットで固定します。
モータは天板の外側からM2x10mmのネジで固定します。
手順6:箱の組み立て
木工用接着剤で、側面、前面、底面を貼り付け、固まるまでマスキングテープなどで固定します。背面はまだ接着しないでください。
天板にセンサのアームを上から差込み、天板を挟み込むように3Dプリンターで作ったナット(PipeBaseNut)で固定します。
手順7:配線する
仮組みと同じように、Arduino UNOとブレッドボードに配線します。配線の数が多く、箱の奥は見えにくいので、間違わないように注意してください。
手順8:テーブルを取り付ける
モータのシャフトの穴に、M2x20mmのネジ差し込み、抜けないようにダブルナットで固定します。テーブルに3Dプリンタで出力したパーツ(TableJoint)を差し込んで固定します。TableJointをシャフトに乗せると、ボールキャスタが荷重を受け止め、回転だけがシャフトからテーブルに伝わります。
スケッチ
全体の流れ
スケッチの全体の流れは次のようになっています。
- 最低音、最高音、高さ範囲の指定
- TOF距離センサで距離を測り、周波数に変換する
- 指定した周波数で音を鳴らす
- 速度調整つまみの値に応じてモータをコントロールする
最低音、最高音、高さ範囲の指定
ドーナツの一番低い場所と一番高い場所の音を周波数で指定します。また、ドーナツの高さの範囲をmm単位で決めます。サンプルでは、最低音をC4のド、最高音をB4のシの1オクターブを音の範囲としました。カバーする音の範囲を広くするほど、僅かなノイズで音がズレやすくなります。高さの範囲は50mmに設定しました。センサの分解能は1mmなので、50段階で読み取れます。
const int maxFreq = 494;//最高の周波数 シ(B4)
const int heightRange = 50;//高さの範囲 50mm
TOF距離センサで距離を測り、周波数に変換する
TOF距離センサで取得する値の単位はmmなので、そのまま距離として使うことができます。ドーナツの一番低いところにセンサを合わせて、原点設定ボタンを押すと、その高さをmaxFreq(ド/C4/262Hz)、50mm上をminFreq(シ/B4/494Hz)に変換します。
指定した周波数で音を鳴らす
音量つまみを右にひねると、スイッチがオンになります。tone関数を使って先程計算した周波数で音を鳴らします。tone関数は、第1引数に出力するピン、第2引数に周波数を指定します。noTone関数を呼び出すと止まります。
速度調整つまみの値に応じてモータをコントロールする
analogReadで速度調整つまみの値を取得した0~1023の値を、モータが回転する強さの40~255に変換し、そのスピードでモータを回すように命令します。
スケッチ全体
配布ファイルのDounutPlayerをArduino UNOに書き込んでください。
動作確認
それでは、いよいよドーナツの音を聞いてみましょう。
USBケーブルを取り外し、Arduino UNOとブレッドボードを箱の中に納めてください。背面板の穴にACアダプタを通し、Arduino UNOに接続してください。背面板は開け締めする可能性があるので接着はしません。
電源が入って急に大きな音がしたり、テーブルが高速回転してドーナツが飛んでいかないように、ACアダプタをコンセントに接続する前に、2つのつまみを反時計方向にカチッと音がするまで回してください。
ACアダプタをコンセントに挿して、ドーナツを回転テーブルに乗せます。センサがドーナツの一番低い場所の上に来るようにアームを調節してください。原点設定ボタンを押すと基準となる高さが設定されます。
右側のツマミを回すと音が大きくなり、左側のツマミを回すとテーブルが動きます。
最初のドーナツは、凸凹に応じて音程が上下しつつ、チョコチップの影響でノイズが乗っているように聞こえますね。2つ目は何も乗っていないのでスムーズな音で、3つ目は全体的に傾いていて音が大きく上下します。ドーナツによって違う音がなるので、いろんなドーナツで試してみてください。
これで今回の作例「ドーナツプレーヤ」は完成です。でも、せっかく高さに応じて音がなる装置が完成したので、曲を再生したいですよね。これから、音程を厚みに変換した「ミュージックドーナツ」を作りたいと思います。
ミュージックドーナツをつくる
作業手順
ミュージックドーナツ制作の手順は以下のとおりです。
- 曲の音階を高さに変換する
- 3DCADで形状を作成する
- 3Dプリンターで原型を出力する
- 食用シリコンで原型を型取りする
- ドーナツのタネを作り、シリコンに流し込む
- オーブンで焼く
手順1:曲の音階を高さに変換する
今回はサンプルでは「かえるの合唱」のはじめの4小節分を使います。複雑な曲は読み取りづらいので、シンプルな童謡が向いています。
使用する音は、ド(C4)からシ(B4)までの1オクターブとします。また、ドーナツの音を表す高さの範囲を50mmとします。ドからシまでの周波数の差は約232Hzなので、1Hzあたりの高さは0.215mmとなります。
1オクターブ(C4~B4) | 232.257 | Hz |
音階用の高さ | 50 | mm |
1Hz= | 0.215 | mm |
15mmの土台を加えた各音程の高さは、下記の表のとおりになります。
音階 | 周波数(Hz) | ドとの差(Hz) | 高さ(mm) | 土台込み(mm) |
ド | 261.626 | 0 | 0 | 15 |
ド♯ | 277.183 | 15.557 | 3 | 18 |
レ | 293.665 | 32.039 | 7 | 22 |
レ♯ | 311.127 | 49.501 | 11 | 26 |
ミ | 329.628 | 68.002 | 15 | 30 |
ファ | 349.228 | 87.602 | 19 | 34 |
ファ♯ | 369.994 | 108.368 | 23 | 38 |
ソ | 391.995 | 130.369 | 28 | 43 |
ソ♯ | 415.305 | 153.679 | 33 | 48 |
ラ | 440 | 178.374 | 38 | 53 |
ラ♯ | 466.164 | 204.538 | 44 | 59 |
シ | 493.883 | 232.257 | 50 | 65 |
手順2:3DCADで形状を作成する
曲の音階に合わせた高さで、ドーナツの形を設計します。ここではFusion360の画面で説明をおこないますが、3Dプリンタで出力できるソフトであれば何を使っても結構です。
直径100mm、穴40mm、土台15mm、音階用の高さ50mmになるようにスケッチを描きます。ドーナツらしくなるように角にフィレットをかけます。
今回は4分音符を基本の形とし、4小節分の4分音符が収まるようにドーナツを16分割します。360°/16=22.5°回転させボディにして基本の形を作り、円形状パターンで隙間なく16個並べます。
高さを音階にあわせて調整していきます。先程の表にそってプレスプルで下げていきます。ターンテーブルが時計回りに回るので、音の凸凹は反時計回りに並べます。最後にボディを一つに結合します。
完成したモデルデータは、配布ファイルのMusicDounuts/frog.stlです。他の曲も同梱しているので、好きなものを使ってみてください。
また、高さの原点(ド・C4)を合わせるためのジグ(Base.stl)のデータも同じフォルダに入っています。厚さ15、直径5cm以上なら他の物で代用してもかいまいません。
手順3:3Dプリンタで原型を出力する
先程作成した形状と原点ジグを、3Dプリンタで出力します。
手順4:食品用シリコンで原型を型取りする
食品用シリコンでドーナツの型を作ります。今回は下記の製品を使用しました。
エングレービングジャパン
【食品用シリコン】HTV-2000 硬さ:柔らかめタイプ
http://www.modelersstore.com/shopdetail/000000000336
シリコンの基本的な扱いは製品の説明書を参照してください。
用意するもの
- シリコンA剤
- シリコンB剤
- かくはん用容器
- 型用容器
- 原型
- はかり
- かくはん用ヘラ
- テープ
- ビニール手袋
3Dプリンタ製の原型は中空なので、シリコンを流し込んだ時に浮いてしまわないように、型用容器にテープで仮止めします。重い物で蓋をしても結構です。
シリコンA剤とB剤を混ぜて、ゆっくり型用容器に流し込みます。
硬化時間は室温が23度の場合、8時間程度です。動かさないように安置します。
固まったら原型を外し、予備乾燥を2時間程させてください。
ドーナツを焼く際にシリコンの壁が厚すぎると熱を通しにくいので、もし厚くなりすぎたらカッターで余分なシリコンを削ぎ落とします。シリコンの壁を薄くしすぎると、やわらかく変形しやすくなるので注意してください。
手順5:ドーナツのタネを作り、シリコンに流し込む
ホットケーキミックスを使って焼きドーナツを作ります。型の大きさで量は加減してください。
用意するもの
- ホットケーキミックス 50g
- かたくり粉 50g
- 卵 1個
- 牛乳 50ml
- サラダ油 少々
- シリコン型
- オーブン(180度)
- 電子レンジ
- はかり
- ボウル
- ヘラ 等
オーブンを180度に予熱しておきます。シリコン型は洗って、表面に薄くサラダ油を塗りましょう。
卵をとき、牛乳をあわせよく混ぜます。そこにホットケーキミックスとかたくり粉を加えさらに混ぜ、生地の完成です。
型のふちまで生地を流し入れます。空気抜くために作業台にトントンと軽く落とします。
180度に予熱しておいたオーブンに入れ、40分間焼きます。天板の汚れ防止にアルミホイルやクッキングシートを敷くといいでしょう。焼き時間は様子を見て加減してください。表面に焼き色がつき、楊枝を刺して生の生地がついてこなければ焼き上がりです。
焼き上がりすぐはまだドーナツが柔らかいため、型から外さずに冷めるのを待ちます。皿に伏せて置くと形が安定します。十分冷めたら膨らんではみ出た部分を切りとり、型から外します。
動作確認
それでは、ミュージックドーナツを聞いてみましょう。再生する手順は次のとおりです。
- テーブルに原点合わせジグを置き、センサが真上になるように位置を合わせます。
- センサの高さが、一番高い音から1cm程度上になるように、アームの上下を合わせます。測定範囲がセンサから円錐状に広がるため、近距離のほうが正確に測定できます。
- 原点設定ボタンを押します。その高さがド(C4)になります。
- ドーナツをプレーヤのテーブルの中央に置きます。
- ドーナツの平らな部分の上にセンサが位置するように調整します。
- 右のツマミを回して音量を上げる。
- 左のツマミを回してモータの回転速度を調整する。
ドーナツから「カエルの歌」が聞こえて来ましたね。
最後に
みなさん、お疲れさまでした。「ドーナツプレーヤ」と「ミュージックドーナツ」の制作いかがでしたか。後半は電子工作とかけ離れてしましたが、ついてきていただけたでしょうか。
今回はArduino標準のtone関数を使用したのでちょっとチープな音でしたが、音響合成ライブラリ「Mozzi」を使えば、より豊かな音を楽しめるようになります。こちらの記事を参考にチャレンジしてみてはいかがでしょうか?
>> 第20回 Arduinoでパーツやセンサを使ってみよう~スピーカー編(その2)
センサについてさらに詳しく知りたい人は「エレクトロニクス豆知識」をチェック!
今回の連載の流れ
前編:ArduinoとTOF距離センサでつくるドーナツプレーヤ
後編:ArduinoとTOF距離センサでつくるドーナツプレーヤ(今回)