Sadržaj:

Eksperimentalna studija jednostavnog harmonijskog kretanja: 5 koraka
Eksperimentalna studija jednostavnog harmonijskog kretanja: 5 koraka

Video: Eksperimentalna studija jednostavnog harmonijskog kretanja: 5 koraka

Video: Eksperimentalna studija jednostavnog harmonijskog kretanja: 5 koraka
Video: Аллан Савори: Как озеленить пустыню и повернуть вспять изменение климата 2024, Juli
Anonim

Autor arrowlikeFollow Više od autora:

Walking Strandbeest, Java/Python i aplikacija kontrolirana
Walking Strandbeest, Java/Python i aplikacija kontrolirana
Walking Strandbeest, Java/Python i aplikacija kontrolirana
Walking Strandbeest, Java/Python i aplikacija kontrolirana

U učionici često koristimo štopericu za izvođenje pokusa s klatnom ili jednostavnog pokusa harmonijskog kretanja. Evo izazova, možemo li napraviti pravi grafikon njegovog kretanja i vidjeti koji je trenutni kutni položaj i brzina, to je mnogo više informacija i zabave.

Prvo pitanje, moramo odlučiti da je tijelo klatna bestežinski kabel ili kruta jednolična šipka. Čini se da je pristup kabelom lakši. Iz prakse izgradnje jednog imam sljedeća kompromisna razmatranja: Najlakši način da objesite sistem klatna može biti da ga objesite na gornju ivicu vrata. To daje vašem klatnu dužinu od 2 m bez ikakvih građevinskih radova. No, potrebno je da ljuljačka neće dodirnuti površinu vrata, što jednostavno uništava cijeli eksperiment. Dakle, ravnina kojom se njiše trebala bi biti točno paralelna s površinom vašeg zida/vrata. Neutežni kabel ima tendenciju da bude tanak, može se lako okretati i komplicirati mjerenje kuta zamaha. Želimo koristiti jedno mjerenje za predstavljanje stanja zamaha. Tanka vrpca, kao što je ribica, može biti elastična i rastezljiva, što utječe na jednu od naših najvažnijih konstanti koje mjerimo i koristimo u jednadžbi, a to je dužina njihala. Na neke može utjecati i temperatura. Težina koja visi na kraju užeta mora biti dovoljno velika da težina užeta postane zanemariva. Komentirajte ako se slažete ili ne slažete s njima ili imate druge ideje za kompromis u dizajnu. Da bismo proučili ovaj problem, potreban nam je uređaj koji je toliko lagan da se njegova težina može zanemariti, a sistem klatna i dalje tretiramo kao čvrstu jednoličnu šipku. Koristim COTS nosivi elektronički kontroler koji nam putem bluetooth veze dostavlja informacije o žiroskopu, akcelerometeru i kutu. Ova mjerenja će se pohraniti u datoteku podataka aplikacije mobilnog telefona. Nakon toga ćemo analizirati podatke za naš jednostavan eksperiment harmonijskog kretanja. Numerička analiza fokusira se na sljedeće teme: 1) Predvidi period osciliranja klatna 2) Programirano prikupi podatke eksperimenta jednostavnog harmonijskog kretanja klatna 3) Koristi kmean za grupiranje podataka i uklanjanje izvanrednih vrijednosti u procesu analize 4) Koristi kratkotrajni FFT za procjenu frekvencija oscilovanja klatna

Supplies

Bluetooth mjerni uređaj

Aplikacija za Android telefon: Idite na Google playstore, pretražite M2ROBOTS i instalirajte kontrolnu aplikaciju. U slučaju da je teško pristupiti Google playstore -u, posjetite moju ličnu početnu stranicu za alternativni način preuzimanja aplikacije

drvena šipka

nekoliko 3D štampanih delova

listove pile ili sličan metalni materijal

Korak 1: Šta su klatna? Kako ga modelirati?

Postoje mnogi članci i knjige koji uvode izvođenje jednadžbe klatna, uključujući i vašu knjigu fizike nastavnog programa. Možda bi bilo bolje da se ovakvi sadržaji ovdje više ne ponavljaju. Ovdje je naveden samo konačni zaključak koji se odnosi na temu "jednostavno harmoničko gibanje". Da bismo znali period klatna, sve što trebamo znati je dužina klatna, označena kao "l", u metrima.

Ako smo razumno sigurni da se težina nalazi gotovo potpuno na kraju bestežinskog kabela koji visi u zavoju, a klatno se njiše pod malim kutovima θ, recimo manje od 15 °, period T1 takvog njihala daje se prema:

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

g = ubrzanje gravitacije, približno 9,8 m/s^2

Ako se bestežinski kabel zamijeni krutom jednoličnom šipkom, opet duljine l, njegov jednostavan period harmonijskog kretanja T2 dat je s T1 = 2*pi*(2l/3g)^0,5

U stvari, ima isti period kao i bestežinsko njihalo sa užetom koje čini dvije trećine krute ujednačene dužine štapa.

Ovo je pozadina i možemo početi s pripremom našeg eksperimenta.

Korak 2: Pripremite dijelove za izgradnju hardvera

Pripremite dijelove za izgradnju hardvera
Pripremite dijelove za izgradnju hardvera
Pripremite dijelove za izgradnju hardvera
Pripremite dijelove za izgradnju hardvera
Pripremite dijelove za izgradnju hardvera
Pripremite dijelove za izgradnju hardvera

Za izgradnju strukture klatna 3D dijelove ispisujemo i recikliramo nešto što već imamo. Ukupna struktura klatna prikazana je na slici 1. To je mješavina dijelova za 3D ispis zajedno s nekim ručno izrađenim dijelovima i dugim komadom drvene šipke iz Lowea.

3D štampani dio na slici 2 visi na gornjoj ivici vrata, jer su naša vrata laka ravna površina na koju možemo objesiti nešto. Veza za preuzimanje STL datoteke:

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

Zeleni dio na slici 3 povezuje drvenu šipku s oštricom, a oštrica sjedi na vrhu dva komada šine montirane na raniju 3D štampanu vješalicu za vrata. Link za preuzimanje STL datoteke:

Dva komada šine nastaju lomljenjem starog lista testere na pola, pogledajte sliku 4. Dio na slici 2 je pripremio odgovarajuću veličinu proreza za njih. Idealno bi bilo da napravimo zarez u obliku slova V u ta dva lista pile pomoću turpije. Relativno oštri metal, poput oštrice britvice s jednim rubom ili bilo kojeg ručno izrađenog metalnog komada, može sjediti unutar zareza u obliku slova "V". Razlog zašto nam je potrebna manja kontaktna površina je smanjenje kinetičke energije izgubljene pri zamahu.

Poslednji 3D štampani deo na slici 5 je mala ladica za držanje elektronskog mernog aparata.

Link za preuzimanje:

Bluetooth mjerni uređaj generira procjenu kuta, mjerenje žiroskopa i mjerenje akcelerometra. Svi ti podaci dostupni su nam putem bluetooth bežične veze.

Izvest ćemo više eksperimenata postavljanjem ovog aparata na različit položaj kraka klatna i vidjeti razlike.

Korak 3: Prikupljanje podataka o eksperimentu

Prikupljanje podataka o eksperimentima
Prikupljanje podataka o eksperimentima
Prikupljanje podataka o eksperimentima
Prikupljanje podataka o eksperimentima
Prikupljanje podataka o eksperimentima
Prikupljanje podataka o eksperimentima

Postoje dvije izvedive metode za prikupljanje eksperimentalnih podataka prije nego što analiziramo prikupljeni skup podataka:

1) Koristite aplikaciju za Android telefon navedenu u odjeljku sa zahtjevima za bilježenje svih mjerenja koja uređaj proizvodi u datoteku podataka pohranjenu na SD kartici vašeg telefona. Možemo kopirati datoteku i naknadno obraditi informacije.

2) Koristite kompjuter sa omogućenim bluetoothom, računar, laptop ili mini-računar RaspberryPi da biste uspostavili bluetooth vezu sa aparatom i čitali podatke za analizu u realnom vremenu ili van mreže.

Za svaku metodu postoje i prednosti i nedostaci, isprobat ćemo oboje i reći razliku u ovoj uputi.

Za metodu (1) koja koristi Android aplikaciju, nakon što smo u upravljačkom sučelju Android aplikacije, telemetrijski podaci poslani sa Bluetooth mjernog uređaja na Android telefon bit će snimljeni u datoteku datalog imena m2flightDatayyyymmdd_hhmmss.txt. Može se pronaći u mapi Download/m2LogFiles vašeg Android telefona. Mapa "Preuzmi" već je postojeća mapa u Android OS-u vašeg telefona, a "m2LogFiles" je mapa koju je aplikacija stvorila. Sadržaj naziva datoteke yyyymmdd_hhmmss način je kodiranja vremena početka eksperimenta (godina, mjesec, dan, sat, minuta i sek) u naziv datoteke.

Svaki red u datoteci dnevnika je jedan zapis. Počinje vremenskom oznakom događaja, nizom preambule "eam:", nakon čega slijede 4 tripleta podataka, a to su:

Očitavanje osi XYZ akcelerometra u vrijednostima povratnog čitanja registra hardverskog registra senzora

Očitavanje osi XYZ žiroskopa u vrijednostima povratnog čitanja registra hardverskog registra senzora

Očitavanje osi magnetometra XYZ u neobrađenim vrijednostima hardverskog registra senzorskog registra

procijenjeni stupanj Roll/Pitch/Raw na brodu

Datoteka podataka stvorena pomoću računarskog programa python koristit će identičan format datoteke podataka, tako da program koji koristimo u koraku analize podataka neće imati problema s izvorom podataka koji proizvodi naš program python ili android aplikacija.

Počnimo kodirati metodom (2).

Za interakciju s Bluetooth mjernim aparatom, postoje dvije varijante SDK -a:

1) Python SDK, koji se može instalirati pomoću "pip3 install m2controller", jezik koji se koristi je python3. Primjeri koda korisničke aplikacije pohranjeni su na https://github.com/xiapeiqing/m2robots/tree/maste… Za ovaj eksperiment koristit ćemo python skriptu pendulum1.py

2) Java SDK, koji se ne koristi u ovom uputstvu jer želimo kasniju vizualizaciju i analizu prikupljenih podataka o klatnu, što bi moglo oduzeti malo više napora za programiranje u Javi.

Izvorni kod programa za prikupljanje podataka python3 sadrži mnogo komentara o detaljima funkcionalnosti koda. Ovdje se nalazi snimak izvornog koda.

#!/usr/bin/env python#-*-kodiranje: UTF-8-*-iz m2kontrolera uvoza m2kontrolera iz m2kontrolera uvoza m2Const signala uvoza datuma uvoza uvoza datuma uvoza uvoza usrCfg uvoza njihalom2

requestExit = Netačno

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

#želimo koristiti istu konvenciju imenovanja datoteka dnevnika tako da modul za analizu podataka, pendulum2.py, može biti agnostičan u načinu na koji ćemo dobiti datoteku podataka dnevnika ################## ############################################## logfilename = " m2flightData%s.txt "%(datetime.datetime.fromtimestamp (time.time ()). strftime ('%Y%m%d_%H%M%S')) dataLogfile = open (logfilename," w ")

def signal_handler (sig, okvir):

global requestExit print ('korisnički Ctrl-C za izlaz iz izvođenja programa') requestExit = Pravi signal.signal (signal. SIGINT, signal_handler)

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

#kad svaki mjerni podatak postane dostupan pri brzini od 20Hz, ova funkcija "povratnog poziva" će biti pozvana ############################# ################################## 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'] [0], telemetrija 'm_fMagHwUnit'] [1], telemetrija ['m_fMagHwUnit'] [2], telemetrija ['m_fRPYdeg'] [0], telemetrija ['m_fRPYdeg'] [1], telemetrija ['m_fRPYdeg'] [2]) ## ################################################# #############ispisujemo niz podataka na ekran i spremamo ih u datoteku dnevnika ##################### ########################################## print (dataStr) dataLogfile.writelines (dataStr)

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

#inicijalizirajte kontroler, ne zaboravite postaviti polje BleMACaddress kao MAC adresu vašeg uređaja ############################### #################################TODO: idemo na inicijalizaciju BleMACadrese ako je korisnik nije postavio. kontroler = m2controller. BleCtrller (m2Const.etDebian, callbackfunc, usrCfg. BleMACaddress) controller.connect () dok je True: ######################### #########################################sačekajte da se podaci o merenju stvore i pošalju sa merenja klatnom aparat ################################################ ############### controller.m_CommsTunnel.waitForNotifications (1.0) ako requestExit: ###################### ########################################### #### ########################### ####################### radi ################################################# ############## controller.stop () dataLogfile.close () break

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

#prikupljanje podataka je završeno, sada analiziramo podatke dnevnika ##################################### ########################## pendulum2.parseDataLogFile (logfilename)

Za dugoročno ažuriranje, molimo vas da odjavite

Sada objasnimo njegovu metodu rada. Ovaj python program napisan je na vrhu instalacijskog paketa pip, pod nazivom m2controller. Paket niže razine nudi mehanizam povratnog poziva, tako da će svako primljeno ažuriranje mjerenja pokrenuti funkciju povratnog poziva koju smo napisali i spremiti podatke u lokalnu datoteku dnevnika. Format sadržaja datoteke dnevnika identičan je onom koji proizvodi android prateća aplikacija, tako da se datoteka dnevnika podataka koju je stvorio ili program python ili prateća aplikacija andriod može razmjenjivati.

Korisnički signal ctrl-C, uhvaćen od operativnog sistema, prosljeđuje se programu i zaustavlja beskonačnu petlju čekajući novi dolazak mjernih podataka.

Do sada je zapisnik uspješno kreiran i ovaj će program pozvati program za analizu kako bi proučio rezultate našeg eksperimenta.

Evo dva eksperimenta, a usporedba pokazuje vrlo uočljivu razliku pričvršćivanjem uređaja od 7 grama na različite lokacije.

Na slici 2 koristimo vagu za određivanje stvarne težine ovog Bluetooth mjernog uređaja.

Slika 3 prikazuje postavku klatna gdje je uređaj od 7 grama pričvršćen na donji kraj klatna. Konfiguracija postavki na slici 4 ima masu od 7 grama koja se nalazi mnogo bliže okretnom zaokretu.

Sl.5 je prikaz strukture klatna izbliza.

Korak 4: Analiza podataka

Analiza podataka
Analiza podataka
Analiza podataka
Analiza podataka
Analiza podataka
Analiza podataka

Bluetooth mjerni uređaj teži ~ 7 grama, što je mnogo manje od drva dugačkog ~ 1,6 metara. Upotrijebite pretpostavku "krute jednolične šipke" i imamo ovu jednadžbu perioda klatna, T1 = 2*pi*(2l/3g)^0,5

Da bismo dobili konstantu gravitacije, možemo koristiti 9,8m/s^2. Ali preciznija konstanta gravitacije na bilo kojoj geolokaciji može se dohvatiti s ove web usluge:

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

Za san francisco to je 9.81278m/s^2

Dužina klatna izmjerena je na 64,5 ''

2*pi*sqrt (2*64,5*0,0254/(3*9,81278)) daje očekivani period klatna od 2,0962 (sek).

Pogledajmo slaže li se s našim eksperimentima.

U prvom eksperimentu, klatno ima uređaj od 7 grama pričvršćen na donji kraj klatna. Moj dnevnik se može preuzeti na:

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

Preimenujte ga u "PendulumTestData.txt" i stavite ga u istu fasciklu Python programa za analizu. Ovdje se nalazi snimak izvornog koda.

#!/usr/bin/env python#-*-kodiranje: UTF-8-*-uvoz csv uvoz matplotlib.pyplot kao plt plt.style.use ('seaborn-whitegrid') uvoz numpy kao np od datuma i datuma uvoza datum-vrijeme, timedelta import seaborn kao sns iz sklearn.cluster import KMeans iz zbirki import Counter ################################# ##############################ova funkcija pokreće analizu datoteke podataka ############ ################################################# ## def parseDataLogFile (ime datoteke): ######################################## ########################izdvojite podatke u datoteku dnevnika podataka odvojenih zarezima (CSV) i spremite sadržaj u svakoj koloni u jednu varijablu s float-tipom ## ################################################# ############ s otvorenim (ime datoteke datoteke) kao csv datoteka: readCSV = csv.reader (csvfile, razgraničenje = ',') vremenska oznakaS = fAccelHwUnit_x = fAccelHwUnit_y = fAccelHwUnit_z fGyroHwUnit_x = fGyroHwUnit_y = fGyroHwUnit_z = fMagHwUnit_x = fMagHwUnit_y = fMagHwUni t_z = fRPYdeg_r = fRPYdeg_p = fRPYdeg_y = za red u readCSV: pokušajte: x = datetime.strptime (red [0].split (',') [0], '%H:%M:%S.%f ') timestampS.append (timedelta (sati = x.sat, minute = x.minuta, sekunde = x.sekunda, mikrosekunde = x.microsecond).total_seconds ()) fAccelHwUnit_x.append (float (row [1] [4:])) fAccelHwUnit_y.append (float (red [2])) fAccelHwUnit_z.append (float (red [3])) fGyroHwUnit_x.append (float (red [4])) fGyroHwUnit_y.append (red [5])) fGyroHwUnit_z.append (float (red [6])) fMagHwUnit_x.append (float (red [7])) fMagHwUnit_y.append (float (red [8])) fMagHwUnit_z.append (float (red [9])) fRPYdeg_r.append (float (red [10])) fRPYdeg_p.append (float (row [11])) fRPYdeg_y.append (float (red [12])) osim: pass timestampSS = np.asarray (vremenske oznake) timestamps = timestamps - vremenske oznake [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)

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

#potrebna nam je točna procjena frekvencije uzorkovanja za preciznu procjenu perioda oscilacije ################################### ############################ FsHz = getSamplingIntervalS (timestampS) ################ ################################################ upotreba komponenta koraka u izlaznom referentnom sistemu zaglavlja položaja za analizu perioda klatna ################################### ########################### analysis_timeSequence (vremenske oznakeS, fRPYdeg_p, FsHz, 'pitch') ########### ################################################# ####koristite sirovi mjerni izlaz ubrzivača za analizu perioda klatna #################################### ########################### analysis_timeSequence (vremenske oznakeS, fAccelHwUnit_x, FsHz, 'accel') ########### ################################################# ####koristite žiro -sirovi mjerni izlaz za analizu perioda klatna #################################### ########################### analysis_timeSequence (vremenske oznakeS, fGyroHwUnit_y, FsHz, ' gyro ') print (' gotovo, čestitke:-) ') plt.show () ############################# ###################################u procesu bluetooth komunikacije, postoji rijetka šansa da paket podataka može biti izgubljen#koristimo K-mean za izolaciju podataka mjerenja od 20Hz od vanjskih vrijednosti, koje su uzrokovane ispuštenim paketom#zaronite u "signal i sistem za više detalja" ################# ############################################### def getSamplingIntervalS (timestampS): plt.figure () sampleIntervalS = np.diff (timestampSS) sns.distplot (sampleIntervalS) plt.ylabel ('histogram') plt.xlabel ('interval (i) mjerenja' ') clusterCnt = 5 km = KMeans (n_klasteri = klasterCnt) km.fit (sampleIntervalS.reshape (-1, 1)) centroidi = km.cluster_centers_ elemCnt = Brojač (km.labels_) pojavljivanjeCnt = za ii u rasponu (clusterCnt): pojavljivanjeCnt.append (elemCnt [ii]) FsHz = 1/centroidi [pojavljivanjeCnt.index (max (pojavljivanjeCnt))] povratak FsHz

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

#koristite spektrometar, tj. kratkotrajni FFT za dobijanje frekvencijske komponente, vršna bin je naša najbolja procjena oscilacija klatna ######################### ######################################## def analysis_timeSequence (timestampS, timeSeqData, FsHz, strComment): fig, (ax1, ax2) = plt.subplots (nrows = 2) ax1.plot (timestampSS, timeSeqData, marker = 'o', markerfacecolor = 'blue', markersize = 2, color = 'skyblue', linewidth = 1) ax1.set_title ("merenje vremenskog dometa klatna - %s" %strComment) ax1.set_xlabel ("vreme uzorkovanja (drugo)") ax1.set_ylabel (strComment); NFFT = 2048 # dužina prozorskih segmenata

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

ax2.set_title ("Spektrogram") ax2.set_xlabel ("uzorci") ax2.set_ylabel ("frekvencija (Hz)");

# Metoda `specgram` vraća 4 objekta. Oni su:

# - Pxx: periodogram # - freqs: frekvencijski vektor # - bins: centri vremenskih binova # - im: matplotlib.image. AxesImage instanca koja predstavlja podatke na grafikonu pkresult = np.where (Pxx == np.amax (Pxx)) oscFreqHz = frekvencija [pkresult [0] [0] ispis ('Frekvencija oscilacija klatna (Hz) =%f, period (Sec) =%f, izvor podataka procjene:%s'%(oscFreqHz, 1/oscFreqHz, strComment)) vraća 1/oscFreqHz

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

#trebamo li pokrenuti ovaj program neovisno, tj. ne pozivajući se pomoću pendulum1.py,#definiramo zadano ime datoteke s podacima dnevnika koje ćemo analizirati ################### ############################################ ako _name_ == "_main_ ": defaultFilename = './PendulumTestData.txt' import os.path if os.path.isfile (defaultFilename): parseDataLogFile (defaultFilename) else: print (" zadana datoteka dnevnika %s ne postoji " %defaultFilename)

Za dugoročno ažuriranje, molimo vas da odjavite

Izvorni kod sadrži detaljne komentare, dajmo ovdje sažetak matematičke procjene na visokom nivou.

1) Prvo smo pročitali sadržaj CSV datoteke na računaru, koristeći python paket pod nazivom "csv". Imamo periodična mjerenja.

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) Budući da je brzina mjerenja toliko kritična i direktno uvodi grešku u procjeni perioda klatna, želimo ih procijeniti. Naš nominalni interval mjerenja je 50 ms, odnosno 20Hz. Prosjek svih mjerenja čini se u redu, ali povremeno izgubimo paket prijenosa podataka, interval ažuriranja postaje 100 ms ili 150 ms,…

Ako iscrtamo pojavu ovih podataka, vidi sliku 1, kao čovjek, lako možemo imati očnu vrijednost od 0,05 sekundi. Međutim, možemo li bolje od toga?

Moramo koristiti metodu klasifikacije samo za odabir dobrih za izračunavanje prosjeka. Python ima skup alata pod nazivom KMeans koji nam pomažu pri grupisanju ili recimo klasifikaciji. Ovi koncepti se koriste u mnogim područjima velikih podataka i umjetne inteligencije.

3) Slika 2 sadrži dvije slike. Gornji grafikon je niz vremenskog domena našeg mjerenja kuta zamaha u stupnjevima. Pozivanjem na vremensku oznaku osi x u sekundi možemo pročitati približno 22,5 ciklusa u 50 sekundi, što znači 2,22 sekunde period klatna. Postoji li način za automatizaciju ovog procesa i precizniju procjenu? Da, možemo koristiti matematički alat nazvan spektrogram, koji koristi mali dio mjernih podataka i govori nam o njegovoj frekvenciji, pogledajte donju sliku. Očitavanje osi y za najtamniju liniju je frekvencija oscilovanja klatna. Biti vodoravna linija potvrđuje da se oscilacija klatna nije nimalo promijenila tokom eksperimenta. Inverzna vrijednost frekvencije oscilovanja je period oscilovanja klatna.

Završni izvještaj koji je napravio program predstavlja tekstualni sažetak:

oscilacija klatna Freq (Hz) = 0.449224, period (Sec) = 2.226059, izvor podataka procjene: korak

Možemo pronaći da je naš raniji rezultat izračunavanja ruke, 2,22 sekunde, prilično konzistentan s izračunatom vrijednošću programa.

U poređenju sa 2.0962 (sec) teoretski izračunatom vrijednošću, imamo ~ 5% preostale greške. Kako ih se riješiti? Sjećate se pretpostavke da je "čvrsta jednolična šipka"? Čak i dodatna težina od 7 grama djeluje trivijalno, to je najveći uzrok preostale greške.

Sada pomičemo uređaj blizu pivota. Pogledajte prethodni korak za fotografiju izbliza. Datoteku dnevnika koju sam stvorio možete preuzeti ovdje:

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

Pokrenite iste korake analize i dobićemo Period od 2.089867 (Sec), vidjeti sliku 3, koji je gotovo identičan teoretskom predviđanju. Odlično!

Budući da imamo ne samo mjerenje kuta zamaha, već i žiroskopsko mjerenje i mjerenje akcelerometra istom brzinom. Pokrenite istu analizu za druga dva mjerenja, dobivamo rezultate na slikama 4 i 5. Procjene iz sva tri mjerna izvora se slažu, što nas čini sigurnijima u uspjeh našeg eksperimenta.

Evo rezultata kao konačnog izlaza pokrenutog programa python:

oscilacija klatna Freq (Hz) = 0,478499, period (sek) = 2,089867, izvor podataka procjene: korak

oscilacija klatna Frekv. (Hz) = 0,478499, period (sek) = 2,089867, izvor podataka procjene: akcel

oscilacija klatna Frekv. (Hz) = 0,478499, period (sek) = 2,089867, izvor podataka procjene: žiroskop

Posljednja misao u ovom koraku, kako rezultati procjene mogu biti potpuno identični pomoću različitih izvora ulaznih podataka? Ovo je kontra-intuicija. Ovo pitanje ostavljam čitaocima. Evo natuknice: sjećate li se da koristimo kratkotrajni FFT za procjenu frekvencije oscilacija? U digitalnom domenu, procjena frekvencije je data u diskretnim spremištima frekvencija umjesto procjene s pomičnim brojem.

Korak 5: Preporuke za budući rad

Postoji nekoliko kategorija budućih preporuka za rad.

U prethodnom koraku, uspjeli smo smanjiti grešku eksperimenta sa ~ 5% na manje od 1%, možemo li bolje od toga? Uočavajući da se veličina oscilacije smanjuje eksponencijalno, jedan od doprinosećih faktora može biti i vazdušni otpor uzrokovan zamahom klatna. Poprečni presjek njihala možda će biti potrebno izmijeniti tako da bude oblikovanog oblika kako bi se smanjio aerodinamički otpor.

Možemo li primijeniti vremenski promjenjiv dobitak naučen pomoću tehnika adaptivnog filtra za izlaz konstantnog signala maksimalne veličine. U međuvremenu, korelirajte veličinu slabljenja s vanjskim silama.

Teško da možemo pronaći nešto jednostavnije od "jednostavnog harmonijskog kretanja". Možemo li koristiti objekte za analiziranje klatna za analizu nečeg složenijeg, sportske aktivnosti, slijeda lansiranja vodene rakete itd.?

Sretno hakiranje

Preporučuje se: