پروژه نرم افزار مکانیک با پیامنی پروژه
پروژه نرم افزار مکانیک
هدف: ایجاد نرمافزاری که به کاربر امکان دهد نیروها و حرکت اجسام مختلف را شبیهسازی کرده و تنش و تغییر شکل آنها را در شرایط مختلف بررسی کند.
import numpy as np
import matplotlib.pyplot as plt
# مشخصات سیستم
m = ۱.۰ # جرم (kg)
k = ۱۰.۰ # ضریب فنر (N/m)
x0 = ۰.۱ # جابجایی اولیه (m)
v0 = ۰.۰ # سرعت اولیه (m/s)
t_max = ۱۰ # زمان شبیهسازی (s)
dt = ۰.۰۱ # گام زمانی (s)
# آرایه زمان
t = np.arange(۰, t_max, dt)
# آرایه جابجایی و سرعت
x = np.zeros(len(t))
v = np.zeros(len(t))
# مقادیر اولیه
x[۰] = x0
v[۰] = v0
# شبیهسازی حرکت با روش اویلر
for i in range(۱, len(t)):
a = -k/m * x[i-۱] # شتاب طبق قانون هوک
v = v[i-۱] + a*dt
x = x[i-۱] + v*dt
# رسم نمودار
plt.plot(t, x)
plt.title("شبیهسازی حرکت جرم-فنر")
plt.xlabel("زمان (s)")
plt.ylabel("جابجایی (m)")
plt.grid(True)
plt.show()
این نمونه، پایهای برای اضافه کردن امکانات بیشتره مثل:
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 = ۰.۰۱
t = np.arange(۰, t_max, dt)
x = np.zeros(len(t))
v = np.zeros(len(t))
x[۰] = x0
v[۰] = v0
for i in range(۱, len(t)):
a = -k/m * x[i-۱]
v = v[i-۱] + a*dt
x = x[i-۱] + v*dt
# رسم نمودار در GUI
fig.clear()
ax = fig.add_subplot(۱۱۱)
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=۰, column=۰)
entry_mass = tk.Entry(root)
entry_mass.insert(۰, "۱.۰")
entry_mass.grid(row=۰, column=۱)
tk.Label(root, text="ضریب فنر (N/m):").grid(row=۱, column=۰)
entry_spring = tk.Entry(root)
entry_spring.insert(۰, "۱۰.۰")
entry_spring.grid(row=۱, column=۱)
tk.Label(root, text="جابجایی اولیه (m):").grid(row=۲, column=۰)
entry_x0 = tk.Entry(root)
entry_x0.insert(۰, "۰.۱")
entry_x0.grid(row=۲, column=۱)
tk.Label(root, text="سرعت اولیه (m/s):").grid(row=۳, column=۰)
entry_v0 = tk.Entry(root)
entry_v0.insert(۰, "۰.۰")
entry_v0.grid(row=۳, column=۱)
tk.Label(root, text="زمان شبیهسازی (s):").grid(row=۴, column=۰)
entry_tmax = tk.Entry(root)
entry_tmax.insert(۰, "۱۰")
entry_tmax.grid(row=۴, column=۱)
tk.Button(root, text="شروع شبیهسازی", command=simulate).grid(row=۵, column=۰, columnspan=۲)
# افزودن نمودار به GUI
fig = plt.Figure(figsize=(۶,۴))
canvas = FigureCanvasTkAgg(fig, master=root)
canvas.get_tk_widget().grid(row=۶, column=۰, columnspan=۲)
root.mainloop()
بارگذاری,
payamaniproject.com
پروژه نرم افزار مکانیک
۱. موضوع پروژه و هدف
موضوع: نرمافزار شبیهسازی حرکت و تنش در اجسام مکانیکیهدف: ایجاد نرمافزاری که به کاربر امکان دهد نیروها و حرکت اجسام مختلف را شبیهسازی کرده و تنش و تغییر شکل آنها را در شرایط مختلف بررسی کند.
۲. عملکرد نرمافزار در پروژه نرم افزار مکانیک
- کاربر مدل مکانیکی (مانند تیر، فنر، یا چرخدنده) را وارد میکند یا طراحی میکند.
- وارد کردن مشخصات مواد (مثل فلز، پلاستیک، آلومینیوم).
- اعمال نیروها و شرایط مرزی (مثلاً فشار، کشش، وزن، اصطکاک).
- شبیهسازی حرکت یا رفتار مکانیکی مدل.
- نمایش نتایج به صورت نمودار، گراف و انیمیشن.
۳. تکنولوژیهاو زبانهای برنامهنویسی پیشنهادی
- زبان برنامهنویسی: Python، C++ یا C#
- کتابخانهها و ابزارها:
- Python: PyQt یا Tkinter برای رابط کاربری، Matplotlib برای نمودار، NumPy و SciPy برای محاسبات مکانیکی.
- C++: Qt برای GUI، OpenGL برای شبیهسازی سهبعدی.
- C#: WPF یا Windows Forms برای GUI.
- قابلیت توسعه: اضافه کردن ماژول تحلیل سیالات (CFD) یا رباتیک.
۴. دیاگرامها و ساختار پروژه نرم افزار مکانیک
- دیاگرام کلاسها در پروژه نرم افزار مکانیک:
- Object: تعریف اجسام مکانیکی (تیر، فنر، جرم).
- Material: مشخصات ماده (چگالی، مدول یانگ، ضریب اصطکاک).
- Force: نیروهای اعمالی (وزن، کشش، فشار).
- Simulation: بخش شبیهسازی و حل معادلات دینامیک.
- UI: رابط کاربری برای ورود دادهها و نمایش نتایج.
- دیاگرام جریان دادهها در پروژه نرم افزار مکانیک:
- ورود مدل → ۲. ورود مشخصات ماده → ۳. اعمال نیرو → ۴. شبیهسازی → ۵. نمایش نمودار/انیمیشن
۵. قابلیتها و امکانات نرمافزار
- امکان تعریف انواع اجسام مکانیکی (تیر، صفحه، فنر).
- محاسبه تنش، کرنش و تغییر شکل.
- نمایش حرکت و تغییر شکل به صورت انیمیشن.
- امکان ذخیره نتایج شبیهسازی و نمودارها.
- افزودن نیروهای مختلف و تغییر شرایط مرزی در زمان واقعی.
نمونه پروژه شبیهسازی جرم-فنر در پایتون
۱. توضیح پروژه
- شبیهسازی حرکت یک جرم متصل به فنر با استفاده از قانون هوک و معادله حرکت F=m⋅aF = m \cdot aF=m⋅a
- رسم نمودار جابجایی جرم نسبت به زمان.
- قابلیت تغییر جرم، ضریب فنر و نیروی اولیه.
۲. کد نمونه پایتون
import numpy as np
import matplotlib.pyplot as plt
# مشخصات سیستم
m = ۱.۰ # جرم (kg)
k = ۱۰.۰ # ضریب فنر (N/m)
x0 = ۰.۱ # جابجایی اولیه (m)
v0 = ۰.۰ # سرعت اولیه (m/s)
t_max = ۱۰ # زمان شبیهسازی (s)
dt = ۰.۰۱ # گام زمانی (s)
# آرایه زمان
t = np.arange(۰, t_max, dt)
# آرایه جابجایی و سرعت
x = np.zeros(len(t))
v = np.zeros(len(t))
# مقادیر اولیه
x[۰] = x0
v[۰] = v0
# شبیهسازی حرکت با روش اویلر
for i in range(۱, len(t)):
a = -k/m * x[i-۱] # شتاب طبق قانون هوک
v = v[i-۱] + a*dt
x = x[i-۱] + v*dt
# رسم نمودار
plt.plot(t, x)
plt.title("شبیهسازی حرکت جرم-فنر")
plt.xlabel("زمان (s)")
plt.ylabel("جابجایی (m)")
plt.grid(True)
plt.show()
۳. توضیح کد
- ابتدا مشخصات سیستم (جرم، ضریب فنر، جابجایی اولیه) تعریف شده.
- با استفاده از روش Euler حرکت جرم-فنر شبیهسازی شده.
- در نهایت، نمودار جابجایی برحسب زمان رسم میشود.
این نمونه، پایهای برای اضافه کردن امکانات بیشتره مثل:
- رابط گرافیکی با 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 = ۰.۰۱
t = np.arange(۰, t_max, dt)
x = np.zeros(len(t))
v = np.zeros(len(t))
x[۰] = x0
v[۰] = v0
for i in range(۱, len(t)):
a = -k/m * x[i-۱]
v = v[i-۱] + a*dt
x = x[i-۱] + v*dt
# رسم نمودار در GUI
fig.clear()
ax = fig.add_subplot(۱۱۱)
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=۰, column=۰)
entry_mass = tk.Entry(root)
entry_mass.insert(۰, "۱.۰")
entry_mass.grid(row=۰, column=۱)
tk.Label(root, text="ضریب فنر (N/m):").grid(row=۱, column=۰)
entry_spring = tk.Entry(root)
entry_spring.insert(۰, "۱۰.۰")
entry_spring.grid(row=۱, column=۱)
tk.Label(root, text="جابجایی اولیه (m):").grid(row=۲, column=۰)
entry_x0 = tk.Entry(root)
entry_x0.insert(۰, "۰.۱")
entry_x0.grid(row=۲, column=۱)
tk.Label(root, text="سرعت اولیه (m/s):").grid(row=۳, column=۰)
entry_v0 = tk.Entry(root)
entry_v0.insert(۰, "۰.۰")
entry_v0.grid(row=۳, column=۱)
tk.Label(root, text="زمان شبیهسازی (s):").grid(row=۴, column=۰)
entry_tmax = tk.Entry(root)
entry_tmax.insert(۰, "۱۰")
entry_tmax.grid(row=۴, column=۱)
tk.Button(root, text="شروع شبیهسازی", command=simulate).grid(row=۵, column=۰, columnspan=۲)
# افزودن نمودار به GUI
fig = plt.Figure(figsize=(۶,۴))
canvas = FigureCanvasTkAgg(fig, master=root)
canvas.get_tk_widget().grid(row=۶, column=۰, columnspan=۲)
root.mainloop()
۳. توضیح کد گرافیکی پروژه نرم افزار مکانیک
- از Tkinter برای ساخت فرم و ورودیها استفاده شد.
- کاربر میتواند جرم، ضریب فنر، جابجایی و سرعت اولیه و زمان شبیهسازی را وارد کند.
- با زدن دکمه، حرکت جرم-فنر شبیهسازی شده و نمودار در همان پنجره رسم میشود.
- این پایه برای اضافه کردن انیمیشن واقعی حرکت جرم روی صفحه هم آماده است.









