Съдържание:

Експериментално изследване на прости хармонични движения: 5 стъпки
Експериментално изследване на прости хармонични движения: 5 стъпки

Видео: Експериментално изследване на прости хармонични движения: 5 стъпки

Видео: Експериментално изследване на прости хармонични движения: 5 стъпки
Видео: Жена се върна от 3800 г., за да предупреди 2024, Ноември
Anonim

От arrowlikeFollow Още от автора:

Walking Strandbeest, Java/Python и App Controlled
Walking Strandbeest, Java/Python и App Controlled
Walking Strandbeest, Java/Python и App Controlled
Walking Strandbeest, Java/Python и App Controlled

В класната стая често използваме хронометър за провеждане на експеримент с махало или прост експеримент с хармонично движение. Ето едно предизвикателство, можем ли да създадем реална графика на неговото движение и да видим какво е моменталното ъглово положение и скорост, това е много повече информация и забавление.

Първият въпрос, трябва да решим, че тялото на махалото е безтеглов шнур или твърда равномерна пръчка. Подходът с кабел изглежда по -лесен. От практиката за изграждане на такъв имам следните компромисни съображения: Най -лесният начин да окачите система с махало може да бъде да го закачите до горния ръб на вратата си. Това дава дължината на махалото ви ~ 2 м, без да извършвате никакви структурни строителни работи. Но тя се нуждае от люлка, която няма да докосне повърхността на вратата, което просто разрушава целия експеримент. Така че самолетът, с който се люлее, трябва да бъде точно успореден на повърхността на стената/вратата. Безтегловният шнур е тънък, може лесно да се върти и да усложни измерването на ъгъла на люлеене. Искаме да използваме едно измерване, за да представим състоянието на люлеене. Тънката връв, като рибената линия, може да бъде еластична и разтеглива, което засяга една от най -важните ни константи, измерена от нас и използвана в уравнението, а именно дължината на махалото. Някои също могат да бъдат засегнати от температурата. Теглото, висящо в края на въжето, трябва да бъде достатъчно тежко, така че теглото на въжето да стане незначително. Моля, коментирайте, ако сте съгласни или несъгласни с тях, или имате други идеи за компромис с дизайна. За да проучим този проблем, се нуждаем от устройство, което е толкова леко, че теглото му може да бъде пренебрегнато и все още третираме махалната система като твърда равномерна пръчка. Използвам COTS носим електронен контролер, който ни доставя информация за жироскопа, акселерометъра и ъгъла чрез Bluetooth връзка. Тези измервания ще се съхраняват във файл с данни за приложение за мобилен телефон. След това ще анализираме данните за нашия прост експеримент с хармонично движение. Численият анализ се фокусира върху следните теми: 1) Предсказване на периода на трептене на махалото 2) Програмируемо събиране на данни за експеримента с прости хармонични движения на махалото 3) Използвайте kmean за групиране на данни и премахване на отклоненията в процеса на анализ 4) Използвайте краткосрочен FFT за оценка честотата на трептене на махалото

Консумативи

Bluetooth измервателен уред

Приложение за телефон с Android: Отидете в Google playstore, потърсете M2ROBOTS и инсталирайте контролното приложение. В случай че е трудно да получите достъп до Google playstore, посетете моята лична начална страница за алтернативен метод за изтегляне на приложения

дървен прът

няколко 3D отпечатани части

триони или подобен метален материал

Стъпка 1: Какво представляват махалото? Как да го моделирам?

Има много статии и книги, въвеждащи извеждането на уравнението на махалото, включително вашата книга по физика на учебната програма. Може би е по -добре такова съдържание да не се повтаря отново тук. Тук е изброено само окончателното заключение по темата "просто хармонично движение". За да знаем периода на махалото, всичко, което трябва да знаем, е дължината на махалото, означена като "l", в метри.

Ако сме разумно сигурни, че тежестта се намира почти изцяло в края на безтегловна корда, висяща в шарнир, и махалото се люлее под малки ъгли θ, да речем по -малко от 15 °, периодът Т1 на такова махало се определя от:

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

g = ускорение на гравитацията, приблизително 9,8 m/s^2

Ако безтегловният шнур се замени с твърд равномерен прът, отново с дължина l, неговият прост период на хармонично движение T2 се определя от T1 = 2*pi*(2l/3g)^0,5

Ефективно той има същия период като безтегловното нишко, което е две трети от твърдата еднаква дължина на пръта.

Това е фонът и можем да започнем да подготвяме нашия експеримент.

Стъпка 2: Подгответе частите за изграждане на хардуер

Подгответе частите за изграждане на хардуер
Подгответе частите за изграждане на хардуер
Подгответе частите за изграждане на хардуер
Подгответе частите за изграждане на хардуер
Подгответе частите за изграждане на хардуер
Подгответе частите за изграждане на хардуер

За да изградим махаловата структура, ние 3D отпечатваме някои части и рециклираме нещо, което вече имаме. Цялостната структура на махалото е показана на фиг.1. Това е смес от части за 3D печат, заедно с някои ръчно изработени части и дълго парче дървен прът от Lowe.

3D отпечатаната част на фиг.2 е окачена на горния ръб на вратата, тъй като нашата врата е лесна плоска повърхност, за да окачим нещо. Връзка за изтегляне на STL файл:

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

Зелената част на фиг.3 свързва дървения прът с острие, а острието седи върху две парчета релса, монтирани на по -ранната 3D печатна закачалка за врата. Връзка за изтегляне на STL файл:

Двете парчета релса са направени чрез счупване на старо трионче наполовина, вижте фиг. 4. Частта от фиг.2 е подготвила подходящия размер на слота за тях. В идеалния случай можем да направим прорез във формата на "V" в тези два триона с помощта на пила. Сравнително остър метал, като например острие за самобръсначка, или всяко ръчно изработено метално парче, може да седи вътре в прорезите с форма на "V". Причината, поради която се нуждаем от по -малка контактна площ, е да намалим кинетичната енергия, загубена при люлеенето.

Последната 3D отпечатана част на фиг.5 е малка тава, в която се побира електронният измервателен уред.

Връзката за изтегляне:

Устройството за измерване на Bluetooth генерира оценка на ъгъла, измерване на жироскоп и измерване на акселерометъра. Всички тези данни са достъпни за нас чрез безжична връзка Bluetooth.

Ще проведем множество експерименти, като разположим този апарат в различно положение на раменете на махалото и ще видим разликите.

Стъпка 3: Събиране на данни от експеримента

Събиране на данни от експеримента
Събиране на данни от експеримента
Събиране на данни от експеримента
Събиране на данни от експеримента
Събиране на данни от експеримента
Събиране на данни от експеримента

Има два изпълними метода за събиране на експериментални данни, преди да анализираме получения набор от данни:

1) Използвайте приложението за телефон с Android, посочено в раздела за изисквания, за да регистрирате всички измервания, произведени от апарата, във файл с данни, съхраняван в SD картата на телефона ви. Можем да копираме файла и след това да обработим информацията.

2) Използвайте компютър с Bluetooth, компютър, лаптоп или миникомпютър RaspberryPi, за да установите Bluetooth връзка с апарата и да прочетете данните за анализ в реално време или офлайн.

За всеки метод съществуват както плюсове, така и минуси, ние ще опитаме и двата и ще кажем разликата в този инструктаж.

За метод (1), използващ приложението за Android, след като сме в интерфейса за управление на приложението за Android, телеметричните данни, изпратени от измервателния уред за Bluetooth към телефона с Android, ще бъдат записани във файл с данни, наречен m2flightDatayyyymmdd_hhmmss.txt. Може да се намери в папката Download/m2LogFiles на вашия Android телефон. Папката „Изтегляне“е вече съществуваща папка в андроид операционната система на телефона ви и „m2LogFiles“е папка, създадена от приложението. Съдържанието на името на файла yyyymmdd_hhmmss е начинът да се кодира началният час на експеримента (година, месец, ден, час, минута и секунда) в името на файла.

Всеки ред в лог файла е един запис. Той започва с времевата отметка на събитието, преамбула низ "eam:", последван от 4 триплета данни, които са:

Отчитане на оста XYZ на акселерометъра в стойностите за обратно отчитане на суровия хардуерен регистър на сензора

Отчитане на оста на жироскоп XYZ в стойностите за обратно отчитане на хардуерен регистър на суровия сензор

Отчитане на ос на магнитометър XYZ в стойностите за обратно отчитане на суровия хардуерен регистър на сензора

бордови прогнозни Roll/Pitch/Raw в степен

Файлът с данни, създаден с помощта на компютърна програма python, ще използва идентичен формат на файл с данни, така че програмата, която използваме в стъпката за анализ на данни, няма да се притеснява от източника на данни, произведен от нашата програма или приложение за android.

Нека започнем да кодираме по метода (2).

За взаимодействие с Bluetooth измервателния уред са предвидени два варианта на SDK:

1) Python SDK, който може да бъде инсталиран чрез „pip3 install m2controller“, python3 е използваният език. Примерите за код на потребителско приложение се съхраняват в https://github.com/xiapeiqing/m2robots/tree/maste… За този експеримент ще използваме скрипта python pendulum1.py

2) Java SDK, който не се използва в тази инструкция, защото искаме по -късна визуализация и анализ на получените данни от махалото, което може да отнеме малко повече усилия, за да програмираме в Java.

Изходният код на програмата за събиране на данни на python3 съдържа много коментари за подробности за функционалността на кода. Тук се предоставя моментна снимка на изходния код.

#!/usr/bin/env python#-*-кодиране: UTF-8-*-от m2контролер импортиране m2контролер от m2контролер импорт m2Const сигнал за импортиране време за импортиране дата за импортиране дата за импортиране usrCfg импорт pendulum2

requestExit = False

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

#искаме да използваме една и съща конвенция за именуване на регистрационни файлове, така че модулът за анализ на данни, pendulum2.py, да бъде агностик за начина, по който получаваме файла с регистрационните данни ################# ############################################## logfilename = " m2flightData%s.txt "%(datetime.datetime.fromtimestamp (time.time ()). strftime ('%Y%m%d_%H%M%S')) dataLogfile = отворен (logfilename," w ")

def signal_handler (sig, frame):

глобален requestExit print ('потребителски Ctrl-C за изход от изпълнението на програмата') requestExit = Истински сигнал.сигнал (signal. SIGINT, signal_handler)

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

#след като всички данни за измерване станат достъпни с честота 20Hz, тази функция за "обратно повикване" ще бъде призована ############################# ################################## def callbackfunc (телеметрия): 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, телеметрия ['m_fAccelHwUnit'] [0], телеметрия ['m_fAccelHwUnit'] [1], телеметрия ['m_fAccelHwUnit'] [2], телеметрия ['m_fGyroHwUnit'] [0], телеметрия ['m_fGyroHwUnit'] [1], телеметрия ['m_fGyroHwUnit'] [2], телеметрия ['m_fMagHwUnit'] [0], телеметрия ['m_fMagHwUnit'] [0], телеметрия 'm_fMagHwUnit'] [1], телеметрия ['m_fMagHwUnit'] [2], телеметрия ['m_fRPYdeg'] [0], телеметрия ['m_fRPYdeg'] [1], телеметрия ['m_fRPYdeg'] [2]) ## ################################################# #############отпечатваме низа с данни на екрана и ги запазваме в лог файла ##################### ########################################## print (dataStr) dataLogfile.writelines (dataStr)

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

#инициализирайте контролера, не забравяйте да зададете полето BleMACaddress като MAC адрес на вашето устройство ################################ #################################TODO: нека инициализираме BleMACaddress, ако не е зададен от потребителя. controller = m2controller. BleCtrller (m2Const.etDebian, callbackfunc, usrCfg. BleMACaddress) controller.connect () while True: ######################### #########################################изчакайте данните за измерване, създадени и изпратени от измерването с махало апарат ################################################# ############### controller.m_CommsTunnel.waitForNotifications (1.0), ако requestExit: ###################### ###########################################домакинството работи тук, когато приключим регистрирането на данни ################################################# ############## controller.stop () dataLogfile.close () break

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

#събиране на данни приключи, сега нека анализираме данните от дневника ##################################### ########################## pendulum2.parseDataLogFile (logfilename)

За дългосрочна актуализация, моля, разгледайте

Сега нека обясним метода му на работа. Тази програма на python е написана върху пакет за инсталиране на pip, наречен m2controller. Пакетът от по -ниско ниво предлага механизъм за обратно повикване, така че всяка получена актуализация на измерването ще задейства функцията за обратно повикване, която написахме, и ще запише данните в локален лог файл. Форматът на съдържанието на данните от лог файла е идентичен с този, който се произвежда от придружаващото приложение за Android, така че файлът за регистрация на данни, създаден или от програмата python, или от придружаващото приложение andriod, може да се обменя.

Потребителският сигнал ctrl-C, уловен от операционната система, се предава на програмата и спира безкрайния цикъл в очакване на новото пристигане на измервателните данни.

Досега регистрационният файл беше успешно създаден и тази програма ще извика програмата за анализ, за да проучи резултатите от нашия експеримент.

Ето два експеримента и сравнението показва много забележимата разлика чрез прикачване на 7 -грамово устройство на различни места.

На фиг.2 използваме скала, за да определим действителното тегло на този Bluetooth измервателен уред.

Фиг.3 изобразява настройката на махалото, където 7 -грамовото устройство е прикрепено към долния край на махалото. Конфигурацията за настройка на фиг.4 има маса от 7 грама, разположена много по -близо до люлеещия се шарнир.

Фиг.5 е изглед отблизо на конструкцията на махалото.

Стъпка 4: Анализ на данните

Анализ на данни
Анализ на данни
Анализ на данни
Анализ на данни
Анализ на данни
Анализ на данни

Апаратът за измерване на Bluetooth тежи ~ 7 грама, което тежи много по -малко от дълга пръчка с дължина ~ 1,6 метра. Използвайте предположението за "твърда равномерна пръчка" и имаме това уравнение за периода на махалото, T1 = 2*pi*(2l/3g)^0,5

За да получим гравитационната константа, можем да използваме 9,8 m/s^2. Но по -точна гравитационна константа при всяка геолокация може да бъде извлечена от тази уеб услуга:

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

За Сан Франциско тя е 9.81278m/s^2

Дължината на махалото се измерва на 64,5"

2*pi*sqrt (2*64.5*0.0254/(3*9.81278)) дава очаквания период на махалото от 2.0962 (сек).

Да видим дали е съгласен с нашите експерименти.

В първия експеримент, махалото има 7 -грамово устройство, прикрепено към долния край на махалото. Моят лог файл може да бъде изтеглен на:

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

Преименувайте го на „PendulumTestData.txt“и го поставете в същата папка на програмата за анализ на python. Тук се предоставя моментна снимка на изходния код.

#!/usr/bin/env python#-*-кодиране: UTF-8-*-импортиране на csv внос matplotlib.pyplot като plt plt.style.use ('seaborn-whitegrid') импортиране numpy като np от datetime импортиране datetime, timedelta импортиране морски като sns от sklearn.cluster импортиране на KMeans от колекции внос Counter ################################# ##############################тази функция изпълнява работата по анализ на файлове с данни ############ ################################################# ## def parseDataLogFile (име на файл с данни): ######################################## ########################извличане на данни във файла за регистрация на данни, разделен със запетая (CSV), и запазване на съдържанието във всяка колона в една променлива тип float ## ################################################# ############ с отворен (име на файл с данни) като 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 = за ред в readCSV: опитайте: x = datetime.strptime (ред [0].split (',') [0], '%H:%M:%S.%f ') времева марка [1] [4:])) fAccelHwUnit_y.append (float (ред [2])) fAccelHwUnit_z.append (float (ред [3])) fGyroHwUnit_x.append (float (ред [4])) fGyroHwUnit_y.append (ред [5])) fGyroHwUnit_z.append (поплавък (ред [6])) fMagHwUnit_x.append (поплавък (ред [7])) fMagHwUnit_y.append (поплавък (ред [8])) fMagHwUnit_z.append (поплавък (ред [9])) fRPYdeg_r.append (float (ред [10])) fRPYdeg_p.append (float (ред [11])) fRPYdeg_y.append (float (ред [12])) освен: pass timestampS = np.asarray (времеви отпечатъци) времеви отпечатъци = времеви отпечатъци - времеви отпечатъци [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)

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

#имаме нужда от точна оценка на честотата на вземане на проби за точна оценка на периода на трептене ################################### ############################ FsHz = getSamplingIntervalS (timestampS) ############### #################################################използване компонент на височината в референтната изходна система на заглавието на позиция за анализ на махален период ################################### ########################### analysis_timeSequence (timestampS, fRPYdeg_p, FsHz, 'pitch') ########### ################################################# ####използвайте сурово измерване на ускорителя за анализ на махален период #################################### ########################### analysis_timeSequence (timestampS, fAccelHwUnit_x, FsHz, 'accel') ########### ################################################# ####използвайте сурови измервания на жироскоп за анализ на периода на махало #################################### ########################### analysis_timeSequence (timestampS, fGyroHwUnit_y, FsHz, ' жироскоп ') print (' направено, поздравления:-) ') plt.show () ############################# ###################################в процеса на комуникация по bluetooth, има рядък шанс пакетът за комуникация на данни да може бъдете загубени#използваме K-mean за изолиране на измервателните данни от 20Hz от извънредни стойности, които са причинени от изпускане на пакет#гмуркане в „сигнал и система за повече подробности“################# ################################################ def getSamplingIntervalS (timestampS): plt.figure () sampleIntervalS = np.diff (timestampS) sns.distplot (sampleIntervalS) plt.ylabel ('хистограма') plt.xlabel ('интервал (и) на измерване')) clusterCnt = 5 km = KMeans (n_clusters = clusterCnt) km.fit (sampleIntervalS.reshape (-1, 1)) centroids = km.cluster_centers_ elemCnt = Counter (km.labels_) възникванеCnt = за ii в обхват (clusterCnt): възникванеCnt.append (elemCnt [ii]) FsHz = 1/центроиди [възникванеCnt.index (макс (възникванеCnt))] връщане FsHz

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

#използвайте спектрометър, т.е. краткотрайно FFT, за да получите честотния компонент, пиковото кошче е най -добрата ни оценка на махалното колебание ########################## ######################################## def define_timeSequence (timestampS, timeSeqData, FsHz, strComment): фиг, (ax1, ax2) = plt.subplots (nrows = 2) ax1.plot (timestampS, timeSeqData, marker = 'o', markerfacecolor = 'blue', markersize = 2, color = 'skyblue', linewidth = 1) ax1.set_title ("измерване на времеви домейн на махалото - %s" %strComment) ax1.set_xlabel ("време на извадка (секунда)") ax1.set_ylabel (strComment); NFFT = 2048 # дължината на прозоречните сегменти

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

ax2.set_title ("Спектрограма") ax2.set_xlabel ("проби") ax2.set_ylabel ("честота (Hz)");

# Методът `specgram` връща 4 обекта. Те са:

# - Pxx: периодограмата # - freqs: честотният вектор # - bins: центровете на времевите бинове # - im: екземплярът matplotlib.image. AxesImage, представящ данните в графика pkresult = np.where (Pxx == np.amax (Pxx)) oscFreqHz = честоти [pkresult [0] [0] печат ('Честота на трептене на махало (Hz) =%f, Период (Sec) =%f, източник на данни за оценка:%s'%(oscFreqHz, 1/oscFreqHz, strComment)) връщане 1/oscFreqHz

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

#трябва ли да стартираме тази програма независимо, т.е. без да се извиква от pendulum1.py,#определяме име на файл с лог данни по подразбиране за анализ ################### ############################################, ако _name_ == "_main_ ": defaultFilename = './PendulumTestData.txt" импортиране на os.path, ако os.path.isfile (defaultFilename): parseDataLogFile (defaultFilename) else: print ("лог файл по подразбиране %s не съществува" %defaultFilename)

За дългосрочна актуализация, моля, разгледайте

Изходният код съдържа подробни коментари, нека дадем обобщение на високо ниво на математическата оценка тук.

1) Първо четем съдържанието на CSV файла в компютъра, използвайки пакет на python, наречен "csv". Имаме периодични измервания.

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) Тъй като скоростта на измерване е толкова критична и директно въвежда грешка в оценката на периода на махалото, искаме да ги оценим. Нашият номинален интервал на измерване е 50ms, т.е. 20Hz. Средната стойност за всички измервания изглежда ОК, но от време на време губим пакет за предаване на данни, интервалът за актуализация става 100ms или 150ms, …

Ако начертаем появата на тези данни, виж фиг.1, като човек, можем лесно да имаме очна стойност от 0,05 сек. Можем ли обаче да направим по -добре от това?

Трябва да използваме метод за класификация, за да изберем само добрите за изчисляване на усредняване. Python има набор от инструменти, наречен KMeans, за да ни помогне при групирането или да кажем класификацията. Тези концепции се използват в много области с големи данни и AI.

3) Фиг.2 съдържа две изображения. Горният график е последователност от времеви домейн на нашето измерване на ъгъла на люлеене в градуси. Като се позоваваме на времевата марка на оста x във Втора, можем да прочетем приблизително 22,5 цикъла за 50 секунди, което означава 2,22 сек махален период. Има ли начин да се автоматизира този процес и да има по -точна оценка? Да, можем да използваме математически инструмент, наречен спектрограма, който използва малка част от измервателните данни и ни казва нейната честота, вижте фигурата по -долу. Отчитането по оста y за най-тъмната линия е честотата на трептене на махалото. Хоризонталната линия потвърждава, че трептенето на махалото изобщо не се е променило по време на експеримента. Обратната стойност на честотата на трептене е периодът на трептене на махалото.

Окончателният доклад, направен от програмата, е текстово обобщение:

Честота на колебане на махало (Hz) = 0,449224, Период (сек) = 2,226059, източник на данни за оценка: стъпка

Можем да намерим, че нашият по -ранен резултат за изчисляване на ръката, 2.22sec, е доста съвместим с изчислената стойност на програмата.

В сравнение с 2.0962 (сек) теоретично изчислена стойност, имаме ~ 5% оставаща грешка. Как да се отървете от тях? Помните ли предположението „твърда равномерна пръчка“? Дори 7 грама допълнително тегло изглежда тривиално, това е най -голямата причина за оставащата грешка.

Сега преместваме устройството близо до шарнира. Вижте предишната стъпка за снимка отблизо. Дневникът, който създадох, може да бъде изтеглен от тук:

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

Изпълнете същите стъпки за анализ и получаваме Период от 2.089867 (сек), вижте фиг.3, който е почти идентичен с теоретичното предвиждане. Страхотен!

Тъй като имаме не само измерване на ъгъла на люлеене, но и жироскопско измерване и измерване на акселерометъра със същата скорост. Изпълнете същия анализ за другите две измервания, получаваме резултати на фиг.4 и 5. Оценките от трите измервателни източника са съгласни, което ни прави по -уверени в успеха на нашия експеримент.

Ето резултата като краен изход на изпълняваната програма на python:

Честота на колебане на махало (Hz) = 0,478499, Период (сек) = 2,089867, източник на данни за оценка: стъпка

колебание на махалото Честота (Hz) = 0,478499, Период (сек) = 2,089867, източник на данни за оценка: ускорение

Честота на колебание на махало (Hz) = 0,478499, Период (сек) = 2,089867, източник на приблизителни данни: жироскоп

Последна мисъл в тази стъпка, как резултатите от оценката могат да бъдат абсолютно идентични, като се използва различен източник на входни данни? Това е контраинтуиция. Ще оставя този въпрос на читателите. Ето една подсказка: спомняте ли си, че използваме краткосрочното FFT за оценка на честотата на трептене? В цифров домейн оценката на честотата се дава в дискретни честотни полета вместо оценка с плаващо число.

Стъпка 5: Препоръки за бъдеща работа

Има няколко категории препоръки за бъдеща работа.

В по -ранната стъпка успяваме да намалим грешката на експеримента си от ~ 5% на по -малко от 1%, можем ли да направим по -добре от това? Забелязвайки, че степента на трептене намалява експоненциално, един от допринасящите фактори може да бъде въздушното съпротивление, причинено при люлеене на махалото. Напречното сечение на махалото може да се наложи да бъде модифицирано, така че да има оформена форма, за да се намали аеродинамичното съпротивление.

Можем ли да приложим промяна във времето, усвоена с помощта на адаптивни филтриращи техники, за да изведем сигнал с постоянна пикова величина. Междувременно съпоставете степента на затихване с външните сили.

Едва ли можем да намерим нещо по -просто от "простото хармонично движение". Можем ли да използваме съоръженията, които анализираме махалото, за да анализираме нещо по -сложно, спортна дейност, последователност на изстрелване на водна ракета и т.н.?

Приятно хакване

Препоръчано: