Kazalo:

Eksperimentalna študija enostavnega harmoničnega gibanja: 5 korakov
Eksperimentalna študija enostavnega harmoničnega gibanja: 5 korakov

Video: Eksperimentalna študija enostavnega harmoničnega gibanja: 5 korakov

Video: Eksperimentalna študija enostavnega harmoničnega gibanja: 5 korakov
Video: Студија од Чикаго: Експериментален лек успешен против Ковид-19 2024, Julij
Anonim

Avtor arrowlikeSledi več avtorja:

Walking Strandbeest, Java/Python in App Controlled
Walking Strandbeest, Java/Python in App Controlled
Walking Strandbeest, Java/Python in App Controlled
Walking Strandbeest, Java/Python in App Controlled

V učilnici pogosto uporabljamo štoparico za izvedbo poskusa nihala ali preprostega poskusa harmoničnega gibanja. Tukaj je izziv, ali lahko izdelamo pravi graf njegovega gibanja in vidimo, kakšen je trenutni kotni položaj in hitrost, to je veliko več informacij in zabave.

Najprej se moramo odločiti, da je telo nihala breztežna vrvica ali trdna enotna palica. Zdi se, da je pristop kabla lažji. Iz prakse gradnje enega imam naslednje kompromisne pomisleke: Najlažji način, da obesite sistem nihala, je, da ga obesite na zgornji rob vrat. To vam daje dolžino nihala ~ 2 m brez kakršnih koli gradbenih del. Vendar potrebuje zamah, ki se ne dotika površine vrat, kar preprosto pokvari celoten poskus. Zato mora biti ravnina, ki jo niha, natančno vzporedna s površino vaše stene/vrat. Breztežna vrvica je ponavadi tanka, zlahka se vrti in otežuje merjenje kota nihanja. Za prikaz stanja zamaha želimo uporabiti eno meritev. Tanka vrvica, na primer ribja vrvica, je lahko elastična in raztegljiva, kar vpliva na eno naših najpomembnejših konstant, ki jih merimo in uporabimo v enačbi, to je dolžina nihala. Na nekatere lahko vpliva tudi temperatura. Utežna masa, ki visi na koncu vrvice, mora biti dovolj velika, da postane teža vrvice zanemarljiva. Prosimo, komentirajte, če se z njimi strinjate ali se ne strinjate, ali imate druge ideje o kompromisu pri oblikovanju. Za preučitev tega problema potrebujemo napravo, ki je tako lahka, da se njene teže ne upošteva, sistem nihala pa še vedno obravnavamo kot trdno enakomerno palico. Uporabljam nosljiv elektronski krmilnik COTS, ki nam prek povezave bluetooth posreduje podatke o žiroskopu, merilniku pospeška in kotu. Te meritve bodo shranjene v podatkovno datoteko aplikacije za mobilni telefon. Po tem bomo analizirali podatke za naš preprost eksperiment harmoničnega gibanja. Numerična analiza se osredotoča na naslednje teme: 1) Predvidevanje nihajnega nihala frekvenca nihanja nihala

Zaloge

Merilni aparat Bluetooth

Aplikacija za telefon Android: Pojdite v trgovino Google Play, poiščite M2ROBOTS in namestite aplikacijo za nadzor. V primeru, da je težko dostopati do trgovine Google Play, obiščite mojo osebno domačo stran za alternativni način prenosa aplikacije

lesena palica

nekaj 3D tiskanih delov

žagine liste ali podoben kovinski material

1. korak: Kaj so nihala? Kako ga modelirati?

Obstaja veliko člankov in knjig, ki predstavljajo izpeljavo enačb nihala, vključno z vašo knjigo fizike učnega načrta. Morda bi bilo bolje, da se takšna vsebina tukaj več ne ponovi. Tu je naveden le končni zaključek o temi "preprosto harmonično gibanje". Če želimo poznati obdobje nihala, moramo vedeti le dolžino nihala, označeno kot "l", v metrih.

Če smo razumno prepričani, da se teža skoraj v celoti nahaja na koncu breztežne vrvice, ki visi v vrtišču, in nihalo niha pod majhnimi koti θ, recimo manj kot 15 °, je obdobje T1 takega nihala podano z:

T1 = 2*pi*(l/g)^0,5

g = gravitacijski pospešek, približno 9,8 m/s^2

Če breztežno vrvico zamenjamo s trdno enakomerno palico, spet dolžine l, je njeno preprosto obdobje harmoničnega gibanja T2 podano s T1 = 2*pi*(2l/3g)^0,5

Dejansko ima enako obdobje kot breztežno nihalo, ki je dve tretjini toge enakomerne palice.

To je ozadje in lahko začnemo pripravljati naš poskus.

2. korak: Pripravite dele za gradnjo strojne opreme

Pripravite dele za gradnjo strojne opreme
Pripravite dele za gradnjo strojne opreme
Pripravite dele za gradnjo strojne opreme
Pripravite dele za gradnjo strojne opreme
Pripravite dele za gradnjo strojne opreme
Pripravite dele za gradnjo strojne opreme

Za izdelavo nihalne strukture 3D -del natisnemo nekatere dele in recikliramo nekaj, kar že imamo. Celotna struktura nihala je prikazana na sliki 1. To je mešanica delov 3D tiskanja skupaj z nekaj ročno izdelanimi deli in dolgim kosom lesene palice iz Lowejeve.

3D -tiskani del na sliki 2 visi na zgornjem robu vrat, ker so naša vrata enostavna ravna površina, na katero lahko nekaj obesimo. Povezava za prenos datoteke STL:

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

Zeleni del na sliki 3 povezuje lesno palico z rezilom, rezilo pa leži na vrhu dveh kosov tirnice, nameščenih na prejšnjem 3D tiskanem obešalniku za vrata. Povezava za prenos datoteke STL:

Dva kosa tirnice sta narejena z lomljenjem starega žaginega lista na polovico, glej sliko 4. Del na sliki 2 je zanje pripravil pravo velikost reže. V idealnem primeru lahko v teh dveh žaginih listih z datoteko naredimo zarezo v obliki črke "V". Razmeroma ostra kovina, kot je britvica z enim robom ali kateri koli ročno izdelan kovinski kos, lahko sedi v zarezah v obliki črke "V". Razlog, da potrebujemo manjše stično območje, je zmanjšanje izgubljene kinetične energije med nihanjem.

Zadnji 3D natisnjeni del na sliki 5 je majhen pladenj za elektronsko merilno napravo.

Povezava za prenos:

Merilni aparat bluetooth ustvarja oceno kota, merjenje žiroskopa in merjenje pospeška. Vsi ti podatki so nam na voljo prek brezžične povezave bluetooth.

Izvedli bomo več poskusov z namestitvijo te naprave na različne položaje nihala in videli razlike.

3. korak: Zbiranje podatkov o poskusih

Zbiranje podatkov o poskusih
Zbiranje podatkov o poskusih
Zbiranje podatkov o poskusih
Zbiranje podatkov o poskusih
Zbiranje podatkov o poskusih
Zbiranje podatkov o poskusih

Za analizo pridobljenega nabora podatkov obstajata dve izvedljivi metodi zbiranja eksperimentalnih podatkov:

1) Z aplikacijo za telefon Android, ki je navedena v razdelku z zahtevami, zabeležite vse meritve, ki jih opravi naprava, v podatkovno datoteko, shranjeno na kartici SD v telefonu. Datoteko lahko kopiramo in podatke obdelamo.

2) Z računalnikom, ki podpira Bluetooth, računalnikom, prenosnikom ali mini računalnikom RaspberryPi vzpostavite povezavo Bluetooth z aparatom in preberite podatke za analizo v realnem času ali brez povezave.

Za vsako metodo obstajajo prednosti in slabosti, poskusili bomo oboje in povedati razliko v tem navodilu.

Za metodo (1) z aplikacijo android, ko smo v nadzornem vmesniku aplikacije Android, bodo telemetrični podatki, poslani iz merilne naprave bluetooth v telefon android, zabeleženi v datoteko podatkovnega dnevnika z imenom m2flightDatayyyymmdd_hhmmss.txt. Najdete ga v mapi Download/m2LogFiles vašega telefona Android. Mapa »Prenesi« je že obstoječa mapa v sistemu Android vašega telefona, »m2LogFiles« pa mapa, ki jo je ustvarila aplikacija. Vsebina imena datoteke yyyymmdd_hhmmss je način za kodiranje začetnega časa poskusa (leto, mesec, dan, ura, minuta in sekunda) v ime datoteke.

Vsaka vrstica v dnevniški datoteki je en zapis. Začne se s časovnim žigom dogodka, nizom preambule "eam:", ki mu sledijo 4 tripletni podatki, ki so:

Odčitavanje osi merilnika pospeška XYZ v vrednostih ponovnega branja registra strojne opreme senzorja

Branje osi osi XYZ žiroskopa v vrednostih ponovnega branja registra strojne opreme senzorja

Branje osi magnetometra XYZ v vrednostih odčitavanja registra strojne opreme senzorja

na krovu ocenjeni zvitek/višina/surovina v stopinjah

Podatkovna datoteka, ustvarjena z računalniškim programom python, bo uporabljala identično obliko podatkovne datoteke, tako da program, ki ga uporabljamo v koraku analize podatkov, ne bo motil vira podatkov, ki ga proizvaja naš program python ali aplikacija za android.

Začnimo s kodiranjem po metodi (2).

Za interakcijo z merilno napravo bluetooth sta na voljo dve različici SDK:

1) Python SDK, ki ga je mogoče namestiti s "pip3 install m2controller", jezik, ki se uporablja, je python3. Primeri kode uporabniške aplikacije so shranjeni na https://github.com/xiapeiqing/m2robots/tree/maste… Za ta poskus bomo uporabili skript python pendulum1.py

2) Java SDK, ki se v tem navodilu ne uporablja, ker želimo poznejšo vizualizacijo in analizo pridobljenih podatkov o nihalu, kar bi lahko za programiranje v Javi vzelo malo več napora.

Izvorna koda programa za zbiranje podatkov python3 vsebuje veliko komentarjev glede podrobnosti o funkcionalnosti kode. Posnetek izvorne kode je na voljo tukaj.

#!/usr/bin/env python#-*-kodiranje: UTF-8-*-iz m2kontrolerja uvoz m2kontrolerja iz m2krmilnika uvoz m2Const uvoznega signala čas uvoza uvoz datum-čas uvoz usrCfg uvoz nihalo2

requestExit = Neresnično

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

#želimo uporabiti isto konvencijo poimenovanja datotek dnevnika, tako da je modul za analizo podatkov, pendulum2.py, lahko nepredvidljiv glede tega, kako dobimo datoteko podatkov dnevnika ################# ############################################## logfilename = " m2flightData%s.txt "%(datetime.datetime.fromtimestamp (time.time ()). strftime ('%Y%m%d_%H%M%S')) dataLogfile = odprto (ime datoteke dnevnika," w ")

def signal_handler (sig, okvir):

global requestExit print ('uporabniški Ctrl-C za izhod iz izvajanja programa') requestExit = True signal.signal (signal. SIGINT, signal_handler)

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

#ko bodo vsi merilni podatki na voljo pri hitrosti 20Hz, bo ta funkcija "povratnega klica" priklicana ############################# ################################## def callbackfunc (telemetrija): 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, telemetrija ['m_fAccelHwUnit'] [0], telemetrija ['m_fAccelHwUnit'] [1], telemetrija ['m_fAccelHwUnit'] [2], telemetrija ['m_fGyroHwUnit'] [0], telemetrija ['m_fGyroHwUnit'] [1], telemetrija ['m_fGyroHwUnit'] [2], telemetrija ['m_fMagHwUnit'] [0], telemetrija ['m_fMagHwUnit'] [0], telemetrija 'm_fMagHwUnit'] [1], telemetrija ['m_fMagHwUnit'] [2], telemetrija ['m_fRPYdeg'] [0], telemetrija ['m_fRPYdeg'] [1], telemetrija ['m_fRPYdeg'] [2]) ## ################################################# #############natisnemo podatkovni niz na zaslon in jih shranimo v datoteko dnevnika #################### ########################################## print (dataStr) dataLogfile.writelines (dataStr)

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

#inicializirajte krmilnik, ne pozabite nastaviti polja BleMACaddress kot naslov MAC vaše naprave ############################### ################################ TODO: inicializiramo naslov BleMACaddress, če ga uporabnik ne nastavi. controller = m2controller. BleCtrller (m2Const.etDebian, callbackfunc, usrCfg. BleMACaddress) controller.connect () medtem ko je True: ######################## ########################################počakajte, da se merilni podatki ustvarijo in pošljejo iz meritve nihala aparat ################################################ ############### controller.m_CommsTunnel.waitForNotifications (1.0), če requestExit: ##################### ##########################################gospodinjstvo dela tukaj, ko končamo beleženje podatkov ################################################# ############## controller.stop () dataLogfile.close () prelom

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

#zbiranje podatkov je končano, zdaj analiziramo podatke dnevnika ##################################### ######################### nihalo2.parseDataLogFile (ime datoteke dnevnika)

Za dolgoročno posodobitev preverite

Zdaj pa razložimo njegovo delovanje. Ta program python je napisan na vrhu paketa za namestitev pip, imenovanega m2controller. Paket nižje ravni ponuja mehanizem povratnega klica, tako da bo vsaka prejeta posodobitev merjenja sprožila funkcijo povratnega klica, ki smo jo zapisali, in podatke shranila v lokalno datoteko dnevnika. Oblika podatkovne datoteke datoteke dnevnika je enaka tisti, ki jo proizvaja spremljevalna aplikacija android, tako da je datoteko dnevnika podatkov, ki jo ustvari program python ali spremljevalna aplikacija andriod, mogoče zamenjati.

Uporabniški signal ctrl-C, ki ga zajame operacijski sistem, se posreduje programu in ustavi neskončno zanko, ki čaka na nov prihod merilnih podatkov.

Doslej je bila datoteka dnevnika uspešno ustvarjena in ta program bo poklical program za analizo, da bi preučil rezultate našega poskusa.

Tu sta dva poskusa, primerjava pa kaže zelo opazno razliko s pritrditvijo 7 -gramske naprave na različnih lokacijah.

Na sliki 2 uporabljamo tehtnico za določitev dejanske teže te merilne naprave bluetooth.

Na sliki 3 je prikazana nastavitev nihala, kjer je 7 -gramska naprava pritrjena na spodnji konec nihala. Nastavitvena konfiguracija na sliki 4 ima 7 -gramsko maso, ki se nahaja veliko bližje nihajnemu zavrtju.

Slika 5 je pogled od blizu na strukturo nihala.

4. korak: Analiza podatkov

Analiza podatkov
Analiza podatkov
Analiza podatkov
Analiza podatkov
Analiza podatkov
Analiza podatkov

Merilni aparat bluetooth tehta ~ 7 gramov, kar tehta veliko manj kot lesena palica dolga ~ 1,6 metra. Uporabite predpostavko "toge enotne palice" in imamo to enačbo obdobja nihala, T1 = 2*pi*(2l/3g)^0,5

Da bi dobili gravitacijsko konstanto, lahko uporabimo 9,8 m/s^2. Toda natančnejšo gravitacijsko konstanto na kateri koli geolokaciji lahko pridobite iz te spletne storitve:

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

Za san francisco je 9,81278m/s^2

Dolžina nihala je merjena na 64,5"

2*pi*sqrt (2*64,5*0,0254/(3*9,81278)) daje pričakovano nihajno obdobje 2,0962 (sek).

Poglejmo, ali se strinja z našimi poskusi.

V prvem poskusu ima nastavitev nihala 7 -gramsko napravo, pritrjeno na spodnji konec nihala. Moj dnevnik lahko prenesete v:

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

Preimenujte ga v "PendulumTestData.txt" in ga vstavite v isto mapo programa za analizo python. Posnetek izvorne kode je na voljo tukaj.

#!/usr/bin/env python#-*-kodiranje: UTF-8-*-uvoz csv uvoz matplotlib.pyplot kot plt plt.style.use ('seaborn-whitegrid') uvoz numpy kot np od datuma in datuma uvoza datetime, timedelta uvoz seaborn kot sns iz sklearn.cluster uvoz KMeans iz zbirk uvoz Counter ################################# ##############################ta funkcija izvaja analizo podatkovnih datotek ############ ################################################# ## def parseDataLogFile (ime podatkovne datoteke): ####################################### ########################izvlecite podatke v datoteko dnevnika podatkov, ločenih z vejicami (CSV), in vsebino v vsakem stolpcu shranite v eno spremenljivko tipa float ## ################################################# ############ z odprto (ime datoteke podatkov) kot csvfile: readCSV = csv.reader (csvfile, razmejevalnik = ',') časovni žigS = fAccelHwUnit_x = fAccelHwUnit_y = fAccelHwUnit_z = fAccelHwUnit_z fGyroHwUnit_x = fGyroHwUnit_y = fGyroHwUnit_z = fMagHwUnit_x = fMagHwUnit_y = fMagHwUni t_z = fRPYdeg_r = fRPYdeg_p = fRPYdeg_y = za vrstico v readCSV: poskusite: x = datetime.strptime (vrstica [0].split (',') [0], '%H:%M:%S.%f ') časovni žig S. [1] [4:])) fAccelHwUnit_y.append (float (vrstica [2])) fAccelHwUnit_z.append (float (vrstica [3])) fGyroHwUnit_x.append (float (vrstica [4])) fGyroHwUnit_y.append (vrstica [5])) fGyroHwUnit_z.append (plavajoča (vrstica [6])) fMagHwUnit_x.append (float (vrstica [7])) fMagHwUnit_y.append (float (vrstica [8])) fMagHwUnit_z.append (float (vrstica [8])) [9])) fRPYdeg_r.append (float (vrstica [10])) fRPYdeg_p.append (float (vrstica [11])) fRPYdeg_y.append (float (vrstica [12])) razen: pass timestampS = np.asarray (timestamps) timestamps = timestamps - timestamps [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)

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

#potrebujemo natančno oceno vzorčevalne frekvence za natančno oceno obdobja nihanja ################################### ############################ FsHz = getSamplingIntervalS (časovni žigS) ############### ################################################ # uporaba komponenta smole v izhodu referenčnega sistema naslova položaja za analizo obdobja nihala ################################### ########################### analysis_timeSequence (časovni žigS, fRPYdeg_p, FsHz, 'pitch') ########### ################################################# ####uporabite surovo merilno vrednost pospeševalnika za analizo obdobja nihala #################################### ########################### analysis_timeSequence (časovni žigS, fAccelHwUnit_x, FsHz, 'accel') ########### ################################################# ####za analizo obdobja nihala uporabite žiro surov merilni izhod ################################### ########################### analysis_timeSequence (časovni žigS, fGyroHwUnit_y, FsHz, ' gyro ') print (' končano, čestitke:-) ') plt.show () ############################# ##################################v komunikacijskem procesu bluetooth je redka možnost, da bi paket podatkovnih komunikacij lahko biti izgubljen#uporabljamo K-mean za izolacijo merilnih podatkov 20Hz od odstopanj, ki so posledica padca paketa#potop v "signal in sistem za več podrobnosti" ################# ############################################### def getSamplingIntervalS (timestampS): plt.figure () sampleIntervalS = np.diff (timestampSS) sns.distplot (sampleIntervalS) plt.ylabel ('histogram') plt.xlabel ('merilni interval (-i)') clusterCnt = 5 km = KMeans (n_clusters = clusterCnt) km.fit (sampleIntervalS.reshape (-1, 1)) centroidi = km.cluster_centers_ elemCnt = Števec (km.labels_) pojavCnt = za ii v razponu (clusterCnt): pojavljanjeCnt.append (elemCnt [ii]) FsHz = 1/centroidi [pojavCnt.index (max (pojavnostCnt))] vrnitev FsHz

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

#uporabite spektrometer, tj. kratkoročni FFT, da dobite frekvenčno komponento, najvišja posoda je naša najboljša ocena nihajnega nihanja ######################### ####################################### def define_timeSequence (časovni žigS, timeSeqData, FsHz, strComment): fig, (ax1, ax2) = plt.subplots (nrows = 2) ax1.plot (timestampS, timeSeqData, marker = 'o', markerfacecolor = 'blue', markersize = 2, color = 'skyblue', linewidth = 1) ax1.set_title ("merjenje časovnega področja nihala - %s" %strComment) ax1.set_xlabel ("čas vzorčenja (drugo)") ax1.set_ylabel (strComment); NFFT = 2048 # dolžina okenskih segmentov

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

ax2.set_title ("Spektrogram") ax2.set_xlabel ("vzorci") ax2.set_ylabel ("frekvenca (Hz)");

# Metoda `specgram` vrne 4 predmete. So:

# - Pxx: periodogram # - freqs: frekvenčni vektor # - bins: središča časovnih kosov # - im: primerek matplotlib.image. AxesImage, ki predstavlja podatke na ploskvi pkresult = np.where (Pxx == np.amax (Pxx)) oscFreqHz = freqs [pkresult [0] [0] print ('Frekvenca nihanja nihala (Hz) =%f, obdobje (Sec) =%f, vir podatkov ocene:%s'%(oscFreqHz, 1/oscFreqHz, strComment)) vrne 1/oscFreqHz

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

#če bi morali ta program zagnati neodvisno, torej če ga ne kliče pendulum1.py,#določimo privzeto ime datoteke podatkov dnevnika, ki jo je treba analizirati ################### ###########################################, če je _name_ == "_main_ ": defaultFilename = './PendulumTestData.txt' import os.path if os.path.isfile (defaultFilename): parseDataLogFile (defaultFilename) else: print (" privzeta datoteka dnevnika %s ne obstaja " %defaultFilename)

Za dolgoročno posodobitev preverite

Izvorna koda vsebuje podrobne komentarje, podajmo visok povzetek matematične ocene tukaj.

1) Vsebino datoteke CSV najprej preberemo v računalnik s pomočjo paketa python, imenovanega "csv". Imamo periodične meritve.

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) Ker je merilna hitrost tako kritična in neposredno uvaja napako ocene obdobja nihala, jih želimo oceniti. Naš nazivni interval merjenja je 50 ms, to je 20Hz. Povprečje vseh meritev se zdi v redu, vendar občasno izgubimo paket za prenos podatkov, interval posodobitve postane 100 ms ali 150 ms, …

Če začrtamo pojav teh podatkov, glej sliko 1, lahko kot človek zlahka dosežemo vrednost 0,05 sekunde. Vendar, ali lahko naredimo bolje od tega?

Uporabiti moramo klasifikacijsko metodo le za izbiro dobrih za izračun povprečja. Python ima nabor orodij z imenom KMeans, ki nam pomaga pri razvrščanju v skupine ali razvrstitvi. Ti koncepti se uporabljajo na številnih področjih velikih podatkov in AI.

3) Slika 2 vsebuje dve sliki. Zgornja ploskev je časovno zaporedje našega merjenja kota nihanja v stopinjah. S sklicevanjem na časovni žig osi x v drugem lahko beremo približno 22,5 ciklov v 50 sekundah, kar pomeni 2,22 sekunde nihala. Ali obstaja način za avtomatizacijo tega procesa in natančnejšo oceno? Da, lahko uporabimo matematično orodje, imenovano spektrogram, ki uporablja majhen kos merilnih podatkov in nam pove njegovo frekvenco, glej spodnjo sliko. Odčitavanje osi y za najtemnejšo črto je frekvenca nihanja nihala. Biti vodoravna črta potrjuje, da se nihanje nihala med poskusom sploh ni spremenilo. Obratna vrednost frekvence nihanja je obdobje nihanja nihala.

Končno poročilo programa je povzetek besedila:

nihajno nihanje Freq (Hz) = 0,449224, obdobje (Sec) = 2,226059, vir podatkov za oceno: smola

Lahko ugotovimo, da je naš prejšnji rezultat izračuna roke, 2,22 sekunde, dokaj skladen z izračunano vrednostjo programa.

V primerjavi s 2.0962 (sec) teoretično izračunano vrednostjo imamo še ~ 5% preostale napake. Kako se jih znebiti? Se spomnite predpostavke "toge enotne palice"? Tudi 7 gramov dodatne teže se zdi nepomembno, to je največji vzrok preostale napake.

Zdaj premaknemo napravo blizu vrtišča. Za bližnjo fotografijo si oglejte prejšnji korak. Datoteko dnevnika, ki sem jo ustvaril, lahko prenesete tukaj:

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

Izvedite iste korake analize in dobimo obdobje 2.089867 (Sec), glej sliko 3, ki je skoraj identično teoretični napovedi. Super!

Ker ne merimo samo nihajnega kota, ampak tudi žiroskopsko merjenje in merjenje pospeška z enako hitrostjo. Če naredimo isto analizo za drugi dve meritvi, dobimo rezultate na slikah 4 in 5. Ocene iz vseh treh merilnih virov se strinjajo, zaradi česar smo bolj prepričani v uspeh našega poskusa.

Tu je rezultat kot končni rezultat izvajanega programa python:

nihajno nihanje Freq (Hz) = 0,478499, obdobje (Sec) = 2,089867, vir podatkov za oceno: smola

nihajno nihanje Freq (Hz) = 0,478499, obdobje (Sec) = 2,089867, vir podatkov za oceno: pospešek

nihajno nihanje Freq (Hz) = 0,478499, obdobje (Sec) = 2,089867, vir podatkov za oceno: žiroskop

Zadnja misel v tem koraku, kako so lahko rezultati ocene popolnoma enaki z uporabo drugega vhodnega vira podatkov? To je nasprotna intuicija. To vprašanje bom prepustil bralcem. Tukaj je namig: se spomnite, da uporabljamo kratkotrajni FFT za oceno frekvence nihanja? V digitalni domeni je ocena frekvence podana v ločenih frekvenčnih poljah namesto ocene s plavajočim številom.

5. korak: Priporočila za prihodnje delo

Obstaja nekaj kategorij prihodnjih priporočil za delo.

V prejšnjem koraku nam je uspelo zmanjšati napako v poskusu s ~ 5% na manj kot 1%, ali lahko naredimo bolje od tega? Ko opazimo, da se velikost nihanja eksponentno zmanjšuje, je lahko eden od dejavnikov zračni upor, ki nastane pri nihanju nihala. Prerez nihala bo morda treba spremeniti tako, da bo poenostavljene oblike, da se zmanjša aerodinamični upor.

Ali lahko uporabimo časovno spremenljiv dobiček, naučen s tehnikami prilagodljivega filtra, za oddajanje konstantnega signala največje velikosti. Medtem povezujejo jakost oslabitve z zunanjimi silami.

Težko najdemo kaj preprostejšega kot "preprosto harmonično gibanje". Ali lahko z objekti, ki jih analiziramo nihalo, analiziramo kaj bolj zapletenega, športno aktivnost, zaporedje izstrelitve vodne rakete itd.?

Veselo hekiranje

Priporočena: