Мазмұны:

Қарапайым гармониялық қозғалысты эксперименттік зерттеу: 5 қадам
Қарапайым гармониялық қозғалысты эксперименттік зерттеу: 5 қадам

Бейне: Қарапайым гармониялық қозғалысты эксперименттік зерттеу: 5 қадам

Бейне: Қарапайым гармониялық қозғалысты эксперименттік зерттеу: 5 қадам
Бейне: Тербелмелі қозғалыс. 1 бөлім. 9 сынып. 2024, Шілде
Anonim

Автордың толығырақ мәліметін қараңыз:

Walking Strandbeest, Java/Python және қолданба басқарылады
Walking Strandbeest, Java/Python және қолданба басқарылады
Walking Strandbeest, Java/Python және қолданба басқарылады
Walking Strandbeest, Java/Python және қолданба басқарылады

Сыныпта маятниктік эксперимент немесе қарапайым гармоникалық қозғалыс экспериментін жүргізу үшін біз секундомерді жиі қолданамыз. Міне, қиындық, біз оның қозғалысының нақты графигін жасай аламыз ба және оның жылдам бұрыштық орналасуы мен жылдамдығы қандай екенін көре аламыз ба, бұл көп ақпарат пен қызықты.

Бірінші сұрақ, біз маятниктің корпусының салмақсыз сым немесе қатаң біркелкі штанга екенін шешуіміз керек. Шнурлық тәсіл оңайырақ сияқты. Біреуді құрастыру тәжірибесінен менде келесі келіспеушіліктер бар: маятник жүйесін іліп қоюдың ең оңай жолы оны есігіңіздің жоғарғы шетіне іліп қою болуы мүмкін. Бұл сізге ~ 2м маятниктің ұзындығын береді, ол ешқандай құрылыс жұмыстарын жасамайды. Бірақ бұрылыс есіктің бетіне тиіп кетпеуі керек, бұл бүкіл экспериментті бұзады. Ол айналатын жазықтық қабырға/есік бетіне дәл параллель болуы керек. Салмағы жоқ сым жұқа болады, ол оңай айналады және бұрылу бұрышын өлшеуді қиындатады. Біз өзгермелі күйді көрсету үшін бір өлшемді қолданғымыз келеді. Балық тәрізді жіңішке сым серпімді және созылатын болуы мүмкін, бұл біз өлшейтін және маятниктің ұзындығы теңдеуде қолданылатын ең маңызды тұрақтыларымыздың біріне әсер етеді. Кейбіреулерге температура да әсер етуі мүмкін. Сымның соңында ілінетін салмақ жеткілікті ауыр болуы керек, сымның салмағы елеусіз болады. Егер сіз олармен келіссеңіз немесе келіспесеңіз немесе сізде дизайнды ауыстырудың басқа идеялары болса, түсініктеме беріңіз. Бұл мәселені зерттеу үшін бізге оның салмағы ескерілмейтін жеңіл құрылғы қажет және біз әлі де маятник жүйесін қатаң біркелкі шыбық ретінде қарастырамыз. Мен COTS киетін электронды контроллерді қолданамын, ол бізге гиро, акселерометр және бұрыш туралы ақпаратты bluetooth байланысы арқылы жеткізеді. Бұл өлшемдер ұялы телефон қосымшасының деректер файлында сақталады. Осыдан кейін біз қарапайым гармоникалық қозғалыс экспериментінің деректерін талдаймыз. Сандық талдау келесі тақырыптарға бағытталған: 1) маятниктің тербеліс периодын болжау 2) маятниктің қарапайым гармоникалық қозғалысы бойынша эксперимент деректерін бағдарламалы түрде жинау 3) талдау процесінде деректерді топтау және шеттетулерді жою үшін kmean пайдаланыңыз 4) бағалау үшін қысқа мерзімді FFT пайдаланыңыз. маятник тербелісінің жиілігі

Жабдықтар

Bluetooth өлшеу аппараты

Android телефон қосымшасы: Google playstore -ға өтіңіз, M2ROBOTS іздеңіз және басқару қолданбасын орнатыңыз. Егер Google playstore -ға кіру қиын болса, қосымшаны жүктеудің балама әдісі бойынша https://xiapeiqing.github.io/doc/intro_androidapp… менің жеке басты бетіме кіріңіз.

ағаш таяқша

3D басып шығарылған бірнеше бөлшектер

аралау қалақшалары немесе ұқсас металл материал

1 -қадам: маятник дегеніміз не? Оны қалай модельдеу керек?

Маятник теңдеуінің туындысын енгізетін көптеген мақалалар мен кітаптар бар, соның ішінде сіздің оқу бағдарламасының физикасы кітабы. Мұндай мазмұн бұл жерде қайталанбағаны жөн болар. Мұнда «қарапайым гармоникалық қозғалыс» тақырыбына қатысты соңғы қорытынды ғана келтірілген. Маятниктің периодын білу үшін біз білуіміз керек - «l» деп белгіленген маятниктің ұзындығы.

Егер біз салмақ бұранда ілініп тұрған салмақсыз сымның ұшында толық орналасқанына сенімді болсақ және маятник 15 ° -тан аз бұрыштарда тербеліп тұрса, онда мұндай маятниктің Т1 периоды берілген:

T1 = 2*pi*(л/г)^0,5

g = гравитациялық үдеу, шамамен 9,8 м/с^2

Егер салмақсыз сым ұзындығы l болатын қатаң біркелкі штангаға ауыстырылса, оның қарапайым гармоникалық қозғалыс периоды T2 T1 = 2*pi*(2l/3g)^0,5 арқылы беріледі.

Тиімді түрде ол біркелкі өзек ұзындығының үштен екі бөлігін құрайтын салмақсыз сымдық маятникпен бірдей уақытқа ие.

Бұл фон, және біз өз тәжірибемізді дайындауға кірісе аламыз.

2 -қадам: Бөлшектерді аппараттық құралдарды дайындауға дайындау

Бөлшектерді аппараттық құрылысқа дайындаңыз
Бөлшектерді аппараттық құрылысқа дайындаңыз
Бөлшектерді аппараттық құрылысқа дайындаңыз
Бөлшектерді аппараттық құрылысқа дайындаңыз
Бөлшектерді аппараттық құрылысқа дайындаңыз
Бөлшектерді аппараттық құрылысқа дайындаңыз

Маятник құрылымын құру үшін біз кейбір бөлшектерді 3D басып шығарамыз және бізде бар нәрсені қайта өңдейміз. Маятниктің жалпы құрылымы 1 суретте көрсетілген. Бұл 3D басып шығару бөліктерінің қоспасы, қолмен жасалған бөлшектер мен Лоу ағашынан жасалған ұзын ағаш таяқшасы.

2 -суреттегі 3D басып шығарылған бөлік есіктің үстіңгі жиегіне ілулі, себебі біздің есік бізге бір нәрсені іліп қоюға оңай жазық бет. STL файлын жүктеу сілтемесі:

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

3 -суреттегі жасыл бөлік ағаш шыбықты пышақпен байланыстырады, ал пышақ бұрынғы 3D басып шығарылған есік ілгішке орнатылған рельстің екі бөлігінің үстіне отырады. STL файлын жүктеу сілтемесі:

Рельстің екі бөлігі ескі аралау дискісін екіге бөлу арқылы жасалады. 4 -суретті қараңыз. 2 -суреттегі бөлік олар үшін слоттың дұрыс өлшемін дайындады. Ең дұрысы, біз файлды қолдана отырып, осы екі аралау дискісінде «V» пішінді ойық жасай аламыз. Өткір қырлы металл, мысалы, бір қырлы ұстара немесе кез келген металдан жасалған бұйым, «V» пішінді ойықтардың ішінде орналасуы мүмкін. Байланыс аймағының кішірек болуының себебі - тербеліс кезінде жоғалған кинетикалық энергияны азайту.

5 -суреттегі 3D басып шығарылған соңғы бөлік - бұл электронды өлшеу аппаратын ұстауға арналған шағын табақ.

Жүктеу сілтемесі:

Bluetooth өлшеу аппараты бұрыштық бағалауды, гиро өлшеуді және акселерометрді өлшеуді жасайды. Бұл деректердің барлығын Bluetooth сымсыз байланысы арқылы алуға болады.

Біз бұл құрылғыны маятниктің әр түрлі позициясына орналастыру арқылы көптеген эксперименттер жүргіземіз және айырмашылықтарды көреміз.

3 -қадам: Деректерді жинау бойынша эксперимент

Эксперимент мәліметтерін жинау
Эксперимент мәліметтерін жинау
Эксперимент мәліметтерін жинау
Эксперимент мәліметтерін жинау
Эксперимент мәліметтерін жинау
Эксперимент мәліметтерін жинау

Алынған мәліметтер жиынтығын талдамас бұрын эксперименттік деректерді жинаудың екі мүмкін әдісі бар:

1) Телефонның SD картасында сақталған деректер файлына аппарат шығарған барлық өлшемдерді тіркеу үшін талаптар бөлімінде көрсетілген Android телефон қосымшасын пайдаланыңыз. Біз файлды көшіріп, ақпаратты өңдей аламыз.

2) Bluetooth қосылған компьютерді, дербес компьютерді, ноутбукті немесе RaspberryPi шағын компьютерін қолданып, аппаратқа bluetooth байланысын орнатыңыз және деректерді нақты немесе офлайн талдау үшін оқыңыз.

Әр әдістің артықшылықтары мен кемшіліктері бар, біз екеуін де сынап көреміз және осы нұсқаулықтағы айырмашылықты айтамыз.

Android қосымшасын қолданатын (1) әдіс үшін, біз Android қолданбасын басқару интерфейсінде болсақ, bluetooth өлшеу аппаратынан андроид телефонына жіберілген телеметрия деректері m2flightDatayyyymmdd_hhmmss.txt деп аталатын деректер файлына жазылады. Оны Android телефонының Download/m2LogFiles қалтасынан табуға болады. «Жүктеу» қалтасы-бұл телефонның андроид жүйесінде бұрыннан бар қалта, ал «m2LogFiles»-бұл қолданба жасаған қалта. Файл атауының мазмұны yyyymmdd_hhmmss - бұл файл атауында эксперименттің басталу уақытын (жыл, ай, күн, сағат, минут және сек) кодтау әдісі.

Журнал файлындағы әрбір жол бір жазбадан тұрады. Ол оқиғаның уақыт белгісінен, «eam:» кіріспе жолынан басталады, одан кейін 4 триплеттік деректер болады, олар:

XYZ осінің акселерометрі шикізат сенсорының аппараттық регистрінде қайта оқу мәндерін оқиды

Гироскоп XYZ осінің шикізат сенсорының аппараттық құралында оқылуы регистрдің қайта оқу мәндерін көрсетеді

XYZ ось магнитометрі шикізат сенсорының аппараттық көрсеткіштерінде қайта оқу мәндерін оқиды

бортта Roll/Pitch/Raw дәрежесі бойынша бағаланған

Компьютерлік python бағдарламасының көмегімен жасалған деректер файлы бірдей деректер файлының пішімін қолданады, осылайша біз деректерді талдау қадамында қолданатын бағдарламаны біздің python бағдарламасы немесе андроид қосымшасы шығаратын деректер көзі мазаламайды.

(2) әдісін қолданып кодтауды бастайық.

Bluetooth өлшеу аппаратурасымен өзара әрекеттесу үшін SDK екі дәмі бар:

1) «pip3 install m2controller» арқылы орнатуға болатын Python SDK, python3 - қолданылатын тіл. Қолданушы кодының мысалдары https://github.com/xiapeiqing/m2robots/tree/maste… сайтында сақталған Бұл тәжірибе үшін біз pendulum1.py питон сценарийін қолданамыз.

2) Java SDK, бұл нұсқаулықта қолданылмайды, өйткені біз кейінірек алынған маятниктік деректерді визуализациялауды және талдауды қалаймыз, бұл бізге Java -де бағдарламалау үшін біраз күш жұмсауы мүмкін.

Python3 деректерді жинау бағдарламасының бастапқы коды код функциялары туралы көптеген түсініктемелерді қамтиды. Мұнда бастапқы кодтың суреті берілген.

№!

requestExit = жалған

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

#біз pendulum2.py деректерді талдау модулі журнал деректерінің файлын қалай алуымызға агностикалық бола алатындай журнал журналының атауының бір конвенциясын қолданғымыз келеді ################## ############################################################# logfilename = « m2flightData%s.txt «%(datetime.datetime.fromtimestamp (time.time ()). strftime ('%Y%m%d_%H%M%S')) dataLogfile = ашық (логфайл атауы,» w «)

def signal_handler (сиг, кадр):

global requestExit print ('бағдарлама орындалуынан шығу үшін Ctrl-C пайдаланушысы') requestExit = True signal.signal (signal. SIGINT, signal_handler)

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

#20Гц жиілікте әрбір өлшеу деректері қол жетімді болған кезде, бұл «кері шақыру» функциясы шақырылады ############################# ################################## 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_fm] 'm_fMagHwUnit'] [1], телеметрия ['m_fMagHwUnit'] [2], телеметрия ['m_fRPYdeg'] [0], телеметрия ['m_fRPYdeg'] [1], телеметрия ['m_fRPYdeg'] [2]) # ################################################################################################################################# ############# біз деректер жолын экранға басып шығарамыз және журнал журналына сақтаймыз ####################### ############################################### Басып шығару (dataStr) dataLogfile.writelines (dataStr)

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

#контроллерді инициализациялаңыз, BleMACaddress өрісін құрылғының MAC мекенжайы етіп орнатуды ұмытпаңыз ################################# #################################ТОДО: егер қолданушы орнатпаса, BleMACaddress -ты инициализациялайық. controller = m2controller. BleCtrller (m2Const.etDebian, callbackfunc, usrCfg. BleMACaddress) controller.connect () while True: ########################### ###########################################маятниктік өлшеуден жасалған және жіберілген өлшеу деректерін күтіңіз. аппарат ########################################################################################################################## #################### контроллер.m_CommsTunnel.waitForNotifications (1.0), егер requestExit: ######################## ################################################################################################################################### бiздiң мәлiметтер тiркеуiн аяқтаған кезде осы жерде жұмыс iстейдi. ################################################################################################################################# ################ controller.stop () dataLogfile.close () үзілісі

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

#деректерді жинау аяқталды, енді журнал деректерін талдайық ######################################## ########################## маятник2.parseDataLogFile (логфайл атауы)

Ұзақ мерзімді жаңарту үшін https://github.com/xiapeiqing/m2robots/blob/maste… сайтына кіріңіз.

Енді оның жұмыс істеу әдісін түсіндірейік. Бұл питон бағдарламасы m2controller деп аталатын құбырға орнатылатын пакеттің үстіне жазылған. Төменгі деңгей пакеті кері шақыру механизмін ұсынады, осылайша әрбір алынған өлшеу жаңартуы біз жазған кері шақыру функциясын іске қосады және деректерді жергілікті журнал файлына сақтайды. Журналдық файлдар мазмұнының форматы андроид серіктес қосымшасы шығаратынға ұқсас, сондықтан 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м/с^2 қолдана аламыз. Бірақ кез келген геолокацияда дәлдік гравитациясының тұрақтысын осы веб -қызметтен алуға болады:

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

Сан -Франциско үшін бұл 9.81278м/с^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-*-ctv импорт matplotlib.pyplot ретінде plt plt.style.use ('seaborn-whitegrid') импорты numpy ретінде datetime импорттық датадан np ретінде, timelelta импорты snab ретінде sklearn.cluster импорт KMeans коллекция импорт Counter ################################### ################################бұл функция деректер файлдарын талдау жұмысын ############# орындайды. ############################################################################################################################### ## def parseDataLogFile (datafilename): ############################################ ########################деректерді үтірмен бөлінген деректер журналының файлында (CSV) шығарып, әр бағандағы мазмұнды өзгермелі типті бір айнымалыға сақтаңыз ## ############################################################################################################################### ############# (деректер файлының аты) csvfile ретінде: readCSV = csv.reader (csvfile, бөлгіш = ',') уақыт белгісіS = fAccelHwUnit_x = fAccelHwUnit_y = fAccelHwUnn fGyroHwUnit_x = fGyroHwUnit_y = fGyroHwUnit_z = fMagHwUnit_x = fMagHwUnit_y = fMagHwUni t_z = fRPYdeg_r = fRPYdeg_p = fRPYdeg_y = readCSV ішіндегі жол үшін: көріңіз: x = datetime.strptime (жол [0]. бөлу (',') [0], '%H:%M:%S.%f ') уақыт белгісі S. [1] [4:])) fAccelHwUnit_y.append (қалқымалы (жол [2])) fAccelHwUnit_z.append (қалқымалы (жол [3])) fGyroHwUnit_x.append (қалқымалы (жол [4])) fGyroHwUnit_y.append (5 -жол)) [9])) fRPYdeg_r.append (қалқымалы (жол [10])) fRPYdeg_p.append (қалқымалы (жол [11])) fRPYdeg_y.append (қалқымалы (жол [12])) қоспағанда: уақыт белгісінен өтуS = 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 (уақыт белгісі) ################# #################################################### пайдалану# маятниктік периодты талдауға арналған мінез -құлық сілтеме жүйесінің шығысындағы қадамдық компонент ##################################### ############################# талдау_ уақытСəйкестігі (уақыт белгісіS, fRPYdeg_p, FsHz, 'қадам') ############ ################################################################################################################################# ####маятниктік периодты талдау үшін акселеромердің шикі өлшеу шығысын қолданыңыз ##################################### #############################_ талдау_ уақытСəйкестігі (уақыт белгісіS, fAccelHwUnit_x, FsHz, 'accel') ########### ################################################################################################################################# ####маятниктік периодты талдау үшін гиро шикізатының өлшеуін пайдаланыңыз ##################################### ############################# талдау_ уақытСəйкестігі (уақыт белгісіS, fGyroHwUnit_y, FsHz, ' гиро ') басып шығару (' жасалды, құттықтаймын:-) ') plt.show () ############################## ###################################bluetooth байланыс процесінде, деректер комбинациясының мүмкін болатын сирек мүмкіндігі бар. жоғалту#біз K-mean көмегімен 20 Гц өлшеу деректерін сыртқа шығарғыштардан оқшаулау үшін пайдаланамыз, олар#толығырақ пакеттің «сигнал мен жүйеге» түсуіне байланысты ############################################## #################################################### def getSamplingIntervalS (timestampS): plt.figure () sampleIntervalS = np.diff (timestampS) sns.distplot (sampleIntervalS) plt.ylabel ('histogram') plt.xlabel ('өлшеу аралығы (лары)') кластеріCnt = 5 км = KMeans (n_clusters = clusterCnt) km.fit (sampleIntervalS.reshape (-1, 1)) centroids = km.cluster_centers_ elemCnt = Counter (km.labels_) пайдаCCNt = ii ауқымында (clusterCnt): пайда болуCnt.append (elemCnt [ii)]) FsHz = 1/centroids [пайда болуCnt.index (max (пайда болуCnt))] FsHz қайтарады

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

#спектрометрді қолданыңыз, яғни жиілік компонентін алу үшін қысқа уақыт FFT, шыңдық қалта - бұл маятник тербелісінің ең жақсы бағасы ########################### ######################################## analy_timeSequence (уақыт белгісі, timeSeqData, FsHz, strComment): fig, (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, жиіліктер, бункерлер, im = ax2.specgram (timeSeqData, NFFT = NFFT, Fs = FsHz, noverlap = NFFT/2)

ax2.set_title («Спектрограмма») ax2.set_xlabel («үлгілер») ax2.set_ylabel («жиілік (Гц)»);

# `Specgram` әдісі 4 нысанды қайтарады. Олар:

# - Pxx: периодограмма # - жиіліктер: жиілік векторы # - контейнерлер: уақыт шкалаларының орталықтары # - im: matplotlib.image. AxesImage экземпляры pkresult = np.where сюжетіндегі деректерді көрсетеді (Pxx == np).amax (Pxx)) oscFreqHz = freqs [pkresult [0] [0] басып шығару ('маятник тербелісі жиілік (Гц) =%f, период (сек) =%f, бағалау деректерінің көзі:%s'%(oscFreqHz, 1/oscFreqHz, strComment)) 1/oscFreqHz қайтарады

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

#біз бұл бағдарламаны дербес іске қосуымыз керек пе, яғни pendulum1.py арқылы шақырылмаса,#біз талдау үшін журнал деректерінің әдепкі атауын анықтаймыз #################### ################################################ егер _ аты_ == «_басты_ «: defaultFilename = './PendulumTestData.txt' os.path.isfile егер os.path.isfile (defaultFilename): parseDataLogFile (defaultFilename) басқа: басып шығару (» әдепкі журнал файлы %s жоқ « %defaultFilename)

Ұзақ мерзімді жаңарту үшін https://github.com/xiapeiqing/m2robots/blob/maste… сайтына кіріңіз.

Бастапқы код егжей -тегжейлі түсініктемелерді қамтиды, мұнда математикалық бағалаудың жоғары деңгейдегі қысқаша мазмұнын берейік.

1) Біз алдымен CSV файлының мазмұнын компьютерде «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) Өлшеу жылдамдығы өте маңызды болғандықтан және маятниктік периодты бағалау қатесін тікелей енгізетіндіктен, біз оларды бағалауды қалаймыз. Біздің номиналды өлшеу аралығы - 50 мс, яғни 20 Гц. Барлық өлшемдердің орташа мәні жақсы сияқты, бірақ біз кейде деректерді жіберу пакетін жоғалтып аламыз, жаңарту аралығы 100 мс немесе 150 мс құрайды,…

Егер біз осы деректердің пайда болуын жоспарласақ, 1 -суретті қараңыз, адам ретінде біз көз алмасы 0,05секке оңай ие бола аламыз. Алайда, біз одан да жақсысын жасай аламыз ба?

Орташа есептеу үшін тек жақсысын таңдау үшін біз жіктеу әдісін қолдануымыз керек. Python -да бізге кластерлеуге немесе жіктеуге көмектесетін KMeans атты құралдар қорабы бар. Бұл ұғымдар көптеген үлкен деректер мен AI аймақтарында қолданылады.

3) 2 -суретте екі сурет бар. Жоғарғы сюжет-бұл біздің бұрылатын бұрышты градуста өлшеудің уақыттық домендік тізбегі. Х осінің уақыт белгісіне Екіншіден сілтеме жасай отырып, біз 50 секундта шамамен 22,5 циклды оқи аламыз, бұл маятниктің 2,22 сек. Бұл процесті автоматтандырудың және дәлірек бағалаудың әдісі бар ма? Иә, біз спектрограмма деп аталатын математикалық құралды қолдана аламыз, ол өлшеу мәліметтерінің кішкене бөлігін пайдаланады және оның жиілігін айтады, төмендегі суретті қараңыз. Ең қараңғы сызық үшін у осінің көрсеткіші-маятник тербелісінің жиілігі. Көлденең сызық болу маятниктің тербелісі эксперимент кезінде мүлде өзгермегенін растайды. Тербеліс жиілігінің кері мәні - маятниктің тербеліс периоды.

Бағдарламаның қорытынды есебі мәтіннің қысқаша мазмұны болып табылады:

маятниктік тербеліс жиілігі (Гц) = 0.449224, период (сек) = 2.226059, бағалау деректерінің көзі: қадам

Біз қолмен есептегенде қолмен есептеуге болатын нәтижені табамыз, 2.22сек, бұл бағдарламаның есептелген мәніне сәйкес келеді.

2.0962 (сек) теориялық есептелген мәнмен салыстырғанда бізде ~ 5% қалған қате бар. Олардан қалай арылуға болады? Есіңізде болсын, «қатаң біркелкі таяқша» деген болжам бар ма? Тіпті 7 грамм қосымша салмақ тривиальды болып көрінеді, бұл қалған қатенің ең үлкен себебі.

Біз қазір құрылғыны айналу нүктесіне жақын жылжытамыз. Жақын суретке түсіру үшін алдыңғы қадамды қараңыз. Мен жасаған журнал файлын мына жерден жүктеуге болады:

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

Дәл сол талдау қадамдарын орындаңыз, біз 2.089867 (Sec) кезеңін аламыз, 3 -суретті қараңыз, бұл теориялық болжаммен бірдей. Тамаша!

Бізде бұрылыс бұрышы ғана емес, гироскопиялық және акселерометрлік өлшеу бірдей жылдамдықта. Қалған екі өлшеу үшін дәл осындай талдауды жүргізіңіз, біз 4 және 5 суреттерде нәтиже аламыз. Барлық үш өлшеу көздерінің болжамдары келіседі, бұл біздің экспериментіміздің сәтті болуына сенімділікті арттырады.

Міне, жұмыс істейтін python бағдарламасының соңғы нәтижесі:

маятниктік тербеліс жиілігі (Гц) = 0.478499, период (сек) = 2.089867, бағалау деректерінің көзі: қадам

маятниктік тербеліс жиілігі (Гц) = 0.478499, период (сек) = 2.089867, бағалау деректерінің көзі: accel

маятниктік тербеліс жиілігі (Гц) = 0.478499, период (сек) = 2.089867, бағалау деректерінің көзі: гиро

Бұл қадамдағы соңғы ой, бағалаудың нәтижелері әр түрлі кіріс деректерінің көзімен қалай дәл сәйкес болуы мүмкін? Бұл қарсы интуиция. Мен бұл сұрақты оқырмандарға қалдырамын. Міне, кеңес: есіңізде болсын, біз тербеліс жиілігін бағалау үшін қысқа мерзімді FFT қолданамыз. Цифрлық доменде жиілікті бағалау өзгермелі санды бағалаудың орнына дискретті жиілік қалталарында беріледі.

5 -қадам: Болашақ жұмыс бойынша ұсыныстар

Болашақтағы жұмыс бойынша ұсыныстардың санаттары аз.

Алдыңғы қадамда біз эксперимент қателігін ~ 5% -дан 1% -ға дейін төмендете аламыз, бұдан жақсы жасай аламыз ба? Тербеліс шамасы экспоненциалды түрде төмендейтінін байқаған кезде, маятникті айналдыру кезінде пайда болатын ауа тартуы себеп болады. Маятниктің көлденең қимасы аэродинамикалық тартымдылықты азайту үшін жеңіл формада болуы керек.

Тұрақты шыңдық сигналды шығару үшін бейімделетін сүзу әдістерін қолдана отырып, уақыт бойынша өзгеретін пайданы қолдана аламыз ба? Бұл кезде сыртқы күштердің күшінің әлсіреуін байланыстырыңыз.

Біз «қарапайым гармоникалық қозғалыстан» қарапайым нәрсені таба алмаймыз. Біз маятникті талдайтын қондырғыларды неғұрлым күрделі нәрсені, спорттық әрекетті, су ракетасының ұшырылу ретін және т.б талдау үшін қолдана аламыз ба?

Бақытты хакерлік

Ұсынылған: