Satura rādītājs:

Vienkāršas harmoniskas kustības eksperimentāls pētījums: 5 soļi
Vienkāršas harmoniskas kustības eksperimentāls pētījums: 5 soļi

Video: Vienkāršas harmoniskas kustības eksperimentāls pētījums: 5 soļi

Video: Vienkāršas harmoniskas kustības eksperimentāls pētījums: 5 soļi
Video: Matemātiskais svārsts 2024, Jūlijs
Anonim

Seko vairāk autoram:

Walking Strandbeest, Java/Python un kontrolēta lietotne
Walking Strandbeest, Java/Python un kontrolēta lietotne
Walking Strandbeest, Java/Python un kontrolēta lietotne
Walking Strandbeest, Java/Python un kontrolēta lietotne

Klasē mēs bieži izmantojam hronometru, lai veiktu svārsta eksperimentu vai vienkāršu harmonisku kustību eksperimentu. Šeit ir izaicinājums, vai mēs varam izveidot reālu tā kustības grafiku un redzēt, kāds ir momentānis leņķiskais stāvoklis un ātrums, tas ir daudz vairāk informācijas un jautrības.

Pirmais jautājums, mums jāizlemj, vai svārsta korpuss ir bezsvara aukla vai ciets vienveidīgs stienis. Šķiet, ka auklas pieeja ir vieglāka. No vienas būvēšanas prakses man ir šādi kompromisa apsvērumi: Vieglākais veids, kā piekarināt svārsta sistēmu, var būt piekārt pie durvju augšējās malas. Tas dod jūsu ~ 2 m svārsta garumu, neveicot nekādus celtniecības darbus. Bet tam ir nepieciešams, lai šūpoles nepieskartos durvju virsmai, kas vienkārši sabojā visu eksperimentu. Tātad plaknei, kurā tā šūpojas, jābūt precīzi paralēlai jūsu sienas/durvju virsmai. Bezsvara aukla mēdz būt plāna, tā var viegli griezties un sarežģīt šūpošanās leņķa mērīšanu. Mēs vēlamies izmantot vienu mērījumu, lai attēlotu šūpošanās stāvokli. Plāna aukla, piemēram, zivju aukla, var būt elastīga un izstiepjama, kas ietekmē vienu no mūsu vissvarīgākajām konstantēm, ko mēs izmērām un izmanto vienādojumā, kas ir svārsta garums. Dažus var ietekmēt arī temperatūra. Svara masai, kas karājas auklas galā, jābūt pietiekami smagai, lai auklas svars kļūtu nenozīmīgs. Lūdzu, komentējiet, ja piekrītat vai nepiekrītat tiem vai jums ir citas dizaina kompromisa idejas. Lai izpētītu šo problēmu, mums ir nepieciešama ierīce, kas ir tik viegla, ka tās svaru var ignorēt, un mēs joprojām uzskatām svārsta sistēmu par cietu vienveidīgu stieni. Es izmantoju COTS valkājamu elektronisko kontrolieri, kas mums piegādā žiroskopu, akselerometru un leņķa informāciju, izmantojot Bluetooth savienojumu. Šie mērījumi tiks saglabāti mobilā tālruņa lietotņu datu failā. Pēc tam mēs analizēsim mūsu vienkāršā harmoniskā kustības eksperimenta datus. Skaitliskajā analīzē galvenā uzmanība tiek pievērsta šādām tēmām: 1) paredzēt svārsta svārstību periodu; 2) programmējami apkopot svārsta vienkāršās harmoniskās kustības eksperimenta datus; 3) izmantot kmean, lai grupētu datus un noņemtu novirzes analīzes procesā. svārsta svārstību frekvence

Piegādes

Bluetooth mērīšanas aparāts

Android tālruņa lietotne: dodieties uz Google Play veikalu, meklējiet M2ROBOTS un instalējiet vadības lietotni. Ja ir grūti piekļūt Google Play veikalam, apmeklējiet manu personīgo mājas lapu, lai uzzinātu alternatīvu lietotņu lejupielādes metodi

koka stienis

dažas 3D drukātas detaļas

zāģa asmeņi vai līdzīgs metāla materiāls

Solis: Kas ir svārsts? Kā to modelēt?

Ir daudz rakstu un grāmatu, kas iepazīstina ar svārsta vienādojuma atvasināšanu, tostarp jūsu mācību satura fizikas grāmata. Šādu saturu varētu labāk neatkārtot šeit. Šeit ir norādīts tikai galīgais secinājums par tēmu "vienkārša harmoniska kustība". Lai uzzinātu svārsta periodu, viss, kas mums jāzina, ir svārsta garums, kas apzīmēts kā "l", metros.

Ja mēs esam pārliecināti, ka svars gandrīz pilnībā atrodas šarnīrā karājas bezsvara auklas galā un svārsts šūpojas nelielos leņķos θ, piemēram, mazāk nekā 15 °, šādas svārsta periodu T1 nosaka:

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

g = gravitācijas paātrinājums, aptuveni 9,8 m/s^2

Ja bezsvara auklu aizstāj ar stingru vienveidīgu stieni, kura garums atkal ir l, tā vienkāršo harmonisko kustību periodu T2 nosaka T1 = 2*pi*(2l/3g)^0,5

Faktiski tam ir tāds pats periods kā bezsvara auklas svārstam, kas ir divas trešdaļas no cietā vienveidīgā stieņa garuma.

Tas ir fons, un mēs varam sākt sagatavot savu eksperimentu.

2. darbība. Sagatavojiet detaļas aparatūras veidošanai

Sagatavojiet detaļas aparatūras veidošanai
Sagatavojiet detaļas aparatūras veidošanai
Sagatavojiet detaļas aparatūras veidošanai
Sagatavojiet detaļas aparatūras veidošanai
Sagatavojiet detaļas aparatūras veidošanai
Sagatavojiet detaļas aparatūras veidošanai

Lai izveidotu svārsta struktūru, mēs 3D izdrukājam dažas detaļas un pārstrādājam kaut ko, kas mums jau ir. Kopējā svārsta struktūra ir parādīta 1. attēlā. Tas ir 3D drukas detaļu maisījums kopā ar dažām ar rokām darinātām detaļām un garu koka stieņa gabalu no Lowe.

2. attēlā redzamā 3D drukātā daļa ir pakarināta pie durvju augšējās malas, jo mūsu durvis ir viegli līdzena virsma, lai mēs varētu kaut ko pakārt. STL faila lejupielādes saite:

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

Zaļā daļa 3. attēlā savieno koka stieni ar asmeni, un asmens atrodas virs diviem sliedes gabaliem, kas uzstādīti uz iepriekšējā 3D drukātā durvju pakaramā. STL faila lejupielādes saite:

Divi sliedes gabali ir izgatavoti, pārgriežot veco zāģa asmeni uz pusēm, skat. 4. attēlu. 2. attēlā redzamā daļa ir sagatavojusi tiem atbilstošo spraugas izmēru. Ideālā gadījumā mēs varam izveidot "V" formas iegriezumu šajās divās zāģa asmeņos, izmantojot failu. Saprātīgi asu metālu metāls, piemēram, skuveklis ar vienu malu vai jebkurš ar rokām izgatavots metāla gabals, var sēdēt "V" veida iecirtņu iekšpusē. Iemesls, kāpēc mums nepieciešama mazāka kontakta zona, ir samazināt kinētisko enerģiju, kas tiek zaudēta šūpošanās laikā.

Pēdējā 3D drukātā daļa 5. attēlā ir neliela paplāte elektroniskā mērīšanas aparāta turēšanai.

Lejupielādes saite:

Bluetooth mērīšanas ierīce ģenerē leņķa novērtējumu, žiroskopu un akselerometra mērījumus. Visi šie dati mums ir pieejami, izmantojot Bluetooth bezvadu saiti.

Mēs veiksim vairākus eksperimentus, izvietojot šo aparātu dažādās svārsta rokas pozīcijās, un redzēsim atšķirības.

3. darbība. Eksperimenta datu vākšana

Eksperimenta datu vākšana
Eksperimenta datu vākšana
Eksperimenta datu vākšana
Eksperimenta datu vākšana
Eksperimenta datu vākšana
Eksperimenta datu vākšana

Pirms iegūtās datu kopas analīzes eksperimentālai datu vākšanai ir divas veicamas metodes:

1) Izmantojiet Android tālruņa lietotni, kas norādīta prasību sadaļā, lai reģistrētu visus aparāta veiktos mērījumus datu failā, kas saglabāts tālruņa SD kartē. Mēs varam kopēt failu un pēc tam apstrādāt informāciju.

2) Izmantojiet Bluetooth iespējotu datoru, datoru, klēpjdatoru vai RaspberryPi minidatoru, lai izveidotu Bluetooth savienojumu ar aparātu un nolasītu datus reāllaika vai bezsaistes analīzei.

Katrai metodei ir gan plusi, gan mīnusi, mēs izmēģināsim abus un pastāstīsim atšķirību šajā pamācībā.

Metodei (1), kurā tiek izmantota android lietotne, kad esam Android lietotnes vadības saskarnē, telemetrijas dati, kas tiek nosūtīti no Bluetooth mērīšanas ierīces uz android tālruni, tiks ierakstīti datu kataloga failā ar nosaukumu m2flightDatayyyymmdd_hhmmss.txt. To var atrast jūsu Android tālruņa mapē Lejupielādēt/m2LogFiles. Mape "Lejupielādēt" ir jau esoša mape jūsu tālruņa Android operētājsistēmā, un "m2LogFiles" ir lietotnes izveidotā mape. Faila nosaukuma saturs yyyymmdd_hhmmss ir veids, kā faila nosaukumā iekodēt eksperimenta sākuma laiku (gads, mēnesis, diena, stunda, minūte un sekundes).

Katra žurnāla faila rinda ir viens ieraksts. Tas sākas ar notikuma laika zīmogu, preambulas virkni "eam:", kam seko 4 tripleta dati, kas ir:

Akselerometra XYZ ass nolasīšana neapstrādātu sensoru aparatūras reģistra nolasīšanas vērtībās

Žiroskopa XYZ ass nolasīšana neapstrādātu sensoru aparatūras reģistra nolasīšanas vērtībās

Magnetometra XYZ ass nolasīšana neapstrādātu sensoru aparatūras reģistra nolasīšanas vērtībās

borta aprēķinātais Roll/Pitch/Raw grāds

Datu failā, kas izveidots, izmantojot datora python programmu, tiks izmantots identisks datu faila formāts, lai datu analīzes posmā izmantotā programma netiktu apgrūtināta, ja datu avotu ražotu mūsu python programma vai Android lietotne.

Sāksim kodēšanu, izmantojot (2) metodi.

Lai mijiedarbotos ar Bluetooth mērīšanas ierīci, tiek piedāvāti divi SDK varianti:

1) Python SDK, kuru var instalēt ar "pip3 install m2controller", tiek izmantota python3 valoda. Lietotāja lietojumprogrammas koda piemēri tiek saglabāti vietnē https://github.com/xiapeiqing/m2robots/tree/maste… Šajā eksperimentā mēs izmantosim python skriptu pendulum1.py

2) Java SDK, kas šajā pamācībā netiek izmantots, jo mēs vēlamies iegūtās svārsta datu vēlāku vizualizāciju un analīzi, kas varētu prasīt nedaudz vairāk pūļu, lai mēs varētu programmēt Java.

Python3 datu vākšanas programmas avota kodā ir daudz komentāru par koda funkcionalitāti. Šeit ir pieejams avota koda momentuzņēmums.

#!/usr/bin/env python#-*-kodēšana: UTF-8-*-no m2kontrollera importēšana m2kontrolleris no m2kontrollera importēšana m2Const importēšanas signāla importēšanas laika importēšanas datuma laika importēšana usrCfg importa svārsts2

requestExit = Nepareizi

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

#mēs vēlamies izmantot to pašu žurnālfailu nosaukumu konvenciju, lai datu analīzes modulis pendulum2.py varētu būt agnostiķis tam, kā mēs iegūstam žurnāla datu failu ################# ############################################ logfilename = " m2flightData%s.txt "%(datetime.datetime.fromtimestamp (time.time ()). strftime ('%Y%m%d_%H%M%S')) dataLogfile = open (žurnāla faila nosaukums," w ")

def signal_handler (sig, frame):

globāls pieprasījumsExit print ('lietotājs Ctrl-C, lai izietu no programmas izpildes') requestExit = True signal.signal (signal. SIGINT, signal_handler)

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

#kad visi mērījumu dati kļūst pieejami ar frekvenci 20 Hz, šī "atzvanīšanas" funkcija tiks izsaukta ############################### ################################## def callbackfunc (telemetry): 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], telemetrija ['m_fAccelHwUnit'] [1], telemetrija ['m_fAccelHwUnit'] [2], telemetrija ['m_fGyroHwUnit'] [0], telemetrija ['m_fGyroHwUnit'] [1], telemetrija ['m_fGyroHwUnit'] [2], telemetrija

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

#inicializējiet kontrolieri, neaizmirstiet iestatīt lauku BleMACaddress kā ierīces MAC adresi ################################ ################################TODO: inicializēsim BleMACaddress, ja to nav iestatījis lietotājs. controller = m2controller. BleCtrller (m2Const.etDebian, callbackfunc, usrCfg. BleMACaddress) controller.connect (), kamēr True: ######################### #######################################gaidiet, kamēr tiek izveidoti un nosūtīti mērījumu dati no svārsta mērījuma aparāts ################################################# ############### controller.m_CommsTunnel.waitForNotifications (1.0) if requestExit: ###################### ######################################## ##################### b … bb bb cēšot pabeigt datu reģistrēšanu. ################################################# ############## controller.stop () dataLogfile.close () pārtraukums

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

#datu vākšana ir pabeigta, tagad analizēsim žurnāla datus ######################################### ######################### pendulum2.parseDataLogFile (žurnāla faila nosaukums)

Lai iegūtu ilgtermiņa atjauninājumus, lūdzu, pārbaudiet

Tagad paskaidrosim tā darbības metodi. Šī python programma ir uzrakstīta virs pip instalējamas paketes, kuras nosaukums ir m2controller. Zemākā līmeņa pakete piedāvā atzvanīšanas mehānismu, lai katrs saņemtais mērījumu atjauninājums aktivizētu mūsu rakstīto atzvanīšanas funkciju un saglabātu datus vietējā žurnāla failā. Žurnālfailu datu satura formāts ir identisks tam, ko rada android pavadošā lietotne, tāpēc datu žurnāla fails, ko izveidojusi vai nu python programma, vai andriod pavadošā lietotne.

Lietotāja ctrl-C signāls, ko uztver operētājsistēma, tiek nodots programmai un pārtrauc bezgalīgo cilpu, gaidot jaunu mērījumu datu ierašanos.

Līdz šim žurnāla fails ir veiksmīgi izveidots, un šī programma izsauks analīzes programmu, lai izpētītu mūsu eksperimenta rezultātus.

Šeit ir divi eksperimenti, un salīdzinājums parāda ļoti pamanāmo atšķirību, pievienojot 7 gramu ierīci dažādās vietās.

2. attēlā mēs izmantojam skalu, lai noteiktu šī Bluetooth mērīšanas aparāta faktisko svaru.

3. attēlā ir attēlots svārsta iestatījums, kurā 7 gramu ierīce ir piestiprināta pie svārsta apakšējā gala. Uzstādīšanas konfigurācijas 4. attēlā 7 gramu masa atrodas daudz tuvāk šūpošanās šarnīram.

5. attēls ir svārsta struktūras tuvplāna skats.

4. solis: datu analīze

Datu analīze
Datu analīze
Datu analīze
Datu analīze
Datu analīze
Datu analīze

Bluetooth mērīšanas aparāts sver ~ 7 gramus, kas sver daudz mazāk nekā ~ 1,6 metrus gara koka nūja. Izmantojiet pieņēmumu "stingrs vienveidīgs stienis", un mums ir šis svārsta perioda vienādojums, T1 = 2*pi*(2l/3g)^0,5

Lai iegūtu gravitācijas konstanti, mēs varam izmantot 9,8 m/s^2. Bet precīzāku gravitācijas konstanti jebkurā ģeogrāfiskajā atrašanās vietā var iegūt no šī tīmekļa pakalpojuma:

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

Sanfrancisko tas ir 9,81278 m/s^2

Svārsta garums tiek mērīts kā 64,5 collas

2*pi*sqrt (2*64,5*0,0254/(3*9,81278)) dod paredzamo svārsta periodu 2,0962 (sek.).

Redzēsim, vai tas atbilst mūsu eksperimentiem.

Pirmajā eksperimentā svārsta uzstādīšanai 7 gramu ierīce ir pievienota svārsta apakšējam galam. Manu žurnāla failu var lejupielādēt:

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

Pārdēvējiet to par "PendulumTestData.txt" un ievietojiet to tajā pašā python analīzes programmas mapē. Šeit ir pieejams avota koda momentuzņēmums.

#!/usr/bin/env python#-*-kodēšana: UTF-8-*-importēt csv importēt matplotlib.pyplot kā plt plt.style.use ('seaborn-whitegrid') importēt numpy kā np no datuma importēšanas datuma laika, timedelta importēt jūru, kā sns no sklearn. klasteru imports KMeans no kolekcijām importē skaitītāju ############## ### ############################ Šī funkcija veic datu failu analīzes darbu ############ ################################################# ## def parseDataLogFile (datu faila nosaukums): ####################################### #######################izvelciet datus komatatdalītā datu žurnāla failā (CSV) un saglabājiet katras slejas saturu vienā pludiņa tipa mainīgajā ## ################################################# ############ ar atvērtu (datu faila nosaukums) kā csvfile: readCSV = csv.reader (csvfile, delimiter = ',') timestampS = fAccelHwUnit_x = fAccelHwUnit_y = fAccelHwUnit_ [fGyroHwUnit_x = fGyroHwUnit_y = fGyroHwUnit_z = fMagHwUnit_x = fMagHwUnit_y = fMagHwUni t_z = fRPYdeg_r = fRPYdeg_p = fRPYdeg_y = rindai lasāmajā CSV: mēģiniet: x = datuma un laika ilgums (rinda [0]. sadalīt (',') [0], '%H:%M:%S.%f ') timestampS.append (laiks [1] [4:])) fAccelHwUnit_y.append (pludiņš ([2] rinda)) fAccelHwUnit_z.append (pludiņš ([3] rinda)) fGyroHwUnit_x.append (pludiņš ([4] rinda)) fGyroHwUnit_y.append (float (rinda [5])) fGyroHwUnit_z.append (pludiņš ([6] rinda)) fMagHwUnit_x.append (pludiņš ([7.] rinda)) fMagHwUnit_y.append (pludiņš ([8.] rinda)) fMagHwUnit_z.append (float (row [9])) fRPYdeg_r.append (pludiņš ([10] rinda)) fRPYdeg_p.append (pludiņš ([11. rinda])) fRPYdeg_y.append (pludiņš ([12] rinda))), izņemot: pass timestampS = np.asarray (Laikspiedoli) Laikspiedoli = Laikspiedoli - Laikspiedoli [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)

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

#mums ir nepieciešams precīzs paraugu ņemšanas biežuma novērtējums precīzam svārstību perioda aprēķinam ################################## ############################# FsHz = getSamplingIntervalS (timestampS) ############### ####################################### Izmantojiet piķa komponents attieksmes pozīcijas atsauces sistēmas izvadā svārsta perioda analīzei ##################################### ############################ analy_timeSequence (timestampS, fRPYdeg_p, FsHz, 'pitch') ########### ################################################# ####svārsta perioda analīzei izmantojiet izejmateriāla acceleromter izejas rezultātus #################################### ############################ analy_timeSequence (timestampS, fAccelHwUnit_x, FsHz, 'accel') ########### ################################################# ####svārsta perioda analīzei izmantojiet žiroskopu neapstrādātu mērījumu rezultātu ##################################### ############################ analy_timeSequence (timestampS, fGyroHwUnit_y, FsHz, žiroskopu)) drukāt ('darīts, apsveicu:-)') plt.show () ############################### #################################Bluetooth sakaru procesā ir reta iespēja, ka datu kopuma pakete varētu pazust#mēs izmantojam K-vidējo, lai izolētu 20 Hz mērījumu datus no novirzēm, kas radušies, ja pakete#ir iegremdēta "signālā un sistēmā, lai iegūtu sīkāku informāciju" ################ ###############################################. (timestampS): plt.figure () sampleIntervalS = np.diff (timestampS) sns.distplot (sampleIntervalS) plt.ylabel ('histogramma') plt.xlabel ('mērīšanas intervāls (-i)') klasterisCnt = 5 km = KMeans (n_clusters = clusterCnt) km.fit (sampleIntervalS.reshape (-1, 1)) centroids = km.cluster_centers_ elemCnt = Skaitītājs (km.labels_) notikumsCnt = ii diapazonā (clusterCnt): eventCnt.append (elemCnt [ii]) FsHz = 1/centraids [notikumsCnt.index (maks. (NotikumsCnt))] atgriežas FsHz

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

#izmantojiet spektrometru, ti, īsu laiku FFT, lai iegūtu frekvences komponentu, maksimālā tvertne ir mūsu labākais svārsta svārstību aprēķins ########################## ###################################### def analy_timeSequence (timestampS, timeSeqData, FsHz, strComment): att., (ax1, ax2) = plt.subplots (nrows = 2) ax1.plot (timestampS, timeSeqData, marker = 'o', markerfacecolor = 'blue', markersize = 2, color = 'debeszila', līnijas platums = 1) ax1.set_title ("svārsta laika domēna mērījums - %s" %strComment) ax1.set_xlabel ("paraugu ņemšanas laiks (otrais)") ax1.set_ylabel (strComment); NFFT = 2048 # loga segmentu garums

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

ax2.set_title ("Spektrogramma") ax2.set_xlabel ("paraugi") ax2.set_ylabel ("frekvence (Hz)");

# Metode `specgram` atgriež 4 objektus. Viņi ir:

# - Pxx: periodogramma # - biežums: frekvenču vektors # - tvertnes: laika tvertņu centri # - im: matplotlib.image. AxesImage instance, kas attēlo diagrammas datus pkresult = np.where (Pxx == np.amax (Pxx)) oscFreqHz = freqs [pkresult [0] [0] print ('svārsta svārstības Freq (Hz) =%f, periods (sek) =%f, novērtējuma datu avots:%s'%(oscFreqHz, 1/oscFreqHz, strComment)) atgriežas 1/oscFreqHz

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

#ja mēs šo programmu palaižam neatkarīgi, ti, ja to neizsauc pendulum1.py,#mēs definējam analizējamo žurnāla datu faila nosaukumu #################### ######################################### Ja _name_ == "_main_ ": defaultFilename = './PendulumTestData.txt' importēt os.path, ja os.path.isfile (defaultFilename): parseDataLogFile (defaultFilename) else: print (" noklusējuma žurnālfails %s nav " %defaultFilename)

Lai iegūtu ilgtermiņa atjauninājumus, lūdzu, pārbaudiet

Avota kods satur detalizētus komentārus, šeit sniegsim augsta līmeņa kopsavilkumu par matemātisko novērtējumu.

1) Vispirms datorā nolasām CSV faila saturu, izmantojot python pakotni ar nosaukumu "csv". Mums ir periodiski mērījumi.

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) Tā kā mērījumu ātrums ir tik kritisks un tieši rada svārsta perioda novērtēšanas kļūdu, mēs vēlamies tos novērtēt. Mūsu nominālais mērījumu intervāls ir 50 ms, t.i., 20 Hz. Šķiet, ka vidējais rādītājs visos mērījumos ir labs, taču mēs dažkārt zaudējam datu pārraides paketi, atjaunināšanas intervāls kļūst par 100 ms vai 150 ms,…

Ja mēs uzzīmējam šo datu rašanos, skat. 1. attēlu, kā cilvēks, mēs varam viegli iegūt acs ābola vērtību 0,05 sekundes. Tomēr, vai mēs varam darīt labāk?

Mums ir jāizmanto klasifikācijas metode, lai aprēķināšanai aprēķinātu tikai labās. Python ir rīklodziņš ar nosaukumu KMeans, kas mums palīdz sagrupēt vai sakārtot klasifikāciju. Šie jēdzieni tiek izmantoti daudzos lielo datu un AI apgabalos.

3) 2. attēlā ir divi attēli. Augšējais grafiks ir mūsu šūpošanās leņķa mērīšanas laika domēna secība grādos. Atsaucoties uz x ass laika zīmogu sekundē, mēs varam nolasīt aptuveni 22,5 ciklus 50 sekundēs, kas nozīmē 2,22 sek svārsta periodu. Vai ir kāds veids, kā automatizēt šo procesu un iegūt precīzāku novērtējumu? Jā, mēs varam izmantot matemātisko rīku, ko sauc par spektrogrammu un kurā tiek izmantota neliela mērījumu datu daļa, un pastāstiet mums to biežumu, skatiet attēlu zemāk. Tumšākās līnijas y ass rādījums ir svārsta svārstību frekvence. Tā kā horizontālā līnija apstiprina, ka svārsta svārstības eksperimenta laikā nemainījās. Svārstību frekvences apgrieztā vērtība ir svārsta svārstību periods.

Programmas galīgais ziņojums ir teksta kopsavilkums:

svārsta svārstības Freq (Hz) = 0.449224, periods (sek) = 2.226059, novērtējuma datu avots: piķis

Mēs varam atrast, ka mūsu agrākais acs ābola rokas aprēķina rezultāts, 2,22 sekundes, ir diezgan atbilstošs programmas aprēķinātajai vērtībai.

Salīdzinot ar 2,0962 (sek) teorētiski aprēķināto vērtību, mums ir ~ 5% atlikušā kļūda. Kā no tiem atbrīvoties? Atcerieties, ka pieņēmums ir "stingrs vienveidīgs stienis"? Pat 7 gramu papildu svars šķiet mazsvarīgs, tas ir lielākais atlikušās kļūdas cēlonis.

Tagad mēs pārvietojam ierīci tuvu šarnīram. Tuvplāna fotoattēlu skatiet iepriekšējā solī. Manis izveidoto žurnālfailu var lejupielādēt šeit:

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

Veiciet tās pašas analīzes darbības, un mēs iegūstam periodu 2,089867 (sek.), Skat. 3. attēlu, kas ir gandrīz identisks teorētiskajai prognozei. Lieliski!

Tā kā mums ir ne tikai šūpošanās leņķa mērījumi, bet arī žiroskopiskie mērījumi un akselerometra mērījumi ar tādu pašu ātrumu. Veiciet to pašu analīzi pārējiem diviem mērījumiem, mēs iegūstam rezultātus 4. un 5. attēlā. Visu trīs mērījumu avotu aplēses ir vienisprātis, kas padara mūs pārliecinātākus par mūsu eksperimenta panākumiem.

Šeit ir rezultāts kā python programmas galīgā izvade:

svārsta svārstības Freq (Hz) = 0.478499, Periods (Sec) = 2.089867, novērtējuma datu avots: piķis

svārsta svārstības Freq (Hz) = 0.478499, Periods (Sec) = 2.089867, novērtējuma datu avots: accel

svārsta svārstības Freq (Hz) = 0.478499, Periods (Sec) = 2.089867, novērtējuma datu avots: žiroskops

Pēdējā doma šajā solī, kā novērtēšanas rezultāti var būt tieši identiski, izmantojot dažādus ievades datu avotus? Tā ir pretintuīcija. Šo jautājumu atstāšu lasītāju ziņā. Šeit ir mājiens: atcerieties, ka mēs izmantojam īslaicīgo FFT, lai novērtētu svārstību frekvenci? Digitālajā jomā frekvences novērtējums tiek dots atsevišķās frekvenču tvertnēs, nevis peldošā skaitļa aprēķinā.

5. solis: ieteikumi turpmākajam darbam

Turpmākajos darba ieteikumos ir dažas kategorijas.

Iepriekšējā posmā mums izdodas samazināt eksperimenta kļūdu no ~ 5% līdz mazāk nekā 1%. Vai mēs varam darīt labāk? Ievērojot, ka svārstību apjoms samazinās eksponenciāli, viens veicinošs faktors var būt gaisa pretestība, ko rada svārsta šūpošanās. Lai samazinātu aerodinamisko pretestību, svārsta šķērsgriezums var būt jāmaina, lai tas būtu racionalizēts.

Vai mēs varam izmantot mainīgu laika pieaugumu, kas apgūts, izmantojot adaptīvās filtra metodes, lai izvadītu nemainīgu maksimālā lieluma signālu. Pa to laiku korelējiet lieluma vājināšanos ar ārējiem spēkiem.

Diez vai mēs varam atrast kaut ko vienkāršāku par "vienkāršo harmonisko kustību". Vai mēs varam izmantot svārsta analīzes iespējas, lai analizētu kaut ko sarežģītāku, sporta aktivitātes, ūdens raķešu palaišanas secību utt.?

Laimīgu hakeru

Ieteicams: