【Octave? Python?】物理シミュレーション タイヤバランサーのモデルってないかな?【Rotation balance】

タイヤバランサーの論文

ぜんぜん違うもの調べてたら。。出てきたので思い付きでまた調べてしまったシリーズ(笑)

オープンアクセスの論文を少しみてたら。。こんな論文が。。

Design and Development of Wheel Balancing Machine Experimental Setup

この論文では、ArduinoでDynamic balanceをGセンサで取って推定するってことやってて。。どこにおもりをつけるといいのか??までは解いていなかった(笑)

で。。そういや。。タイヤバランサーの仕組みってどうなってたんだっけ??って。。 Solidなものだと、たぶん解析的に解けるはずで。。軸につけて回転させて、軸の振動(力)のX・Y・Z軸から求まるんじゃないかな?? って思ったけど。。

どうやるんだっけ??(笑)

本とか、論文っていまだにいろいろ出ている分野なんですね。。とか思ったり。。

クリックしてBalancing.pdfにアクセス

https://www.instructables.com/Dynamic-Motor-Balancing-with-Sugru-and-an-iPhone/

https://scholarsmine.mst.edu/cgi/viewcontent.cgi?article=5896&context=masters_theses

BASICのプログラムで作られてた~ なんか懐かしいです。

クリックして17-227.pdfにアクセス

古くに解かれている問題だから。。Gnu Octave や Matlabでサンプル落ちてるんじゃないのかな?って見てみると

https://www.intechopen.com/chapters/46862

https://www.researchgate.net/publication/343083277_Investigating_aids_for_teaching_the_balancing_of_rotating_masses

https://web.archive.org/web/20210716193823id_/https://dergipark.org.tr/en/download/article-file/1486475

ありましたが。。プログラム自体はなかった(笑)

Wikiだと、この

https://en.wikipedia.org/wiki/Balancing_of_rotating_masses

 

Python でタイヤ振動かくと。。

# おもりの重さの異なる複数のケースに対する遠心力を計算する関数
def calculate_centrifugal_force(mass_weight):
# 重心の計算
x_center_mass = (mass_weight * (radius_wheel - thickness_wheel)) / total_mass

# 遠心力の計算(三次元成分)
centrifugal_force_x = total_mass * (angular_velocity ** 2) * x_center_mass * np.cos(angular_velocity * t)
centrifugal_force_y = total_mass * (angular_velocity ** 2) * x_center_mass * np.sin(angular_velocity * t)
centrifugal_force_z = total_mass * (angular_velocity ** 2) * x_center_mass * np.sin(phi)

return np.sqrt(centrifugal_force_x**2 + centrifugal_force_y**2 + centrifugal_force_z**2)

# z方向の角度(仮定)
phi = np.pi / 4 # 45度

# 重さの異なるおもりに対する遠心力を計算
weights = [2 / 1000, 3 / 1000, 4 / 1000, 5 / 1000] # kg
forces = [calculate_centrifugal_force(weight) for weight in weights]

# グラフのプロット
for force, weight in zip(forces, weights):
plt.plot(t, force, label=f'{weight * 1000}g')

plt.xlabel('Time (s)')
plt.ylabel('Centrifugal Force (N)')
plt.title('Centrifugal Force over Time for Different Weights')
plt.legend()
plt.grid(True)
plt.show()

 

# おもりの重さを変化させた場合の各RPMでの遠心力を計算し、プロットする関数
def plot_force_rpm_different_weights(rpms, weights):
plt.figure(figsize=(10, 6))

for weight in weights:
forces_rpm = [calculate_force_rpm(rpm, weight / 1000) for rpm in rpms] # 重さをkgに変換
plt.plot(rpms, forces_rpm, label=f'{weight}g')

plt.xlabel('Rotation Speed (RPM)')
plt.ylabel('Centrifugal Force (N)')
plt.title('Centrifugal Force vs. Rotation Speed for Different Weights')
plt.legend()
plt.grid(True)
plt.show()

# おもりの重さのリスト(2g, 3g, 4g, 5g)
weights = [2, 3, 4, 5]

# RPMの範囲を設定
rpms = np.linspace(1, 1000, 100) # 1 RPM から 1000 RPM

# おもりの重さを変えてグラフをプロット
plot_force_rpm_different_weights(rpms, weights)

こんな感じか??

 

回転が上がると、偏りの重さが思いほど力がかかるので、重さを特定するのはこれの逆するのかな?

 

# 2gのおもりをホイールの軸から0°、10°、20°の位置にずらした場合のX軸・Y軸の遠心力を計算する関数
def plot_force_xy_time_different_angles(t, weight, angles):
plt.figure(figsize=(12, 6))

# おもりの重さ(kg)
mass_weight = weight / 1000

for angle in angles:
# 角度をラジアンに変換
angle_rad = np.radians(angle)

# 重心の計算
x_center_mass = mass_weight * (radius_wheel - thickness_wheel) * np.cos(angle_rad) / total_mass
y_center_mass = mass_weight * (radius_wheel - thickness_wheel) * np.sin(angle_rad) / total_mass

# X方向とY方向の遠心力の計算
centrifugal_force_x = total_mass * (angular_velocity ** 2) * x_center_mass * np.cos(angular_velocity * t)
centrifugal_force_y = total_mass * (angular_velocity ** 2) * y_center_mass * np.sin(angular_velocity * t)

# グラフにプロット
plt.plot(t, centrifugal_force_x, label=f'X-axis {angle}°')
plt.plot(t, centrifugal_force_y, '--', label=f'Y-axis {angle}°')

plt.xlabel('Time (s)')
plt.ylabel('Centrifugal Force (N)')
plt.title('X-axis and Y-axis Centrifugal Forces for Different Angles')
plt.legend()
plt.grid(True)
plt.show()

# おもりの角度のリスト(0°, 10°, 20°)
angles = [0, 10, 20]

# X軸・Y軸の力を時間に対してプロット(2gのおもり)
plot_force_xy_time_different_angles(t, 2, angles)

 

 

 

この位相で場所を特定するのかな??

 

って。。これを調べてたんじゃない(笑)

 

 

投稿者 tom2rd

コメントを残していただけるとありがたいです

Loading Facebook Comments ...

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください