Sadržaj:

Eksperimentalno proučavanje jednostavnog harmonijskog gibanja: 5 koraka
Eksperimentalno proučavanje jednostavnog harmonijskog gibanja: 5 koraka

Video: Eksperimentalno proučavanje jednostavnog harmonijskog gibanja: 5 koraka

Video: Eksperimentalno proučavanje jednostavnog harmonijskog gibanja: 5 koraka
Video: Fizika 3. r. SŠ - Opisivanje harmonijskog titranja 2024, Srpanj
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 njihalom ili jednostavnog pokusa harmonijskog kretanja. Evo izazova, možemo li stvoriti pravi grafikon njegova kretanja i vidjeti koji je trenutačni kutni položaj i brzina, to je puno više informacija i zabave.

Prvo pitanje, moramo odlučiti da je tijelo njihala 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 sustav njihala mogao bi biti objesiti ga na gornji rub vrata. To daje vašem njihalu duljinu ~ 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. Beztežinski kabel teži da bude tanak, lako se može vrtjeti 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 duljina njihala. Na neke može utjecati i temperatura. Utežna masa koja visi na kraju užeta mora biti dovoljno teška 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. Za proučavanje ovog problema potreban nam je uređaj koji je toliko lagan da se njegova težina može zanemariti, a sustav njihala i dalje tretiramo kao krutu jednoliku šipku. Koristim nosivi elektronički kontroler COTS koji nam putem bluetooth veze dostavlja podatke o žiroskopu, mjeraču ubrzanja i kutu. Ta se mjerenja spremaju u podatkovnu datoteku aplikacije mobilnog telefona. Nakon toga ćemo analizirati podatke za naš jednostavan eksperiment harmonijskog kretanja. Numerička analiza usredotočuje se na sljedeće teme: 1) Predvidi razdoblje oscilacija njihala 2) Programirano prikupi podatke eksperimenta jednostavnog harmonijskog kretanja njihala 3) Koristi kmean za grupiranje podataka i uklanjanje izvanrednih vrijednosti u procesu analize 4) Koristi kratkotrajni FFT za procjenu frekvencija titranja njihala

Pribor

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 playstoreu, posjetite moju osobnu početnu stranicu za alternativni način preuzimanja aplikacije

drvena šipka

nekoliko 3D ispisanih dijelova

listove pile ili sličan metalni materijal

Korak 1: Što su njihalo? Kako ga modelirati?

Postoje mnogi članci i knjige koji uvode izvođenje jednadžbe njihala, uključujući vašu knjigu fizike kurikuluma. Možda bi bilo bolje da se takav sadržaj ovdje više ne ponavlja. Ovdje je naveden samo konačni zaključak o temi "jednostavno harmoničko gibanje". Da bismo znali razdoblje njihala, sve što trebamo znati je duljina njihala, označena kao "l", u metrima.

Ako smo razumno sigurni da se uteg nalazi gotovo potpuno na kraju bestežinskog kabela koji visi u zavoju, a njihalo se njiše pod malim kutovima θ, recimo manje od 15 °, razdoblje 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, njegovo jednostavno razdoblje harmonijskog kretanja T2 dano je s T1 = 2*pi*(2l/3g)^0,5

Učinkovito ima isto razdoblje kao bestežinsko njihalo s užetom koje čini dvije trećine krute jednolike duljine šipke.

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 njihala 3D ispisujemo neke dijelove i recikliramo nešto što već imamo. Ukupna struktura njihala 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 ispisani dio na slici 2 obješen je na gornji rub vrata, jer su naša vrata lagana 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 tračnice montirane na raniju 3D tiskanu vješalicu za vrata. Veza za preuzimanje STL datoteke:

Dva komada tračnice izrađena su lomljenjem starog lista pile na pola, vidi sliku 4. Dio na slici 2 pripremio je odgovarajuću veličinu utora za njih. U idealnom slučaju, pomoću te turpije možemo napraviti zarez u obliku slova V u ta dva lista pile. 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 potrebno manje područje kontakta je smanjenje kinetičke energije izgubljene pri zamahu.

Posljednji 3D ispisani dio na slici 5 mala je ladica za držanje elektroničkog mjernog 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čite položaje kraka njihala 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 stečeni skup podataka:

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

2) Upotrijebite računalo s omogućenim bluetoothom, računalo, prijenosno računalo ili mini računalo RaspberryPi za uspostavu bluetooth veze s uređajem i čitanje podataka za analizu u stvarnom vremenu ili izvan 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 s Bluetooth mjernog uređaja na Android telefon bit će snimljeni u datoteku podatkovnog zapisa pod nazivom m2flightDatayyyymmdd_hhmmss.txt. Može se pronaći u mapi Download/m2LogFiles vašeg Android telefona. Mapa "Preuzimanje" 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 redak u datoteci dnevnika je jedan zapis. Počinje vremenskom oznakom događaja, nizom preambule "eam:", nakon čega slijede 4 tripletna podatka, 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 hardverskog registra neobrađenog senzora

Očitavanje osi magnetometra XYZ u vrijednostima povratnog očitanja hardverskog registra neobrađenog senzora

procijenjeni stupanj Roll/Pitch/Raw na brodu

Datoteka podataka izrađena pomoću računalnog programa python koristit će identičan format datoteke podataka, tako da program koji koristimo u koraku analize podataka neće biti opterećen izvorom podataka koji proizvodi naš program python ili aplikacija za android.

Počnimo kodirati metodom (2).

Za interakciju s Bluetoothovim mjernim aparatom postoje dva okusa 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 njihala, što bi nam moglo uložiti malo više napora za programiranje u Javi.

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

#!/usr/bin/env python#-*-kodiranje: UTF-8-*-iz m2kontroler uvoz m2kontroler iz m2kontroler uvoz m2Const signal uvoza vrijeme uvoza datum i vrijeme uvoz usrCfg uvoz pendulum2

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" bit će 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'] [1], telemetrija ['m_fMagHwUnit'] [2], telemetrija ['m_fRPYdeg'] [0], telemetrija ['m_fRPYdeg'] [1], telemetrija ['m_fRPYdeg'] [2]) ## ################################################# #############ispisujemo niz podataka na zaslon 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: ######################### #########################################pričekajte podatke mjerenja stvorene i poslane s mjerenja njihalom aparat ################################################# ############### controller.m_CommsTunnel.waitForNotifications (1.0) ako requestExit: ###################### ########################################## ## #### ##### ## ## ## ### #########################################################################################################################################################################ovdje# ################################################# ############## controller.stop () dataLogfile.close () break

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

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

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

Sada ćemo objasniti njegovu metodu rada. Ovaj program python napisan je na vrhu instalacijskog paketa pip, nazvanog 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 onome što proizvodi androidna popratna aplikacija, tako da se datoteka zapisnika podataka koju je stvorio ili program python ili popratna aplikacija andriod može razmjenjivati.

Korisnički signal ctrl-C, snimljen od strane operacijskog sustava, prosljeđuje se programu i zaustavlja beskonačnu petlju koja čeka novi dolazak mjernih podataka.

Do sada je zapisnička datoteka uspješno stvorena 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čita mjesta.

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

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

Slika 5 prikazuje pogled na strukturu njihala 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 puno manje od drva dugačkog ~ 1,6 metra. Upotrijebite pretpostavku "krute jednolike šipke" i imamo ovu jednadžbu razdoblja njihala, T1 = 2*pi*(2l/3g)^0,5

Da bismo dobili konstantu gravitacije, možemo koristiti 9,8 m/s^2. No točnija 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

Mjeri se duljina njihala 64,5 ''

2*pi*sqrt (2*64,5*0,0254/(3*9,81278)) daje očekivano razdoblje njihanja od 2,0962 (sek).

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

U prvom pokusu uređaj s njihalom ima uređaj od 7 grama pričvršćen na donji kraj njihala. Moja datoteka dnevnika može se preuzeti na:

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

Preimenujte ga u "PendulumTestData.txt" i stavite ga u istu mapu programa za analizu pythona. 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 uvoza datum i vrijeme, timedelta import seaborn kao sns iz sklearn.cluster import KMeans from collections import Counter ################################# ###############################ova funkcija pokreće rad analize podatkovnih datoteka ############ ################################################# ## def parseDataLogFile (naziv datoteke datoteke): ######################################## ########################izdvojite podatke u datoteci zapisnika podataka odvojenih zarezima (CSV) i spremite sadržaj u svakom stupcu u jednu varijablu s float-tipom ## ################################################# ############ s otvorenim (naziv datoteke datoteke) kao csv datoteka: readCSV = csv.reader (csvfile, delimiter = ',') timestampS = 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 redak u readCSV: pokušajte: x = datetime.strptime (redak [0].split (',') [0], '%H:%M:%S.%f ') vremenska oznakaS.append (timedelta (sati = x.sat, minute = x.minuta, sekunde = x.sekunda, mikrosekunde = x.microsecond).total_seconds ()) fAccelHwUnit_x.append (float (red [1] [4:])) fAccelHwUnit_y.append (float (red [2])) fAccelHwUnit_z.append (float (red [3])) fGyroHwUnit_x.append (float (redak [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 (redak [10])) fRPYdeg_p.append (float (red [11])) fRPYdeg_y.append (float (red [12])) osim: pass timestampS = np.asarray (vremenske oznake) vremenske oznake = vremenske oznake - 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.znači (fRPYdeg_p) fRPYdeg_y = np.asarray (fRPYdeg_y)

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

#potrebna nam je točna procjena frekvencije uzorkovanja za preciznu procjenu razdoblja oscilacija ################################### ############################ FsHz = getSamplingIntervalS (vremenske oznakeS) ################ ################################################ # koristiti komponenta koraka u izlaznom referentnom sustavu naslova smjera za analizu razdoblja njihanja ################################### ########################### analysis_timeSequence (vremenske oznakeS, fRPYdeg_p, FsHz, 'pitch') ########### ################################################# ####upotrijebite sirovi mjerni izlaz s ubrzanjem za analizu razdoblja njihanja ################################### ########################### analysis_timeSequence (vremenske oznakeS, fAccelHwUnit_x, FsHz, 'accel') ########### ################################################# ####upotrijebite žirovo sirovi mjerni izlaz za analizu razdoblja njihanja ################################### ####################################sekvenca analyse_time (vremenske oznakeS, fGyroHwUnit_y, FsHz, ' giroskop ') print (' gotovo, čestitam:-) ') plt.show () ############################# ###################################u komunikacijskom procesu bluetooth -a, rijetka je mogućnost da bi podatkovni komunikacijski paket mogao biti izgubljen#koristimo K-mean za izolaciju mjernih podataka od 20Hz od vanjskih vrijednosti, koje su uzrokovane ispuštenim paketom#ronjenje u "signal i sustav 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 = clusterCnt) 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 dobivanje frekvencijske komponente, vršna kanta je naša najbolja procjena oscilacija njihala ######################### ######################################## def analysis_timeSequence (vremenske oznakeS, 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 ("mjerenje vremenske domene njihala - %s" %strComment) ax1.set_xlabel ("vrijeme uzorkovanja (drugo)") ax1.set_ylabel (strComment); NFFT = 2048 # duljina prozorskih segmenata

Pxx, frekvencije, spremnici, 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: središta vremenskih polja # - im: matplotlib.image. AxesImage instanca koja predstavlja podatke na grafikonu pkresult = np.where (Pxx == np.amax (Pxx)) oscFreqHz = frekv. [pkresult [0] [0] ispis ('Frekventno njihanje njihala (Hz) =%f, Razdoblje (Sec) =%f, izvor podataka procjene:%s'%(oscFreqHz, 1/oscFreqHz, strComment)) vraćanje 1/oscFreqHz

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

#trebamo li pokrenuti ovaj program neovisno, tj. ne pozivajući se pomoću pendulum1.py,#definiramo zadani naziv datoteke s zapisnikom za analizu ################### ############################################ ako je _name_ == "_glavni_ ": 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 visokoj razini.

1) Prvo smo pročitali sadržaj CSV datoteke u računalo, koristeći paket python 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 mjerna stopa toliko kritična i izravno unosi pogrešku procjene razdoblja njihanja, želimo ih procijeniti. Naš nominalni interval mjerenja je 50 ms, tj. 20Hz. Prosjek svih mjerenja čini se u redu, ali povremeno izgubimo paket prijenosa podataka, interval ažuriranja postaje 100 ms ili 150 ms,…

Ako zacrtamo 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 klasifikacijsku metodu samo za odabir dobrih za izračunavanje prosjeka. Python ima skup alata pod nazivom KMeans koji nam pomažu u grupiranju, ili recimo klasifikaciji. Ti se koncepti koriste u mnogim područjima velikih podataka i umjetne inteligencije.

3) Slika 2 sadrži dvije slike. Gornji grafikon je niz u vremenskom domenu 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 razdoblje njihanja. Postoji li način za automatiziranje 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 učestalosti, pogledajte donju sliku. Očitavanje osi y za najtamniju liniju je frekvencija titranja njihala. Biti vodoravna linija potvrđuje da se njihanje njihala uopće nije promijenilo tijekom eksperimenta. Obrnuta vrijednost frekvencije titranja razdoblje je njihanja njihala.

Završno izvješće programa sažetak je teksta:

oscilacija njihala Freq (Hz) = 0,449224, razdoblje (sek) = 2,226059, izvor podataka procjene: korak

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

U usporedbi s 2.0962 (sec) teoretski izračunatom vrijednošću, imamo preostalu pogrešku od ~ 5%. Kako ih se riješiti? Sjećate li se pretpostavke da je "čvrsta jednolična šipka"? Čak i dodatna težina od 7 grama čini se trivijalnom, to je najveći uzrok preostale pogreš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 dobivamo Period od 2.089867 (Sec), vidi sliku 3, koji je gotovo identičan teoretskom predviđanju. Sjajno!

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 slažu se, što nas čini sigurnijima u uspjeh našeg eksperimenta.

Evo rezultata kao konačnog rezultata pokrenutog programa python:

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

oscilacija njihala Frekv. (Hz) = 0,478499, razdoblje (s) = 2,089867, izvor podataka procjene: ubrzanje

oscilacija njihala Freq (Hz) = 0,478499, razdoblje (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 ću pitanje ostaviti čitateljima. Evo natuknice: sjećate li se da koristimo kratkotrajni FFT za procjenu frekvencije oscilacija? U digitalnoj domeni, procjena frekvencije je dana u diskretnim spremnicima frekvencija umjesto procjene s pomičnim brojem.

Korak 5: Preporuke za budući rad

Postoji nekoliko kategorija budućih preporuka za rad.

U prethodnom smo koraku uspjeli smanjiti pogrešku eksperimenta s ~ 5% na manje od 1%, možemo li učiniti bolje od toga? Uočavajući da se veličina oscilacija smanjuje eksponencijalno, jedan od doprinosećih čimbenika može biti i zračni otpor uzrokovan njihanjem njihala. Poprečni presjek njihala možda će biti potrebno izmijeniti kako bi bio oblikovan 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 vršne veličine. U međuvremenu, korelirati veličinu slabljenja će vanjske sile.

Teško da možemo pronaći nešto jednostavnije od "jednostavnog harmonijskog kretanja". Možemo li pomoću objekata za analizu njihala analizirati nešto složenije, sportsku aktivnost, slijed lansiranja vodene rakete itd.?

Sretno hakiranje

Preporučeni: