Obsah:

Experimentální studie jednoduchého harmonického pohybu: 5 kroků
Experimentální studie jednoduchého harmonického pohybu: 5 kroků

Video: Experimentální studie jednoduchého harmonického pohybu: 5 kroků

Video: Experimentální studie jednoduchého harmonického pohybu: 5 kroků
Video: Útěk z iluze: Bernardo Kastrup odhaluje realitu 2024, Červenec
Anonim

Podle arrowlikeSledovat více od autora:

Walking Strandbeest, Java/Python a aplikace ovládané
Walking Strandbeest, Java/Python a aplikace ovládané
Walking Strandbeest, Java/Python a aplikace ovládané
Walking Strandbeest, Java/Python a aplikace ovládané

Ve třídě často používáme stopky k provádění kyvadlového experimentu nebo jednoduchého experimentu s harmonickým pohybem. Zde je výzva, můžeme vytvořit skutečný graf jeho pohybu a zjistit, jaká je okamžitá úhlová poloha a rychlost, to je mnohem více informací a zábavy.

První otázka, musíme se rozhodnout, že kyvadlovým tělesem je beztížná šňůra nebo tuhá uniformní tyč. Šňůrový přístup se zdá být jednodušší. Z praxe budování jednoho mám následující úvahy o kompromisu: Nejjednodušší způsob, jak zavěsit kyvadlový systém, může být zavěšení na horní hranu vašich dveří. Díky tomu bude vaše kyvadlo ~ 2 m dlouhé, aniž byste museli provádět jakékoli stavební práce. Ale potřebuje, aby se houpačka nedotkla povrchu dveří, což celý experiment jednoduše zničí. Rovina, ve které se pohybuje, by tedy měla být přesně rovnoběžná s povrchem vaší stěny/dveří. Beztížný kabel má tendenci být tenký, může se snadno otáčet a komplikovat měření úhlu kyvu. Chceme použít jedno měření k vyjádření stavu švihu. Tenká šňůra, jako je rybí šňůra, může být elastická a roztažitelná, což ovlivňuje jednu z našich nejdůležitějších konstant naměřených námi a použitých v rovnici, což je délka kyvadla. Některé mohou být také ovlivněny teplotou. Hmotnost závaží visící na konci šňůry musí být dostatečně těžká, aby se hmotnost šňůry stala zanedbatelnou. Pokud s nimi souhlasíte nebo nesouhlasíte, nebo máte jiné nápady na kompromis v oblasti designu, vyjádřete se prosím v komentářích. Ke studiu tohoto problému potřebujeme zařízení, které je tak lehké, že jeho hmotnost může být ignorována, a stále považujeme kyvadlový systém za tuhou uniformní tyč. Používám elektronický ovladač COTS nositelný, který nám prostřednictvím připojení Bluetooth dodává informace o gyroskopu, akcelerometru a úhlu. Tato měření budou uložena do datového souboru aplikace pro mobilní telefon. Poté analyzujeme data pro náš jednoduchý experiment s harmonickým pohybem. Numerická analýza se zaměřuje na následující témata: 1) Předpovídejte dobu oscilace kyvadla 2) Programově sbírejte data kyvadla s jednoduchým harmonickým pohybovým experimentem 3) Pomocí kmean seskupte data a odstraňte odlehlé hodnoty v procesu analýzy 4) K odhadu použijte krátkodobý FFT frekvence oscilace kyvadla

Zásoby

Bluetooth měřicí zařízení

Aplikace pro telefon Android: Přejděte do obchodu Google Playstore, vyhledejte M2ROBOTS a nainstalujte si ovládací aplikaci. V případě, že je přístup do obchodu Google Playstore obtížný, navštivte moji osobní domovskou stránku, kde najdete alternativní způsob stahování aplikace

dřevěná tyč

několik 3D tištěných dílů

pilové kotouče nebo podobný kovový materiál

Krok 1: Co jsou kyvadla? Jak to vymodelovat?

Existuje mnoho článků a knih, které zavádějí odvození rovnice kyvadla, včetně vaší knihy fyziky kurikula. Možná by bylo lepší, kdyby se tu takový obsah neopakoval. Zde je uveden pouze konečný závěr týkající se tématu „jednoduchého harmonického pohybu“. Abychom poznali období kyvadla, potřebujeme znát pouze délku kyvadla, označovanou jako „l“, v metrech.

Pokud jsme si přiměřeně jisti, že se závaží nachází téměř úplně na konci beztížného lana visícího v čepu a kyvadlo se kývá v malých úhlech θ, řekněme méně než 15 °, je perioda T1 takového kyvadla dána vztahem:

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

g = gravitační zrychlení, přibližně 9,8 m/s^2

Pokud je beztížná šňůra nahrazena tuhou uniformní tyčí, opět o délce l, je její jednoduchá harmonická perioda pohybu T2 dána vztahem T1 = 2*pi*(2l/3g)^0,5

Účinně má stejnou periodu jako beztížné lankové kyvadlo, což jsou dvě třetiny tuhé rovnoměrné délky tyče.

Toto je pozadí a můžeme začít připravovat náš experiment.

Krok 2: Příprava dílů pro stavbu hardwaru

Připravte si díly pro stavbu hardwaru
Připravte si díly pro stavbu hardwaru
Připravte si díly pro stavbu hardwaru
Připravte si díly pro stavbu hardwaru
Připravte si díly pro stavbu hardwaru
Připravte si díly pro stavbu hardwaru

Abychom vytvořili kyvadlovou strukturu, 3D díly vytiskneme a recyklujeme něco, co již máme. Celková struktura kyvadla je znázorněna na obr.1. Je to směs dílů pro 3D tisk spolu s některými ručně vyrobenými díly a dlouhým kusem dřevěného prutu od Lowe’s.

3D vytištěná část na obr. 2 visí na horním okraji dveří, protože naše dveře jsou pro nás snadným plochým povrchem pro zavěšení něčeho. Odkaz na stažení souboru STL:

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

Zelená část na obr. 3 spojuje dřevěnou tyč s čepelí a čepel sedí nahoře na dvou kusech kolejnice namontovaných na dřívějším 3D tištěném závěsu dveří. Odkaz na stažení souboru STL:

Dva kusy kolejnice jsou vyrobeny zlomením starého pilového kotouče na polovinu, viz obr. 4. Část na obr. 2 pro ně připravila správnou velikost štěrbiny. V ideálním případě můžeme v těchto dvou pilových kotoučích pomocí pilníku vytvořit zářez ve tvaru „V“. Do zářezů ve tvaru písmene „V“se vejde přiměřeně ostrý kov, jako je žiletka s jednou hranou nebo jakýkoli ručně vyrobený kovový kus. Důvod, proč potřebujeme menší kontaktní plochu, je snížit kinetickou energii ztracenou při švihu.

Poslední 3D tištěná část na obr. 5 je malá přihrádka pro uložení elektronického měřicího zařízení.

Odkaz ke stažení:

Přístroj pro měření bluetooth generuje odhad úhlu, gyroskopické měření a měření akcelerometru. Všechna tato data jsou nám k dispozici prostřednictvím bezdrátového připojení bluetooth.

Provedeme několik experimentů rozmístěním tohoto zařízení do jiné polohy kyvadlového ramene a uvidíme rozdíly.

Krok 3: Sběr dat experimentu

Sběr dat experimentu
Sběr dat experimentu
Sběr dat experimentu
Sběr dat experimentu
Sběr dat experimentu
Sběr dat experimentu

Než analyzujeme získanou datovou sadu, existují dvě proveditelné metody pro experimentální sběr dat:

1) Pomocí aplikace pro telefon Android uvedené v sekci požadavků zaznamenejte všechna měření vytvořená zařízením do datového souboru uloženého na SD kartě vašeho telefonu. Můžeme zkopírovat soubor a následně zpracovat informace.

2) Pomocí počítače s podporou bluetooth, počítače, notebooku nebo minipočítače RaspberryPi navažte připojení bluetooth k zařízení a načtěte data pro analýzu v reálném čase nebo offline.

Pro každou metodu existují klady i zápory, vyzkoušíme obě a zjistíme rozdíl v tomto pokynu.

U metody (1) používající aplikaci pro Android, jakmile se nacházíme v rozhraní pro ovládání aplikace pro Android, budou telemetrická data odeslaná z měřicího zařízení bluetooth do telefonu s Androidem zaznamenána do souboru protokolu dat s názvem m2flightDatayyyymmdd_hhmmss.txt. Najdete ho ve složce Download/m2LogFiles ve vašem telefonu Android. Složka „Stáhnout“je již existující složkou v operačním systému Android vašeho telefonu a „m2LogFiles“je složka, kterou aplikace vytvořila. Název souboru yyyymmdd_hhmmss je způsob, jak v názvu souboru zakódovat čas zahájení experimentu (rok, měsíc, den, hodina, minuta a s).

Každý řádek v souboru protokolu je jeden záznam. Začíná časovým razítkem události, preambulovým řetězcem „eam:“, za nímž následují 4 tripletová data, kterými jsou:

Čtení osy XYZ akcelerometru v hodnotách zpětného čtení hardwarového registru surového snímače

Čtení osy XYZ gyroskopu v hodnotách zpětného čtení hardwarového registru surového snímače

Čtení osy magnetometru osy XY v hodnotách zpětného čtení hardwarového registru hardwaru

palubní odhadovaný Roll/Pitch/Raw ve stupních

Datový soubor vytvořený pomocí počítačového programu python bude používat stejný formát datového souboru, takže program, který používáme v kroku analýzy dat, nebude obtěžován zdrojem dat vytvářeným naším programem python nebo aplikací pro Android.

Začněme kódovat pomocí metody (2).

Pro interakci s bluetooth měřicím zařízením jsou k dispozici dvě varianty SDK:

1) Python SDK, který lze nainstalovat pomocí „pip3 install m2controller“, je použitým jazykem python3. Příklady kódu uživatelské aplikace jsou uloženy v https://github.com/xiapeiqing/m2robots/tree/maste… Pro tento experiment použijeme python skript pendulum1.py

2) Java SDK, která se v tomto návodu nepoužívá, protože chceme pozdější vizualizaci a analýzu získaných dat kyvadla, což by pro nás mohlo vyžadovat trochu více úsilí při programování v Javě.

Zdrojový kód programu pro sběr dat python3 obsahuje mnoho komentářů k podrobnostem o funkcích kódu. Zde je uveden snímek zdrojového kódu.

#!/usr/bin/env python#-*-kódování: UTF-8-*-z m2controller import m2controller z m2controller import m2Const import signálu import čas import datetime import usrCfg import pendulum2

requestExit = False

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

#chceme použít stejnou konvenci pojmenování souborů protokolu, aby modul pro analýzu dat, pendulum2.py, mohl být agnostický k tomu, jak získáme soubor dat protokolu #################### ####################################################### logfilename = " m2flightData%s.txt "%(datetime.datetime.fromtimestamp (time.time ()). strftime ('%Y%m%d_%H%M%S')) dataLogfile = otevřeno (název_logu,„ w ")

def signal_handler (sig, frame):

global requestExit print ('user Ctrl-C to exit program execution') requestExit = True signal.signal (signal. SIGINT, signal_handler)

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

#jakmile budou k dispozici všechna měřicí data s frekvencí 20 Hz, bude vyvolána tato funkce „zpětného volání“################################## ###################################### 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, telemetry ['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_fMagHwUry'] ['m_fMagHwUnit'] [1], telemetrie ['m_fMagHwUnit'] [2], telemetrie ['m_fRPYdeg'] [0], telemetrie ['m_fRPYdeg'] [1], telemetrie ['m_fRPYdeg'] [2]) ## ############################################################################# ###############vytiskneme datový řetězec na obrazovku a uložíme jej do souboru protokolu ######################## ################################################# print (dataStr) dataLogfile.writelines (dataStr)

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

#inicializujte ovladač, nezapomeňte nastavit pole BleMACaddress na MAC adresu vašeho zařízení ##################################### #####################################TODO: inicializujeme BleMACadresu, pokud ji nenastavuje uživatel. controller = m2controller. BleCtrller (m2Const.etDebian, callbackfunc, usrCfg. BleMACaddress) controller.connect () while True: ############################## #############################################počkejte, až budou naměřená data vytvořena a odeslána z kyvadlového měření aparát ########################################################################### ################ controller.m_CommsTunnel.waitForNotifications (1.0) if requestExit: ############################ #################################################################################################################################################### ############################################################################# ############### controller.stop () dataLogfile.close () break

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

#sběr dat dokončen, nyní pojďme analyzovat data protokolu ############################################ ############################# pendulum2.parseDataLogFile (logfilename)

Chcete -li dlouhodobou aktualizaci, podívejte se na

Nyní si vysvětlíme způsob jeho fungování. Tento program pythonu je napsán na vrcholu instalovatelného balíčku pip s názvem m2controller. Balíček nižší úrovně nabízí mechanismus zpětného volání, takže každá přijatá aktualizace měření spustí funkci zpětného volání, kterou jsme napsali, a uloží data do místního souboru protokolu. Formát datového obsahu souboru protokolu je identický s tím, co vytváří doprovodná aplikace pro Android, takže soubor protokolu dat vytvořený buď programem python, nebo doprovodnou aplikací andriod je vyměnitelný.

Uživatelský signál ctrl-C, zachycený operačním systémem, je předán do programu a zastaví nekonečnou smyčku čekající na nový příchod naměřených dat.

Doposud byl soubor protokolu úspěšně vytvořen a tento program zavolá analytický program, aby studoval výsledky našich experimentů.

Zde jsou dva experimenty a srovnání ukazuje velmi znatelný rozdíl připojením 7gramového zařízení na různá místa.

Na obr. 2 používáme váhu k určení skutečné hmotnosti tohoto bluetooth měřicího přístroje.

Na obr. 3 je znázorněno nastavení kyvadla, kde je 7gramové zařízení připevněno ke spodnímu konci kyvadla. Konfigurace nastavení na obr.4 má hmotnost 7 gramů umístěnou mnohem blíže k výkyvnému čepu.

Obr. 5 je detailní pohled na kyvadlovou strukturu.

Krok 4: Analýza dat

Analýza dat
Analýza dat
Analýza dat
Analýza dat
Analýza dat
Analýza dat

Bluetooth měřící přístroj váží ~ 7 gramů, což váží mnohem méně než ~ 1,6 metru dlouhý dřevěný klacek. Použijte předpoklad „tuhé rovnoměrné tyče“a máme tuto rovnici s periodou kyvadla, T1 = 2*pi*(2l/3g)^0,5

Abychom získali gravitační konstantu, můžeme použít 9,8 m/s^2. Ale přesnější gravitační konstantu v jakékoli dané geolokaci lze získat z této webové služby:

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

Pro San Francisco je to 9,81278 m/s^2

Délka kyvadla je měřena na 64,5 ''

2*pi*sqrt (2*64,5*0,0254/(3*9,81278)) dává očekávané období kyvadla 2,0962 (s).

Podívejme se, zda souhlasí s našimi experimenty.

V 1. experimentu má nastavení kyvadla zařízení 7 gramů připojené k dolnímu konci kyvadla. Můj soubor protokolu lze stáhnout v:

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

Přejmenujte jej na „PendulumTestData.txt“a vložte jej do stejné složky programu pro analýzu pythonu. Zde je uveden snímek zdrojového kódu.

#!/usr/bin/env python#-*-kódování: UTF-8-*-import csv import matplotlib.pyplot jako plt plt.style.use ('seaborn-whitegrid') import numpy jako np z datetime import datetime, timedelta import seaborn jako sns ze sklearn.cluster import KMeans from collections import Counter ###################################### ###################################tato funkce spouští práci s datovými soubory ############## ############################################################################# ## def parseDataLogFile (název_souboru dat): ################################################# ##########################extrahujte data v souboru protokolu dat odděleném čárkami (CSV) a uložte obsah v každém sloupci do jedné proměnné typu float ## ############################################################################# ############# s otevřeným (datafilename) jako 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 = pro řádek v readCSV: try: x = datetime.strptime (řádek [0].split (',') [0], '%H:%M:%S.%f ') timestampS.append (timedelta (hodiny = x.hodina, minuty = x.minuta, sekundy = x.sekunda, mikrosekundy = x mikrosekunda).total_seconds ()) fAccelHwUnit_x.append (float (řádek) [1] [4:])) fAccelHwUnit_y.append (float (řádek [2])) fAccelHwUnit_z.append (float (řádek [3])) fGyroHwUnit_x.append (float (řádek [4])) fGyroHwUnit_y.append (float (řádek [5])) fGyroHwUnit_z.append (float (řádek [6])) fMagHwUnit_x.append (float (řádek [7])) fMagHwUnit_y.append (float (řádek [8])) fMagHwUnit_z.append (float (řádek [9])) fRPYdeg_r.append (float (řádek [10])) fRPYdeg_p.append (float (řádek [11])) fRPYdeg_y.append (float (řádek [12])) kromě: pass timestampS = np.asarray (časová razítka) časové značky = časové značky - časová razítka [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)

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

#pro přesný odhad období oscilace potřebujeme přesný odhad vzorkovací frekvence ####################################### ################################ FsHz = getSamplingIntervalS (timestampS) ################## ######################################################### ## komponenta rozteče ve výstupu referenčního systému pro směr kyvadla pro analýzu kyvadlového období ########################################## ############################### analyze_timeSequence (timestampS, fRPYdeg_p, FsHz, 'pitch') ############# ############################################################################# ####použijte akceleromterový surový měřicí výstup pro analýzu kyvadlového období ########################################## ############################### analyze_timeSequence (timestampS, fAccelHwUnit_x, FsHz, 'accel') ############# ############################################################################# ####použijte gyroskopický surový měřicí výstup pro analýzu kyvadlového období ########################################## ############################### analyze_timeSequence (timestampS, fGyroHwUnit_y, FsHz, ' gyro ') tisk (' hotovo, gratuluji:-) ') plt.show () ################################### #########################################v procesu bluetooth komunikace, existuje vzácná šance, že by datový komunikační paket mohl být ztracen#používáme K-mean k izolaci 20Hz měřicích dat od odlehlých hodnot, které jsou způsobeny vynecháním paketu#ponor do „signálu a systému pro více podrobností“################## ########################################################################################################################################################################################################################## (timestampS): plt.figure () sampleIntervalS = np.diff (timestampS) sns.distplot (sampleIntervalS) plt.ylabel ('histogram') plt.xlabel ('measurement interval (s)') clusterCnt = 5 km = KMeans (n_clusters = clusterCnt) km.fit (sampleIntervalS.reshape (-1, 1)) centroidy = km.cluster_centers_ elemCnt = Counter (km.labels_) výskytCnt = pro ii v dosahu (clusterCnt):]) FsHz = 1/centroidy [výskytCnt.index (max (výskytCnt))] návrat FsHz

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

#použijte spektrometr, tj. krátký čas FFT k získání frekvenční složky, vrchol píku je náš nejlepší odhad oscilace kyvadla ############################# ################################################ analyze_timeSequence (timestampS, timeSeqData, FsHz, strComment): obr, (ax1, ax2) = plt.subplots (nrows = 2) ax1.plot (timestampS, timeSeqData, marker = 'o', markerfacecolor = 'blue', markersize = 2, color = 'skyblue', linewidth = 1) ax1.set_title ("měření časové domény kyvadla - %s" %strComment) ax1.set_xlabel ("vzorkovací čas (druhý)") ax1.set_ylabel (strComment); NFFT = 2048 # délka segmentů okna

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

ax2.set_title ("Spectrogram") ax2.set_xlabel ("vzorky") ax2.set_ylabel ("frekvence (Hz)");

# Metoda `specgram` vrací 4 objekty. Oni jsou:

# - Pxx: periodogram # - frekvence: vektor frekvence # - zásobníky: centra časových zásobníků # - im: instance matplotlib.image. AxesImage představující data v grafu pkresult = np.where (Pxx == np.amax (Pxx)) oscFreqHz = freqs [pkresult [0] [0] tisk ('oscilace kyvadla Freq (Hz) =%f, Perioda (Sec) =%f, odhad datového zdroje:%s'%(oscFreqHz, 1/oscFreqHz, strComment)) návrat 1/oscFreqHz

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

#měli bychom tento program spustit nezávisle, tj. bez volání pendulum1.py,#definujeme výchozí název souboru dat protokolu, který se má analyzovat ###################### ################################################### 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)

Chcete -li dlouhodobou aktualizaci, podívejte se na

Zdrojový kód obsahuje podrobné komentáře, pojďme zde poskytnout souhrn matematických odhadů na vysoké úrovni.

1) Nejprve načteme obsah souboru CSV do počítače pomocí balíčku pythonu s názvem „csv“. Máme periodické měření.

21: 34: 26,362, paprsek: 0, -128, 14464, -8, 144, -96, 2112, -1280, 1664, -0,5, -5,5, 40,5

21: 34: 26,373, paprsek: 128, 0, 14272, -8, 136, 40, 2112, -1280, 1664, -0,5, -6,5, 40,0

21: 34: 26,412, paprsek: 448, -64, 14208, -8, 136, 24, 2176, -1280, 1664, -0,5, -7,5, 40,5

21: 34: 26,462, paprsek: 448, -128, 14272, -8, 120, 16, 2176, -1280, 1664, -0,5, -8,0, 40,5

2) Protože je rychlost měření tak kritická a přímo zavádí chybu odhadu období kyvadla, chceme je odhadnout. Náš nominální interval měření je 50 ms, tj. 20 Hz. Průměr za všechna měření se zdá být v pořádku, ale příležitostně ztrácíme paket pro přenos dat, interval aktualizace je 100 ms nebo 150 ms,…

Pokud vykreslíme výskyt těchto dat, viz obr. 1, jako člověk, můžeme snadno dosáhnout oční bulvy 0,05 s. Můžeme to však udělat lépe?

Musíme použít klasifikační metodu k výběru pouze těch dobrých pro zprůměrování výpočtu. Python má sadu nástrojů s názvem KMeans, která nám pomáhá s klastrováním nebo řekněme klasifikací. Tyto koncepty se používají v mnoha oblastech velkých dat a AI.

3) Obr.2 obsahuje dva obrázky. Horní graf je sekvence časové domény našeho měření úhlu kývání ve stupních. S odkazem na časové razítko osy x ve vteřině můžeme přečíst přibližně 22,5 cyklů za 50 sekund, což v překladu znamená 2,22 s období kyvadla. Existuje způsob, jak automatizovat tento proces a získat přesnější odhad? Ano, můžeme použít matematický nástroj zvaný spektrogram, který využívá malý kus naměřených dat a sděluje nám jeho frekvenci, viz obrázek níže. Čtení osy y pro nejtmavší čáru je frekvence oscilace kyvadla. Být horizontální čárou potvrzuje, že oscilace kyvadla se během experimentu vůbec nezměnila. Inverzní hodnota frekvence kmitání je perioda oscilace kyvadla.

Závěrečná zpráva vytvořená programem je textové shrnutí:

oscilace kyvadla Freq (Hz) = 0,449224, perioda (s) = 2,226059, zdroj dat odhadu: výška

Můžeme zjistit, že náš předchozí výsledek výpočtu oční bulvy, 2,22 s, je docela konzistentní s vypočítanou hodnotou programu.

Ve srovnání s teoreticky vypočítanou hodnotou 2,0962 (s) máme zbývající chybu ~ 5%. Jak se jich zbavit? Pamatujete na předpoklad „tuhá uniformní tyč“? I 7 gramů hmotnosti navíc se zdá triviální, je to největší příčina zbývající chyby.

Nyní přesouváme zařízení v blízkosti čepu. Detailní fotografii najdete v předchozím kroku. Soubor protokolu, který jsem vytvořil, lze stáhnout zde:

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

Proveďte stejné kroky analýzy a dostaneme období 2,089867 (s), viz obr. 3, které je téměř totožné s teoretickou predikcí. Skvělý!

Protože máme nejen měření úhlu výkyvu, ale také gyroskopické měření a měření akcelerometru stejnou rychlostí. Proveďte stejnou analýzu pro další dvě měření, výsledky získáme na obr.4 a 5. Odhady ze všech tří zdrojů měření souhlasí, což nám dává větší jistotu v úspěch našeho experimentu.

Zde je výsledek jako konečný výstup spuštěného programu python:

oscilace kyvadla Freq (Hz) = 0,478499, Perioda (s) = 2,089867, zdroj dat odhadu: výška

oscilace kyvadla Freq (Hz) = 0,478499, Perioda (s) = 2,089867, odhad datového zdroje: accel

oscilace kyvadla Freq (Hz) = 0,478499, Perioda (s) = 2,089867, zdroj dat odhadu: gyroskop

Poslední myšlenka v tomto kroku, jak mohou být výsledky odhadů přesně totožné s použitím jiného zdroje vstupních dat? To je proti-intuice. Tuto otázku nechám na čtenářích. Zde je nápověda: pamatujete, že používáme krátkodobý FFT k odhadu frekvence oscilací? V digitální doméně je odhad frekvence uveden v diskrétních frekvenčních přihrádkách místo odhadu s pohyblivým číslem.

Krok 5: Doporučení budoucí práce

Existuje několik kategorií doporučení pro budoucí práci.

V předchozím kroku se nám podařilo snížit chybu experimentu z ~ 5% na méně než 1%, můžeme to udělat lépe? Všimněte si, že velikost oscilace klesá exponenciálně, jedním z faktorů, který může přispět, je odpor vzduchu způsobený při kývání kyvadla. Možná bude nutné upravit průřez kyvadla, aby měl aerodynamický tvar, aby se snížil aerodynamický odpor.

Můžeme použít časově proměnlivý zisk získaný pomocí technik adaptivního filtru pro výstup konstantního signálu špičkové velikosti. Mezitím korelujte s útlumem velikosti vnější síly.

Těžko můžeme najít něco jednoduššího než „jednoduchý harmonický pohyb“. Můžeme pomocí zařízení, která analyzujeme kyvadlo, analyzovat něco komplikovanějšího, sportovní aktivitu, sekvenci startu vodní rakety atd.?

Šťastné hackování

Doporučuje: