Arduinoその他工作

ArduinoとTOF距離センサでつくるドーナツプレーヤ【後編】

今回は、Arduinoを使った電子工作を前編、後編の2回に分けてお届けしていきます。ここでユニークな電子工作を紹介してくれるのは、物事の関係性をテーマに活動するアーティストである平原真さんです。大阪芸術大学准教授でもある平原さんは、これまでもコンピュータや電子デバイスを使ったメディアアートを多数制作されており、Device Plusでもこれまでに、「Arduinoを使ったソーラーパネルで動くデジタル飼育箱」の制作を紹介して頂いております。そんな平原さんが今回紹介してくれるのは、ArduinoとTOF距離センサでつくるドーナツプレーヤ。前編では動作テストまでを紹介しましたが、いよいよ今回は完成までを紹介していきます。果たしてどんな音色が流れるのか、どうぞお楽しみください!

はじめに

みなさん、こんにちは。平原です。前編ではドーナツプレーヤの動作テストまでおこないましたが、今回は外装の制作から仕上げまでを紹介していきたいと思います。最後に3Dプリンタでつくるミュージックドーナツの紹介もありますので、ぜひオリジナルのミュージックドーナツも作ってみてください!

配布ファイル

作成例をつくるために必要なデータをダウンロードしてください。Arduinoのスケッチや、3Dプリンタで出力するためのモデルデータ、シナベニヤをカットするための形状データなどが含まれています。

  • ArduinoSketch:Arduinoのスケッチ
  • MusicDounuts:音階の形をしたドーナツのモデルデータ
  • SensorArm:センサアームの部品のモデルデータ
  • CutData:レーザー加工機で箱の部品を切断するためのデータ

>>配布ファイルはこちらからダウンロードできます。

外装

完成予想図

外装はシナベニヤを組み合わせて箱を作り、天板にモータ、ボリューム、スピーカなどを取り付けます。3Dプリンタで作成するパーツとアルミパイプを組み合わせてアームを作り、先端にセンサを取り付けます。回転するテーブルは、シナベニヤでベースを作ります。
h01

作業手順

外装制作の手順は以下のとおりです。

  1. 3Dプリンタでパーツを出力する
  2. アルミパイプを切断する
  3. アームを組み立てる
  4. レーザ加工機で材料の切り出し
  5. 天板に電子部品取付け
  6. ブレッドボードの組み立て

手順1:3Dプリンタでパーツを出力する

センサを取り付けるアームのパイプを固定する部品と、テーブルとモータを連結する部品を3Dプリンタで作成します。配布ファイルの中の5つのstlファイルを出力してください。サポート材の有無や積層方向などは、お使いの3Dプリンタに合わせて設定してください。

SensorHead センサを固定します。
PipeJoint パイプ同士を90度で接続します。
PipeBase パイプを天板に固定します。
PipeBaseNut PipeBaseを固定するためのナット。
TableJoint 回転テーブルとモータを接続します。

arduino_donuts_001

手順2:アルミパイプを切断する

直径10mmのアルミパイプを切断して、130mm, 50mmにします。パイプを切断するには、金切のこぎりでもいいですが、パイプカッターを使うと簡単で綺麗に切れます。
arduino_donuts_002

手順3:アームを組み立てる

センサの電線をパイプに通してアームを組み立てます。
3Dプリンタで作成したパーツ(SensorHead)にネジでセンサを固定します。3Dプリントで作ったパーツの穴にはネジ山はありませんが、M3ネジなら直径3mmの穴を開けておくと、ちょうど樹脂を切り込みながらネジが入り固定できます。

h05

SensorHead → パイプ50mm → PipeJoint → パイプ130mm → PipeBase の順番に、センサの電線を通していきます。
h06

テスタの通電チェックを使い、パイプを通した電線がセンサのどこにつながっているかを調べ、先端に接続先(5V、GND、SDA、SCL)を書いたテープを貼ります。
h07
パイプと3Dプリントしたパーツを接続します。押し込んでもゆるい場合は接着剤で固定してください。ただし、パイプ130mmとPipeBaseは高さ調整に使うので、接着せずにつまみネジを横からねじ込んで固定してください。
h08

手順4:レーザ加工機で材料の切り出し

配布ファイルの中のCutData.aiを使い、レーザ加工機で厚さ4mmのシナベニヤから部品を切り出します。嵌合の調整は、お使いのレーザ加工機に合わせて設定してください。
h09

手順5:天板に部品を取付ける

スイッチ、ボリュームx2、スピーカ、モータ、ボールキャスタx3を、ブレッドボードやArduino UNOから一旦外し、天板に取り付けます。

スイッチとボリュームは表から差込み裏からナットで固定します。左側にモータ速度調整用の可変抵抗器(回路図中のVR1)、右側にスピーカーにつながる可変抵抗器(回路図中のVR2)を取り付けます。ボリュームには別売りのツマミを取り付けてください。ツマミはデザインを左右する重要な部品です。軸経(シャフト経)が6mmものなら、可変抵抗器に取り付けられるので、お好きなものを選んでください。

>> 可変抵抗器用ツマミ一覧

スピーカーは白い樹脂製のホルダーを使ってM3x15mmのネジとM3ナットで固定します。
h010

ボールキャスタは、説明書に従って25mmの高さで組み立て、天板に付属のネジとナットで固定します。
モータは天板の外側からM2x10mmのネジで固定します。
h011

手順6:箱の組み立て

木工用接着剤で、側面、前面、底面を貼り付け、固まるまでマスキングテープなどで固定します。背面はまだ接着しないでください。
h012
天板にセンサのアームを上から差込み、天板を挟み込むように3Dプリンターで作ったナット(PipeBaseNut)で固定します。
arduino_dounts_003

手順7:配線する

仮組みと同じように、Arduino UNOとブレッドボードに配線します。配線の数が多く、箱の奥は見えにくいので、間違わないように注意してください。
h014

手順8:テーブルを取り付ける

モータのシャフトの穴に、M2x20mmのネジ差し込み、抜けないようにダブルナットで固定します。テーブルに3Dプリンタで出力したパーツ(TableJoint)を差し込んで固定します。TableJointをシャフトに乗せると、ボールキャスタが荷重を受け止め、回転だけがシャフトからテーブルに伝わります。
h015

スケッチ

全体の流れ

スケッチの全体の流れは次のようになっています。

  1. 最低音、最高音、高さ範囲の指定
  2. TOF距離センサで距離を測り、周波数に変換する
  3. 指定した周波数で音を鳴らす
  4. 速度調整つまみの値に応じてモータをコントロールする

最低音、最高音、高さ範囲の指定

ドーナツの一番低い場所と一番高い場所の音を周波数で指定します。また、ドーナツの高さの範囲をmm単位で決めます。サンプルでは、最低音をC4のド、最高音をB4のシの1オクターブを音の範囲としました。カバーする音の範囲を広くするほど、僅かなノイズで音がズレやすくなります。高さの範囲は50mmに設定しました。センサの分解能は1mmなので、50段階で読み取れます。

const int minFreq = 262;//最低の周波数 ド(C4)
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に接続してください。背面板は開け締めする可能性があるので接着はしません。
h016

電源が入って急に大きな音がしたり、テーブルが高速回転してドーナツが飛んでいかないように、ACアダプタをコンセントに接続する前に、2つのつまみを反時計方向にカチッと音がするまで回してください。

ACアダプタをコンセントに挿して、ドーナツを回転テーブルに乗せます。センサがドーナツの一番低い場所の上に来るようにアームを調節してください。原点設定ボタンを押すと基準となる高さが設定されます。

右側のツマミを回すと音が大きくなり、左側のツマミを回すとテーブルが動きます。

最初のドーナツは、凸凹に応じて音程が上下しつつ、チョコチップの影響でノイズが乗っているように聞こえますね。2つ目は何も乗っていないのでスムーズな音で、3つ目は全体的に傾いていて音が大きく上下します。ドーナツによって違う音がなるので、いろんなドーナツで試してみてください。

これで今回の作例「ドーナツプレーヤ」は完成です。でも、せっかく高さに応じて音がなる装置が完成したので、曲を再生したいですよね。これから、音程を厚みに変換した「ミュージックドーナツ」を作りたいと思います。

ミュージックドーナツをつくる

作業手順

ミュージックドーナツ制作の手順は以下のとおりです。

  1. 曲の音階を高さに変換する
  2. 3DCADで形状を作成する
  3. 3Dプリンターで原型を出力する
  4. 食用シリコンで原型を型取りする
  5. ドーナツのタネを作り、シリコンに流し込む
  6. オーブンで焼く

手順1:曲の音階を高さに変換する

今回はサンプルでは「かえるの合唱」のはじめの4小節分を使います。複雑な曲は読み取りづらいので、シンプルな童謡が向いています。
h017

使用する音は、ド(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になるようにスケッチを描きます。ドーナツらしくなるように角にフィレットをかけます。
h018

今回は4分音符を基本の形とし、4小節分の4分音符が収まるようにドーナツを16分割します。360°/16=22.5°回転させボディにして基本の形を作り、円形状パターンで隙間なく16個並べます。
h019

高さを音階にあわせて調整していきます。先程の表にそってプレスプルで下げていきます。ターンテーブルが時計回りに回るので、音の凸凹は反時計回りに並べます。最後にボディを一つに結合します。
h020

完成したモデルデータは、配布ファイルのMusicDounuts/frog.stlです。他の曲も同梱しているので、好きなものを使ってみてください。

また、高さの原点(ド・C4)を合わせるためのジグ(Base.stl)のデータも同じフォルダに入っています。厚さ15、直径5cm以上なら他の物で代用してもかいまいません。

手順3:3Dプリンタで原型を出力する

先程作成した形状と原点ジグを、3Dプリンタで出力します。
h022

手順4:食品用シリコンで原型を型取りする

食品用シリコンでドーナツの型を作ります。今回は下記の製品を使用しました。

エングレービングジャパン
【食品用シリコン】HTV-2000 硬さ:柔らかめタイプ
http://www.modelersstore.com/shopdetail/000000000336

シリコンの基本的な扱いは製品の説明書を参照してください。

用意するもの

  • シリコンA剤
  • シリコンB剤
  • かくはん用容器
  • 型用容器
  • 原型
  • はかり
  • かくはん用ヘラ
  • テープ
  • ビニール手袋

h024

3Dプリンタ製の原型は中空なので、シリコンを流し込んだ時に浮いてしまわないように、型用容器にテープで仮止めします。重い物で蓋をしても結構です。
h025

シリコンA剤とB剤を混ぜて、ゆっくり型用容器に流し込みます。
h026

硬化時間は室温が23度の場合、8時間程度です。動かさないように安置します。
固まったら原型を外し、予備乾燥を2時間程させてください。
h027

ドーナツを焼く際にシリコンの壁が厚すぎると熱を通しにくいので、もし厚くなりすぎたらカッターで余分なシリコンを削ぎ落とします。シリコンの壁を薄くしすぎると、やわらかく変形しやすくなるので注意してください。

手順5:ドーナツのタネを作り、シリコンに流し込む

ホットケーキミックスを使って焼きドーナツを作ります。型の大きさで量は加減してください。

用意するもの

  • ホットケーキミックス 50g
  • かたくり粉 50g
  • 卵 1個
  • 牛乳 50ml
  • サラダ油 少々
  • シリコン型
  • オーブン(180度)
  • 電子レンジ
  • はかり
  • ボウル
  • ヘラ 等

オーブンを180度に予熱しておきます。シリコン型は洗って、表面に薄くサラダ油を塗りましょう。
h028

卵をとき、牛乳をあわせよく混ぜます。そこにホットケーキミックスとかたくり粉を加えさらに混ぜ、生地の完成です。
型のふちまで生地を流し入れます。空気抜くために作業台にトントンと軽く落とします。
h029

180度に予熱しておいたオーブンに入れ、40分間焼きます。天板の汚れ防止にアルミホイルやクッキングシートを敷くといいでしょう。焼き時間は様子を見て加減してください。表面に焼き色がつき、楊枝を刺して生の生地がついてこなければ焼き上がりです。

焼き上がりすぐはまだドーナツが柔らかいため、型から外さずに冷めるのを待ちます。皿に伏せて置くと形が安定します。十分冷めたら膨らんではみ出た部分を切りとり、型から外します。
h030

動作確認

それでは、ミュージックドーナツを聞いてみましょう。再生する手順は次のとおりです。

  1. テーブルに原点合わせジグを置き、センサが真上になるように位置を合わせます。
  2. センサの高さが、一番高い音から1cm程度上になるように、アームの上下を合わせます。測定範囲がセンサから円錐状に広がるため、近距離のほうが正確に測定できます。
  3. 原点設定ボタンを押します。その高さがド(C4)になります。
  4. ドーナツをプレーヤのテーブルの中央に置きます。
  5. ドーナツの平らな部分の上にセンサが位置するように調整します。
  6. 右のツマミを回して音量を上げる。
  7. 左のツマミを回してモータの回転速度を調整する。

ドーナツから「カエルの歌」が聞こえて来ましたね。

最後に

みなさん、お疲れさまでした。「ドーナツプレーヤ」と「ミュージックドーナツ」の制作いかがでしたか。後半は電子工作とかけ離れてしましたが、ついてきていただけたでしょうか。

今回はArduino標準のtone関数を使用したのでちょっとチープな音でしたが、音響合成ライブラリ「Mozzi」を使えば、より豊かな音を楽しめるようになります。こちらの記事を参考にチャレンジしてみてはいかがでしょうか?
>> 第20回 Arduinoでパーツやセンサを使ってみよう~スピーカー編(その2)

センサについてさらに詳しく知りたい人は「エレクトロニクス豆知識」をチェック!

smartwatch_ebook_banner_580-230
平原真

物事の関係性をテーマに活動するアーティスト。コンピュータや電子デバイスを使ったメディアアートを多数制作しているが、近年は木や石など自然の素材を使った立体作品を手掛ける。大阪芸術大学准教授。Oggoroggo Products 代表。著書に『実践Arduino! 電子工作でアイデアを形にしよう』(オーム社)。 https://makotohirahara.com/