勝手な電子工作・・

勝手なオリジナル電子工作に関する記事を書きます

超音波定在波が目で見えるようになってきました(8/8更に追記)

前から気になっていた超音波定在波の実験を、他の目的に役立てるために短時間でやってみました。長さ7㎝ほどの小さく安価なキットを使いましたが、これがなかなかの優れものです。

発泡スチロールの小粒を空中に浮かせる「超音波浮遊」装置キットの構造はかなり単純です。超音波スピーカー2個を一定距離で向かい合わせにして、両方から同一周波数同一位相の超音波を出して間に定在波を作ることで、音圧が最も低い箇所に粒が浮いて固定されるというわけです。

youtu.be

スピーカー片側の取付け角度が少し悪かったのですが、それでも粒はちゃんと浮きます。この回路は次のような構成です。



超音波発生用信号の周波数は、オシロスコープで見ると40.1kHz程度です。スピーカがそういう仕様ですから推測どおりですが。こういう電気信号をオシロで測る際は、用心のために最初はプローブをグランド以外にはつながずに見るに限りますね。万一のサージなどでオシロを壊したくないのと、それだけで目的が十分達成できることが多いからです(対象の出力インピーダンスの低さ次第)。

両スピーカー間の物理的な距離は22㎜にみえますが、実際はその表面から4㎜奥に振動板部があるので、正確には30㎜ぐらいになっています(測り直して修正しました)。

 

この装置では粒が安定する場所が3か所あります。装置全体を横にしたり反転したりしても、粒はそう簡単には落ちません。どういう定在波なのかと知りたくなります。実は定在波等表示用のデジタル・シュリーレン観察器を工夫中で、その試験対象にするため作ったわけでした。本体の観察器はまだできていません。(8/8追記:ついに観察できるようになりました。この記事の最後に書いておきます。)

とはいっても、どうしてもそれを今知りたくなるわけで、この際は簡単なシミュレーションをしてみます。この条件だと音圧の深い谷が3層できており、その場所からは粒が簡単には出ていけないことが分かります。スピーカーの振動板の位置を赤で示します。(8/8更新:温度の影響がわかるようにV02に更新しました。)

 

これを出力したPythonプログラムを次につけておきます。音波の周波数とスピーカー間距離、そして空気の温度を、画面上のスライダーで変更できるように作ってあります。このプログラムはGoogle Colabで実行します。

# Simulation of standing waves of Ultrasonic Levitation
# Initial version V01  June 21, 2025 by Akira Tominaga
# V02 Reflects temperature changes.  Aug.5,2025

import numpy as np
import matplotlib.pyplot as plt
from ipywidgets import interact, FloatSlider
from google.colab import output
output.enable_custom_widget_manager()  # just in case

# --- setup Grid ---
x = np.linspace(-0.012, 0.012, 400)   # Horizontal ±1.2 cm
y = np.linspace(-0.02, 0.02, 600) # Vertical ±2 cm
X, Y = np.meshgrid(x, y)

# --- Plotting function with interactive sliders ---
def plot_wave(distance_cm, frequency_kHz, tempC):
    f = frequency_kHz * 1000         # Convert kHz to Hz
    c = 331.5 + tempC * 0.6          # sound speed [m/s]
    λ = c / f                       # wave length
    k = 2 * np.pi / λ               # phase of sound

    d = distance_cm / 100            # Convert cm to m
    speaker_y1 = -d / 2
    speaker_y2 =  d / 2

    r1 = np.sqrt((Y - speaker_y1)**2 + X**2)
    r2 = np.sqrt((Y - speaker_y2)**2 + X**2)
    P = np.sin(k * r1) + np.sin(k * r2)        # sound pressure

    membrane_x = np.linspace(-0.002, 0.002, 50)

    plt.figure(figsize=(5, 6.5))
    contour = plt.contourf(X * 100, Y * 100, P, levels=50, cmap='viridis')
    plt.colorbar(contour, label='Sound pressure (normalized)')
    plt.plot(membrane_x * 100, [speaker_y1 * 100] * len(membrane_x), color='red', lw=5)
    plt.plot(membrane_x * 100, [speaker_y2 * 100] * len(membrane_x), color='red', lw=5)

    plt.title(f'Standing Wave\nDistance = {distance_cm:.1f} cm, Frequency = {frequency_kHz:.2f} kHz, {tempC} ℃')
    plt.xlabel('Horizontal position [cm]')
    plt.ylabel('Vertical position [cm]')
    plt.axis([-1.2, 1.2, -2, 2])
    plt.tight_layout()
    plt.show()

# --- Interactive UI with extended frequency range ---
interact(
    plot_wave,
    distance_cm=FloatSlider(value=3.0, min=2.0, max=4.5, step=0.1, description='Dist[cm]'),
    frequency_kHz=FloatSlider(value=40.1, min=38.0, max=46.0, step=0.1, description='Freq[kHz]'),
    tempC=FloatSlider(value=20,min=10, max=50, step=1, description='Temp[C]')
);

 

とても短い紹介でしたが、何かのお役に立てば幸い。

では今回はこのへんで。

====================

2025.8.08 追記を更新

本来の目的であるオリジナル版ディジタルシュリーレン装置の改良を続けています。必須のハードウェアは4K程度のWebカメラ1台だけです。気体の屈折率の微妙な違いによる、虚像の見える方角の僅かなずれを、オリジナルのプログラムで解析して結果を表示するしくみです。

一番最初の版の出力はこういうものでした。

流体の屈折率を変えるための熱源を小さな点1つだけにしたまま、しばらくプログラムの改良を少しずつ重ねてきました。

原理は、画像データを2560x1440(約370万)の要素に分割して、微熱流を流す前後での各要素のブレを高速で計算します。写る虚像が縦方向にずれる方向と量で色表示をしていたのですが、目的が流れの観察だけなので、途中から符号を外して絶対量だけに変えています。

だいぶ安定して観察できるようになったので、今回、熱源を点ではなく線にしてみました。独自の工夫で、画面と平行な薄い平面のような気流を流しています。下の写真では左側から右方向へと流します。

簡単にしつらえたため上の方にこの超音波装置の電源線や取り付け具などが見えていますが、実験なのでご容赦ください。線状の熱源はニクロム線を細いコイルにした簡単な手作りで、今のところは熱が等分布ではないため流れに少しまだらがある状態です。それでもとにかくまずはやってみるわけです。

次が、左から右へとゆっくり動く薄い平面状の気流です。つまり気体の粗密を示す断面図のような出力画像です。

これで超音波の定在波の強い粗領域3か所がバッチリ見えているじゃありませんか!! 気流によって少し右へ偏っているのは致し方ないとしまして。なお、ブレ方向が反転する境目が出ているものですが、流れでなく定在波を見る場合は、以前のように量と符号でカラーを変える方が見やすいのかもしれません。今後じっくり検討しやってみます。

とにかくこれで大いに気をよくし、この小さなディジタルシュリーレン装置を更に改良していくわけです^^

 

8月8日、さらに改善してきたので追記します。

まずは、測定箇所周囲の風防を大きくして、より精密に観察できるようにしました。また、カメラ視点での虚像のブレの上下方向も示せる表示プログラムに直しました。

次のぶれの絶対値表示ですと、精密になったぶん混み入って分かり難いわけです。

そこで、絶対値表示に加えて符号つきで観察できるように直しました。虚像を見る歪が下(負)にブレるのを青、上(正)にブレるのを赤で表示したのが次です。

空気の疎部分(つまり定在波の音圧が低い箇所)の塊は凹レンズの働きをしますから、虚像のブレは上に青の層、下に赤の層のペアとなります。つまり、上から青→赤と重なるペアが確認したい定在波の疎の部分です。上の写真では発泡スチロールが浮遊した場所に、その3ペアがあるのがわかります。これでようやく納得できるものになってきましたが、さらに改良を続けてから完成したいと思います。

現時点では手作りの熱源部品がやや荒っぽいので、次はこれを改善することでさらに鮮明にしようなどと考えています。時間のあるときに限られますが、最終的には可搬型の扱い易い装置にしたいもの。

 

以上、追加でした。

 

©2025 Akira Tominaga, All rights reserved.