Isi kandungan:

Kajian Eksperimen Gerak Harmonik Ringkas: 5 Langkah
Kajian Eksperimen Gerak Harmonik Ringkas: 5 Langkah

Video: Kajian Eksperimen Gerak Harmonik Ringkas: 5 Langkah

Video: Kajian Eksperimen Gerak Harmonik Ringkas: 5 Langkah
Video: Experiment 5 2024, Julai
Anonim

Oleh arrowlikeFollow More oleh pengarang:

Walking Strandbeest, Java / Python dan App terkawal
Walking Strandbeest, Java / Python dan App terkawal
Walking Strandbeest, Java / Python dan App terkawal
Walking Strandbeest, Java / Python dan App terkawal

Di dalam kelas, kami sering menggunakan jam randik untuk menjalankan eksperimen pendulum, atau eksperimen pergerakan harmonik sederhana. Inilah cabarannya, bolehkah kita menghasilkan grafik sebenar pergerakannya dan melihat apakah kedudukan dan kelajuan sudut sesaat, itu lebih banyak maklumat dan keseronokan.

Soalan pertama, kita perlu memutuskan badan pendulum adalah tali tanpa berat atau batang seragam yang kaku. Pendekatan tali pusat nampaknya lebih mudah. Dari amalan membina satu, saya mempunyai pertimbangan tradeoff berikut: Cara termudah untuk menggantung sistem pendulum ialah menggantungnya ke tepi atas pintu anda. Itu memberikan panjang pendulum ~ 2m anda tanpa membuat kerja-kerja pembinaan struktur. Tetapi ia memerlukan ayunan tidak akan menyentuh permukaan pintu, yang hanya merosakkan keseluruhan eksperimen. Jadi satah yang diayunkan harus sejajar dengan permukaan dinding / pintu anda. Kabel tanpa berat badan cenderung tipis, boleh berputar dengan mudah, dan menyukarkan pengukuran sudut ayunan. Kami mahu menggunakan satu ukuran untuk mewakili keadaan ayunan. Tali nipis, seperti tali ikan, boleh elastik dan tegang, yang mempengaruhi salah satu pemalar terpenting kita yang diukur oleh kita dan digunakan dalam persamaan, iaitu panjang bandul. Sebilangan mungkin juga dipengaruhi oleh suhu. Jisim berat yang tergantung di hujung tali mesti cukup berat sehingga berat tali menjadi tidak dapat dielakkan. Sila komen sekiranya anda bersetuju atau tidak setuju dengan mereka, atau anda mempunyai idea reka bentuk yang lain. Untuk mengkaji masalah ini, kita memerlukan alat yang sangat ringan sehingga beratnya dapat diabaikan dan kita masih menganggap sistem pendulum sebagai batang seragam yang kaku. Saya menggunakan alat kawalan elektronik COTS yang boleh dipakai, yang menyampaikan maklumat giro, akselerometer, dan sudut kepada kami melalui sambungan bluetooth. Pengukuran ini akan disimpan ke dalam fail data aplikasi telefon bimbit. Selepas itu, kami akan menganalisis data untuk eksperimen gerakan harmonik sederhana kami. Analisis berangka memberi tumpuan kepada topik berikut: 1) Ramalkan tempoh ayunan bandul 2) Kumpulkan data eksperimen pergerakan harmonik pendulum secara terprogram 3) Gunakan kmean untuk mengelompokkan data dan membuang outliers dalam proses analisis 4) Gunakan FFT masa pendek untuk menganggarkan frekuensi ayunan bandul

Bekalan

Alat pengukuran Bluetooth

Aplikasi telefon Android: Pergi ke kedai permainan Google, cari M2ROBOTS dan pasang Aplikasi kawalan. Sekiranya sukar untuk mengakses kedai permainan Google, kunjungi laman utama peribadi saya untuk kaedah muat turun aplikasi alternatif

batang kayu

beberapa bahagian bercetak 3D

bilah gergaji atau bahan logam yang serupa

Langkah 1: Apa itu Pendulum? Bagaimana Memodelkannya?

Terdapat banyak artikel dan buku yang memperkenalkan terbitan persamaan pendulum, termasuk buku fizik kurikulum anda. Kandungan semacam itu lebih baik tidak diulang di sini lagi. Hanya kesimpulan akhir yang disenaraikan di sini mengenai topik "gerakan harmonik sederhana". Untuk mengetahui jangka masa bandul, yang perlu kita ketahui hanyalah panjang bandul, dilambangkan sebagai "l", dalam meter.

Sekiranya kita cukup yakin beratnya terletak hampir sepenuhnya di hujung tali tanpa berat yang tergantung di pangsi, dan bandul berayun pada sudut kecil θ, katakan kurang dari 15 °, tempoh T1 pendulum seperti itu diberikan oleh:

T1 = 2 * pi * (l / g) ^ 0.5

g = pecutan graviti, kira-kira 9.8 m / s ^ 2

Sekiranya tali tanpa berat diganti dengan batang seragam yang kaku, panjangnya panjang l, tempoh pergerakan harmonik sederhana T2 diberikan oleh T1 = 2 * pi * (2l / 3g) ^ 0.5

Berkesan ia mempunyai tempoh yang sama dengan bandul tali tanpa berat menjadi dua pertiga panjang batang seragam yang kaku.

Inilah latar belakangnya, dan kita boleh mula menyiapkan percubaan kita.

Langkah 2: Sediakan Bahagian untuk Pembinaan Perkakasan

Sediakan Bahagian untuk Pembinaan Perkakasan
Sediakan Bahagian untuk Pembinaan Perkakasan
Sediakan Bahagian untuk Pembinaan Perkakasan
Sediakan Bahagian untuk Pembinaan Perkakasan
Sediakan Bahagian untuk Pembinaan Perkakasan
Sediakan Bahagian untuk Pembinaan Perkakasan

Untuk membina struktur pendulum, kami mencetak 3D beberapa bahagian, dan mengitar semula sesuatu yang sudah ada. Struktur bandul keseluruhan ditunjukkan dalam Rajah 1. Ini adalah campuran bahagian cetak 3D bersama dengan beberapa bahagian buatan tangan dan sekeping batang kayu panjang dari Lowe.

Bahagian yang dicetak 3D dalam Rajah 2 digantung di tepi atas pintu, kerana pintu kita adalah permukaan rata yang mudah untuk kita menggantung sesuatu. Pautan muat turun fail STL:

xiapeiqing.github.io/doc/kits/pendulum/pen…

Bahagian hijau pada Gambar 3 menghubungkan batang kayu ke pisau, dan pisau duduk di atas dua keping rel yang dipasang pada penyangkut pintu bercetak 3D sebelumnya. Pautan muat turun fail STL:

Kedua-dua kepingan rel dibuat dengan memecahkan pisau gergaji lama menjadi dua, lihat Gambar 4. Bahagian dalam Gambar.2 telah menyediakan ukuran slot yang tepat untuknya. Sebaik-baiknya kita dapat membuat lekukan berbentuk "V" pada kedua mata gergaji itu menggunakan fail. Logam bermata tajam, seperti pisau cukur tepi tunggal, atau sekeping logam buatan tangan, boleh duduk di dalam lekukan berbentuk "V". Sebab kita memerlukan kawasan hubungan yang lebih kecil adalah untuk mengurangkan tenaga kinetik yang hilang semasa berayun.

Bahagian cetak 3D terakhir dalam Rajah 5 adalah dulang kecil untuk memegang alat pengukur elektronik.

Pautan muat turun:

Alat pengukuran bluetooth menghasilkan perkiraan sudut, pengukuran giro dan pengukuran pecutan. Semua data ini tersedia untuk kami melalui pautan tanpa wayar bluetooth.

Kami akan melakukan pelbagai eksperimen dengan menggunakan alat ini pada kedudukan yang berlainan dari lengan pendulum, dan melihat perbezaannya.

Langkah 3: Pengumpulan Data Eksperimen

Pengumpulan Data Eksperimen
Pengumpulan Data Eksperimen
Pengumpulan Data Eksperimen
Pengumpulan Data Eksperimen
Pengumpulan Data Eksperimen
Pengumpulan Data Eksperimen

Terdapat dua kaedah yang boleh dilakukan untuk pengumpulan data eksperimen sebelum kami menganalisis set data yang diperoleh:

1) Gunakan Aplikasi telefon Android yang ditentukan di bahagian keperluan untuk mencatat semua pengukuran yang dihasilkan oleh radas ke dalam fail data yang disimpan dalam kad SD telefon anda. Kami boleh menyalin fail dan mengeposkan maklumat.

2) Gunakan komputer berkemampuan bluetooth, PC, komputer riba atau komputer mini RaspberryPi untuk membuat sambungan bluetooth ke radas dan membaca data untuk analisis realtime atau offline.

Terdapat kebaikan dan keburukan untuk setiap kaedah, kami akan mencuba kedua-duanya dan memberitahu perbezaan dalam arahan ini.

Untuk kaedah (1) menggunakan aplikasi android, setelah kita berada di antarmuka kawalan Aplikasi android, data telemetri yang dikirim dari alat pengukuran bluetooth ke telefon android akan direkodkan ke dalam file katalog bernama m2flightDatayyyymmdd_hhmmss.txt. Ia boleh didapati di folder Muat turun / m2LogFiles telefon android anda. Folder "Muat turun" adalah folder yang sudah ada di OS Android telefon anda dan "m2LogFiles" adalah folder yang dibuat oleh Aplikasi. Kandungan nama fail yyyymmdd_hhmmss adalah cara untuk mengekod masa percubaan bermula (tahun, bulan, hari, jam, minit dan saat) dalam nama fail.

Setiap baris dalam fail log adalah satu rekod. Dimulai dengan cap waktu acara, rentetan mukadimah "eam:", diikuti oleh 4 data triplet, yaitu:

Bacaan paksi Accelerometer XYZ dalam perkakasan sensor mentah mendaftarkan nilai bacaan semula

Bacaan paksi giroskop XYZ dalam perkakasan sensor mentah mendaftarkan nilai bacaan semula

Bacaan paksi Magnetometer XYZ dalam perkakasan sensor mentah mendaftarkan nilai bacaan semula

kapal dianggarkan Roll / Pitch / Raw dalam darjah

File data yang dibuat menggunakan program python komputer akan menggunakan format file data yang sama, sehingga program yang kami gunakan dalam langkah analisis data tidak akan terganggu dengan sumber data yang dihasilkan oleh program python atau aplikasi android kami.

Mari mulakan pengekodan menggunakan kaedah (2).

Untuk berinteraksi dengan alat pengukuran bluetooth, disediakan dua rasa SDK:

1) Python SDK, yang dapat dipasang oleh "pip3 install m2controller", python3 adalah bahasa yang digunakan. Contoh kod aplikasi pengguna disimpan di https://github.com/xiapeiqing/m2robots/tree/maste… Untuk percubaan ini, kami akan menggunakan pendulum1.py skrip python

2) Java SDK, yang tidak digunakan dalam instruksional ini karena kami ingin visualisasi dan analisis data pendulum yang diperoleh kemudian, yang mungkin memerlukan sedikit lebih banyak usaha untuk kami memprogram di Java.

Kod sumber program pengumpulan data python3 mengandungi banyak komen untuk perincian fungsi kod. Ringkasan kod sumber disediakan di sini.

#! / usr / bin / env python # - * - coding: UTF-8 - * - dari import m2controller m2controller dari m2controller import m2Const import signal import time import datetime import usrCfg import pendulum2

requestExit = Salah

################################################################

# kami ingin menggunakan konvensi penamaan fail log yang sama sehingga modul analisis data, pendulum2.py, dapat menjadi agnostik bagaimana kami mendapatkan fail data log ################# ############################################## logfilename = " m2flightData% s.txt "% (datetime.datetime.fromtimestamp (time.time ()). strftime ('% Y% m% d_% H% M% S')) dataLogfile = terbuka (nama log," w ")

def signal_handler (sig, frame):

permintaan globalExit print ('pengguna Ctrl-C untuk keluar dari pelaksanaan program') requestExit = True signal.signal (signal. SIGINT, signal_handler)

################################################################

# setelah setiap data pengukuran tersedia pada kecepatan 20Hz, fungsi "callback" ini akan dipanggil ################################ ################################ def def callbackfunc (telemetri): strTimeStamp = datetime.datetime.fromtimestamp (time.time ()%. strftime ('% H:% M:% S.% f') [: - 3] dataStr = "% s, eam:% d,% d,% d,% d,% d,% d,% d,% d,% d,% 2.1f,% 2.1f,% 2.1f / n "% (strTimeStamp, telemetry ['m_fAccelHwUnit'] [0], telemetri ['m_fAccelHwUnit'] [1], telemetri ['m_fAccelHwUnit'] [2], telemetri ['m_fGyroHwUnit'] [0], telemetri ['m_fGyroHwUnit'] [1], telemetri ['m_fGyroHwUnit'] [2], telemetri ['m_fMet] 'm_fMagHwUnit'] [1], telemetri ['m_fMagHwUnit'] [2], telemetri ['m_fRPYdeg'] [0], telemetri ['m_fRPYdeg'] [1], telemetri ['m_fRPYdeg'] [2] ################################################# ############ # kami mencetak string data ke layar dan menyimpannya ke dalam file log ###################### ######################################### print (dataStr) dataLogfile.writelines (dataStr)

################################################################

# inisialisasi pengawal, ingat untuk menetapkan medan BleMACaddress menjadi alamat MAC peranti anda ################################ ############################## # TODO: mari kita mulakan BleMACaddress jika tidak ditetapkan oleh pengguna. pengawal = m2controller. BleCtrller (m2Const.etDebian, callbackfunc, usrCfg. BleMACaddress) controller.connect () while True: ########################## ##################################### # tunggu data pengukuran dibuat dan dihantar dari pengukuran pendulum radas ################################################# ############### controller.m_CommsTunnel.waitForNotifications (1.0) if requestExit: ######################## ####################################### # penjagaan rumah berfungsi di sini apabila kita selesai mencatat data ################################################# ############## controller.stop () dataLogfile.close () rehat

################################################################

# pengumpulan data selesai, sekarang mari kita menganalisis data log ####################################### ######################### pendulum2.parseDataLogFile (nama logfilen)

Untuk kemas kini jangka panjang, sila lihat

Sekarang mari kita jelaskan kaedah operasinya. Program python ini ditulis di atas pakej yang boleh dipasang pip, bernama m2controller. Paket tingkat bawah menawarkan mekanisme panggilan balik, sehingga setiap pembaruan pengukuran yang diterima akan memicu fungsi panggilan balik yang kami tulis, dan menyimpan data ke dalam fail log tempatan. Format kandungan data fail log sama dengan apa yang dihasilkan oleh aplikasi pendamping android, sehingga fail log data yang dibuat oleh program python atau aplikasi pendamping andriod dapat ditukar.

Sinyal ctrl-C pengguna, yang ditangkap oleh sistem operasi, diteruskan ke program, dan menghentikan gelung tak terbatas menunggu kedatangan data pengukuran yang baru.

Hingga kini, fail log berjaya dibuat, dan program ini akan memanggil program analisis untuk mengkaji hasil percubaan kami.

Berikut adalah dua eksperimen, dan perbandingan menunjukkan perbezaan yang sangat ketara dengan memasang peranti 7gram di lokasi yang berbeza.

Pada Gambar 2, kami menggunakan skala untuk menentukan berat sebenar alat pengukuran bluetooth ini.

Rajah 3 menggambarkan penyediaan pendulum di mana peranti 7gram dipasang pada hujung bawah bandul. Konfigurasi penyediaan dalam Rajah 4 mempunyai jisim 7gram yang terletak lebih dekat ke pangsi ayunan.

Rajah 5 adalah pandangan dekat struktur pendulum.

Langkah 4: Analisis Data

Analisis data
Analisis data
Analisis data
Analisis data
Analisis data
Analisis data

Alat pengukur bluetooth mempunyai berat ~ 7gram, yang beratnya jauh lebih kecil daripada kayu kayu sepanjang 1.6 meter. Gunakan andaian "batang seragam tegar", dan kita mempunyai persamaan jangka masa bandul ini, T1 = 2 * pi * (2l / 3g) ^ 0.5

Untuk mendapatkan pemalar graviti, kita boleh menggunakan 9.8m / s ^ 2. Tetapi pemalar graviti yang lebih tepat pada geolokasi tertentu boleh diambil dari perkhidmatan web ini:

www.wolframalpha.com/widgets/view.jsp?id=e…

Untuk san francisco, ia adalah 9.81278m / s ^ 2

Panjang bandul diukur menjadi 64.5"

2 * pi * sqrt (2 * 64.5 * 0.0254 / (3 * 9.81278)) memberikan jangkaan jangkaan pendulum 2.0962 (saat).

Mari lihat sama ada ia bersetuju dengan eksperimen kami.

Dalam eksperimen ke-1, penyediaan pendulum mempunyai peranti 7gram yang terpasang pada hujung bawah bandul. Fail log saya boleh dimuat turun dalam:

xiapeiqing.github.io/doc/kits/pendulum/pen…

Namakan semula menjadi "PendulumTestData.txt" dan masukkan ke dalam folder yang sama dari program analisis python. Ringkasan kod sumber disediakan di sini.

#! / usr / bin / env python # - * - coding: UTF-8 - * - import csv import matplotlib.pyplot as plt plt.style.use ('seaborn-whitegrid') import numpy sebagai np dari datetime import datetime, timedelta import seaborn sebagai sns dari sklearn.cluster import KMeans dari koleksi Kaunter import ################################### ############################ # fungsi ini menjalankan kerja analisis fail data ############ ################################################# ## def parseDataLogFile (datafilename): ########################################## ##################### # ekstrak data dalam fail log data dipisahkan koma (CSV) dan simpan kandungan di setiap lajur ke dalam satu pemboleh ubah jenis terapung ## ################################################# ############ dengan terbuka (datafilename) sebagai csvfile: readCSV = csv.reader (csvfile, delimiter = ',') timestampS = fAccelHwUnit_x = fAccelHwUnit_y = fAccelHwU fGyroHwUnit_x = fGyroHwUnit_y = fGyroHwUnit_z = fMagHwUnit_x = fMagHwUnit_y = fMagHwUni t_z = fRPYdeg_r = fRPYdeg_p = fRPYdeg_y = untuk baris dalam readCSV: cuba: x = datetime.strptime (baris [0].split (',') [0], '% H:% M:% S.% f ') timestampS.append (timedelta (jam = x.jam, minit = x.minit, saat = x.second, mikrodetik = x.mikrodetik).total_seconds ()) fAccelHwUnit_x.append (terapung (baris [1] [4:])) fAccelHwUnit_y.append (terapung (baris [2])) fAccelHwUnit_z.append (terapung (baris [3])) fGyroHwUnit_x.append (float (baris [4])) fGyroHwUnit_y.append (float (baris [5])) fGyroHwUnit_z.append (terapung (baris [6])) fMagHwUnit_x.append (terapung (baris [7])) fMagHwUnit_y.append (float (baris [8])) fMagHwUnit_z.append (terapung (baris [9])) fRPYdeg_r.append (terapung (baris [10])) fRPYdeg_p.append (terapung (baris [11])) fRPYdeg_y.append (terapung (baris [12])) kecuali: lulus cap waktuS = np.asarray (cap masa) cap waktu = cap - cap waktu [0] fAccelHwUnit_x = np.asarray (fAccelHwUnit_x) fAccelHwUnit_y = np.asarray (fAccelHwUnit_y) fAccelHwUnit_z = np.asarray (fAccelHwUnit_z) fGyroHwUnit_x = np.asarray (fGyroHwUnit_x) fGyroHwUnit_y = np.asarray (fGyroHwUnit_y) fGyroH wUnit_z = np.asarray (fGyroHwUnit_z) fMagHwUnit_x = np.asarray (fMagHwUnit_x) fMagHwUnit_y = np.asarray (fMagHwUnit_y) fMagHwUnit_z = np.asarray (fMagHwUnit_z) fRPYdeg_r = np.asarray (fRPYdeg_r) fRPYdeg_p = np.asarray (fRPYdeg_p) fRPYdeg_p = fRPYdeg_p - np.mean (fRPYdeg_p) fRPYdeg_y = np.asarray (fRPYdeg_y)

################################################################

# kita memerlukan anggaran frekuensi persampelan yang tepat untuk anggaran jangka masa ayunan tepat #################################### ########################### FsHz = getSamplingIntervalS (cap waktuS) ################ ############################################### # gunakan komponen nada dalam output sistem rujukan tajuk sikap untuk analisis tempoh bandul ##################################### ########################## analyse_timeSequence (timestampS, fRPYdeg_p, FsHz, 'pitch') ############ ################################################# ### # gunakan output pengukuran mentah acceleromter untuk analisis tempoh pendulum ##################################### ########################## analyse_timeSequence (timestampS, fAccelHwUnit_x, FsHz, 'accel') ########### ################################################# ### # gunakan output pengukuran mentah giro untuk analisis tempoh pendulum ##################################### ########################### analysis_timeSequence (timestampS, fGyroHwUnit_y, FsHz, ' gyro ') cetak (' selesai, selamat:-) ') plt.show () ################################ ################################ # dalam proses komunikasi bluetooth, ada kemungkinan jarang paket data comm dapat hilang # kami menggunakan K-mean untuk mengasingkan data pengukuran 20Hz dari outliers, yang disebabkan oleh penurunan paket # menyelam ke "isyarat dan sistem untuk maklumat lebih lanjut" ################ ############################################### def getSamplingIntervalS (cap waktuS): plt.figure () sampleIntervalS = np.diff (timestampS) sns.distplot (sampleIntervalS) plt.ylabel ('histogram') plt.xlabel ('interval pengukuran') clusterCnt = 5 km = KMeans (n_clusters = clusterCnt) km.fit (sampleIntervalS.reshape (-1, 1)) centroids = km.cluster_centers_ elemCnt = Kejadian (km.labels_) kejadianCnt = untuk ii dalam julat (clusterCnt): kejadianCnt.tambah (elemCnt [ii]) FsHz = 1 / centroids [kejadianCnt.index (maksimum (kejadianCnt))] mengembalikan FsHz

################################################################

# gunakan spektrometer, iaitu, waktu pendek FFT untuk mendapatkan komponen frekuensi, tong sampah adalah anggaran terbaik kami mengenai ayunan pendulum ########################## ##################################### def analysis_timeSequence (timestampS, timeSeqData, FsHz, strComment): gambar, (ax1, ax2) = plt.subplots (nrows = 2) ax1.plot (timestampS, timeSeqData, marker = 'o', markerfacecolor = 'blue', markersize = 2, color = 'skyblue', linewidth = 1) ax1.set_title ("pengukuran domain masa pendulum -% s"% strComment) ax1.set_xlabel ("time sampling (second)") ax1.set_ylabel (strComment); NFFT = 2048 # panjang segmen berliku

Pxx, freqs, bins, im = ax2.specgram (timeSeqData, NFFT = NFFT, Fs = FsHz, noverlap = NFFT / 2)

ax2.set_title ("Spectrogram") ax2.set_xlabel ("sampel") ax2.set_ylabel ("frekuensi (Hz)");

# Kaedah `specgram` mengembalikan 4 objek. Mereka adalah:

# - Pxx: periodogram # - freqs: vektor frekuensi # - tong: pusat tong masa # - im: contoh matplotlib.image. AxesImage yang mewakili data dalam plot pkresult = np.where (Pxx == np.amax (Pxx)) oscFreqHz = freqs [pkresult [0] [0] print ('pendulum oscillation Freq (Hz) =% f, Period (Sec) =% f, sumber data anggaran:% s'% (oscFreqHz, 1 / oscFreqHz, strComment)) kembali 1 / oscFreqHz

################################################################

# sekiranya kita menjalankan program ini secara bebas, yaitu, tidak dipanggil oleh pendulum1.py, # kita menentukan nama fail data log lalai yang akan dianalisis #################### ########################################### jika _name_ == "_main_ ": defaultFilename = './PendulumTestData.txt' import os.path if os.path.isfile (defaultFilename): parseDataLogFile (defaultFilename) other: print (" fail log lalai% s tidak ada "% defaultFilename)

Untuk kemas kini jangka panjang, sila lihat

Kod sumber mengandungi komen terperinci, mari kita memberikan ringkasan tahap anggaran matematik yang tinggi di sini.

1) Kami pertama kali membaca kandungan fail CSV ke dalam komputer, menggunakan python package yang disebut "csv". Kami mempunyai pengukuran berkala.

21: 34: 26.362, eam: 0, -128, 14464, -8, 144, -96, 2112, -1280, 1664, -0.5, -5.5, 40.5

21: 34: 26.373, eam: 128, 0, 14272, -8, 136, 40, 2112, -1280, 1664, -0.5, -6.5, 40.0

21: 34: 26.412, eam: 448, -64, 14208, -8, 136, 24, 2176, -1280, 1664, -0.5, -7.5, 40.5

21: 34: 26.462, eam: 448, -128, 14272, -8, 120, 16, 2176, -1280, 1664, -0.5, -8.0, 40.5

2) Oleh kerana kadar pengukuran sangat kritikal dan secara langsung memperkenalkan ralat jangka masa pendulum, kami ingin menganggarkannya. Selang pengukuran nominal kami ialah 50ms, iaitu 20Hz. Rata-rata dari semua pengukuran nampaknya OK, tetapi kadang-kadang kita kehilangan paket penghantaran data, selang kemas kini menjadi 100ms atau 150ms,…

Sekiranya kita merencanakan berlakunya data ini, lihat Gambar 1, sebagai manusia, kita dapat dengan mudah memiliki nilai bola mata 0,05sec. Namun, bolehkah kita melakukan yang lebih baik daripada itu?

Kita perlu menggunakan kaedah klasifikasi untuk memilih kaedah yang baik untuk pengiraan purata. Python mempunyai kotak alat bernama KMeans untuk membantu kami dalam pengelompokan, atau mengatakan klasifikasi. Konsep ini digunakan dalam banyak data besar dan kawasan AI.

3) Gambar 2 mengandungi dua gambar. Plot teratas adalah urutan domain masa pengukuran sudut ayunan kami dalam deg. Dengan merujuk pada cap waktu paksi-x di Kedua, kita dapat membaca kira-kira 22,5 kitaran dalam 50 saat, yang diterjemahkan menjadi 2,22 detik pendulum. Adakah terdapat kaedah untuk mengotomatisasi proses ini dan mempunyai anggaran yang lebih tepat? Ya, kita dapat menggunakan alat matematik yang disebut spektrogram, yang menggunakan sebilangan kecil data pengukuran dan memberitahu kekerapannya, lihat gambar di bawah. Bacaan paksi-y untuk garis paling gelap adalah frekuensi ayunan bandul. Menjadi garis mendatar mengesahkan ayunan pendulum tidak berubah sama sekali sepanjang eksperimen. Nilai terbalik frekuensi ayunan adalah tempoh ayunan pendulum.

Laporan akhir yang dibuat oleh program ini adalah ringkasan teks:

ayunan pendulum Freq (Hz) = 0.449224, Period (Sec) = 2.226059, sumber data anggaran: nada

Kami dapat mengetahui hasil pengiraan tangan bola mata kami yang terdahulu, 2.22sec, cukup konsisten dengan nilai yang dikira program.

Berbanding dengan 2.0962 (saat) nilai yang dikira secara teori, kami mempunyai baki ~ 5% ralat. Bagaimana untuk menyingkirkan mereka? Ingat anggapannya adalah "batang seragam tegar"? Walaupun berat tambahan 7 gram nampaknya remeh, ini adalah penyebab terbesar kesalahan yang tinggal.

Kami sekarang memindahkan peranti, dekat dengan pangsi. Lihat langkah sebelumnya untuk foto jarak dekat. Fail log yang saya buat boleh dimuat turun di sini:

xiapeiqing.github.io/doc/kits/pendulum/pen…

Jalankan langkah analisis yang sama, dan kita mendapat Tempoh 2.089867 (Sec), lihat Gambar 3, yang hampir sama dengan ramalan teoritis. Hebat!

Oleh kerana kita tidak hanya memiliki pengukuran sudut berayun, tetapi juga pengukuran giroskopik dan pengukuran akselerometer pada tingkat yang sama. Jalankan analisis yang sama untuk dua pengukuran yang lain, kami mendapat hasil dalam Gambar 4 dan 5. Anggaran dari ketiga sumber pengukuran setuju, yang membuat kami lebih yakin dengan kejayaan percubaan kami.

Inilah hasilnya sebagai hasil akhir program python berjalan:

osilasi pendulum Freq (Hz) = 0.478499, Period (Sec) = 2.089867, sumber data anggaran: nada

osilasi pendulum Freq (Hz) = 0.478499, Period (Sec) = 2.089867, sumber data anggaran: accel

ayunan pendulum Freq (Hz) = 0.478499, Period (Sec) = 2.089867, sumber data anggaran: gyro

Pemikiran terakhir dalam langkah ini, bagaimana hasil estimasi dapat sama persis menggunakan sumber data input yang berbeza? Ini adalah intuisi bertentangan. Saya akan menyerahkan soalan ini kepada pembaca. Berikut adalah petunjuk: ingat kita menggunakan FFT jangka pendek untuk menganggarkan frekuensi ayunan? Dalam domain digital, anggaran frekuensi diberikan dalam tong frekuensi diskrit dan bukannya anggaran nombor terapung.

Langkah 5: Cadangan Kerja Masa Depan

Terdapat beberapa kategori cadangan kerja masa depan.

Pada langkah sebelumnya, kita berjaya mengurangkan ralat percubaan kita dari ~ 5% menjadi kurang dari 1%, bolehkah kita melakukan yang lebih baik daripada itu? Menyedari magnitud berayun menurun secara eksponensial, salah satu faktor penyumbang ialah hambatan udara yang disebabkan ketika mengayunkan bandul. Keratan rentas bandul mungkin perlu diubah agar bentuknya serasi agar dapat mengurangkan daya tarikan aerodinamik.

Bolehkah kita menerapkan keuntungan yang berbeza-beza yang dipelajari menggunakan teknik saringan adaptif untuk menghasilkan isyarat magnitud puncak yang tetap. Sementara itu, hubungkan pelemahan magnitud dengan daya luaran.

Kita hampir tidak dapat menemukan sesuatu yang lebih sederhana daripada "pergerakan harmonik sederhana". Bolehkah kita menggunakan kemudahan yang kita menganalisis bandul untuk menganalisis sesuatu yang lebih rumit, aktiviti sukan, urutan pelancaran roket air, dan lain-lain?

Selamat menggodam

Disyorkan: