Sponsored by

Jumat, 03 Februari 2012

Simulasi Pendulum Pada Visual Basic


Zpag
Pendulum adalah sebuah benda dengan massa tertentu yang tergantung pada seuntas tali dengan panjang tertentu. Jika benda ini diankat sehingga membentuk sudut tertentu yang kita sebut sebagai sudut awal, yang dilambangkan dengan θ₀, kemudian dilepaskan, maka akan terjadi ayunan. Dimana perubahan sudut yang terjadi tiap satuan waktu adalah
dimana 

g adalah gravitasi
L adalah panjang tali

Dari perubaha sudut maka juga akan didapatkan perubahan koordinat cartesian x dan y. Ini yang akan digunakan pada simulasi VB.

Tapi jika hanya menggunakan rumus ini maka pertgerakan bandul tidak pernah berakhir (Endless). Nah agar bisa menjadi sedikit lebih nyata maka pasti ada faktor yang mempengaruhi yang membuat bandul akan berhenti pada satu waktu, nah fakto ini adalah faktor hambatan atau redaman, faktor ini membuat pergerakan bandul teredam dan lama-kelamaan akan berhenti.

Setelah berkonsultasi dengan bapak Mariano, di sini dan beliau telah memberikan pencerahan pada saya sehingga saya bisa sedikit lebih memahami tentang fisika mengenai pendulum. Dari pak Mariano saya mendapatkan rumus :

dimana

x adalah perubahan nilai pada sumbu x terhadap waktu
e adalah bilangan natural yang nilainya 2.718281828
A adalah amplitudo
π adalah sudut awal

Menurut pak Mariano ini adalah Gerak Harmonis Teredam Lemah (GHT Lemah) dimana syaratnya adalah
Syarat ini nantinya harus terpenuhi untuk mendapatkan GHT lemah. Dimana
k adalah konstanta
m adalah massa
c adalah konstanta gesek

Jika hanya mendapatkan keterangan seperti ini, seorang amatir seperti saya pasti bingung, nah bagi anda yang juga amatir seprti saya dibawah ini saya akan memberikan rumus lengkap untuk mendapatkan nilai-nilai yang dibutuhkan hingga programa untuk membuat aplikasinya di VB.

Pertama anda harus mengetahui nilai apa yang sudah anda dapatkan. Pada kasus ini saya sudah mandapatkan nilai sudut awal, massa, gaya grafitasi dan panjang tali. Dari sini dapat kita cari nilai k dengan rumus
Dimana L adalah panjang tali.

Setalah mendapatkan nilai k maka nilai c bisa dicari sengan rumus

dimana eta adalah nilai viskositas udara yaitu . Nah setelah dari sini maka syarat dapat dihitung, apakah sudah terpenuhi atau belum. Kemudian untuk mencari nilai dari amplitudo dapat diketahui dengan rumus L sin π.  Setelah amplitudo diketahui maka yang perlu dilakukan adalah mencari nilai gamma (γ) dan omega (ω). Gamma dapat dicari dengan rumus :
Kemudian Omega dapat dicari dengan rumus :
Nah, disini kita membutuhkan nilai omega nol, nilai omega nol didapat dengan rumus :
Jadi, sekarang rumus kita sudah lengkap. Tapi sebenarnya ada satu masalah lagi, yaitu bagaimana mencari nilai perubahan pada sumbu y? Jawabannya adalah dengan menggunakan rumus segitiga siku-siku, yaitu :
Kalo ga salah ya rumusnya gitu, nah dari rumus ini jika c adalah panjang tali, a dalah x, dan  y adalah b, maka nilai y dapat dihitung. Setelah seian banyak rumus, apakah rumus θ(t) diatas tidak dapat digunakan? jawabannya masih, tapi ditambahkan faktor redaman, yaitu :
Sehingga rumusnya menjadi
Nah, jadi, tingal pilih mau yang mana. Jika ada pertanyaan apakah antara rumus x dan rumus θ diatas berbeda, jawabannya adalah serupa tapi tak sama. Itu akan saya jelaskan di bagian lain halaman ini, sekarang kita buat dahulu animasinya, dari animasi ini anda nanti dapat menyimpulkan.

Pertama, buatlah form seperti pada gambar dibawah ini.

Properties yang digunakan adalah :
12 Label, seperti yang terliahat pada gambar diatas, yang bertuliskan, massa, X, e, dll...
Satu buah mschart untuk menunjukkan sudut(kalau mau lebih juga silahkan)
Satu buah Vscroll untuk marubah panjang tali.
Dua buah Hscroll untuk merubah massa dan sudut awal (π)
Satu buah listbox untuk melihat perbedaan sudut
Tiga buah shape, satu lingkaran besar, dan dua kotak kecil. Lingkaran digunakan untuk melihat secara visual pergerakan ujung pendulum, sedangkan kotak kecil sebagai penanda amplitudo maksimal.
Enam buah Line, dua line untuk simuasi tali, dua buah line untuk simulasi perubahan kecepatan, dan sisanya untuk simulasi perubahan percepatan.
Dan yang terakhir adalah satu buah timer.
Dibawah ini adalah program yang saya buat.

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'Deklarasi global
Dim massa As Integer
Dim L As Double
Dim gamma As Double
Dim k As Double
Dim gamma_kuadrat As Double
Dim omega As Double
Dim omega_nol_kuadrat As Double
Dim c As Double
Dim Amplitudo As Double
Dim pi As Double
Dim theta As Double
Dim waktu As Double
Dim syarat As Double
Const eta As Double = 1.8 * (10 ^ -1)
Const grafitasi As Double = 9.8
Dim X As Double
Dim Y As Double
Dim posisiX As Double
Dim posisi_sek As Double
Dim posisi_sek1 As Double
Dim posisi_seb As Double
Dim posisi_seb1 As Double
Dim kec As Double
Dim kec1 As Double
Dim kec_sek As Double
Dim kec_sek1 As Double
Dim kec_seb As Double
Dim kec_seb1 As Double
Dim perc As Double
Dim perc1 As Double
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'Private sub untuk form
Private Sub Form_Load()
VScroll1.Value = 200                         'menentukan nilai awal panjang tali
HScroll1.Value = 90                           'menentukan nilai awal pi
HScroll2.Value = 1000                       'menentukan nilai awal massa (gr)
End Sub
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'Private sub untuk timer
Private Sub Timer1_Timer()
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'Deklarasi lokal
Dim t As Double
Dim d As Double
Dim e As Double
Dim sud As Double
Dim sudut As Double
Dim selisih As Double
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
pi = HScroll1.Value - 45                      'menentukan nilai pi dari Hscroll1                                                  
Label4 = pi                                          'menampilkan nilai pi pada label 4
L = VScroll1.Value * 20                      'menentukan nilai L dari Vscroll1
Label3 = L                                          'menampilkan nilai L pada label 3
massa = HScroll2.Value / 1000            'menentukan nilai massa dari Hscroll2
Label2 = massa                                   'menampilkan nilai massa pada label 2
waktu = waktu + 1                              'menentukan nilai t
k = massa * grafitasi / L                       'menghitung nilai k
c = k * eta                                           'menghitung nilai c
syarat = (c ^ 2) - (4 * massa * k)         'menghitung syarat
posisi_seb1 = posisi_sek1                    'memasukkan nilai posisi_sek1 pada posisi_seb1
If syarat < 0 Then                                  'memasukkan syarat GHT Lemah
gamma = c / (2 * massa)                       'menghitung nilai gamma
omega_nol_kuadrat = k / massa            'menghitung nilai omega nol
gamma_kuadrat = gamma ^ 2               'menghitung nilai gamma kuadrat (mempermudah mengingat)
omega = Sqr(omega_nol_kuadrat - gamma_kuadrat)            'menghitung nilai omega
Amplitudo = L * Sin(pi / 180 * 3.141592654)                      'menghitung nilai amplitudo
X = Exp(-gamma * waktu) * Amplitudo * Cos((omega * waktu) - (pi / 180 * 3.141592654))'menghitung x
Y = Sqr((L ^ 2) - (X ^ 2))                                       'menghitung Y
theta = Exp(-gamma * waktu) * pi * Cos(Sqr(9.8 / L) * waktu)     'menghitung nilai θ
End If

kec_seb1 = kec_sek1                                                'memasukkan nilai kec_sek1 pada kec_seb1
posisi_sek1 = X                                                         'memasukkan nilai X pada posisi_sek1
kec1 = posisi_seb1 - posisi_sek1                               'menghitung nilai kecepatan1
Label9 = kec1                                                            'memasukkan nilai kec1 pada label 9
kec_sek1 = kec1                                                       'memasukkan nilai kec1 pada kec_sek_1
perc1 = kec_seb1 - kec_sek1                                    'menghitung nilai percepatan1
Label10 = perc1                                                        'menampilakan nilai perc1 pada label 10

d = Line1.X1 - Line1.X2                                            'menghitung nilai selisih sumbu X
e = Line1.Y1 - Line1.Y2                                            'menghitung nilai selisih sumbu Y
If e <> 0 Then                                                            'menghindari nilai pembagi nol
t = d / e                                                                      ' menghitung nilai t
End If
sud = Atn(t) * 180 / 3.141592654                              'mengubah nilai t menjadi nilai sudut
Label1 = theta                                                             'menampilkan nilai sudut theta pada label 1

Line1.X2 = 4340 + (4000 * Sin(theta / 180 * 3.141592654))                'nilai X dan Y pada animasi line 1
Line1.Y2 = 4000 + (4000 * Cos(theta / 180 * 3.141592654))               ' (θ)

posisi_seb = posisi_sek                                                               
posisiX = 4000 * Sin(theta / 180 * 3.141592654)                                 'menghitung nilai posisi X dari theta
kec_seb = kec_sek
posisi_sek = posisiX
kec = posisi_seb - posisi_sek
Label11 = kec
kec_sek = kec
perc = kec_seb - kec_sek
Label12 = perc

Shape2.Left = 4290 + (4000 * Sin(pi / 180 * 3.141592654))                     '
Shape2.Top = 3950 + (4000 * Cos(pi / 180 * 3.141592654))                    'animasi nilai amplitudo
Shape3.Left = 4290 + (4000 * Sin((pi - pi * 2) / 180 * 3.141592654))      ' maksimal
Shape3.Top = 3950 + (4000 * Cos(pi / 180 * 3.141592654))                   '

sudut = Atn(X / Y) * 180 / 3.141592654                                              'menghitung nilai sudut dari X dan Y
List1.AddItem sud                                               'memasukkan nilia sud pada list1
List1.AddItem sudut                                            'memasukkan nilai sudut pada list1
Label7 = sudut
selisih = Abs(sud) - Abs(sudut)                            'menghitung nilai selisih dari sudut dan sud

Line3.X1 = Line1.X2                                        '
Line3.X2 = Line3.X1 - (kec * 10)                    ' Animasi kecepatan
Line3.Y1 = Line1.Y2                                       '
Line3.Y2 = Line3.Y1                                       '

Line4.X1 = Line2.X2                                      '
Line4.X2 = Line4.X1 - (kec1 * 10)                 ' Animasi kecepatan
Line4.Y1 = Line2.Y2                                      '
Line4.Y2 = Line4.Y1                                      '

Line5.X1 = 4340 + (3500 * Sin(theta / 180 * 3.141592654))           '
Line5.X2 = Line5.X1 + (perc * 100)                                                 'Animasi percepatan
Line5.Y1 = 4000 + (3500 * Cos(theta / 180 * 3.141592654))          '
Line5.Y2 = Line5.Y1                                                                        '

Line6.X1 = 4340 + (3500 * Sin(sudut / 180 * 3.141592654))                '
Line6.X2 = Line6.X1 + (perc1 * 100)                                                    'Animasi percepatan
Line6.Y1 = 4000 + (3500 * Cos(sudut / 180 * 3.141592654))              '
Line6.Y2 = Line6.Y1                                                                              '

Line2.X1 = Line1.X1                                           '                           
Line2.X2 = 4300 + X                                          ' Animasi pada line 2 (rumus x)
Line2.Y1 = Line1.Y1                                           '
Line2.Y2 = 4000 + Y                                          '

Label8 = selisih
Label5 = X
Label6 = Exp(-gamma * waktu)
MSChart1.data = sudut

End Sub


Dibawah ini adalah video hasilnya.



Pada video diatas, pada list box dapat dilihat, nilai paling atas adalah nol, sedangkan nilai kedua adalah 31.6xxx kemudian nilai ketiga adalah 44.929xxx. Dua nilai teratas adalah nilai sudut pada t=0, sedangkan nilai ketiga adalah pada saat t=1. Dari sini terlihat perbedaan kedua rumus ini.

Sekian dulu pembahasan dari saya, jika anda merasa bingung atau program yang saya buat kurang baik, saya dengan senang hati menerima kritik dan saran. Mohon maaf saya tidak menerima kritik yang tidak disertai saran.

Maaf kalau vidoenya berkedip, Komputer saya tidak punya VGA external...
Terima Kasih.


6 komentar:

  1. Hebat. Usul :
    Coba dibuat grafik x terhadap t, kecepatan terhadap t dan percepatan terhadap t, semua di dalam satu grafik supaya bisa terlihat perubahannya secara bersama-sama dengan ayunan bandul.

    BalasHapus
    Balasan
    1. Ini hasil update untuk grafiknya pak, tapi saya masih belum bisa menerapkan rumus yang bapak beri kemarin. Masih belum berhasil... Saya belum bisa menerapkan rumusnya...
      hehehe...

      grafiknya juga masih belum bisa jadi satu... saya belum bisa buatnya... ga tau juga siy, bisa jadi satu apa tidak...

      Hapus
  2. Bisa Bro,. jadi kamu harus nambah timer di VBnya juga,
    .

    BalasHapus
    Balasan
    1. sing untuk multi series dalam satu grafik ta? gmana carane? kan data untuk mschart-nya itu cuama ada satu?

      Hapus
  3. Berhasil juga.. woow, takjub deh...

    Bukannya mau menyusahkan, tapi kalau dibuat lebih interaktif bagaimana? Jadi pengguna program (user) dapat memasukkan sendiri nilai-nilai awal yang diperlukan, misalnya L, g, eta, dll sehingga user bisa bereksperimen dengan nilai-nilai tersebut dan mendapatkan variasi dari gerak harmonik yang semacam apa tergantung nilai-nilai yang dimasukkan.

    BalasHapus
    Balasan
    1. ah, bisa pak... cuma saya masih belum dapet hosting untuk menampung program saya ini, jadi kalo misalnya ada yang mau program ini ya harus minta, trus nanti saya kirim ke emailnya... program diatas sudah bisa diatur, L, m, dan pi-nya... cuma masih belum sempurna... nanti saya sempurnakan lagi..

      Hapus

I am sorry for anyone who access this site but expecting articles in english.

If you have question just post it on comment or to my mail.
Thanks