INHOUDSOPGAWE:

Eksperimentele studie van eenvoudige harmoniese beweging: 5 stappe
Eksperimentele studie van eenvoudige harmoniese beweging: 5 stappe

Video: Eksperimentele studie van eenvoudige harmoniese beweging: 5 stappe

Video: Eksperimentele studie van eenvoudige harmoniese beweging: 5 stappe
Video: Yoga voor beginners thuis. Gezond en flexibel lichaam in 40 minuten 2024, Julie
Anonim

Deur arrowlike Volg meer deur die skrywer:

Stap Strandbeest, Java/Python en App Controlled
Stap Strandbeest, Java/Python en App Controlled
Walking Strandbeest, Java/Python en App Controlled
Walking Strandbeest, Java/Python en App Controlled

In die klaskamer gebruik ons gereeld 'n stophorlosie om die slingereksperiment, of 'n eenvoudige harmoniese bewegingseksperiment, uit te voer. Hier is 'n uitdaging, kan ons 'n werklike grafiek van die beweging daarvan maak en sien wat die oombliklike hoekposisie en snelheid is, dit is baie meer inligting en plesier.

Eerste vraag, ons moet besluit die slingerliggaam is 'n gewiglose koord of 'n stewige eenvormige staaf. Die koordbenadering blyk makliker te wees. Uit die praktyk om een te bou, het ek die volgende afwegings: Die maklikste manier om 'n slingerstelsel op te hang, is om dit aan die boonste rand van u deur te hang. Dit gee u slingerlengte van ~ 2 m sonder strukturele bouwerk. Maar die swaai moet nie aan die deuroppervlak raak nie, wat die hele eksperiment eenvoudig verwoes. Die vliegtuig wat dit swaai, moet dus presies parallel wees met u muur-/deuroppervlak. 'N Gewiglose koord is geneig om dun te wees; dit kan maklik draai en die meting van die swaaihoek bemoeilik. Ons wil een meting gebruik om die swaaitoestand voor te stel. Dun koord, soos vislyn, kan elasties en rekbaar wees, wat een van ons belangrikste konstantes beïnvloed wat deur ons gemeet en gebruik word in die vergelyking, die lengte van die slinger. Sommige kan ook deur die temperatuur beïnvloed word. Die gewigmassa wat aan die einde van die koord hang, moet swaar genoeg wees sodat die gewig van die koord weglaatbaar is. Lewer kommentaar as u daarmee saamstem of nie saamstem nie, of as u ander idees oor ontwerp -afwykings het. Om hierdie probleem te bestudeer, benodig ons 'n toestel wat so lig is dat die gewig daarvan geïgnoreer kan word en ons die slingerstelsel steeds as 'n stewige eenvormige staaf beskou. Ek gebruik 'n draagbare elektroniese kontroleerder van COTS, wat die gyro-, versnellingsmeter en hoekinligting aan ons verskaf via 'n Bluetooth -verbinding. Hierdie metings word in 'n datalêer van 'n selfoonprogram gestoor. Daarna ontleed ons die data vir ons eenvoudige harmoniese bewegingseksperiment. Die numeriese analise fokus op die volgende onderwerpe: 1) Voorspel die pendel-ossillasieperiode 2) Versamel die pendulum eenvoudig, eenvoudige harmoniese bewegingseksperimentdata 3) Gebruik kmean om data te groepeer en uitskieters te verwyder in die ontledingsproses 4) Gebruik kort-tyd FFT om te skat die slinger ossillasie frekwensie

Voorrade

Bluetooth -meetapparaat

Android -telefoonprogram: Gaan na die Google Playstore, soek na M2ROBOTS en installeer die beheerprogram. As dit moeilik is om toegang tot Google Playstore te verkry, besoek my persoonlike tuisblad vir 'n alternatiewe aflaai metode

houtstaaf

'n paar 3D -gedrukte dele

saagblaaie of soortgelyke metaalmateriaal

Stap 1: Wat is 'n slinger? Hoe om dit te modelleer?

Daar is baie artikels en boeke wat die afleiding van die slingervergelyking bekendstel, insluitend u fisika -boek van die leergang. Dit is beter dat sulke inhoud nie weer hier herhaal word nie. Slegs die finale gevolgtrekking word hier gelys met betrekking tot die onderwerp "eenvoudige harmoniese beweging". Om die tydperk van 'n slinger te ken, is die lengte van die slinger, aangedui as 'l', in meter.

As ons redelik seker is dat die gewig byna heeltemal aan die einde van 'n gewiglose koord wat in 'n draaipunt hang, geleë is en die slinger in klein hoeke ing swaai, sê minder as 15 °, word die tydperk T1 van so 'n slinger gegee deur:

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

g = gravitasieversnelling, ongeveer 9,8 m/s^2

As die gewiglose koord vervang word deur 'n stywe eenvormige staaf, weer van lengte l, word die eenvoudige harmoniese bewegingsperiode T2 gegee deur T1 = 2*pi*(2l/3g)^0.5

Dit het effektief dieselfde tydperk as 'n gewiglose koordslinger wat twee derdes van die stywe eenvormige staaflengte is.

Dit is die agtergrond, en ons kan begin met die voorbereiding van ons eksperiment.

Stap 2: Berei die onderdele voor vir die bou van hardeware

Berei die onderdele voor vir die bou van hardeware
Berei die onderdele voor vir die bou van hardeware
Berei die onderdele voor vir die bou van hardeware
Berei die onderdele voor vir die bou van hardeware
Berei die onderdele voor vir die bou van hardeware
Berei die onderdele voor vir die bou van hardeware

Om die slingerstruktuur te bou, druk ons 'n paar dele in 3D en herwin iets wat ons reeds het. Die algehele slingerstruktuur word in figuur 1 getoon. Dit is 'n mengsel van dele met 3D -druk, saam met 'n paar handgemaakte dele en 'n lang stuk houtstaaf van Lowe's.

Die 3D -gedrukte deel in figuur 2 hang aan die boonste rand van 'n deur, want ons deur is 'n maklike plat oppervlak vir ons om iets op te hang. STL lêer aflaai skakel:

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

Die groen deel in figuur 3 verbind die houtstaaf met 'n lem, en die lem sit bo -op twee stukke reling wat op die vroeëre 3D -gedrukte deurhanger gemonteer is. STL lêer aflaai skakel:

Die twee stukke spoor word gemaak deur 'n ou saaglem in die helfte te breek, sien Fig. 4. Die deel in Fig. 2 het die regte gleufgrootte daarvoor voorberei. Ideaal gesproke kan ons 'n "V" -vormige inkeping in die twee saagblaaie maak met behulp van 'n lêer. 'N Redelik skerp randmetaal, soos 'n skeermeslem met 'n enkele rand, of enige met die hand gemaakte metaalstuk, kan binne die "V" -vormige kepe sit. Die rede waarom ons 'n kleiner kontakoppervlak benodig, is om die kinetiese energie wat tydens swaai verlore gaan, te verminder.

Die laaste 3D -gedrukte deel in figuur 5 is 'n klein skinkbord om die elektroniese meetapparaat in te hou.

Die aflaai skakel:

Die Bluetooth -meetapparaat genereer hoekberaming, gyro -meting en versnellingsmetermeting. Al hierdie data is vir ons beskikbaar via 'n draadlose Bluetooth -skakel.

Ons gaan verskeie eksperimente uitvoer deur hierdie apparaat op 'n ander posisie van die slingerarm te implementeer en die verskille te sien.

Stap 3: Eksperimentele data -insameling

Eksperimentele data -insameling
Eksperimentele data -insameling
Eksperimentele data -insameling
Eksperimentele data -insameling
Eksperimentele data -insameling
Eksperimentele data -insameling

Daar is twee uitvoerbare metodes vir die insameling van eksperimentele data voordat ons die verworwe datastel ontleed:

1) Gebruik die Android -telefoonprogram wat in die afdeling 'vereistes' gespesifiseer word, om al die metings wat deur die apparaat vervaardig is, in 'n datalêer op die SD -kaart van u telefoon aan te meld. Ons kan die lêer kopieer en die inligting daarna verwerk.

2) Gebruik 'n Bluetooth-rekenaar, 'n rekenaar, 'n skootrekenaar of 'n RaspberryPi-mini-rekenaar om 'n Bluetooth-verbinding met die apparaat te maak en lees die data vir intydse of vanlyn analise.

Daar is beide voor- en nadele vir elke metode; ons gaan albei probeer en die verskil in hierdie instruksies vertel.

Vir metode (1) met behulp van die Android -app, sal die telemetriegegevens wat vanaf die Bluetooth -meetapparaat na die Android -telefoon gestuur word, aangeteken word in 'n dataloglêer met die naam m2flightDatayyyymmdd_hhmmss.txt. Dit kan gevind word in die gids Download/m2LogFiles van u Android -selfoon. Die gids "Download" is 'n bestaande gids in die Android-bedryfstelsel van u telefoon, en "m2LogFiles" is 'n gids wat die app geskep het. Die lêernaaminhoud yyyymmdd_hhmmss is die manier om die begin van die eksperiment (jaar, maand, dag, uur, minuut en sekonde) in die lêernaam te kodeer.

Elke reël in die loglêer is een rekord. Dit begin met die tydstempel van die gebeurtenis, aanhefstring "eam:", gevolg deur 4 drielingdata, wat is:

Die versnelling van die XYZ -as in die versnellingsmeter in harde sensor hardeware registreer herleeswaardes

Gyroscoop XYZ -as -lesing in rou sensor hardeware registreer herleeswaardes

Magnetometer XYZ -asaflees in rou sensor hardeware register herleeswaardes

aan boord beraamde Roll/Pitch/Raw in graad

Die gegewensbestand wat met die rekenaar -python -program geskep is, sal dieselfde datalêerformaat gebruik, sodat die program wat ons in die data -analise -stap gebruik, nie gepla sal word deur die databron wat deur ons luislangprogram of Android -app vervaardig word nie.

Kom ons begin met kodering met behulp van metode (2).

Twee interaksies met die Bluetooth -meetapparaat word verskaf:

1) Python SDK, wat geïnstalleer kan word deur 'pip3 install m2controller', python3 is die taal wat gebruik word. Die voorbeelde van gebruikersaansoekkode word gestoor in https://github.com/xiapeiqing/m2robots/tree/maste… Vir hierdie eksperiment gebruik ons die python script pendulum1.py

2) Java SDK, wat nie in hierdie instruksies gebruik word nie, omdat ons later visualisering en analise van die verworwe slingerdata wil hê, wat 'n bietjie meer moeite kan verg om in Java te programmeer.

Die bronkode van die python3 -data -insamelingsprogram bevat baie opmerkings oor die funksies van die kode. 'N Oorsig van die bronkode word hier verskaf.

#!/usr/bin/env python#-*-kodering: UTF-8-*-vanaf m2controller invoer m2controller vanaf m2controller invoer m2 Constant invoer sein invoer tyd invoer datetime invoer usrCfg invoer slinger2

requestExit = Onwaar

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

#ons wil dieselfde naamkonvensie vir loglêers gebruik, sodat die data -analise -module, pendulum2.py, agnosties kan wees vir hoe ons die logdatalêer kry ################# ################################################ logfilename = " m2flightData%s.txt "%(datetime.datetime.fromtimestamp (time.time ()). strftime ('%Y%m%d_%H%M%S')) dataLogfile = open (logfilename," w ")

def signal_handler (sig, raam):

globale requestExit print ('gebruiker Ctrl-C om programuitvoering te verlaat') requestExit = True signal.signal (signal. SIGINT, signal_handler)

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

#wanneer elke metingsdata teen 'n frekwensie van 20Hz beskikbaar is, word hierdie 'terugbel' -funksie opgeroep ################################ ################################## def callbackfunc (telemetrie): 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, telemetrie ['m_fAccelHwUnit'] [0], telemetrie ['m_fAccelHwUnit'] [1], telemetrie ['m_fAccelHwUnit'] [2], telemetrie ['m_fGyroHwUnit'] [0], telemetrie ['m_fGyroHwUnit'] [1], telemetrie ['m_fGyroHwUnit'] [2], telemetrie ['m_fMagHwUnit'] ['m_fMagHwUnit'] [1], telemetrie ['m_fMagHwUnit'] [2], telemetrie ['m_fRPYdeg'] [0], telemetrie ['m_fRPYdeg'] [1], telemetrie ['m_fRPYdeg'] [2]) ## #################################################### ##############ons druk die data string op die skerm en stoor dit in die log file ####################### ########################################## print (dataStr) dataLogfile.writelines (dataStr)

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

#initialiseer die beheerder, onthou om die veld BleMACaddress in te stel as die MAC -adres van u toestel ################################## #################################TODO: laat ons die BleMACaddress inisialiseer as dit nie deur die gebruiker gestel word nie. kontroleerder = m2controller. BleCtrller (m2Const.etDebian, callbackfunc, usrCfg. BleMACaddress) controller.connect () terwyl True: #################################### ########################################wag vir meetdata geskep en gestuur vanaf die slingermeting apparaat ################################################## ################ controller.m_CommsTunnel.waitForNotifications (1.0) if requestExit: ######################## ##########################################huishouding werk hier as ons klaar is met die aanmelding van data #################################################### ############### controller.stop () dataLogfile.close () break

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

#data -insameling voltooi, laat ons nou die logdata ontleed ######################################### ######################### pendulum2.parseDataLogFile (logfilename)

Vir 'n langtermyn -opdatering, gaan na

Kom ons verduidelik nou die werking daarvan. Hierdie python -program is bo -op 'n pip -installeerbare pakket, met die naam m2controller, geskryf. Die pakket op laer vlak bied terugbelmeganisme, sodat elke ontvangde metingsopdatering die terugbelfunksie wat ons geskryf het, aktiveer en die data in 'n plaaslike loglêer stoor. Die inhoud van die loglêerdata -inhoud is identies aan wat deur die Android -metgesel -app vervaardig word, sodat die dataloglêer wat deur die python -program of die andriod -metgesel -app geskep is, uitruilbaar is.

Die gebruikers-ctrl-C-sein wat deur die bedryfstelsel vasgelê word, word na die program oorgedra en stop die oneindige lus wat wag vir die nuwe aankoms van meetdata.

Tot dusver is die loglêer suksesvol geskep, en hierdie program sal die ontledingsprogram bel om ons eksperimentresultate te bestudeer.

Hier is twee eksperimente, en die vergelyking toon die baie merkbare verskil deur 'n toestel van 7 gram op verskillende plekke aan te sluit.

In figuur 2 gebruik ons 'n skaal om die werklike gewig van hierdie bluetooth -meetapparaat te bepaal.

Figuur 3 toon die pendelopstelling waar die 7gram -toestel aan die onderkant van die slinger geheg is. Die opsetkonfigurasie in Figuur 4 het 'n massa van 7 gram wat baie nader aan die swaaipunt geleë is.

Figuur 5 is 'n close -up van die slingerstruktuur.

Stap 4: Data -analise

Data-analise
Data-analise
Data-analise
Data-analise
Data-analise
Data-analise

Die Bluetooth -meetapparaat weeg ~ 7 gram, wat baie minder weeg as 'n ~ 1,6 meter lange houtstok. Gebruik die aanname van 'starre uniforme staaf', en ons het hierdie pendulumperiodevergelyking, T1 = 2*pi*(2l/3g)^0.5

Om die swaartekrag konstant te kry, kan ons 9,8 m/s^2 gebruik. Maar 'n meer akkurate gravitasiekonstante by 'n gegewe geografiese ligging kan uit hierdie webdiens gehaal word:

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

Vir San Francisco is dit 9,81278m/s^2

Die slingerlengte word gemeet tot 64,5 ''

2*pi*sqrt (2*64.5*0.0254/(3*9.81278)) gee die verwagte slingerperiode van 2.0962 (sek.).

Kom ons kyk of dit ooreenstem met ons eksperimente.

In die eerste eksperiment het die pendelopstelling die 7gram -toestel aan die onderkant van die slinger geheg. My loglêer kan afgelaai word in:

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

Hernoem dit na "PendulumTestData.txt" en plaas dit in dieselfde gids van die python -ontledingsprogram. 'N Oorsig van die bronkode word hier verskaf.

#!/usr/bin/env python#-*-kodering: UTF-8-*-import csv import matplotlib.pyplot as plt plt.style.use ('seaborn-whitegrid') invoer numpy as np vanaf datetime import datetime, timedelta import seaborn as sns from sklearn.cluster import KMeans from Collections invoer Teller ################################### ###############################hierdie funksie voer die data lêer analise werk uit ############# #################################################### ## def parseDataLogFile (datafilename): ########################################### ########################onttrek data in die komma-geskeide data log lêer (CSV) en stoor die inhoud in elke kolom in een float-tipe veranderlike ## #################################################### ############# met oop (datafilenaam) as csvfile: 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 = vir ry in readCSV: probeer: x = datetime.strptime (ry [0].split (',') [0], '%H:%M:%S.%f ') timestampS.append (timedelta (hours = x.hour, minutes = x.minute, seconds = x.second, microseconds = x.microsecond).total_seconds ()) fAccelHwUnit_x.append (float (ry [1] [4:])) fAccelHwUnit_y.append (float (ry [2])) fAccelHwUnit_z.append (float (ry [3])) fGyroHwUnit_x.append (float (ry [4])) fGyroHwUnit_y.append (float (ry [5])) fGyroHwUnit_z.append (float (ry [6])) fMagHwUnit_x.append (float (ry [7])) fMagHwUnit_y.append (float (ry [8])) fMagHwUnit_z.append (float (ry) [9])) fRPYdeg_r.append (float (ry [10])) fRPYdeg_p.append (float (ry [11])) fRPYdeg_y.append (float (ry [12]))) behalwe: slaag tydstempel = np.asarray (tyd tempel) tyd tempel = tyd tempel - tyd tempel [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)

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

#ons benodig 'n akkurate skatting van die bemonsteringsfrekwensie vir 'n presiese skatting van die ossillasieperiode ##################################### ############################ FsHz = getSamplingIntervalS (tydstempel) ################# ################################################ # gebruik toonhoogte -komponent in die houdingsopskrif verwysingsstelseluitvoer vir slingerperiode -analise ####################################### ############################ analyse_timeSequence (tydstempel, fRPYdeg_p, FsHz, 'toonhoogte') ########### #################################################### ####gebruik acceleromter rou meetuitset vir slingerperiode -analise ###################################### ############################ analyse_timeSequence (tydstempel, fAccelHwUnit_x, FsHz, 'accel') ############# #################################################### ####gebruik gyro rou afmetingsuitset vir slingerperiode -analise ###################################### ############################ analyse_timeSequence (tydstempel, fGyroHwUnit_y, FsHz, ' gyro ') print (' klaar, baie geluk:-) ') plt.show () ################################# ###################################in Bluetooth kommunikasie proses, is daar 'n seldsame kans dat die data comm pakket raak verlore#ons gebruik K-gemiddelde om die 20Hz-metingsdata van uitskieters te isoleer, wat veroorsaak word deur pakkie#duik in "sein en stelsel vir meer besonderhede" ################ ################################################# def getSamplingIntervalS (tydstempel): plt.figure () sampleIntervalS = np.diff (timestampS) sns.distplot (sampleIntervalS) plt.ylabel ('histogram') plt.xlabel ('meting interval (s)') clusterCnt = 5 km = KMeans (n_clusters = clusterCnt) km.fit (sampleIntervalS.reshape (-1, 1)) centroids = km.cluster_centers_ elemCnt = Counter (km.labels_) occurrenceCnt = for ii in range (clusterCnt): occurrenceCnt.append (elemCnt [ii]) FsHz = 1/centroids [occurrenceCnt.index (max (occurrenceCnt))] gee FsHz terug

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

#gebruik spektrometer, dit wil sê kort tyd FFT om die frekwensiekomponent te kry, piekbak is ons beste skatting van penduloscillasie ########################## ###################################### def analyse_timeSequence (tydstempel, timeSeqData, FsHz, strComment): fig, (ax1, ax2) = plt.subplotte (nrows = 2) ax1.plot (tydstempel, timeSeqData, merker = 'o', markerfacecolor = 'blou', merkgrootte = 2, kleur = 'hemelsblou', lynwydte = 1) ax1.set_title ("pendulum time domain meting - %s" %strComment) ax1.set_xlabel ("sample time (second)") ax1.set_ylabel (strComment); NFFT = 2048 # die lengte van die venstersegmente

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

ax2.set_title ("spektrogram") ax2.set_xlabel ("monsters") ax2.set_ylabel ("frekwensie (Hz)");

# Die 'specgram' -metode gee 4 voorwerpe terug. Hulle is:

# - Pxx: die periodogram # - freqs: die frekwensievektor # - asblikke: die middelpunte van die tydsbakke.amax (Pxx)) oscFreqHz = freqs [pkresult [0] [0] print ('pendulum ossillation Freq (Hz) =%f, Period (Sec) =%f, estimation data source:%s'%(oscFreqHz, 1/oscFreqHz, strComment)) gee 1/oscFreqHz terug

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

#moet ons hierdie program onafhanklik laat loop, dit wil sê as ons nie deur pendulum1.py genoem word nie,#definieer ons 'n standaard logdatalêernaam wat ontleed moet word ##################### ############################################# if _name_ == "_main_ ": defaultFilename = './PendulumTestData.txt' import os.path if os.path.isfile (defaultFilename): parseDataLogFile (defaultFilename) else: print (" default log file %s not existing " %defaultFilename)

Vir 'n langtermyn -opdatering, gaan na

Die bronkode bevat gedetailleerde opmerkings, laat ons 'n opsomming van die wiskundige skatting hier op 'n hoë vlak gee.

1) Ons lees eers die inhoud van die CSV -lêer op die rekenaar met 'n python -pakket genaamd "csv". Ons het periodieke metings.

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) Aangesien die metingsnelheid so krities is en die ramingsfout van die pendulumperiode direk lei, wil ons dit skat. Ons nominale meetinterval is 50 ms, dit wil sê 20Hz. Gemiddeld oor alle metings lyk dit goed, maar ons verloor af en toe die data -oordragpakket, die opdateringsinterval word 100 ms of 150 ms, …

As ons die voorkoms van hierdie data sien, sien Figuur 1 as 'n mens, kan ons maklik 'n oogbalwaarde van 0,05 sek. Hê. Kan ons egter beter doen as dit?

Ons moet die klassifikasiemetode gebruik om slegs die goedere vir die gemiddelde berekening te kies. Python het 'n gereedskapskas met die naam KMeans om ons te help met groepering, of sê klassifikasie. Hierdie konsepte word in baie groot data- en AI -gebiede gebruik.

3) Figuur 2 bevat twee beelde. Die boonste plot is 'n tyddomeinvolgorde van ons swaaihoekmeting in grade. Deur na die x-as-tydstempel in Tweede te verwys, kan ons ongeveer 22,5 siklusse in 50 sekondes lees, wat neerkom op 2,22 sek. Pendulumperiode. Is daar 'n manier om hierdie proses te outomatiseer en 'n meer akkurate skatting te hê? Ja, ons kan 'n wiskundige instrument genaamd spektrogram gebruik, wat 'n klein stukkie meetdata gebruik en die frekwensie daarvan vertel, sien die figuur hieronder. Die y-as-lesing vir die donkerste lyn is die pendel ossillasie frekwensie. Deur 'n horisontale lyn te wees, bevestig die pendel ossillasie glad nie gedurende die eksperiment nie. Die omgekeerde waarde van die ossillasie frekwensie is die pendel ossillasie periode.

Die finale verslag wat deur die program gemaak is, is 'n teksopsomming:

slinger ossillasie Freq (Hz) = 0.449224, Periode (sek) = 2.226059, skatting databron: toonhoogte

Ons kan vind dat ons vroeëre oogbal -berekening van die hand, 2.22sek, redelik ooreenstem met die programberekende waarde.

In vergelyking met 2.0962 (sek) teoretiese berekende waarde, het ons 'n fout van ongeveer 5%. Hoe om van hulle ontslae te raak? Onthou u dat die aanname 'rigiede uniforme staaf' is? Selfs 'n ekstra gewig van 7 gram lyk triviaal, dit is die grootste oorsaak van die oorblywende fout.

Ons skuif die toestel nou, naby die spilpunt. Sien vorige stap vir 'n close-up foto. Die loglêer wat ek geskep het, kan hier afgelaai word:

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

Voer dieselfde ontledingsstappe uit, en ons kry 'n tydperk van 2.089867 (sek), sien figuur 3, wat byna identies is aan die teoretiese voorspelling. Puik!

Aangesien ons nie net swaaihoekmeting nie, maar ook gyroskopiese meting en versnellingsmetermeting teen dieselfde tempo het. Voer dieselfde analise uit vir die ander twee metings; ons kry resultate in figuur 4 en 5. Skattings uit al drie meetbronne stem ooreen, wat ons meer vertroue in die sukses van ons eksperiment gee.

Hier is die resultaat as die finale uitset van die python -program wat loop:

slinger ossillasie Freq (Hz) = 0.478499, Periode (sek) = 2.089867, skatting databron: toonhoogte

slinger ossillasie Freq (Hz) = 0.478499, Periode (sek) = 2.089867, skatting databron: accel

slinger ossillasie Freq (Hz) = 0.478499, Periode (sek) = 2.089867, skattingsdatabron: gyro

Laaste gedagte in hierdie stap, hoe kan die skattingsresultate presies identies wees met behulp van verskillende insetdatabron? Dit is teen-intuïsie. Ek sal hierdie vraag aan die lesers oorlaat. Hier is 'n wenk: onthou ons dat ons die korttermyn-FFT gebruik om die ossillasiefrekwensie te skat? In digitale domein word die frekwensieberaming in diskrete frekwensiebakke gegee in plaas van 'n swewende getalberaming.

Stap 5: Aanbevelings vir toekomstige werk

Daar is min kategorieë toekomstige werkaanbevelings.

In die vorige stap slaag ons daarin om ons eksperimentfout van ~ 5% tot minder as 1% te verminder, kan ons dit beter doen? As u agterkom dat die grootte van die ossillasie eksponensieel afneem, kan die lugweer veroorsaak word deur die slinger te swaai. Die dwarssnit van die slinger moet moontlik aangepas word om 'n vaartbelynde vorm te hê om die aërodinamiese weerstand te verminder.

Kan ons 'n tydsveranderende versterking toepas wat aangeleer is deur gebruik te maak van adaptiewe filtertegnieke om 'n konstante piekgrootte-sein uit te voer? In die tussentyd, korreleer die grootte verswakking sal eksterne kragte.

Ons vind skaars iets eenvoudiger as die 'eenvoudige harmoniese beweging'. Kan ons die fasiliteite wat ons die slinger ontleed, gebruik om iets ingewikkelder, 'n sportaktiwiteit, 'n waterraket -lanseervolgorde, ens.

Gelukkige inbraak

Aanbeveel: