آزمایشگاه علمی

جمعه, ۲۴ مرداد ۱۳۹۳، ۰۵:۳۳ ب.ظ

شماتوگراف

توی این پست می خوام دستگاهی رو معرفی کنم که خیلی وقت پیش با خواهرزاده ام ساختیم . این دستگاه اشکال هندسی جالبی رسم می کنه که بر اثر تناسب بین دو حرکت هارمونیک ساده ایجاد میشن .

در این دستگاه یک قلم که به یک بازوی متحرک متصله به واسطه چرخش یک دایره محرک به صورت رفت و برگشتی روی یک برگه کاغذ حرکت می کنه و رد میندازه و در عین حال کاغذ هم روی یک صفحه دایره ای قرار داره که با سرعت زاویه ثابت می چرخه یعنی با حرکت دایره کوچک مداد به جلو و عقب حرکت میکنه و با حرکت دایره بزرگ کاغذ در زیر مداد میچرخه و در نتیجه قلم منحنی هایی رسم میکنه که ناشی از ترکیب این دو حرکت یعنی حرکت رفت و برگشت مداد و حرکت چرخشی کاغذه بنابراین به نسبت سرعت ها (یعنی نسبت سرعت رفت و برگشت قلم به نسبت سرعت دوران کاغذ) شکل های مختلفی رسم میشه. چون خیلی وقته پیش این دستگاه رو ساختیم عکس زیادی ازش برامون باقی نمونده اما یک تصویر از کتابی که منبع طراحی ما بوده و یه مدل سه بعدی رو ازش براتون گذاشتم.



همونطور که در شکل کتاب می بینید حرکت دستگاه با نیروی دست و بوسیله یک اهرم انجام میشه و نسبت سرعت ها هم با تغییر ارتفاع بخش مخروطی یا جابجایی پین متصل کننده بازو ایجاد میشه اما در مدلی که ما ساختیم این مکانیزم ها رو با دو تا آرمیچر ساده و یه مدار تنظیم سرعت جایگزین کردیم

اما مهمتر از همه برنامه شبیه ساز دستگاهه که خودم با زبان VB نگارش 6 اونو نوشتم . این برنامه میتونه خیلی خوب نتیجه کار دستگاه رو شبیه سازی کنه و به عبارتی بهتون بگه این دستگاه با این سرعت چی میکشه  اما پاسخ این برنامه در بعضی قسمت ها با دستگاه خیلی فرق داره که اتفاقا همین موضوع کار کردن با برنامه رو جالب می کنه در ادامه برنامه رو براتون تشریح می کنم تا به خوبی منظورم رو بفهمیداما قبلش بهتره یه مقدار با فیزیک عملکرد دستگاه آشنا بشید یه نگاهی به شکل دستگاه بکنید . . .

وقتی دایره محرک (سمت راست) با سرعت (سرعت زاویه ای) ثابت می چرخه تمامی نقاط روی اون یک حرکت دایره ای یکنواخت رو انجام میدن از جمله نقطه ی A (نقطه ی تماس میله ی 1 و دایره) و حرکت دایره ای یکنواخت به وسیله این دو میله به حرکت نوسانی ساده در مسیر مستقیم تبدیل میشه از این رو می تونیم بگیم که مداد داره یه حرکت نوسانی ساده ی هم ارز با حرکت دایره ای یکنواخت نقطه ی A انجام میده  در نتیجه سرعت زاویه ای این دو حرکت با هم برابره که این مطلب دقیقا همان هم ارزی حرکت دایره ی یکنواخت با حرکت نوسانی ساده هست که در پیش دانشگاهی خوندیم همچنین دایره حامل کاغذ (صفحه ترسیم) هم یک حرکت دایره ای یکنواخت رو با سرعت زاویه ای ثابت W1 انجام میده همونطور که بالاترتوضیح دادیم قراره با ترکیب این دو حرکت  یعنی حرکت نوسانی ساده قلم و حرکت دایره ای یکنواخت صفحه ی ترسیم شکل های متفاوتی رسم بشه که این رو به کمک تغییر سرعت های زاویه ای یا به بیان ساده تر با تغییر سرعت چرخش دایره ها به دست مییاریم یعنی با تغییر سرعت چرخش هزیک از این دو دایره ما شاهد رسم شکل متفاوتی هستیم شکلی که اول پست براتون گذاشتم یکی از اشکالیه که می تونه توسط این دستگاه تولید بشه اما من این شکل رو با شبیه ساز ترسیم کردم

برای نوشتن برنامه عملکرد دستگاه رو ساده تر تصور می کنیم یعنی فرض می کنیم که به جای اینکه صفحه ی ترسیم در زیر مداد با سرعت زاویه ای ثابت W1 بچرخه , ثابت باشه و در عوض راستای حرکت مداد با همان سرعت زاویه ای  بر روی صفحه ی ترسیم تغییر کنه (بچرخه) که اینجوری نتیجه دقیقا همون میشه یعنی باز هم از تر کیب یک حرکت نوسانی ساده (حرکت مداد) ویک حرکت دایره ای یکنواخت (چرخش راستای مداد که به جای چرخش صفحه ترسیم در نظر گرفته شده) یک شکل ترسیم میشه. اگه بخواهیم این عمل رو در حالت واقعی با دستگاه انجام بدیم و نتیجه ی فرضی رو که کردیم ببینیم باید به جای اینکه صفحه ی ترسیم رو با سرعت زاویه ای ثابتW1 بچرخونبم اون رو ثابت نگه داریم و کل سیستم شامل دایره ی محرک مداد و میل لنگ و مداد رو به با همون سرعت دور صفحه ترسیم بچرخونیم ( که البته فکر کنم از نظر عملی با مشکلات بزرگی مواجهه) حالا که نیازی به این کارها نیست و با همون فرضی که گفتم میتونیم نوشتن برنامه رو شروع کنیم:

Dim dt As Double    ' zaviye
Dim w1 As Double ' sorate zaviye'e 1(text1)-safhe
Dim w2 As Double ' sorate zaviye'e 2(text2)-ghalam
Dim a As Double
Dim p As Double ' adade p
Dim s As Double ' tayin vaziyate ghalam
Dim r As Double ' shoa'e harekate ghalam

Dim xp As Double 'mahale ghalam
Dim yp As Double 'mahale ghalam

Dim b As Byte 'baraye tayin vaziate tarsim
Dim col As String 'moshakhas kardane rang
Dim pic As Byte 'namayeshe tasvire komaki


Private Sub Form_Load()

Picture1.Scale (-1, 1)-(1, -1)
Picture2.Scale (-1, 1)-(1, -1)
Picture1.PSet (0, 0)

Timer1.Enabled = False
Timer2.Enabled = False
Timer3.Enabled = False
Picture2.Visible = False
pblack.Checked = True

r = 0.85
''az inja mitonid shoa ro taghir bedid

End Sub

Private Sub command1_Click()

''Stop''
Timer1.Enabled = False
Timer2.Enabled = False

End Sub

Private Sub Command2_Click()

''pak kardan safhe''
Picture1.Cls
Picture2.Cls

a = 0
s = 0
dt = 0

End Sub

Private Sub Command3_Click()
''rasme shekl be soorate majmoeye noghat ya rasm mamoli ba khat''

If b = 1 Then
b = 0
Else
b = 1
End If

End Sub

Private Sub command4_Click()

p = Atn(1) * 4
'' haman adade p ast baraye inke sor'at zaviye'e bar hasbe radian/saniye bashad dar p zarb kardim
'' mitavan p ra bardasht va dar sor'at haye zaviye'e zarb nakard
w1 = Val(Text1.Text) * p
w2 = Val(Text2.Text) * p

Timer1.Enabled = True
If pic = 1 Then Timer2.Enabled = True

End Sub

Private Sub bgray_Click()
Picture1.BackColor = &H8000000F
bwhite.Checked = False
bcchois.Checked = False
bgray.Checked = True
End Sub

Private Sub bwhite_Click()
Picture1.BackColor = vbWhite
bwhite.Checked = True
bcchois.Checked = False
bgray.Checked = False
End Sub

Private Sub bcchois_Click()
ComDig1.ShowColor
Picture1.BackColor = ComDig1.color
bwhite.Checked = False
bcchois.Checked = True
bgray.Checked = False
End Sub

Private Sub pblack_Click()
pcmulti.Checked = False
pcchoise.Checked = False
pblack.Checked = True
col = "bl"
End Sub

Private Sub pcmulti_Click()
pcmulti.Checked = True
pcchoise.Checked = False
pblack.Checked = False
col = "mu"
End Sub

Private Sub pcchoise_Click()
ComDig2.ShowColor
col = "ch"
pblack.Checked = False
pcmulti.Checked = False
pcchoise.Checked = True
End Sub

Private Sub pic2_Click()
If pic = 0 Then
Timer3.Enabled = True
Picture2.Visible = True
pic2.Checked = True
pic = 1
If Timer1.Enabled = True Then Timer2.Enabled = True
Else
Timer3.Enabled = True
Picture2.Visible = False
pic2.Checked = False
Timer2.Enabled = False
pic = 0
End If
End Sub

Private Sub save_Click()

Dim fn As String
msb = MsgBox("ÂíÇ ãÇíáíÏ ÇÚÏÇÏ äíÒ ÏÑ Ú˜Ó Ð˜Ñ ÔæäÏ ¿", vbYesNo)
ComDig1.Filter = "(*.jpg)|*.jpg|(*.bmp)|*.bmp"
ComDig1.ShowSave
fn = UCase(ComDig1.FileName)

If msb = vbYes Then
Picture1.CurrentX = -1
Picture1.CurrentY = 1
Picture1.Print Text1.Text
Picture1.CurrentX = -1
Picture1.Print Text2.Text
Picture1.CurrentX = xp
Picture1.CurrentY = yp
End If

If fn <> "" Then SavePicture Picture1.Image, fn


End Sub

Private Sub Timer1_Timer()

If col = "mu" Then
c1 = Int(Rnd() * 255)
c2 = Int(Rnd() * 255)
c3 = Int(Rnd() * 255)
clr = RGB(c1, c2, c3)
End If

If col = "bl" Then clr = vbBlack
If col = "ch" Then clr = ComDig2.color

a = a + 0.001
dt = (a * w1)
''zaviyeye safheye asli ba dt moayan mishavad

y = Sin(dt)
x = Cos(dt)

Label1.Caption = dt

s = r * Sin((w2 * a))
'' makan nesbi ghalam ra moshakhas mikonad

If x = 0 Then
y = Sgn(y) * s
If b = 1 Then
Picture1.Line -(xp, yp), clr
Else
Picture1.PSet (xp, yp), clr
End If

Else
m = Tan(dt)
xp = Sqr((s ^ 2) / (1 + (m ^ 2)))
xp = xp * Sgn(s) * Sgn(x)
yp = m * xp

If b = 0 Then
Picture1.Line -(xp, yp), clr
Else
Picture1.PSet (xp, yp), clr
End If

End If

Label2.Caption = s

End Sub

Private Sub Timer2_Timer()
Picture2.Cls
Picture2.Circle (0, 0), 1
' dt = (a * w1)
y = Sin(dt)
x = Cos(dt)
Picture2.Line (-x, -y)-(x, y)
' positive = x, y
' negetive = -x , -y

If x = 0 Then 'agar x=0 shod yani harekate medad
yy = Sgn(y) * s 'amodi shod baraye tashkhise jahate
Picture2.DrawWidth = 7 'mosbat ya manfi az y estefade mikonim
Picture2.PSet (x, yy) '
Picture2.DrawWidth = 1 '
Else
m = Tan(dt)
' xp = Sqr((s ^ 2) / (1 + (m ^ 2))) 'chon yekbar mohasebe shodan
' xp = xp * Sgn(s) * Sgn(x) 'az maghadire mohasebe shode
' yp = m * xp 'estefade mikonim
Picture2.DrawWidth = 7
Picture2.PSet (xp, yp)
Picture2.DrawWidth = 1
End If

End Sub

Private Sub Timer3_Timer()

If pic = 1 Then
If Form1.Width < 13575 Then
Form1.Width = Form1.Width + 50
Else
Timer3.Enabled = False
End If
Else
If Form1.Width > 7120 Then
Form1.Width = Form1.Width - 50
Else
Timer3.Enabled = False
End If
End If

End Sub

'in baraname ra baraye shabih sazi negargar neveshtim
'textbox ha sorate zaviyee davayere charkhan ra moayan mikonnand
'r ham max shoa shekl ra
'17/1/88 - mostafa Qale khani


ابتدا از متغیر های ورودی شروع میکنیم: مسلما ما اینجا 2 متغیر اصلی داریم که همون سرعت های چرخش دو دایره هستند ( که البته همونطور که چند خط قبل توضیح دادم به جای سرعت چرخش دایره بزرگ سرعت چرخش راستای قلم رو در نظر گرفتیم) بقیه کار دیگه خیلی ساده است و مربوط میشه به پیدا کردن محل قلم در هر لحظه و ثبت یک نقطه در محل قلم تا به این صورت کل شکل رسم بشه

برای پیدا کردن محل قلم میتونیم از یک دسنتگاه 2 معادله و 2 مجصول استفاده کنیم که معادله ی اول به صورت Y = MX یه خط راست رو نشون میده که همون راستای حرکت مداد در اون لحظه خاصه و مداد در بر روی این خط قرار داره و مقدار M با تغییر زمان به طور یکنواخت تغییر میکنه (یعنی تابعی از زمان رو به صورت W1 * t نشون میده ) چون راستای حرکت مداد داره با سرعت زاویه ای ثابت W1 که یکی از متغیر های ماست تغییر میکنه. معادله دوم به صورت (X = A sin(Φ هستش که بعد نوسانگر رو در هر لحظه نشون میده و به زبان ساده نشون میده نوسانگر در هر لحظه نسبت به مبدا نوسان چه وضعیتی داره . در اینجا "فی" همون فاز نوسانگره و با رابطه W2 * t Φ =  محاسبه میشه 2W همون متغیر دومه یعنی سرعت زاویه ای چرخش دایره محرک و T هم زمانه که با کمک یکtimer  تغیر میکنه فاز اولیه نوسانگر هم صفره ( یعنی نوسانگر از مبدا نوسان شروع به حرکت میکنه که یک فرض معقول و اختیاریه)

با حل این دو معادله در یک دستگاه می تونیم در هر لحظه مکان قلم رو در صفحه به دست بیاریم و شکل رو به کمک نقاط منفرد یا نقاطی که با خظ های واسط به هم متصل اند رسم کنیم البته یک نکته ی خیلی خیلی مهم در مورد جواب دستگاه وجود داره و اون اینه که وقتی راستای حرکت مداد تغیر میکنه راستای مثبت حرکت نوسانی ساده ی مداد هم تغییر میکنه بنابراین انتخاب علامت جواب به محل فرار گرفتن قسمت مثبت راستای نوسان در دستگاه دکارتی ثابتی که به طور کلی از اون برای رسم شکل استفاده می کنیم وابسته می باشدیعنی بسته به اینکه بعد نوسانگر + یا – باشد و اینکه جهت مثبت راستای نوسان در کدام ناحیه از دستگاه مختصات دکارتی ما باشد جواب می تواند علامت اصلی یا علامت قرینه داشته باشد که برای انتخاب درست علام جواب از نوعی متغیر استفاده کردم که میتواند در انتخاب درست علامت با توجه به دو عامل ذکر شده کمک کند تصویر زیر یک شات از اجرای برنامه رو نشون میده 




فایل اجرایی برنامه رو می تونید از اینجا بردارید و مستقیما اجرا کنید تا جایی که من می دونم و قبلا امتحان کردم نیاز به نصب نداره : فایل اجرایی بدون نیاز به نصب (حجم: 36 کیلوبایت)
سورس برنامه و فرم اون توی این پوشه است : دریافت سورس برنامه (حجم: 13.8 کیلوبایت)
یه فایل نصب هم اینجا گذاشتم که بتونید این برنامه رو مثل هر برنامه دیگه ای روی کامپیوترتون نصب کنید (برای مواقعی که دو روش قبلی کار نکرد): دریافت پکیج نصب برنامه (حجم: 2.49 مگابایت)


اینجا چند تا نکته میمونه که باید بگم :
  • اول اینکه این برنامه میتونه همه جور متغیر عددی رو بپذیره و در متغیر های کوچیک ( سرعت های پایین) نسبت ساده شده ی 2 عدد نوع شکل رو مشخص میکنه که این در مورد سرعت های بالا صادق نیست در ضمن میدونم که این شکل ها از قوانین ریاضی پیروی میکنه که ساده ترینشون وجود دوره تناوب برای هر شکله ( یعنی شکل بعد از مدتی تکرار میشه) اما قوانیمن دیگه ای وجود دارن که اگه کسی بلده خوشحال میشم تا اونها رو به من و بقیه هم بگه باید یاد آوری کنم که برای شکل های با سرعت بالا قوانین کاملا متفاوتی وحود داره که باید کشف بشه چون در سرعت های بالا با شکل هایی مواجه میشین که عمرا نمیتونین حدس بزنین ( خودم هم موقعی که داشتنم برنامه رو مینوشتم فکر نمی کردم که این قدر جالب کار کنه ) در ضمن من سرعت ها رو در عدد P ضرب کردم که در سرعت های پایین تاثیری نداره ولی در سرعت های خیلی بالا که شکل های خفن رسم میشه با حذف عدد p شکل رسم شده تغییر میکنه
  • دوم اینکه برای درک بهتر حرکت مداد و اینکه متوجه بشین با چه فرضی برنامه رو نوشتیم با انتخاب قسمتی از برنامه میتونین شاهد نمایش فرم دیگه ای باشین که محل و راستای مداد رو در هر لحظه نشون میده و خیلی جالبه ولی در سرعت های بالا نباید ازش انتظار زیادی داشته باشین
  • نهایتا دوستانی که مایل باشند ویژگی های جدیدی به نرم افزار اضافه کنند یا از اون در پروژه های بهتری  استفاده کنن وهمچنین معلمانی که به دنبال برنامه های جدید تر و در عین حال ساده برای کلاس های برنامه نویسی می گردن می تونند یه نگاهی به کد برنامه بندازن. به دوستانی که مایلتد برنامه رو تغییر بدن باید بگم که این کارشون مایه خوشحالی منه و خودم هم چند تا پیشنهاد دارم که اگه کسی اون ها رو به برنامه اضافه کنه خیلی لطف کرده اول اینکه گرافیک کار خیلی ضعیفه و نیاز به بهبود داره دومین قابلیت لازم برای برنامه امکان چاپ تصویره که من نتونستم اون رو اضافه کنم و ممنون میشم اگه کسی این کار رو انجام بده

همونطور که میبینید اصول فیزیکی استفاده شده در این برنامه همه در سطح پیش دانشگاهی هستن و من سعی کردم تا جایی که میتونم کامل بیان کنم ولی با این حال اگه من بد توضیح دادم و متوجه نشدین میتونین به فیزیک پیش یه نگاهی بندازین مبانی برنامه نویسی استفاده شده در این پروژه در سطح بسیار بسیار ابتدایی و در آشنایی مقدماتی با vb هست که چون من هم هنوز از این سطح فراتر نرفتم همه ی نکات را با جزئیات توضیح دادم تا دوستانی که مثل من اطلاعات کمی دارند بتوانند به خوبی از برنامه استفاده کنند خوااهرزادم این دستگاه رو توی نمایشگاه دستاورد های علمی فرزانگان در سال 88 به نمایش گذاشت که بسیار مورد توجه قرار گرفت به افرادی که تمایل دارند این دستگاه رو بسازند باید بگم که  با توضیحات مطرح شده و کمی ابتکار عمل می تونید خودتون یه نمونه خوب از این دستگاه رو بسازید


نظرات  (۰)

هیچ نظری هنوز ثبت نشده است
ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی