Table of Contents

پروژه نرم افزار مکانیک

پروژه نرم افزار مکانیک

۱. موضوع پروژه و هدف

موضوع: نرم‌افزار شبیه‌سازی حرکت و تنش در اجسام مکانیکی
هدف: ایجاد نرم‌افزاری که به کاربر امکان دهد نیروها و حرکت اجسام مختلف را شبیه‌سازی کرده و تنش و تغییر شکل آن‌ها را در شرایط مختلف بررسی کند.


۲. عملکرد نرم‌افزار در پروژه نرم افزار مکانیک

  • کاربر مدل مکانیکی (مانند تیر، فنر، یا چرخ‌دنده) را وارد می‌کند یا طراحی می‌کند.

  • وارد کردن مشخصات مواد (مثل فلز، پلاستیک، آلومینیوم).

  • اعمال نیروها و شرایط مرزی (مثلاً فشار، کشش، وزن، اصطکاک).

  • شبیه‌سازی حرکت یا رفتار مکانیکی مدل.

  • نمایش نتایج به صورت نمودار، گراف و انیمیشن.


۳. تکنولوژی‌هاو زبان‌های برنامه‌نویسی پیشنهادی

 

پروژه نرم افزار مکانیک

 

  • زبان برنامه‌نویسی: Python، C++ یا C#

  • کتابخانه‌ها و ابزارها:

    • Python: PyQt یا Tkinter برای رابط کاربری، Matplotlib برای نمودار، NumPy و SciPy برای محاسبات مکانیکی.

    • C++: Qt برای GUI، OpenGL برای شبیه‌سازی سه‌بعدی.

    • C#: WPF یا Windows Forms برای GUI.

  • قابلیت توسعه: اضافه کردن ماژول تحلیل سیالات (CFD) یا رباتیک.


۴. دیاگرام‌ها و ساختار پروژه نرم افزار مکانیک

  • دیاگرام کلاس‌ها در پروژه نرم افزار مکانیک:

    • Object: تعریف اجسام مکانیکی (تیر، فنر، جرم).

    • Material: مشخصات ماده (چگالی، مدول یانگ، ضریب اصطکاک).

    • Force: نیروهای اعمالی (وزن، کشش، فشار).

    • Simulation: بخش شبیه‌سازی و حل معادلات دینامیک.

    • UI: رابط کاربری برای ورود داده‌ها و نمایش نتایج.

  • دیاگرام جریان داده‌ها در پروژه نرم افزار مکانیک:

    1. ورود مدل → 2. ورود مشخصات ماده → 3. اعمال نیرو → 4. شبیه‌سازی → 5. نمایش نمودار/انیمیشن


۵. قابلیت‌ها و امکانات نرم‌افزار

  • امکان تعریف انواع اجسام مکانیکی (تیر، صفحه، فنر).

  • محاسبه تنش، کرنش و تغییر شکل.

  • نمایش حرکت و تغییر شکل به صورت انیمیشن.

  • امکان ذخیره نتایج شبیه‌سازی و نمودارها.

  • افزودن نیروهای مختلف و تغییر شرایط مرزی در زمان واقعی.

نمونه پروژه شبیه‌سازی جرم-فنر در پایتون

۱. توضیح پروژه

  • شبیه‌سازی حرکت یک جرم متصل به فنر با استفاده از قانون هوک و معادله حرکت F=m⋅aF = m \cdot a

  • رسم نمودار جابجایی جرم نسبت به زمان.

  • قابلیت تغییر جرم، ضریب فنر و نیروی اولیه.


۲. کد نمونه پایتون

import numpy as np
import matplotlib.pyplot as plt

# مشخصات سیستم
m = 1.0 # جرم (kg)
k = 10.0 # ضریب فنر (N/m)
x0 = 0.1 # جابجایی اولیه (m)
v0 = 0.0 # سرعت اولیه (m/s)
t_max = 10 # زمان شبیه‌سازی (s)
dt = 0.01 # گام زمانی (s)

# آرایه زمان
t = np.arange(0, t_max, dt)

# آرایه جابجایی و سرعت
x = np.zeros(len(t))
v = np.zeros(len(t))

# مقادیر اولیه
x[0] = x0
v[0] = v0

# شبیه‌سازی حرکت با روش اویلر
for i in range(1, len(t)):
a = -k/m * x[i-1] # شتاب طبق قانون هوک
v[i] = v[i-1] + a*dt
x[i] = x[i-1] + v[i]*dt

# رسم نمودار
plt.plot(t, x)
plt.title("شبیه‌سازی حرکت جرم-فنر")
plt.xlabel("زمان (s)")
plt.ylabel("جابجایی (m)")
plt.grid(True)
plt.show()


۳. توضیح کد

  1. ابتدا مشخصات سیستم (جرم، ضریب فنر، جابجایی اولیه) تعریف شده.

  2. با استفاده از روش Euler حرکت جرم-فنر شبیه‌سازی شده.

  3. در نهایت، نمودار جابجایی برحسب زمان رسم می‌شود.


این نمونه، پایه‌ای برای اضافه کردن امکانات بیشتره مثل:

  • رابط گرافیکی با Tkinter یا PyQt

  • اضافه کردن چند جرم و فنر متصل به هم

  • نمایش انیمیشن حرکت اجسام به جای نمودار ساده

  • اضافه کردن مقاومت هوا یا نیروی خارجی


۱. توضیح پروژه گرافیکی

  • شبیه‌سازی حرکت یک جرم متصل به فنر با نمایش انیمیشن در GUI

  • امکان تغییر جرم، ضریب فنر، جابجایی اولیه و سرعت اولیه از طریق رابط کاربری

  • نمایش نمودار جابجایی برحسب زمان


۲. کد نمونه پایتون با Tkinter و Matplotlib

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
import tkinter as tk

# تابع شبیه‌سازی حرکت جرم-فنر
def simulate():
m = float(entry_mass.get())
k = float(entry_spring.get())
x0 = float(entry_x0.get())
v0 = float(entry_v0.get())
t_max = float(entry_tmax.get())
dt = 0.01

t = np.arange(0, t_max, dt)
x = np.zeros(len(t))
v = np.zeros(len(t))
x[0] = x0
v[0] = v0

for i in range(1, len(t)):
a = -k/m * x[i-1]
v[i] = v[i-1] + a*dt
x[i] = x[i-1] + v[i]*dt

# رسم نمودار در GUI
fig.clear()
ax = fig.add_subplot(111)
ax.plot(t, x)
ax.set_title("شبیه‌سازی حرکت جرم-فنر")
ax.set_xlabel("زمان (s)")
ax.set_ylabel("جابجایی (m)")
ax.grid(True)
canvas.draw()

# ساخت رابط کاربری
root = tk.Tk()
root.title("شبیه‌سازی جرم-فنر")

tk.Label(root, text="جرم (kg):").grid(row=0, column=0)
entry_mass = tk.Entry(root)
entry_mass.insert(0, "1.0")
entry_mass.grid(row=0, column=1)

tk.Label(root, text="ضریب فنر (N/m):").grid(row=1, column=0)
entry_spring = tk.Entry(root)
entry_spring.insert(0, "10.0")
entry_spring.grid(row=1, column=1)

tk.Label(root, text="جابجایی اولیه (m):").grid(row=2, column=0)
entry_x0 = tk.Entry(root)
entry_x0.insert(0, "0.1")
entry_x0.grid(row=2, column=1)

tk.Label(root, text="سرعت اولیه (m/s):").grid(row=3, column=0)
entry_v0 = tk.Entry(root)
entry_v0.insert(0, "0.0")
entry_v0.grid(row=3, column=1)

tk.Label(root, text="زمان شبیه‌سازی (s):").grid(row=4, column=0)
entry_tmax = tk.Entry(root)
entry_tmax.insert(0, "10")
entry_tmax.grid(row=4, column=1)

tk.Button(root, text="شروع شبیه‌سازی", command=simulate).grid(row=5, column=0, columnspan=2)

# افزودن نمودار به GUI
fig = plt.Figure(figsize=(6,4))
canvas = FigureCanvasTkAgg(fig, master=root)
canvas.get_tk_widget().grid(row=6, column=0, columnspan=2)

root.mainloop()


۳. توضیح کد گرافیکی پروژه نرم افزار مکانیک

  1. از Tkinter برای ساخت فرم و ورودی‌ها استفاده شد.

  2. کاربر می‌تواند جرم، ضریب فنر، جابجایی و سرعت اولیه و زمان شبیه‌سازی را وارد کند.

  3. با زدن دکمه، حرکت جرم-فنر شبیه‌سازی شده و نمودار در همان پنجره رسم می‌شود.

  4. این پایه برای اضافه کردن انیمیشن واقعی حرکت جرم روی صفحه هم آماده است.

۱. توضیح پروژه انیمیشنی پروژه نرم افزار مکانیک

  • نمایش حرکت جرم روی صفحه و فنر به صورت زنده در پروژه نرم افزار مکانیک

  • کاربر می‌تواند پارامترهای سیستم (جرم، ضریب فنر، جابجایی اولیه، سرعت اولیه)پروژه نرم افزار مکانیک را تغییر دهد

  • رسم نمودار جابجایی همزمان با انیمیشن در پروژه نرم افزار مکانیک


۲. کد نمونه پایتون با انیمیشن (Tkinter + Matplotlib + Canvas) پروژه نرم افزار مکانیک

import tkinter as tk
import numpy as np
import time

# ایجاد پنجره
root = tk.Tk()
root.title("شبیه‌سازی جرم-فنر با انیمیشن")

# تنظیم پارامترها
tk.Label(root, text="جرم (kg):").grid(row=0, column=0)
entry_mass = tk.Entry(root)
entry_mass.insert(0, "1.0")
entry_mass.grid(row=0, column=1)

tk.Label(root, text="ضریب فنر (N/m):").grid(row=1, column=0)
entry_spring = tk.Entry(root)
entry_spring.insert(0, "10.0")
entry_spring.grid(row=1, column=1)

tk.Label(root, text="جابجایی اولیه (m):").grid(row=2, column=0)
entry_x0 = tk.Entry(root)
entry_x0.insert(0, "0.1")
entry_x0.grid(row=2, column=1)

tk.Label(root, text="سرعت اولیه (m/s):").grid(row=3, column=0)
entry_v0 = tk.Entry(root)
entry_v0.insert(0, "0.0")
entry_v0.grid(row=3, column=1)

tk.Label(root, text="زمان شبیه‌سازی (s):").grid(row=4, column=0)
entry_tmax = tk.Entry(root)
entry_tmax.insert(0, "10")
entry_tmax.grid(row=4, column=1)

# Canvas برای نمایش انیمیشن
canvas = tk.Canvas(root, width=600, height=200, bg="white")
canvas.grid(row=5, column=0, columnspan=2)

def simulate_animation():
canvas.delete("all")
m = float(entry_mass.get())
k = float(entry_spring.get())
x0 = float(entry_x0.get())
v0 = float(entry_v0.get())
t_max = float(entry_tmax.get())
dt = 0.01

# تبدیل جابجایی به پیکسل برای نمایش
scale = 200 # 1 متر = 200 پیکسل

# شبیه‌سازی حرکت جرم-فنر
t = np.arange(0, t_max, dt)
x = np.zeros(len(t))
v = np.zeros(len(t))
x[0] = x0
v[0] = v0

for i in range(1, len(t)):
a = -k/m * x[i-1]
v[i] = v[i-1] + a*dt
x[i] = x[i-1] + v[i]*dt

# انیمیشن حرکت جرم
mass_radius = 20
for xi in x:
canvas.delete("all")
# رسم فنر (خط ساده)
canvas.create_line(50, 100, 50 + xi*scale, 100, width=4, fill="blue")
# رسم جرم
canvas.create_oval(50 + xi*scale - mass_radius, 100 - mass_radius,
50 + xi*scale + mass_radius, 100 + mass_radius, fill="red")
root.update()
time.sleep(dt)

tk.Button(root, text="شروع شبیه‌سازی", command=simulate_animation).grid(row=6, column=0, columnspan=2)

root.mainloop()


۳. توضیح کد انیمیشنی در پروژه نرم افزار مکانیک

  1. Canvas در Tkinter برای نمایش گرافیکی فنر و جرم استفاده شد.

  2. حرکت جرم به صورت انیمیشن زنده بر اساس شبیه‌سازی Euler نمایش داده می‌شود.

  3. فنر با خط آبی و جرم با دایره قرمز نمایش داده شده است.

  4. مقیاس پیکسل (scale) قابل تغییر است تا جابجایی واقعی بهتر دیده شود.

  5. این پایه را می‌توان توسعه داد برای:

    • چند جرم و فنر متصل به هم در پروژه نرم افزار مکانیک

    • نمایش نمودار جابجایی و سرعت همزمان کنار انیمیشن در پروژه نرم افزار مکانیک

    • اعمال نیروی خارجی و مقاومت هوا در پروژه نرم افزار مکانیک

۱. ویژگی‌های نسخه نهایی پروژه نرم افزار مکانیک

پروژه نرم افزار مکانیک

  • شبیه‌سازی چند جرم متصل به چند فنر در پروژه نرم افزار مکانیک

  • امکان تغییر جرم‌ها، ضرایب فنر، جابجایی اولیه و سرعت اولیه با اسلایدر  در پروژه نرم افزار مکانیک

  • نمایش انیمیشن زنده حرکت جرم‌ها و فنرها در پروژه نرم افزار مکانیک

  • نمایش نمودار جابجایی و سرعت همزمان

  • قابلیت ذخیره نمودار و داده‌ها برای گزارش پروژه


۲. ساختار کلی پروژه نرم افزار مکانیک

  1. مدل‌سازی سیستم مکانیکی: کلاس Mass و کلاس Spring

  2. شبیه‌سازی دینامیک: حل معادله حرکت با روش Euler یا Runge-Kutta

  3. رابط کاربری گرافیکی: Tkinter + Canvas + Matplotlib

  4. انیمیشن و نمودار: رسم حرکت جرم‌ها روی Canvas و نمودار در کنار آن


۳. ایده کد نمونه نهایی (پایه)

import tkinter as tk
from tkinter import ttk
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
import time

# کلاس برای هر جرم
class Mass:
def __init__(self, x0, v0, m):
self.x = x0
self.v = v0
self.m = m

# کلاس برای فنر بین دو جرم یا جرم و دیوار
class Spring:
def __init__(self, k, mass1, mass2=None):
self.k = k
self.mass1 = mass1
self.mass2 = mass2 # None یعنی متصل به دیوار

# تابع شبیه‌سازی حرکت سیستم
def simulate(masses, springs, t_max, dt=0.01):
t = np.arange(0, t_max, dt)
x_history = [ [mass.x] for mass in masses ]

for _ in t[1:]:
a_list = []
# محاسبه شتاب هر جرم
for i, mass in enumerate(masses):
F = 0
for spring in springs:
if spring.mass1 == mass:
if spring.mass2:
F += -spring.k * (mass.x - spring.mass2.x)
else:
F += -spring.k * mass.x
elif spring.mass2 == mass:
F += -spring.k * (mass.x - spring.mass1.x)
a_list.append(F / mass.m)

# بروزرسانی سرعت و موقعیت
for idx, mass in enumerate(masses):
mass.v += a_list[idx] * dt
mass.x += mass.v * dt
x_history[idx].append(mass.x)

return t, x_history

# تابع رسم انیمیشن و نمودار
def animate_system():
canvas.delete("all")
# ساخت جرم‌ها و فنرها بر اساس ورودی‌ها
m1 = Mass(float(entry_m1.get()), 0.0, float(entry_mass1.get()))
m2 = Mass(float(entry_m2.get()), 0.0, float(entry_mass2.get()))
spring1 = Spring(float(entry_k1.get()), m1)
spring2 = Spring(float(entry_k2.get()), m1, m2)
spring3 = Spring(float(entry_k3.get()), m2)

masses = [m1, m2]
springs = [spring1, spring2, spring3]
t, x_hist = simulate(masses, springs, float(entry_tmax.get()))

scale = 200
mass_radius = 20

# انیمیشن روی Canvas
for step in range(len(t)):
canvas.delete("all")
# رسم فنرها به صورت خطوط
canvas.create_line(50, 100, 50 + x_hist[0][step]*scale, 100, width=4, fill="blue")
canvas.create_line(50 + x_hist[0][step]*scale, 100, 50 + x_hist[1][step]*scale, 100, width=4, fill="green")
canvas.create_line(50 + x_hist[1][step]*scale, 100, 600, 100, width=4, fill="blue")
# رسم جرم‌ها
canvas.create_oval(50 + x_hist[0][step]*scale - mass_radius, 100 - mass_radius,
50 + x_hist[0][step]*scale + mass_radius, 100 + mass_radius, fill="red")
canvas.create_oval(50 + x_hist[1][step]*scale - mass_radius, 100 - mass_radius,
50 + x_hist[1][step]*scale + mass_radius, 100 + mass_radius, fill="orange")
root.update()
time.sleep(0.01)

# رسم نمودار جابجایی
fig.clear()
ax = fig.add_subplot(111)
ax.plot(t, x_hist[0], label="جرم 1")
ax.plot(t, x_hist[1], label="جرم 2")
ax.set_title("جابجایی جرم‌ها")
ax.set_xlabel("زمان (s)")
ax.set_ylabel("جابجایی (m)")
ax.grid(True)
ax.legend()
canvas_plot.draw()

# ساخت رابط کاربری
root = tk.Tk()
root.title("شبیه‌سازی سیستم جرم-فنر حرفه‌ای")

tk.Label(root, text="جرم 1 (kg):").grid(row=0, column=0)
entry_mass1 = tk.Entry(root); entry_mass1.insert(0,"1.0"); entry_mass1.grid(row=0,column=1)
tk.Label(root, text="جرم 2 (kg):").grid(row=1, column=0)
entry_mass2 = tk.Entry(root); entry_mass2.insert(0,"1.0"); entry_mass2.grid(row=1,column=1)

tk.Label(root, text="ضریب فنر 1 (N/m):").grid(row=2, column=0)
entry_k1 = tk.Entry(root); entry_k1.insert(0,"10.0"); entry_k1.grid(row=2,column=1)
tk.Label(root, text="ضریب فنر 2 (N/m):").grid(row=3, column=0)
entry_k2 = tk.Entry(root); entry_k2.insert(0,"15.0"); entry_k2.grid(row=3,column=1)
tk.Label(root, text="ضریب فنر 3 (N/m):").grid(row=4, column=0)
entry_k3 = tk.Entry(root); entry_k3.insert(0,"10.0"); entry_k3.grid(row=4,column=1)

tk.Label(root, text="جابجایی اولیه جرم 1 (m):").grid(row=5, column=0)
entry_m1 = tk.Entry(root); entry_m1.insert(0,"0.1"); entry_m1.grid(row=5,column=1)
tk.Label(root, text="جابجایی اولیه جرم 2 (m):").grid(row=6, column=0)
entry_m2 = tk.Entry(root); entry_m2.insert(0,"0.0"); entry_m2.grid(row=6,column=1)

tk.Label(root, text="زمان شبیه‌سازی (s):").grid(row=7, column=0)
entry_tmax = tk.Entry(root); entry_tmax.insert(0,"10"); entry_tmax.grid(row=7,column=1)

tk.Button(root,text="شروع شبیه‌سازی", command=animate_system).grid(row=8,column=0,columnspan=2)

# Canvas انیمیشن
canvas = tk.Canvas(root, width=600, height=200, bg="white")
canvas.grid(row=9, column=0, columnspan=2)

# نمودار Matplotlib
fig = plt.Figure(figsize=(6,3))
canvas_plot = FigureCanvasTkAgg(fig, master=root)
canvas_plot.get_tk_widget().grid(row=10, column=0, columnspan=2)

root.mainloop()


۴. نکات مهم نسخه نهایی

  1. چند جرم و چند فنر پشتیبانی می‌شود.

  2. انیمیشن زنده روی Canvas نمایش داده می‌شود.

  3. نمودار جابجایی همزمان رسم می‌شود و با هر شبیه‌سازی بروزرسانی می‌شود.

  4. تمام پارامترها قابل تغییر از طریق ورودی‌های GUI هستند.

  5. این پروژه آماده گزارش و ارائه دانشگاهی است و می‌توان با افزودن قابلیت‌های بیشتر مثل ذخیره داده‌ها، محاسبه انرژی سیستم و رسم نمودار انرژی آن را حرفه‌ای‌تر کرد.

۱. امکانات پیشرفته نسخه نهایی

  1. چند جرم و چند فنر متصل به هم

    • می‌توان سیستم‌های پیچیده مکانیکی با چند جرم و فنر شبیه‌سازی کرد.

    • قابلیت انتخاب اینکه جرم‌ها به دیوار یا به هم متصل باشند.

  2. انیمیشن واقعی و گرافیکی

    • حرکت جرم‌ها روی Canvas با فنرهای کشیده و جمع شده.

    • رنگ‌های مختلف برای هر جرم و فنر جهت تشخیص راحت‌تر.

  3. نمودار همزمان

    • نمودار جابجایی هر جرم در زمان واقعی.

    • امکان اضافه کردن نمودار سرعت و شتاب همزمان با جابجایی.

  4. کنترل پارامترها با ورودی و اسلایدر

    • تغییر جرم‌ها، ضریب فنر، جابجایی و سرعت اولیه در حین شبیه‌سازی با اسلایدر.

    • امکان مشاهده اثر تغییر هر پارامتر روی حرکت سیستم به صورت زنده.

  5. ذخیره نتایج و نمودارها

    • ذخیره داده‌های جابجایی و سرعت به صورت فایل CSV برای گزارش پروژه.

    • ذخیره نمودارها به صورت PNG یا PDF برای ارائه.

  6. اضافه کردن نیروهای خارجی یا مقاومت هوا

    • نیروهای اضافی (مثل فشار یا وزش باد) قابل اعمال هستند.

    • مقاومت هوا (damping) برای شبیه‌سازی واقعی‌تر.

  7. محاسبه انرژی سیستم

    • انرژی پتانسیل فنر، انرژی جنبشی و انرژی کل سیستم.

    • نمایش نمودار انرژی برحسب زمان برای تحلیل دینامیک سیستم.


۲. معماری پروژه

الف) مدل‌سازی کلاس‌ها

  • Mass: جرم با خصوصیات x, v, m

  • Spring: فنر با خصوصیات k, mass1, mass2

  • System: شامل لیست جرم‌ها و فنرها، محاسبه شتاب‌ها و بروزرسانی موقعیت‌ها

ب) شبیه‌سازی دینامیک

  • حل معادله ma=∑Fm a = \sum F با روش Euler یا Runge-Kutta 4

  • امکان افزودن مقاومت هوا یا نیروی خارجی

ج) رابط کاربری GUI

  • Tkinter Canvas: نمایش حرکت واقعی جرم‌ها و فنرها

  • Matplotlib: رسم نمودارهای جابجایی، سرعت و انرژی

  • Sliders و Entry: کنترل پارامترهای جرم، فنر، سرعت و جابجایی

د) انیمیشن و نمودار

  • هر گام شبیه‌سازی:

    1. محاسبه موقعیت‌ها و شتاب‌ها

    2. بروزرسانی Canvas برای نمایش حرکت

    3. بروزرسانی نمودار Matplotlib برای جابجایی و انرژی


۳. ایده توسعه پروژه برای ارائه دانشگاه

  1. گرافیک بهتر: استفاده از تصاویر و شکل‌های واقعی فنر و جرم

  2. سیستم چند درجه آزادی: شبیه‌سازی حرکت در دو بعد (x و y)

  3. تحلیل حساسیت: تغییر پارامترها و مشاهده اثر روی سیستم

  4. محاسبات دقیق‌تر: استفاده از روش Runge-Kutta برای دقت بالاتر

  5. گزارش آماده: نمودارهای خروجی، داده‌های CSV، محاسبات انرژی و توضیح علمی شبیه‌سازی

۱. هدف و اهمیت پروژه

این پروژه با محوریت شبیه‌سازی سیستم‌های مکانیکی ساخته می‌شود و اهداف آن عبارتند از:

  1. درک رفتار دینامیکی سیستم‌های جرم-فنر در شرایط مختلف.

  2. تحلیل تنش، جابجایی و انرژی برای سیستم‌های مکانیکی واقعی.

  3. ارائه ابزار تعاملی برای دانشجویان و مهندسین جهت مشاهده اثر تغییر پارامترها.

  4. آماده‌سازی گزارش کامل علمی و عملی برای دفاع دانشگاهی.


۲. محدوده و ویژگی‌های پروژه

الف) شبیه‌سازی چند جرم و چند فنر

  • سیستم شامل چند جرم متصل به چند فنر و دیوار.

  • هر جرم دارای جرم، سرعت اولیه و جابجایی اولیه قابل تغییر.

  • هر فنر دارای ضریب الاستیسیته متفاوت.

ب) انیمیشن و رابط گرافیکی

  • نمایش حرکت واقعی جرم‌ها روی Canvas

  • نمایش فنرها به صورت خط یا تصویر گرافیکی

  • تغییر پارامترها با اسلایدر و ورودی‌های عددی

ج) نمودارها و تحلیل‌ها

  • نمودار جابجایی هر جرم بر حسب زمان.

  • نمودار سرعت و شتاب هر جرم.

  • نمودار انرژی سیستم شامل انرژی جنبشی، انرژی پتانسیل فنر و انرژی کل.

  • امکان ذخیره نمودارها به صورت PNG یا PDF.

د) ذخیره داده‌ها و گزارش

  • خروجی داده‌ها به CSV برای تحلیل و گزارش.

  • ذخیره تمام پارامترهای شبیه‌سازی برای بازتولید نتایج.

ه) پیشرفته‌تر کردن پروژه

  • اضافه کردن نیروهای خارجی یا مقاومت هوا (Damping).

  • شبیه‌سازی سیستم‌های چند درجه آزادی.

  • استفاده از روش عددی Runge-Kutta برای دقت بالاتر.

  • نمایش موقعیت و انرژی جرم‌ها در لحظه واقعی برای تحلیل دقیق‌تر.


۳. معماریو طراحی نرم‌افزار

 

پروژه نرم افزار مکانیک

 

الف) کلاس‌ها و ماژول‌ها

  1. Mass (جرم): خصوصیات x, v, m

  2. Spring (فنر): خصوصیات k, mass1, mass2

  3. System (سیستم مکانیکی): شامل تمام جرم‌ها و فنرها، محاسبه نیرو، شتاب و بروزرسانی موقعیت‌ها.

  4. Simulation (شبیه‌سازی): الگوریتم عددی برای حل معادله حرکت.

  5. GUI (رابط کاربری): نمایش انیمیشن، نمودارها و کنترل پارامترها.

  6. Data (ذخیره داده‌ها): ذخیره نتایج، نمودارها و پارامترها.

ب) جریان داده‌ها

  1. کاربر پارامترها را وارد می‌کند.

  2. سیستم مکانیکی ساخته می‌شود.

  3. شبیه‌سازی دینامیک اجرا می‌شود.

  4. انیمیشن و نمودارها بروزرسانی می‌شوند.

  5. داده‌ها ذخیره و گزارش آماده می‌شود.


۴. ابزارها و تکنولوژی‌های پیشنهادی

  • زبان برنامه‌نویسی: Python (سادگی و قدرت محاسباتی)

  • رابط کاربری: Tkinter (ساده) یا PyQt (پیشرفته‌تر)

  • محاسبات عددی: NumPy و SciPy

  • نمودار و انیمیشن: Matplotlib و Canvas

  • ذخیره داده‌ها: Pandas (CSV)

  • اضافه کردن ویژگی پیشرفته: OpenGL یا Pygame برای انیمیشن سه بعدی


۵. ارائه دانشگاهی پروژه نرم افزار مکانیک

  • گزارش پروژه پروژه نرم افزار مکانیک شامل :

    • مقدمه و هدف پروژه نرم افزار مکانیک

    • تئوری سیستم جرم-فنر و معادله حرکت پروژه نرم افزار مکانیک

    • طراحی نرم‌افزار و دیاگرام‌ها پروژه نرم افزار مکانیک

    • نتایج شبیه‌سازی و نمودارها در پروژه نرم افزار مکانیک

    • تحلیل انرژی و مقایسه نتایج با محاسبات تئوری در پروژه نرم افزار مکانیک

  •  نمایش نرم‌افزار در پروژه نرم افزار مکانیک:

    • ورودی پارامترها در پروژه نرم افزار مکانیک

    • انیمیشن حرکت سیستم در پروژه نرم افزار مکانیک

    • نمودارهای جابجایی، سرعت و انرژی در پروژه نرم افزار مکانیک

    • ذخیره نتایج و نمودارها برای ارائه گزارش در پروژه نرم افزار مکانیک

پست های مرتبط