見出し画像

音響浮場装置の作成

背景

超音波の振動でものを浮かすことができるという記事を見て興味を持ってしまったため、自分で作れそうだったので少し調査をして超音波発生機を作成して行きます。

音響浮遊装置の作成

超音波スピーカー

超音波スピーカーは探すと色々ありそうですが、秋月あたりで入手性の良さそうなUT1007-Z325Rを第一候補として使ってみます。このスピーカーはこの品番で検索すると、今回作成しようとしている音響浮場装置の他にパラメトリックスピーカーや非接触触覚装置としても利用されているようで、これはこれで面白そうな感じです。

UT1007-Z325Rをよく見てみると、スピーカの横に極性を示す白ポチが表示されていました。秋月のサイトにも極性をご確認くださいとあります。

UT1007-Z325R

スペックシートやWebで検索してもスピーカの正しい使い方は出てこなかったのですが、おそらく圧電素子なので極性はあまり関係ないんじゃないかと考えてました。ただ、他の圧電素子の村田製作所の超音波スピーカとかを見てみると極性なしと書かれていたり、このUT1007-Z325RのメーカサイトのSPL(HongKong)Limitedに行くと既にこの型番はなく、新しいものは極性がなかったりします。なので極性を気にしながら使わなくてはならないものと考えると、マイナス側はGNDにして使わないとダメージを与える可能性があると想定します。村田製作所の仕組みのページを見ると、極性がなければ山反り/谷反りができますが、このスピーカは谷反りさせると良くないのかもしれないです。

圧電スピーカの発音原理(村田製作所のページから)

なので価格が安いのかもしれません。まず他の超音波スピーカよりも少し音が小さいことを覚悟して、プラス側だけスイングさせるやり方で進めます。

全体像

ネットで検索すると既に作成している事例がいくつか見つかったので、先人の知恵を借りて作成していきます。要素としては40kHzの周波数出力、アンプ、超音波スピーカーの3つの要素で行けるらしいとのこと。電源分離がちょっと面倒ですが、以下のようなプランで考えていきます。

全体図

40kHzの作成

40kHzの作り方はいくつかあると思いますが、今回は手間なくマイコンからの出力にしてみました。最近円安のせいなのかArduinoもなかなかの値段になっているため、他の安くて小さなマイコンを探してみた所、Seeed XIAOが1000円以下で買えそうなのでこれで進めていきます。

購入後に調べてみると、このマイコンにはPWMの機能がついていてこれを使えば簡単に40kHzのduty50の振幅を出せそうな雰囲気です。ネットで調べてコードを書いてみると、これだけで済みました。Arduino IDEを使って実際に入力したコードは3行となります。
pwmの行の40000は40kHzを指して、512はduty50を指します。
(maxの100%が1024らしいので、半分の50%は512という数値)

#define PWM_PIN A1

void setup() {
  // put your setup code here, to run once:
  pinMode(PWM_PIN, OUTPUT);
  pwm(PWM_PIN, 40000, 512);
}

void loop() {
  // put your main code here, to run repeatedly:
}

Seeed XIAOのPWMには落とし穴があり、D0/A0の端子ではこのPWM機能が使えないようです。端子はいっぱい余っているので、今回はD1/A1の端子に設定して出力を確認します。
接続は以下のようにして、Saleaeで出力確認したところ、狙い通りに3.3Vp-pの40kHz,Duty50の波形出力されています。

接続端子とブレッドボード上での配線
Saleaeでの出力波形確認(上段デジタル波形/下段アナログ波形)

超音波スピーカーの接続

40kHzの出力が出たので、3.3VですがひとまずSeeed XIAOからの出力で超音波スピーカーを駆動してみます。出力を超音波スピーカのプラス極に接続して、マイナス極はGNDに落としてみました。

超音波スピーカの接続

おそらく何か鳴っているっぽいが、超音波なので聞こえないです。40kHzなので若者にしか聞こえないとかそういうレベルではないと思います。なので同じ秋月で手に入る超音波マイク(UR1007APR)で音を拾ってみようと思います。超音波マイクの詳細があまり載ってなかったので、スピーカと同じ圧電系だろうと言うことで、直接Saleaeに接続してみました。

超音波マイクでのキャプチャー

直接プローブでつまんで確認すると、それなりの出力波形が出てます。
p-pで4V程度出ているのでそれなりに鳴っている雰囲気です。

超音波マイクの出力波形

近づけたり離したりすることで振幅波形のピークが動くので、動きとしては悪くないと思います。超音波スピーカはそれなりに動作していそうなため、次はアンプの検討をしていきます。

ハーフブリッジドライバ

本来であればスピーカー用のドライバICをつけるのが良いのだろうと思いますが、音を変化させるわけではないので、先人の知恵を借りてアンプとしてモータドライバ用のL293DNを利用して矩形波をそのまま入力します。
(スピーカーに良くないかもしれないけど)
矩形波はスピーカー側が追従できないので自ずと正弦波になると思う。

最終的には12Vの振幅を入力する予定であるが、ここでは測定機のSaleaeが電圧的に対応できないので、ひとまず5Vの振幅に変換します。
ブレッドボード上では以下のように組んでみました。

ドライバのブレッドボード上の組み立て

ドライバの出力は5V出ていますがオーバーシュートしているのと、ドライブしきれていないのか4.3Vくらいまで落ちてます。ハーフブリッジドライバは初めて使うのですが、こんなもんなんでしょうか・・・
Channel1はマイクで拾った値ですが、3.3Vの入力時よりも高く出力されていてp-pで5Vくらいは出ています。

ドライバ利用時の波形+マイク出力

12Vドライブ(1)

5V系でうまく動いてそうなので、次は12Vでの駆動を行います。
回路としては以下のような形で組み直しを行いました。
ドライバの制御系が5Vなので電源分離がちょい面倒です。

12Vドライブにした回路図

ブレッドボード上ではACアダプタから12Vの電源を持ってきて、以下のように配線をしてみました。

12Vドライブのブレッドボード

今までSaleaeで波形を観測していましたが、Saleaeが5Vまでしか対応しないので、ここからはオシロでの確認をします。
1ch:40Hz出力、2ch:12V 40Hz出力、3ch:マイクの出力

12V出力をオシロで観測

ハーフブリッジドライバの出力端からはオーバーシュートはあるものの12Vでスイングしており、超音波マイクで集音した出力はp-pで10V程度は出ていそうなので、電圧アップした分は音としても大きくなってそうです。

浮遊テスト(1)

そこそこの音圧が出てそうなので、筒を作ってアルミ箔を載せてみました。
少し下から押されているような挙動は示すものの、浮き上がる様子は全く無い状況です。アルミ箔の傾きによって「チー・・」と音がするので、アルミ箔を振動させるくらいの出力はあるようです。

浮遊テスト1

超音波スピーカの谷反り試験

音圧が足りなさそうなので、壊れてしまう可能性はありますが、超音波スピーカの片方をGNDに落としていた制御をHighとLowをトグルする方向で試験をしてみます。回路図的には以下の通り。

超音波スピーカ谷ぞり試験

ハーフブリッジドライバのもう一つのポートを利用して、High/Low逆の矩形波をSeeed XIAOから出力して、それをドライブしたものを超音波スピーカに入力します。この場合、Seeed XIAOのA1とA2のそれぞれから相補信号を出す必要が出てきます。このため、以下のようなコードに変更しました。

bool toggle;

void setup()
{
  pinMode(A1, OUTPUT);
  pinMode(A2, OUTPUT);
  toggle = false;
}

void loop()
{
  while(1) {
    noInterrupts();
    if (toggle){
      (&(PORT->Group[PORTA]))->OUTSET.reg = PORT_PA04;  // HIGH
      (&(PORT->Group[PORTA]))->OUTCLR.reg = PORT_PA10;  // LOW
    } else {
      (&(PORT->Group[PORTA]))->OUTCLR.reg = PORT_PA04;  // LOW
      (&(PORT->Group[PORTA]))->OUTSET.reg = PORT_PA10;  // HIGH
    }
    interrupts();
    toggle = toggle ? false : true;
    for (volatile int i=0; i<52; i++);
  }
}

タイマー割り込みを使おうと思ったのですが、タイマー周期がどうも揺れるのとusオーダーで調整しようとすると、40kHzの場合の半周期が12.5usと中途半端で調整ができないため、loop()内で無限ループで回してwaitをforループで40kHzに調整しました。(超音波としては38kHzとかでも良いのですが、スピーカとマイクの共振が40kHzで調整されているので40kHzにキチッと合わせないと出力が弱まってしまう。)
ポートの出力は最初 digitalWrite(A1,HIGH); とかで書いてみましたが、どうも2-3us程度遅れるのでレジスタに直接書く形にしています。結果として以下のような波形となりました。

相互波形の出力

周期が変わらないように無限ループで回してとカッチリ作ってみましたが、どうもシステム系の割り込みなのか分周クロックが滑るのか周期が変わってしまいます。Arduino Nano Everyが手元にあったので同じようにやってみたところ、同じ現象が発生したのでちょっと根が深そうです。
多少は目をつぶろうと思って出力波形を見たのですが、ブレブレ感が激しくてどうもよろしくないです。

相互出力のマイク波形

ただ、マイクで検出した波形はp-pで10V以上出ているので、前回同じドライブ電圧を5Vのときの片方GNDでスイングさせるよりも倍程度出ているので、相補信号でドライブするほうが効果があるようです。(スピーカーに良いかどうかは置いといて)
なので、PWM出力に戻して信号をNOT回路を通すのが筋が良さそうです。

NOT回路の追加

ソフトで40kHzを作り出そうとすると厳しそうなので、ソースコードをPWM出力に戻して、NOT回路を通して以下のような回路にします。このタイミングでハーフブリッジドライバ(L239N)の4回路もいらないので、2回路の(IR4427)に変更しました。

NOT回路を使った回路図

ブレットボード上でもそこそこきれいな配線になりました。NOT回路は1回路だけでいいので(TC7S14F)をDIP変換して使いました。

NOT回路を使ったブレッドボード

ドライバから出力された40kHzの波形とマイクで拾った波形は以下の通り、理想通りの出力波形となりました。ドライバのIR4427は電圧ドロップも少なくIC自体の発熱も低いので、L293DNよりもいい感じです。

NOT回路で組んだ出力波形

12Vドライブ(2)

回路構成もドライバも変わってしまいましたが、良き方向に進んでいるので、現在の回路でドライブ電圧を12Vに変更していきます。

12Vドライブ(2)

ブレッドボード上の回路は以下のようになります。

出力としては倍くらいとなり、オシロのレンジも10V/1divで観測しています。見にくいですがドライバの出力のアンダーシュートが大きく5Vくらい出てしまってますが後回しで。330uFでは追いつかないのか・・・

浮遊テスト(2)

音圧の出力として、p-pで20Vくらい出ているので超音波スピーカの片方をGNDに落とすよりも倍くらい出ているので音圧アップです。
長めの筒を作ってアルミ箔の欠片を入れてみたところ浮きました!
実際はもっと高速で回ってましたがgifにしたらスローモーションになってしまいました。

浮遊成功

超音波スピーカの増強

浮いたことで調子に乗って、もっと他のモノも浮かせようと、超音波スピーカを増やしてみました。

超音波スピーカ追加回路

4x4のマトリクスを組む形で、16個のスピーカアレイを作成してみました。
実際のブレッドボード上は以下の感じです。

超音波スピーカの増強ブレッドボード

超音波スピーカ側のブレッドボードの配線がワイヤジャンパを多用してちょっと複雑でした。以下のようにしています。

ブレッドボードの配線

それで、実際に超音波スピーカを駆動してその上空での強さを超音波マイクで測ってみました。

多連スピーカの測定

どうも、音圧が下がってしまっています。代わりに距離が離れても減衰しにくくなっている感じです。

多連スピーカでの音圧

よくよく考えてみれば、スピーカの発信源が複数あって同じ周波数が出ているのであれば、打ち消し合う音も増えるので、きちんと合成波を出したいのであれば、フォーカス点を決めてきちんと距離や配置や角度を計算しないとうまく行かないのは当然ですね。

検索すると過去に研究されている方がたくさん居て、メディアアーティストの落合陽一さんとかも東京大学在学中に研究されていたそうです。

なので、ここでの4x4のマトリクスもリフレクターをつけてやると、うまくハマるポイントが出てくると思います。

画像:http://96ochiai.ws/PixieDust/より

浮遊テスト(3)

反射によるフォーカスポイントを作成するために、プリント基板とスペーサーでリフレクターを作成してみました。

リフレクターの設置

リフレクター設置後にフォーカスポイントっぽい辺りに、アルミホイルの切れ端をピンセットで置いてみたら浮きました。

アルミホイルの浮遊

アルミホイルが飛ばされた時に端子間に落ちたらショートする可能性があるので、本当はアルミホイルは良くないかもしれないです。

もっと重いものを浮かせようとした場合の計算をしてみると、1gのモノを浮かせようとすると300個くらいの超音波スピーカと、それのフォーカスポイントを合わせる曲面の台座(パラボラアンテナみたいな)が必要になるので、そこまではもういいかなと思います。

浮いたことは嬉しいですが、後から考えると色々と苦労した割には地味な結果な感じがしています。ただ、普段使ったことのない部品や超音波の特性などの新しい知識が得られたので十分かなと思います。
夏休みの自由研究とかで試される方の参考になればと思います。

部材リスト

今回使った部材リストは以下の通りです。(ほとんど秋月で揃います)

超音波スピーカ(UT1007-Z325R) @150円
ハーフブリッジドライバ(L293DN) 230円
ゲートドライバ(IR4427PBF) 300円
マイコン(Seeeduino XIAO) 850円
シュミットトリガインバータ(TC7S14F) 60円
SOT23変換基板 20円
細ピンヘッダ 45円
ブレッドボード6穴版 460円
ブレッドボードジャンパ 300円
ユニバーサル基板 100円
スペーサーセット 1,339円


この記事が気に入ったらサポートをしてみませんか?