Sisukord:

Lihtsa harmoonilise liikumise eksperimentaalne uuring: 5 sammu
Lihtsa harmoonilise liikumise eksperimentaalne uuring: 5 sammu

Video: Lihtsa harmoonilise liikumise eksperimentaalne uuring: 5 sammu

Video: Lihtsa harmoonilise liikumise eksperimentaalne uuring: 5 sammu
Video: Происхождение человека: документальный фильм об эволюционном путешествии | ОДИН КУСОЧЕК 2024, Juuli
Anonim

Jälgi autori lisateavet:

Walking Strandbeest, Java/Python ja rakenduse juhitav
Walking Strandbeest, Java/Python ja rakenduse juhitav
Walking Strandbeest, Java/Python ja rakenduse kontrollitud
Walking Strandbeest, Java/Python ja rakenduse kontrollitud

Klassiruumis kasutame pendelkatse või lihtsa harmoonilise liikumise eksperimendi läbiviimiseks sageli stopperit. Siin on väljakutse, kas saame koostada selle liikumise tegeliku graafiku ja näha, milline on hetkeline nurga asend ja kiirus, see on palju rohkem teavet ja lõbus.

Esimene küsimus, peame otsustama, et pendli korpus on kaalutu nöör või jäik ühtlane varras. Juhtme lähenemine tundub olevat lihtsam. Selle ehitamise praktikast lähtuvalt on mul järgmised kaalutlused: Lihtsaim viis pendelsüsteemi riputamiseks võib olla selle riputamine ukse ülemisse serva. See annab teie ~ 2 m pendli pikkuse ilma ehitustöid tegemata. Kuid see vajab, et kiik ei puudutaks uksepinda, mis lihtsalt rikub kogu katse. Seega peaks selle pöörlev tasand olema täpselt paralleelne teie seina/ukse pinnaga. Kaalutu nöör kipub olema õhuke, see võib hõlpsalt keerutada ja muudab pöördenurga mõõtmise keeruliseks. Tahame kiikumisoleku kuvamiseks kasutada ühte mõõtmist. Õhuke nöör, näiteks õngenöör, võib olla elastne ja veniv, mis mõjutab üht meie kõige olulisemat konstandit, mida me mõõdame ja mida kasutatakse võrrandis, milleks on pendli pikkus. Mõnda võib mõjutada ka temperatuur. Nööri otsas rippuv kaalumass peab olema piisavalt raske, et nööri kaal muutuks tühiseks. Palun kommenteerige, kas olete nendega nõus või ei nõustu või kui teil on muid disaini kompromissi ideid. Selle probleemi uurimiseks vajame seadet, mis on nii kerge, et selle kaalu saab ignoreerida ja me käsitleme pendlisüsteemi endiselt jäiga ühtlase vardana. Ma kasutan kantavat elektroonilist COTS -kontrollerit, mis edastab meile güroskoobi, kiirendusmõõturi ja nurgaandmed bluetooth -ühenduse kaudu. Need mõõtmised salvestatakse mobiiltelefoni rakenduse andmefaili. Pärast seda analüüsime meie lihtsa harmoonilise liikumise katse andmeid. Numbriline analüüs keskendub järgmistele teemadele: 1) Pendli võnkumisperioodi ennustamine 2) Programmeeritavalt pendli harmoonilise liikumise katseandmete kogumine pendli võnkumissagedus

Tarvikud

Bluetoothi mõõteseade

Android -telefoni rakendus: minge Google Play poodi, otsige M2ROBOTS ja installige juhtimisrakendus. Kui Google Play poele on raske juurde pääseda, külastage minu isiklikku kodulehte, kust leiate alternatiivse rakenduse allalaadimise meetodi

puidust varras

mõned 3D trükitud osad

saelehed või muu sarnane metallmaterjal

Samm: mis on pendel? Kuidas seda modelleerida?

Seal on palju artikleid ja raamatuid, mis tutvustavad pendelvõrrandi tuletamist, sealhulgas teie õppekava füüsika raamat. Sellist sisu võib olla parem mitte siin korrata. Siin on loetletud ainult lõplik järeldus, mis puudutab "lihtsat harmoonilist liikumist". Pendli perioodi teadmiseks peame teadma ainult pendli pikkust, mida tähistatakse tähega "l", meetrites.

Kui oleme piisavalt kindlad, et kaal asub peaaegu täielikult pöördeta rippuva kaalutu nööri otsas ja pendel kõigub väikeste nurkade θ, näiteks vähem kui 15 ° nurga all, annab sellise pendli ajavahemiku T1:

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

g = raskuskiirendus, ligikaudu 9,8 m/s^2

Kui kaalutu nöör asendatakse jäiga ühtlase vardaga, mille pikkus on jälle l, siis selle lihtsa harmoonilise liikumisperioodi T2 annab T1 = 2*pi*(2l/3g)^0,5

Tegelikult on sellel sama ajavahemik kui kaaluta nööripendlil, mis moodustab kaks kolmandikku jäigast ühtlasest varda pikkusest.

See on taust ja võime alustada oma katse ettevalmistamist.

Samm: valmistage osad ette riistvara ehitamiseks

Valmistage osad ette riistvara ehitamiseks
Valmistage osad ette riistvara ehitamiseks
Valmistage osad riistvara ehitamiseks ette
Valmistage osad riistvara ehitamiseks ette
Valmistage osad ette riistvara ehitamiseks
Valmistage osad ette riistvara ehitamiseks

Pendlistruktuuri ehitamiseks trükime mõned osad 3D -s ja taaskasutame midagi, mis meil juba on. Pendli üldine struktuur on näidatud joonisel 1. See on segu 3D -prinditud osadest koos käsitsi valmistatud osade ja Lowe puidust pika puitvardaga.

Joonisel 2 kujutatud 3D -trükitud osa ripub ukse ülemises servas, sest meie uks on lihtne tasane pind, mille jaoks saame midagi riputada. STL -faili allalaadimise link:

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

Roheline osa joonisel 3 ühendab puidust varda teraga ja tera asub kahe rööpaosa peal, mis on paigaldatud varasemale 3D -trükitud uksepuule. STL -faili allalaadimise link:

Kaks rööpaosa valmistatakse vana saeketta pooleks murdmisega, vt joonis 4. Joonisel 2 olev osa on neile ette valmistanud sobiva pilu. Ideaalis saame nendes kahes saelehes teha viili abil V -kujulise sälgu. Mõistlikult terava servaga metall, näiteks ühe servaga žiletitera või mis tahes käsitsi valmistatud metalltükk, võib istuda V -kujuliste sälkude sisse. Põhjus, miks vajame väiksemat kontaktpinda, on kiikumise ajal kaotatud kineetilise energia vähendamine.

Viimane 3D -prinditud osa joonisel 5 on väike salv elektroonilise mõõteseadme hoidmiseks.

Allalaadimislink:

Bluetooth -mõõteseade genereerib nurga, güroskoobi ja kiirendusmõõturi mõõtmise. Kõik need andmed on meile saadaval Bluetoothi traadita ühenduse kaudu.

Teeme mitmeid katseid, paigutades selle aparaadi pendlihoova erinevasse asendisse ja näeme erinevusi.

3. samm: katseandmete kogumine

Katseandmete kogumine
Katseandmete kogumine
Katseandmete kogumine
Katseandmete kogumine
Katseandmete kogumine
Katseandmete kogumine

Enne omandatud andmekogumi analüüsimist on eksperimentaalsete andmete kogumiseks kaks teostatavat meetodit:

1) Kasutage nõuete jaotises täpsustatud Androidi telefonirakendust, et registreerida kõik seadme poolt tehtud mõõtmised telefoni SD -kaardile salvestatud andmefaili. Saame faili kopeerida ja teavet töödelda.

2) Kasutage bluetooth-ühendusega arvutit, arvutit, sülearvutit või RaspberryPi miniarvutit, et luua seadmega Bluetooth-ühendus ja lugeda andmeid reaalajas või võrguühenduseta analüüsimiseks.

Igal meetodil on nii plusse kui ka miinuseid, proovime mõlemat ja selgitame selle juhendi erinevust.

Meetodi (1) androidrakenduse kasutamisel salvestatakse pärast Androidi rakenduse juhtimisliidese sisestamist Bluetoothi mõõteseadmest androidtelefonile saadetud telemeetriaandmed andmefailifaili nimega m2flightDatayyyymmdd_hhmmss.txt. Selle leiate oma Android -telefoni kaustast Download/m2LogFiles. Kaust "Laadi alla" on teie telefoni Android-operatsioonisüsteemi olemasolev kaust ja "m2LogFiles" on kaust, mille rakendus lõi. Failinime sisu yyyymmdd_hhmmss on viis katse algusaja (aasta, kuu, päev, tund, minut ja sekund) kodeerimiseks failinimesse.

Logifaili iga rida on üks kirje. See algab sündmuse ajatempliga, preambuli stringiga "eam:", millele järgneb 4 kolmikandmet, mis on järgmised:

Kiirendusmõõturi XYZ telje lugemine töötlemata anduri riistvararegistri tagasivõtmisväärtustes

Güroskoobi XYZ telje lugemine töötlemata anduri riistvararegistri taasesituse väärtustes

Magnetomeetri XYZ telje lugemine töötlemata anduri riistvararegistri tagasivõtmisväärtustes

pardal hinnanguliselt Roll/Pitch/Raw kraadides

Arvutipython -programmi abil loodud andmefail kasutab identset andmefailivormingut, nii et andmeanalüüsi etapis kasutatav programm ei häiri meie python -programmi või android -rakenduse poolt toodetud andmeallikat.

Alustame kodeerimist meetodi (2) abil.

Bluetooth -mõõteseadmega suhtlemiseks pakutakse kahte SDK -maitset:

1) Python SDK, mida saab installida "pip3 install m2controller" abil, kasutatakse python3. Kasutajarakenduse koodinäited on salvestatud aadressile https://github.com/xiapeiqing/m2robots/tree/maste… Selle katse jaoks kasutame pythoni skripti pendulum1.py

2) Java SDK, mida selles juhendis ei kasutata, kuna soovime omandatud pendli andmete hilisemat visualiseerimist ja analüüsi, mis võib Java -s programmeerimiseks võtta natuke rohkem vaeva.

Andmekogumisprogrammi python3 lähtekood sisaldab palju funktsionaalse teabe üksikasju. Siin on toodud lähtekoodi ülevaade.

#!/usr/bin/env python#-*-kodeerimine: UTF-8-*-alates m2controller import m2controller from m2controller import m22

requestExit = Vale

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

#tahame kasutada sama logifailide nimetamise tava, et andmeanalüüsi moodul pendulum2.py oleks logiandmete faili hankimise agnostiline ################ ############################################# m2flightData%s.txt "%(datetime.datetime.fromtimestamp (time.time ()). strftime ('%Y%m%d_%H%M%S')) dataLogfile = avatud (logifaili nimi," w ")

def signal_handler (sig, frame):

globaalne requestExit print ('programmi täitmisest väljumiseks kasutaja Ctrl-C') requestExit = True signal.signal (signal. SIGINT, signal_handler)

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

#kui iga mõõtmisandmed on saadaval sagedusel 20 Hz, kutsutakse see "tagasihelistamise" funktsioon välja ############################ ################################# def callbackfunc (telemeetria): 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, telemeetria ['m_fAccelHwUnit'] [0], telemeetria ['m_fAccelHwUnit'] [1], telemeetria ['m_fAccelHwUnit'] [2], telemeetria ['m_fGyroHwUnit'] [0], telemeetria ['m_fGyroHwUnit'] [1], telemeetria ['m_fGyroHwUnit'] [2], telemeetria ['m_fMit' 'm_fMagHwUnit'] [1], telemeetria ['m_fMagHwUnit'] [2], telemeetria ['m_fRPYdeg'] [0], telemeetria ['m_fRPYdeg'] [1], telemeetria ['m_fRPYdeg'] [2]) # ########################################### #############prindime andmestringi ekraanile ja salvestame logifaili ##################### ######################################### Prindi (dataStr) dataLogfile.writelines (dataStr)

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

#lähtestage kontroller, ärge unustage seada väljale BleMACaddress teie seadme MAC -aadressiks ################################# ################################TODO: lähtestame BleMAC -aadressi, kui kasutaja seda ei määra. controller = m2controller. BleCtrller (m2Const.etDebian, callbackfunc, usrCfg. BleMACaddress) controller.connect () samas True: ######################### #######################################oodake pendli mõõtmisel loodud ja saadetud mõõtmisandmeid aparaat ######################################## ############### controller.m_CommsTunnel.waitForNotifications (1.0) if requestExit: ###################### #########################################majapidamine töötab siin, kui lõpetame andmete logimise ########################################### ############## controller.stop () dataLogfile.close () break

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

#andmete kogumine lõpetatud, analüüsime nüüd logiandmeid ################################# ######################### pendulum2.parseDataLogFile (logifaili nimi)

Pikaajalise värskenduse saamiseks külastage palun

Nüüd selgitame selle töömeetodit. See pythoni programm on kirjutatud pip -i installitava paketi peale, mille nimi on m2controller. Madalama taseme pakett pakub tagasihelistamismehhanismi, nii et iga saadud mõõtmisvärskendus käivitab meie kirjutatud tagasihelistamisfunktsiooni ja salvestab andmed kohalikku logifaili. Logifaili andmesisu vorming on identne androidi kaasrakenduse poolt toodetud vorminguga, nii et kas pythoni programmi või andriodi kaasrakenduse loodud andmelogi fail on vahetatav.

Operatsioonisüsteemi poolt hõivatud kasutaja ctrl-C signaal edastatakse programmile ja peatatakse lõpmatu tsükkel, mis ootab mõõtmisandmete uut saabumist.

Siiani on logifail edukalt loodud ja see programm kutsub analüüsiprogrammi meie katsetulemusi uurima.

Siin on kaks katset ja võrdlus näitab väga märgatavat erinevust, lisades 7grammise seadme erinevatesse kohtadesse.

Joonisel fig 2 kasutame selle Bluetooth -mõõteseadme tegeliku kaalu määramiseks skaalat.

Joonisel 3 on kujutatud pendli seadistus, kus 7 -grammine seade on kinnitatud pendli alumise otsa külge. Seadistuskonfiguratsioonil joonisel 4 on 7 grammi mass, mis asub pöörlevale pöördele palju lähemale.

Joonis fig 5 on pendli struktuuri lähivaade.

4. samm: andmete analüüs

Andmete analüüs
Andmete analüüs
Andmete analüüs
Andmete analüüs
Andmete analüüs
Andmete analüüs

Bluetoothi mõõteseade kaalub ~ 7 grammi, mis kaalub palju vähem kui ~ 1,6 meetri pikkune puupulk. Kasutage eeldust "jäik ühtlane varras" ja meil on see pendli perioodi võrrand T1 = 2*pi*(2l/3g)^0,5

Gravitatsioonikonstandi saamiseks saame kasutada 9,8 m/s^2. Sellest veebiteenusest saab aga täpsema gravitatsioonikonstandi igal geograafilisel asukohal:

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

San Francisco puhul on see 9,81278 m/s^2

Pendli pikkuseks mõõdetakse 64,5 tolli

2*pi*ruutmeetrit (2*64,5*0,0254/(3*9,81278)) annab eeldatava pendelperioodi 2,0962 (sek).

Vaatame, kas see sobib meie katsetega.

Esimeses katses on pendli seadistusel pendli alumise otsa külge kinnitatud 7 grammi seade. Minu logifaili saab alla laadida:

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

Nimetage see ümber "PendulumTestData.txt" ja pange see pythoni analüüsiprogrammi samasse kausta. Siin on toodud lähtekoodi ülevaade.

#!/usr/bin/env python#-*-kodeerimine: UTF-8-*-import csv import matplotlib.pyplot kui plt plt.style.use ('seaborn-whitegrid') impordib numpy kui np kuupäevast ja ajast timedelta import seaborn kui sns sklearnist. klastri import KMeans kogudest import loendur ################################## ############################# See funktsioon käivitab andmefaili analüüsitöö ########### ########################################### ## def parseDataLogFile (andmefaili nimi): ######################################### ########################ekstraheerige andmed komaga eraldatud andmete logifailis (CSV) ja salvestage iga veeru sisu üheks hõljuktüüpi muutujaks ## ########################################### ##### fGyroHwUnit_x = fGyroHwUnit_y = fGyroHwUnit_z = fMagHwUnit_x = fMagHwUnit_y = fMagHwUni t_z = fRPYdeg_r = fRPYdeg_p = fRPYdeg_y = readCSV reas: proovige: x = datetime.strptime (rida [0]. jaotus (',') [0], '%H:%M:%S.%f ') timestampS.append (timedelta (tunnid = x.tund, minutid = x.minut, sekundid = x.sekund, mikrosekundid = x.mikrosekund).total_seconds ()) fAccelHwUnit_x.append (float (row [1] [4:])) fAccelHwUnit_y.append (float (rida [2])) fAccelHwUnit_z.append (float (rida [3])) fGyroHwUnit_x.append (float (rida [4])) fGyroHwUnit_y.append (float (rida [5])) fGyroHwUnit_z.append (float (rida [6])) fMagHwUnit_x.append (float (rida [7])) fMagHwUnit_y.append (float (rida [8])) fMagHwUnit_z.append (float (row [9])) fRPYdeg_r.append (float (rida [10])) fRPYdeg_p.append (float (rida [11])) fRPYdeg_y.append (float (rida [12])), välja arvatud: pass timestampS = np.asarray (aikaleimoissa) aikaleimoissa = aikaleimoissa - aikaleimoissa [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)

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

#vajame täpset võnkumisperioodi prognoosi proovivõtusageduse hindamist ###################### ############################# FsHz = getSamplingIntervalS (timestampS) ############### ######################################## pigi komponent suhtumise pealkirja võrdlussüsteemi väljundis pendliperioodi analüüsiks ############################# ############################ analy_timeSequence (timestampS, fRPYdeg_p, FsHz, 'pitch') ########## ########################################### ####kasutage pendelperioodi analüüsiks kiirendusmõõdiku tooraine mõõtmise väljundit #################################### ############################ analy_timeSequence (timestampS, fAccelHwUnit_x, FsHz, 'accel') ########## ########################################### ####kasutage pendelperioodi analüüsiks güroskooptoore mõõtmise väljundit ############################ ############################ analy_timeSequence (timestampS, fGyroHwUnit_y, FsHz, " güroskoop) print ('tehtud, palju õnne:-)') plt.show () ############################### ##################################Bluetoothi suhtlusprotsessis on haruldane võimalus, et andmepakett kaduma#me kasutame K-keskmist, et eraldada 20 Hz mõõtmisandmed kõrvalekalletest, mis on põhjustatud paketi#mahakukkumisest "signaali ja süsteemi üksikasjadesse" ################ ######################################## ### (timestampS): plt.figure () sampleIntervalS = np.diff (timestampS) sns.distplot (sampleIntervalS) plt.ylabel ('histogramm') plt.xlabel ('mõõtmisintervall (id)') klasterCnt = 5 km = KMeans (n_clusters = clusterCnt) km.fit (sampleIntervalS.reshape (-1, 1)) centroids = km.cluster_centers_ elemCnt = Loendur (km.labels_) esinemineCnt = vahemikus ii (clusterCnt): esinemineCnt.append (elemCnt [ii]) FsHz = 1/tsentraalsed [esinemiskoht.index (max (esinemineCnt))] tagastab FsHz

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

#Kasutage spektromeetrit, st lühikest aega FFT sageduskomponendi saamiseks, piigihoidja on meie parim hinnang pendli võnkumisele ########################## ###################################### def analyze_timeSequence (aikaleimoissa, timeSeqData, FsHz, strComment): joonis, (ax1, ax2) = plt.subplots (nrows = 2) ax1.plot (timestampS, timeSeqData, marker = 'o', markerfacecolor = 'blue', markersize = 2, color = 'taevasinine', linewidth = 1) ax1.set_title ("pendli aja domeeni mõõtmine - %s" %strComment) ax1.set_xlabel ("proovivõtmise aeg (teine)") ax1.set_ylabel (strComment); NFFT = 2048 # akna segmentide pikkus

Pxx, sagedused, prügikastid, im = ax2.spekgram (timeSeqData, NFFT = NFFT, Fs = FsHz, noverlap = NFFT/2)

ax2.set_title ("Spektrogramm") ax2.set_xlabel ("proovid") ax2.set_ylabel ("sagedus (Hz)");

# Meetod `specgram 'tagastab 4 objekti. Nemad on:

# - Pxx: periodogramm # - sagedused: sagedusvektor # - prügikastid: ajaribade keskpunktid # - im: matplotlib.image. AxesImage, mis kujutab graafiku andmeid pkresult = np.where (Pxx == np.amax (Pxx)) oscFreqHz = sagedused [pkresult [0] [0] print ('pendli võnkumine Freq (Hz) =%f, Periood (Sec) =%f, hinnanguandmete allikas:%s'%(oscFreqHz, 1/oscFreqHz, strComment)) tagastab 1/oscFreqHz

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

#kui me peaksime seda programmi iseseisvalt käivitama, st et meid ei kutsutaks pendulum1.py,#määratleme analüüsitava logiandmete faili vaikenime #################### ######################################## Kui _name_ == "_main_ ": defaultFilename = './PendulumTestData.txt' impordi os.path kui os.path.isfile (defaultFilename): parseDataLogFile (defaultFilename) else: print (" vaikimisi logifail %s pole olemas " %defaultFilename)

Pikaajalise värskenduse saamiseks külastage palun

Lähtekood sisaldab üksikasjalikke kommentaare, teeme siin matemaatilise hinnangu kõrgetasemelise kokkuvõtte.

1) Lugesime esmalt CSV -faili sisu arvutisse, kasutades pythoni paketti nimega "csv". Meil on perioodilised mõõtmised.

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) Kuna mõõtmiskiirus on nii kriitiline ja toob otseselt sisse pendliperioodi hindamisvea, tahame neid hinnata. Meie nominaalne mõõtmisintervall on 50 ms, st 20 Hz. Kõigi mõõtmiste keskmine tundub OK, kuid aeg -ajalt kaotame andmeedastuspaketi, värskendusintervall muutub 100 ms või 150 ms,…

Kui joonistame nende andmete esinemise, vt joonis 1, saame inimesena hõlpsalt silmamuna väärtuseks 0,05 sekundit. Siiski, kas me saame sellest paremini teha?

Arvutuste keskmistamiseks peame kasutama ainult klassifitseerimismeetodit. Pythonil on tööriistakast nimega KMeans, mis aitab meil klastrite koostamisel või klassifitseerimisel. Neid mõisteid kasutatakse paljudes suurandmete ja tehisintellekti valdkondades.

3) Joonis 2 sisaldab kahte pilti. Ülemine graafik on meie pöörleva nurga mõõtmise ajadomeenide järjestus kraadides. Viidates sekundis x-telje ajatemplile, saame 50 sekundi jooksul lugeda umbes 22,5 tsüklit, mis tähendab 2,22 sek pendliperioodi. Kas on võimalik seda protsessi automatiseerida ja täpsemat hinnangut saada? Jah, me saame kasutada matemaatilist tööriista nimega spektrogramm, mis kasutab väikest tüki mõõtmisandmeid ja ütleb meile selle sageduse, vt allolevat joonist. Pimedaima joone y-telje näit on pendli võnkumissagedus. Horisontaalne joon kinnitab, et pendli võnkumine ei muutunud kogu katse jooksul üldse. Võnkesageduse pöördväärtus on pendli võnkumisperiood.

Programmi lõpparuanne on tekstikokkuvõte:

pendli võnkumine Freq (Hz) = 0,449224, Periood (Sec) = 2,226059, hindamisandmete allikas: samm

Leiame, et meie varasem silmamurdmise käe arvutamise tulemus, 2,22 sekundit, on üsna kooskõlas programmi arvutatud väärtusega.

Võrreldes teoreetiliselt arvutatud väärtusega 2,0962 (sek), on meil viga veel ~ 5%. Kuidas neist lahti saada? Mäletate eeldust "jäik ühtlane varras"? Isegi 7 -grammine lisaraskus tundub tühine, see on järelejäänud vea suurim põhjus.

Nüüd liigutame seadet pöörde lähedale. Lähivõtte jaoks vaadake eelmist sammu. Minu loodud logifaili saab alla laadida siit:

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

Käivitage samad analüüsietapid ja saame perioodi 2,089867 (sek), vt joonis 3, mis on peaaegu identne teoreetilise ennustusega. Suurepärane!

Kuna meil on mitte ainult pöörleva nurga mõõtmine, vaid ka güroskoopiline mõõtmine ja kiirendusmõõtur sama kiirusega. Tehke sama analüüs ka kahe teise mõõtmise jaoks, saame tulemused joonistel 4 ja 5. Hinnangud kõigist kolmest mõõtmisallikast on ühel meelel, mis muudab meid meie katse edukamaks.

Siin on tulemus töötava pythoni programmi lõppväljundina:

pendli võnkumine Freq (Hz) = 0,478499, Periood (sek) = 2,089867, hinnanguandmete allikas: samm

pendli võnkumine Freq (Hz) = 0,478499, periood (sek) = 2,089867, hindamisandmete allikas: accel

pendli võnkumine Freq (Hz) = 0,478499, periood (sek) = 2,089867, hinnanguandmete allikas: güroskoop

Viimane mõte selles etapis, kuidas saavad hindamistulemused erinevat sisendandmeallikat kasutades täpselt identsed olla? See on vastuintuitsioon. Jätan selle küsimuse lugejatele. Siin on vihje: mäletate, et kasutame võnkumissageduse hindamiseks lühiajalist FFT-d? Digitaalses domeenis antakse sageduse hinnang ujuva arvu hinnangu asemel diskreetsetes sageduskastides.

Samm: tulevased töösoovitused

Tulevaste töösoovituste kategooriaid on vähe.

Varasemas etapis õnnestub meil oma katseviga vähendada ~ 5% -lt alla 1% -ni, kas saame sellest paremini teha? Märgates, et võnkumise suurus väheneb plahvatuslikult, võib üheks soodustavaks teguriks olla pendli õõtsumisel tekkiv õhutakistus. Aerodünaamilise takistuse vähendamiseks tuleb pendli ristlõiget muuta voolujoonelise kujuga.

Kas saame adaptiivse filtritehnika abil õpitud ajas muutuvat võimendust rakendada konstantse tipusignaali väljastamiseks. Vahepeal korreleerige välisjõudude summutamise suurus.

Vaevalt leiame midagi lihtsamat kui "lihtne harmooniline liikumine". Kas me saame kasutada pendlit analüüsivaid vahendeid, et analüüsida midagi keerulisemat, sportlikku tegevust, veerakettide stardijärjestust jne?

Head häkkimist

Soovitan: