Taula de continguts:

Estudi experimental del moviment harmònic simple: 5 passos
Estudi experimental del moviment harmònic simple: 5 passos

Vídeo: Estudi experimental del moviment harmònic simple: 5 passos

Vídeo: Estudi experimental del moviment harmònic simple: 5 passos
Vídeo: Axiom Shaken | Critical Role | Campaign 3, Episode 43 2024, Juliol
Anonim

Per arrowlike Segueix-ne més per l'autor:

Walking Strandbeest, Java / Python i aplicació controlada
Walking Strandbeest, Java / Python i aplicació controlada
Walking Strandbeest, Java / Python i aplicació controlada
Walking Strandbeest, Java / Python i aplicació controlada

A l’aula, sovint fem servir un cronòmetre per dur a terme l’experiment del pèndol o un experiment de moviment harmònic simple. Aquí hi ha un repte: podem produir un gràfic real del seu moviment i veure quina és la posició angular instantània i la velocitat, això és molta més informació i diversió.

Primera pregunta, hem de decidir que el cos del pèndol és un cordó sense pes o una vareta rígida i uniforme. L’aproximació al cable sembla ser més fàcil. Des de la pràctica de construir-ne un, tinc les següents consideracions de compensació: La forma més senzilla de penjar un sistema de pèndol pot ser penjar-lo a la vora superior de la porta. Això proporciona una longitud de pèndol de ~ 2 m sense fer cap obra estructural. Però sí que necessita que el gronxador no toqui la superfície de la porta, cosa que simplement arruïna tot l’experiment. De manera que el pla que gira ha de ser paral·lel amb precisió a la superfície de la paret / porta. Un cable sense pes tendeix a ser prim, pot girar fàcilment i complica la mesura de l'angle de balanceig. Volem utilitzar una mesura per representar l’estat de swing. El cordó prim, com la línia de peix, pot ser elàstic i estirable, que afecta una de les nostres constants més importants mesurades per nosaltres i utilitzades en l’equació, que és la longitud del pèndol. Alguns també es poden veure afectats per la temperatura. La massa de pes penjada a l'extrem del cordó ha de ser prou pesada perquè el pes del cordó sigui insignificant. Si us plau, feu un comentari si hi esteu d’acord o en desacord, o si teniu altres idees de compensació del disseny. Per estudiar aquest problema, necessitem un dispositiu tan lleuger que es pugui ignorar el seu pes i encara tractem el sistema del pèndol com una vareta rígida i uniforme. Estic fent servir un controlador electrònic portàtil COTS, que ens proporciona la informació del giroscopi, l’acceleròmetre i l’angle mitjançant la connexió Bluetooth. Aquestes mesures s’emmagatzemaran en un fitxer de dades de l’aplicació de telefonia mòbil. Després d'això, analitzarem les dades del nostre senzill experiment de moviment harmònic. L'anàlisi numèrica se centra en els temes següents: 1) Predir el període d'oscil·lació del pèndol 2) Recollir de forma programada les dades de l'experiment de moviment harmònic senzill del pèndol 3) Utilitzeu kmean per agrupar dades i eliminar valors atípics en el procés d'anàlisi 4) Utilitzeu FFT a curt termini per estimar la freqüència d’oscil·lació del pèndol

Subministraments

Aparell de mesura Bluetooth

Aplicació per a telèfons Android: aneu a Google Playstore, cerqueu M2ROBOTS i instal·leu l'aplicació de control. En cas que sigui difícil accedir a Google Playstore, visiteu la meva pàgina d'inici personal per obtenir el mètode alternatiu de descàrrega d'aplicacions

vareta de fusta

poques parts impreses en 3D

fulles de serra o material metàl·lic similar

Pas 1: què són els pèndols? Com modelar-lo?

Hi ha molts articles i llibres que introdueixen la derivació de l'equació del pèndol, inclòs el llibre de física del currículum. És millor que aquest contingut no es torni a repetir aquí. Aquí només s’enumera la conclusió final sobre el tema del "moviment harmònic simple". Per conèixer el període d’un pèndol, tot el que hem de saber és la longitud del pèndol, denotada com a "l", en metres.

Si estem raonablement segurs que el pes es troba gairebé completament al final d’un cordó sense pes penjat en un pivot i el pèndol oscil·la en petits angles θ, diguem que menys de 15 °, el període T1 d’aquest pèndol ve donat per:

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

g = acceleració de la gravetat, aproximadament 9,8 m / s ^ 2

Si el cable sense pes es substitueix per una barra uniforme rígida, de nou de longitud l, el seu període de moviment harmònic simple T2 ve donat per T1 = 2 * pi * (2l / 3g) ^ 0,5

Efectivament té el mateix període que un pèndol de cordó sense pes que és de dos terços de la longitud de la barra uniforme rígida.

Aquests són els antecedents i podem començar a preparar el nostre experiment.

Pas 2: prepareu les peces per a la construcció de maquinari

Prepareu les peces per a la construcció de maquinari
Prepareu les peces per a la construcció de maquinari
Prepareu les peces per a la construcció de maquinari
Prepareu les peces per a la construcció de maquinari
Prepareu les peces per a la construcció de maquinari
Prepareu les peces per a la construcció de maquinari

Per construir l’estructura del pèndol, imprimim en 3D algunes parts i reciclem alguna cosa que ja tenim. L’estructura general del pèndol es mostra a la figura 1. És una barreja de peces d’impressió 3D junt amb algunes peces fetes a mà i un llarg tros de vareta de fusta de Lowe.

La part impresa en 3D de la figura 2 es penja a la vora superior d’una porta, perquè la nostra porta és una superfície plana fàcil per penjar alguna cosa. Enllaç de descàrrega del fitxer STL:

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

La part verda de la figura 3 connecta la vareta de fusta a una fulla i la fulla es troba a la part superior de dues peces de carril muntades al penjador de portes imprès en 3D anterior. Enllaç de descàrrega del fitxer STL:

Els dos trossos de carril es fan trencant una vella fulla de serra per la meitat, vegeu la figura 4. La peça de la figura 2 els ha preparat la mida adequada de la ranura. L'ideal és que puguem fer una osca en forma de "V" en aquestes dues fulles de serra mitjançant un fitxer. Un metall de vores raonablement esmolades, com ara una fulla d'afaitar d'una sola vora o qualsevol peça de metall feta a mà, pot asseure's dins de les osques en forma de "V". La raó per la qual necessitem una àrea de contacte més petita és reduir l’energia cinètica perduda durant el balanceig.

La darrera part impresa en 3D de la figura 5 és una safata petita per contenir l’aparell de mesura electrònic.

L'enllaç de descàrrega:

L’aparell de mesura bluetooth genera una estimació de l’angle, una mesura giroscòpica i un mesurament de l’acceleròmetre. Totes aquestes dades estan disponibles a través d’un enllaç sense fil Bluetooth.

Realitzarem múltiples experiments desplegant aquest aparell en diferents posicions del braç del pèndol i veurem les diferències.

Pas 3: recopilació de dades de l’experiment

Recopilació de dades de l’experiment
Recopilació de dades de l’experiment
Recopilació de dades de l’experiment
Recopilació de dades de l’experiment
Recopilació de dades de l’experiment
Recopilació de dades de l’experiment

Hi ha dos mètodes factibles per a la recopilació de dades experimentals abans d’analitzar el conjunt de dades adquirit:

1) Utilitzeu l'aplicació del telèfon Android especificada a la secció de requisits per registrar totes les mesures produïdes per l'aparell en un fitxer de dades emmagatzemat a la targeta SD del telèfon. Podem copiar el fitxer i processar la informació.

2) Utilitzeu un ordinador Bluetooth, un PC, un ordinador portàtil o un miniordinador RaspberryPi per establir una connexió Bluetooth a l’aparell i llegir les dades per a anàlisis en temps real o fora de línia.

Existeixen avantatges i desavantatges per a cada mètode, anem a provar-los i a diferenciar-ho en aquest instructiu.

Per al mètode (1) que utilitza l'aplicació per a Android, un cop ens trobem a la interfície de control de l'aplicació per a Android, les dades de telemetria enviades des de l'aparell de mesura Bluetooth al telèfon Android es registraran en un fitxer de registre de dades anomenat m2flightDatayyyymmdd_hhmmss.txt. Es pot trobar a la carpeta Download / m2LogFiles del telèfon Android. La carpeta "Baixa" és una carpeta preexistent al sistema operatiu Android del telèfon i "m2LogFiles" és una carpeta creada per l'aplicació. El contingut del nom de fitxer yyyymmdd_hhmmss és la forma de codificar l'hora d'inici de l'experiment (any, mes, dia, hora, minut i segon) al nom del fitxer.

Cada línia del fitxer de registre és un registre. Comença amb la marca de temps de l'esdeveniment, la cadena de preàmbuls "eam:", seguida de 4 dades de triplets, que són:

Lectura de l’eix de l’acceleròmetre XYZ en valors de lectura de registres del maquinari del sensor en brut

Lectura de l'eix XYZ del giroscopi en els valors de lectura de registre del maquinari del sensor en brut

Lectura de l'eix XYZ del magnetòmetre en valors de lectura de registres del maquinari del sensor en brut

a bord estimat Roll / Pitch / Raw en grau

El fitxer de dades creat amb el programa Python d’ordinador utilitzarà un format de fitxer de dades idèntic, de manera que el programa que fem servir al pas d’anàlisi de dades no es molestarà amb la font de dades que produeix el nostre programa Python o l’aplicació per a Android.

Comencem a codificar mitjançant el mètode (2).

Per interactuar amb l'aparell de mesura de bluetooth, es proporcionen dos formats d'SDK:

1) Python SDK, que es pot instal·lar mitjançant "pip3 install m2controller", python3 és el llenguatge utilitzat. Els exemples de codi d’aplicació d’usuari s’emmagatzemen a https://github.com/xiapeiqing/m2robots/tree/maste… Per a aquest experiment, utilitzarem l’escriptura python pendulum1.py

2) Java SDK, que no s’utilitza en aquesta instrucció perquè volem una posterior visualització i anàlisi de les dades del pèndol adquirits, cosa que pot suposar una mica més d’esforç per programar en Java.

El codi font del programa de recopilació de dades python3 conté molts comentaris sobre els detalls de la funcionalitat del codi. Aquí es proporciona una instantània del codi font.

#! / usr / bin / env python # - * - codificació: UTF-8 - * - d'importació de m2controller importació de m2controller d'importació de m2controller importació d'importació d'importació d'importació d'importació de temps importació d'importació de temps usrCfg pendulum2

requestExit = Fals

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

# volem utilitzar la mateixa convenció de noms de fitxers de registre perquè el mòdul d'anàlisi de dades, pendulum2.py, pugui ser agnòstic de com obtenim el fitxer de dades de registre ################### ################################################### logfilename = " m2flightData% s.txt "% (datetime.datetime.fromtimestamp (time.time ()). strftime ('% Y% m% d_% H% M% S')) dataLogfile = obert (nom del fitxer de registre," w ")

manejador de senyal def (sig, frame):

global requestExit print ('Ctrl-C de l'usuari per sortir de l'execució del programa') requestExit = True signal.signal (signal. SIGINT, signal_handler)

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

# cada vegada que les dades de mesurament estiguin disponibles a una velocitat de 20Hz, aquesta funció de "devolució de trucada" serà convocada ################################## ################################## def callbackfunc (telemetria): 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, telemetria ['m_fAccelHwUnit'] [0], telemetria ['m_fAccelHwUnit'] [1], telemetria ['m_fAccelHwUnit'] [2], telemetria ['m_fGyroHwUnit'] [0], telemetria ['m_fGyroHwUnit'] [1], telemetria ['m_fGyroHwUnit'] [2], telemetria ['m_fMagHwUnit'] [0] 'm_fMagHwUnit'] [1], telemetria ['m_fMagHwUnit'] [2], telemetria ['m_fRPYdeg'] [0], telemetria ['m_fRPYdeg'] [1], telemetria ['m_fRPYdeg'] [2]) ## ###################################################### ############ # imprimim la cadena de dades a la pantalla i les guardem al fitxer de registre ######################### ########################################### imprimir (dataStr) dataLogfile.writelines (dataStr)

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

# inicialitzeu el controlador, recordeu que heu de configurar el camp BleMACaddress perquè sigui l'adreça MAC del vostre dispositiu #################################### ################################ # TODO: inicialitzem l'adreça BleMAC si l'usuari no la defineix. controller = m2controller. BleCtrller (m2Const.etDebian, callbackfunc, usrCfg. BleMACaddress) controller.connect () mentre és True: ############################ ####################################### # esperar que es creïn les dades de mesura i s’enviïn des de la mesura del pèndol aparell ################################################# ################ controller.m_CommsTunnel.waitForNotifications (1.0) si se sol·licita Exit: ######################### ######################################### # manteniment de la casa funciona aquí quan finalitzem el registre de dades ###################################################### ############### breaker control.stop () dataLogfile.close ()

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

# Recopilació de dades completada, analitzem ara les dades del registre ########################################### ########################## pendulum2.parseDataLogFile (logfilename)

Per a actualitzacions a llarg termini, consulteu

Ara expliquem el seu mètode d’operació. Aquest programa Python està escrit a sobre d’un paquet instal·lable en pip, anomenat m2controller. El paquet de nivell inferior ofereix un mecanisme de devolució de trucada, de manera que cada actualització de mesura rebuda activarà la funció de devolució de trucada que vam escriure i desarà les dades en un fitxer de registre local. El format del contingut de les dades del fitxer de registre és idèntic al que produeix l’aplicació complementària per a Android, de manera que el fitxer de registre de dades creat pel programa Python o per l’aplicació complementària d’Andriod és intercanviable.

El senyal ctrl-C de l'usuari, capturat pel sistema operatiu, es passa al programa i atura el bucle infinit esperant la nova arribada de dades de mesura.

Fins ara, el fitxer de registre s'ha creat amb èxit i aquest programa cridarà al programa d'anàlisi per estudiar els resultats de l'experiment.

Aquí hi ha dos experiments, i la comparació mostra la diferència molt notable en connectar un dispositiu de 7 grams en diferents llocs.

A la figura 2, fem servir una bàscula per determinar el pes real d’aquest aparell de mesura de bluetooth.

La figura 3 representa la configuració del pèndol on el dispositiu de 7 grams està connectat a l’extrem inferior del pèndol. La configuració de la figura 4 té la massa de 7 grams situada molt més a prop del pivot basculant.

La figura 5 és una vista de primer pla de l’estructura del pèndol.

Pas 4: anàlisi de dades

Anàlisi de dades
Anàlisi de dades
Anàlisi de dades
Anàlisi de dades
Anàlisi de dades
Anàlisi de dades

L’aparell de mesura bluetooth pesa ~ 7 grams, que pesa molt menys que un pal de fusta de ~ 1,6 metres de llarg. Utilitzeu el supòsit de "barra uniforme rígida" i tenim aquesta equació del període del pèndol, T1 = 2 * pi * (2l / 3g) ^ 0,5

Per obtenir la constant de gravetat, podem utilitzar 9,8 m / s ^ 2. Però es pot recuperar una constant de gravetat més precisa en qualsevol geolocalització d’aquest servei web:

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

Per a san francisco, és de 9,81278 m / s ^ 2

La longitud del pèndol es mesura a 64,5"

2 * pi * sqrt (2 * 64,5 * 0,0254 / (3 * 9,81278)) dóna el període de pèndol esperat de 2,0962 (seg).

Vegem si està d'acord amb els nostres experiments.

Al primer experiment, la configuració del pèndol té el dispositiu de 7 grams connectat a l’extrem inferior del pèndol. El meu fitxer de registre es pot descarregar a:

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

Canvieu el nom per "PendulumTestData.txt" i poseu-lo a la mateixa carpeta del programa d'anàlisi de python. Aquí es proporciona una instantània del codi font.

#! / usr / bin / env python # - * - coding: UTF-8 - * - import csv import matplotlib.pyplot as plt plt.style.use ('seaborn-whitegrid') import numpy as np from datetime import datetime, timedelta import seaborn as sns from sklearn.cluster import KMeans from collections import Counter ####################################### ############################## # aquesta funció executa el treball d'anàlisi del fitxer de dades ############# ####################################################### ## def parseDataLogFile (datafilename): ############################################## ####################### # extreu dades al fitxer de registre de dades separades per comes (CSV) i deseu el contingut de cada columna en una variable de tipus float ## ####################################################### ############ amb open (datafilename) com a fitxer csv: 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 = per a la fila de readCSV: proveu: x = datetime.strptime (fila [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 (fila) [1] [4:])) fAccelHwUnit_y.append (float (fila [2])) fAccelHwUnit_z.append (float (fila [3])) fGyroHwUnit_x.append (float (fila [4])) fGyroHwUnit_y.append (float (fila [5])) fGyroHwUnit_z.append (float (fila [6])) fMagHwUnit_x.append (float (fila [7])) fMagHwUnit_y.append (float (fila [8])) fMagHwUnit_z.append (float (fila) [9])) fRPYdeg_r.append (float (fila [10])) fRPYdeg_p.append (float (fila [11])) fRPYdeg_y.append (float (fila [12])) excepte: pass timestampS = np.asarray (marques de temps) marques de temps = marques de temps - marques de temps [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)

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

# necessitem una estimació precisa de la freqüència de mostreig per a una estimació precisa del període d'oscil·lació ####################################### ############################## FsHz = getSamplingIntervalS (timestampS) ################# ################################################### # utilitzar component del to en la sortida del sistema de referència de l'encapçalament d'actitud per a l'anàlisi del període del pèndol ######################################### ############################ analysis_timeSequence (timestampS, fRPYdeg_p, FsHz, 'pitch') ############ ####################################################### ### # utilitzeu una sortida de mesura en acceleròmetre per a l'anàlisi del període del pèndol. ######################################### ############################ analysis_timeSequence (timestampS, fAccelHwUnit_x, FsHz, 'accel') ############ ###################################################### ### # utilitzeu la sortida de mesura gyro raw per a l'anàlisi del període del pèndol ######################################### ############################ analysis_timeSequence (timestampS, fGyroHwUnit_y, FsHz, ' giroscopi ') print (' fet, felicitats:-) ') plt.show () ################################## ################################## # en el procés de comunicació bluetooth, és rar que el paquet de comunicacions de dades pugui es perd # utilitzem K-mean per aïllar les dades de mesurament de 20Hz de valors atípics, que són causades per la caiguda del paquet # immersió a "senyal i sistema per obtenir més detalls" ################# #################################################### def getSamplingIntervalS (timestampS): plt.figure () sampleIntervalS = np.diff (timestampS) sns.distplot (sampleIntervalS) plt.ylabel ('histogram') plt.xlabel ('interval de mesurament (s)') clusterCnt = 5 km = KMeans (n_clusters = clusterCnt) km.fit (sampleIntervalS.reshape (-1, 1)) centroids = km.cluster_centers_ elemCnt = Comptador (km.labels_) occurrenceCnt = per ii en el rang (clusterCnt): occurrenceCnt.append (elemCnt [ii]) FsHz = 1 / centroids [occurrenceCnt.index (max (occurrenceCnt))] return FsHz

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

# utilitzeu un espectròmetre, és a dir, FFT de poc temps per obtenir el component de freqüència; el pic màxim és la nostra millor estimació d’oscil·lació del pèndol ############################# ####################################### Analyse_timeSequence (timestampS, timeSeqData, FsHz, strComment): fig, (ax1, ax2) = plt.subplots (nrows = 2) ax1.plot (timestampS, timeSeqData, marker = 'o', markerfacecolor = 'blue', markersize = 2, color = 'skyblue', ample de línia = 1) ax1.set_title ("mesura del domini del temps del pèndol -% s"% strComment) ax1.set_xlabel ("temps de mostreig (segon)") ax1.set_ylabel (strComment); NFFT = 2048 # la longitud dels segments de finestra

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

ax2.set_title ("Espectrograma") ax2.set_xlabel ("mostres") ax2.set_ylabel ("freqüència (Hz)");

# El mètode "specgram" retorna 4 objectes. Ells són:

# - Pxx: el periodograma # - freqs: el vector de freqüència # - bins: els centres dels bins del temps # - im: la matplotlib.image. AxesImatge que representa les dades de la trama pkresult = np.where (Pxx == np.amax (Pxx)) oscFreqHz = freqs [pkresult [0] [0] print ('Freqüència d'oscil·lació del pèndol (Hz) =% f, Període (Sec) =% f, font de dades d'estimació:% s'% (oscFreqHz, 1 / oscFreqHz, strComment)) retorna 1 / oscFreqHz

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

# hauríem d'executar aquest programa de forma independent, és a dir, que no se'ns cridi per pendulum1.py, # definim un nom de fitxer de dades de registre per defecte que s'analitzarà ###################### ############################################## si _name_ == "_main_ ": defaultFilename = './PendulumTestData.txt' import os.path if os.path.isfile (defaultFilename): parseDataLogFile (defaultFilename) else: print (" el fitxer de registre per defecte% s no existeix "% defaultFilename)

Per a actualitzacions a llarg termini, consulteu

El codi font conté comentaris detallats, donem aquí un resum d'alt nivell de l'estimació matemàtica.

1) Primer llegim el contingut del fitxer CSV a l'ordinador mitjançant un paquet python anomenat "csv". Disposem de mesures periòdiques.

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) Com que la taxa de mesura és tan crítica i introdueix directament un error d'estimació del període de pèndol, volem estimar-los. El nostre interval de mesura nominal és de 50 ms, és a dir, 20 Hz. La mitjana de totes les mesures sembla correcta, però de tant en tant perdem el paquet de transmissió de dades, l'interval d'actualització es converteix en 100 ms o 150 ms, …

Si traçem l’aparició d’aquestes dades, vegeu la figura 1, com a ésser humà, podem tenir fàcilment un valor global de 0,05 segons. Tot i això, podem fer-ho millor que això?

Hem d’utilitzar el mètode de classificació per seleccionar només els bons per fer un càlcul mitjà. Python té una caixa d'eines anomenada KMeans per ajudar-nos a agrupar, o dir classificació. Aquests conceptes s’utilitzen en moltes àrees de big data i IA.

3) La figura 2 conté dues imatges. La gràfica superior és una seqüència de domini temporal de la mesura de l’angle de balanceig en deg. Si fem referència a la marca de temps de l’eix x a Segona, podem llegir aproximadament 22,5 cicles en 50 segons, que es tradueixen en un període de pèndol de 2,22 segons. Hi ha alguna manera d’automatitzar aquest procés i obtenir una estimació més precisa? Sí, podem utilitzar una eina matemàtica anomenada espectrograma, que utilitza un petit tros de dades de mesura i ens indica la seva freqüència, vegeu la figura següent. La lectura de l’eix y per a la línia més fosca és la freqüència d’oscil·lació del pèndol. El fet de ser una línia horitzontal confirma que l’oscil·lació del pèndol no va canviar gens al llarg de l’experiment. El valor invers de la freqüència d’oscil·lació és el període d’oscil·lació del pèndol.

L’informe final realitzat pel programa és un resum de text:

oscil·lació del pèndol Freq (Hz) = 0,449224, període (seg) = 2,226059, font de dades d’estimació: to

Podem trobar que el nostre resultat anterior de càlcul manual de mà, 2.22 segons, és bastant coherent amb el valor calculat del programa.

En comparació amb el valor calculat teòricament de 2.0962 (seg), ens queda un ~ 5% d'error. Com desfer-se’n? Recordeu que la suposició és "barra uniforme rígida"? Fins i tot un pes extra de 7 grams sembla trivial, és la causa principal de l’error restant.

Ara movem el dispositiu, a prop del pivot. Vegeu el pas anterior per obtenir una foto de primer pla. El fitxer de registre que he creat es pot descarregar aquí:

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

Executeu els mateixos passos d’anàlisi i obtenim el període de 2.089867 (seg), vegeu la figura 3, que és gairebé idèntica a la predicció teòrica. Genial!

Com que no només tenim la mesura de l’angle de gir, sinó també la mesura giroscòpica i la mesura de l’acceleròmetre al mateix ritme. Executeu la mateixa anàlisi per a les altres dues mesures, obtenim resultats a les figures 4 i 5. Les estimacions de les tres fonts de mesura coincideixen, cosa que ens fa més segurs de l’èxit del nostre experiment.

Aquí teniu el resultat com a sortida final del programa python en execució:

oscil·lació del pèndol Freq (Hz) = 0,478499, període (seg) = 2,089867, font de dades d’estimació: to

oscil·lació del pèndol Freq (Hz) = 0,478499, període (seg) = 2,089867, font de dades d’estimació: accel

oscil·lació del pèndol Freq (Hz) = 0,478499, període (seg) = 2,089867, font de dades d’estimació: giroscopi

Última reflexió en aquest pas, com poden ser exactament idèntics els resultats de l’estimació mitjançant una font de dades d’entrada diferent? Això és contraintuïció. Deixaré aquesta pregunta als lectors. Aquí teniu un consell: recordeu que estem utilitzant el FFT de temps curt per estimar la freqüència d'oscil·lació? En domini digital, l'estimació de freqüència es dóna en contenidors de freqüència discrets en lloc d'una estimació de nombre flotant.

Pas 5: Recomanacions de treball futures

Hi ha poques categories de recomanacions laborals futures.

En el pas anterior, aconseguim reduir l'error de l'experiment de ~ 5% a menys de l'1%, podem fer-ho millor? En adonar-nos que la magnitud de l’oscil·lació disminueix exponencialment, un factor que pot contribuir pot ser l’arrossegament de l’aire causat en fer girar el pèndol. És possible que s’hagi de modificar la secció transversal del pèndol per tenir una forma racional per tal de reduir l’arrossegament aerodinàmic.

Podem aplicar un guany variable en el temps après mitjançant tècniques de filtre adaptatiu per generar un senyal de magnitud màxima constant. Mentrestant, correlaciona la magnitud amb l'atenuació de les forces externes.

Difícilment podem trobar res més senzill que el "simple moviment harmònic". Podem utilitzar les instal·lacions que analitzem el pèndol per analitzar quelcom més complicat, una activitat esportiva, una seqüència de llançament de coets aquàtics, etc.?

Feliç pirateria

Recomanat: