תוכן עניינים:

מחקר ניסיוני של תנועה הרמונית פשוטה: 5 שלבים
מחקר ניסיוני של תנועה הרמונית פשוטה: 5 שלבים

וִידֵאוֹ: מחקר ניסיוני של תנועה הרמונית פשוטה: 5 שלבים

וִידֵאוֹ: מחקר ניסיוני של תנועה הרמונית פשוטה: 5 שלבים
וִידֵאוֹ: ניק ליין: מקורות החיים, אבולוציה, חיי חייזרים 2024, נוֹבֶמבֶּר
Anonim

עקוב אחר מחבר:

Strandbeest, Java/Python ואפליקציות מבוקרות
Strandbeest, Java/Python ואפליקציות מבוקרות
Strandbeest, ג'אווה/פייתון ואפליקציות מבוקרות
Strandbeest, ג'אווה/פייתון ואפליקציות מבוקרות

בכיתה, אנו משתמשים לעיתים קרובות בשעון עצר לביצוע ניסוי המטוטלת, או ניסוי פשוט בתנועה הרמונית. הנה אתגר, האם נוכל לייצר גרף אמיתי של תנועתו ולראות מהי מיקום הזוויות ומהירות המיידי, זה הרבה יותר מידע וכיף.

שאלה ראשונה, עלינו להחליט כי גוף המטוטלת הוא חוט חסר משקל או מוט אחיד קשיח. נראה שגישת הכבל קלה יותר. מהתרגול של בניית אחת, יש לי את שיקולי הפשרה הבאים: הדרך הקלה ביותר לתלות מערכת מטוטלת היא לתלות אותה בקצה העליון של הדלת שלך. זה נותן את אורך המטוטלת שלך ~ 2 מ 'מבלי לבצע עבודות בנייה מבניות. אבל היא צריכה שהנדנדה לא תיגע במשטח הדלת, מה שפשוט הורס את כל הניסוי. אז המטוס שהוא מניף צריך להיות מקביל במדויק למשטח הקיר/הדלת שלך. כבל נטול משקל נוטה להיות דק, הוא יכול להסתובב בקלות ולסבך את מדידת זווית הנדנדה. אנו רוצים להשתמש במדידה אחת כדי לייצג את מצב הנדנדה. חבל דק, כגון חוט דגים, יכול להיות גמיש ומתוח, המשפיע על אחד הקבועים החשובים ביותר שלנו הנמדדים על ידינו ומשמשים אותו במשוואה, שהיא אורך המטוטלת. חלקם עשויים להיות מושפעים גם מהטמפרטורה. מסת המשקל התלויה בקצה החוט צריכה להיות כבדה מספיק כך שמשקל החבל יהפוך לזניח. אנא הגיב אם אתה מסכים איתם או לא מסכים איתם, או שיש לך רעיונות פשרה אחרים בעיצוב. כדי ללמוד בעיה זו, אנו זקוקים למכשיר כה קל עד שאפשר להתעלם ממשקלו ואנו עדיין מתייחסים למערכת המטוטלת כאל מוט אחיד קשיח. אני משתמש בבקר אלקטרוני לביש של COTS, המספק לנו את מידע הג'ירו, מד התאוצה והזווית באמצעות חיבור Bluetooth. מדידות אלה יישמרו בקובץ נתונים של אפליקציית טלפון נייד. לאחר מכן, ננתח את הנתונים לניסוי התנועה ההרמונית הפשוטה שלנו. הניתוח המספרי מתמקד בנושאים הבאים: 1) ניבא את תקופת תנודת המטוטלת 2) איסוף תכנות של המטוטלת נתוני ניסוי תנועה הרמונית פשוטה 3) השתמש ב- kmean כדי לקבץ נתונים ולהסיר חריגים בתהליך הניתוח 4) השתמש ב- FFT לזמן קצר כדי להעריך תדר תנודות המטוטלת

אספקה

מכשיר מדידה Bluetooth

אפליקציית טלפון אנדרואיד: עבור לחנות Play של Google, חפש ב- M2ROBOTS והתקן את אפליקציית השליטה. במקרה שקשה לגשת ל- Google Playstore, בקר בדף הבית האישי שלי לשיטת הורדת אפליקציות חלופית

מוט עץ

מעט חלקים מודפסים בתלת מימד

להבי מסור או חומר מתכת דומה

שלב 1: מה הם מטוטלת? כיצד לדגמן אותו?

ישנם מאמרים וספרים רבים המציגים את נגזרת משוואת המטוטלות, כולל ספר הפיזיקה של תכנית הלימודים שלך. עדיף שתוכן כזה לא יחזור על עצמו כאן שוב. רק המסקנה הסופית מופיעה כאן בנושא "תנועה הרמונית פשוטה". על מנת לדעת את תקופת המטוטלת, כל שעלינו לדעת הוא אורך המטוטלת, המסומנת כ- "l", במטרים.

אם אנו בטוחים שהמשקל ממוקם כמעט לחלוטין בקצה חוט חסר משקל התלוי בציר, והמטוטלת מתנדנדת בזוויות קטנות θ, נניח פחות מ -15 °, התקופה T1 של מטוטלת כזו ניתנת על ידי:

T1 = 2*pi*(l/g)^0.5

g = האצת כוח הכבידה, כ -9.8 מ '/שניות^2

אם החוט חסר המשקל מוחלף במוט אחיד קשיח, שוב באורך l, תקופת התנועה ההרמונית הפשוטה שלו T2 ניתנת על ידי T1 = 2*pi*(2l/3g)^0.5

למעשה יש לה את אותה תקופה כמו מטוטלת חבל חסרת משקל שהיא שני שלישים מאורך המוט האחיד הנוקשה.

זהו הרקע, ואנו יכולים להתחיל להכין את הניסוי שלנו.

שלב 2: הכינו את החלקים לבניית חומרה

הכינו את החלקים לבניית חומרה
הכינו את החלקים לבניית חומרה
הכינו את החלקים לבניית חומרה
הכינו את החלקים לבניית חומרה
הכינו את החלקים לבניית חומרה
הכינו את החלקים לבניית חומרה

כדי לבנות את מבנה המטוטלת, אנו מדפיסים חלקים בתלת מימד ומחזרים משהו שכבר יש לנו. מבנה המטוטלת הכולל מוצג באיור 1. זהו תערובת של חלקי הדפסה תלת -ממדית יחד עם חלקים בעבודת יד וחתיכת מוט עץ ארוכה מבית Lowe's.

החלק המודפס בתלת מימד באיור 2 תלוי על הקצה העליון של הדלת, מכיוון שהדלת שלנו היא משטח שטוח וקל לנו לתלות משהו. קישור להורדת קובץ STL:

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

החלק הירוק באיור 3 מחבר את מוט העץ ללהב, והלהב יושב על גבי שתי חתיכות של מעקה המותקן על קולב הדלתות הקודם המודפס בתלת מימד. קישור להורדת קובץ STL:

שתי חתיכות המעקה נעשות על ידי שבירת להב מסור ישן לשניים, ראה איור 4. החלק באיור 2 הכין עבורם את גודל החריץ המתאים. באופן אידיאלי נוכל ליצור חריץ בצורת "V" בשני להבי המסור באמצעות קובץ. מתכת עם קצוות חדים למדי, כגון סכין גילוח בקצה אחד, או כל פיסת מתכת בעבודת יד, יכולה לשבת בתוך החריצים בצורת "V". הסיבה שאנו זקוקים לאזור מגע קטן יותר היא צמצום האנרגיה הקינטית שאבדה בזמן הנדנדה.

החלק האחרון המודפס בתלת מימד באיור 5 הוא מגש קטן לאחסון מכשיר המדידה האלקטרונית.

קישור ההורדה:

מכשיר המדידה של בלוטות 'מייצר אומדן זווית, מדידת ג'ירו ומדידת תאוצה. כל הנתונים הללו זמינים לנו באמצעות קישור אלחוטי Bluetooth.

אנו הולכים לערוך ניסויים מרובים על ידי פריסת מנגנון זה במיקום שונה של זרוע המטוטלת, ונראה את ההבדלים.

שלב 3: איסוף נתוני ניסוי

איסוף נתוני ניסוי
איסוף נתוני ניסוי
איסוף נתוני ניסוי
איסוף נתוני ניסוי
איסוף נתוני ניסוי
איסוף נתוני ניסוי

ישנן שתי שיטות אפשריות לאיסוף הנתונים הניסיוניים לפני שננתח את מערך הנתונים שנרכש:

1) השתמש באפליקציית טלפון אנדרואיד המפורטת בסעיף הדרישות כדי לרשום את כל המדידות שמייצר המכשיר לקובץ נתונים המאוחסן בכרטיס ה- SD של הטלפון שלך. אנו יכולים להעתיק את הקובץ ולפרסם את המידע.

2) השתמש במחשב מופעל Bluetooth, מחשב, מחשב נייד או מחשב מיני RaspberryPi כדי ליצור חיבור Bluetooth למכשיר ולקרוא את הנתונים לניתוח בזמן אמת או לא מקוון.

קיימים יתרונות וחסרונות לכל שיטה, אנו הולכים לנסות את שניהם ולספר את ההבדל בהנחיה זו.

לשיטה (1) באמצעות אפליקציית האנדרואיד, ברגע שנמצא בממשק השליטה באפליקציות אנדרואיד, נתוני הטלמטריה הנשלחים ממכשיר המדידה של בלוטות 'לטלפון האנדרואיד יירשמו לקובץ דאגלוג בשם m2flightDatayyyymmdd_hhmmss.txt. ניתן למצוא אותו בתיקיית הורדת/m2LogFiles של טלפון האנדרואיד שלך. התיקייה "הורדה" היא תיקיה קיימת במערכת ההפעלה אנדרואיד של הטלפון שלך ו- "m2LogFiles" היא תיקיה שהאפליקציה יצרה. תוכן שם הקובץ yyyymmdd_hhmmss הוא הדרך לקודד את זמן ההתחלה של הניסוי (שנה, חודש, יום, שעה, דקה ושנייה) בשם הקובץ.

כל שורה בקובץ היומן היא רשומה אחת. זה מתחיל עם חותמת הזמן של האירוע, מחרוזת ההקדמה "eam:", ואחריה 4 נתוני שלישיות, שהם:

קריאת ציר XYZ של מד התאוצה בחומרי גלם של חומרי החיישן

קריאת ציר XYZ בגירוסקופ בחומרי גלם של חומרי החיישן רושמים ערכי החזרה

קריאת ציר XYZ של מגנטומטר בחומרי גלם של חומרת החיישן ערכי קריאה חוזרת

המשולב המשוער בגליל/המגרש/הגולמי

קובץ הנתונים שנוצר באמצעות תוכנת פייתון מחשב ישתמש בפורמט קובץ נתונים זהה, כך שהתוכנית שבה אנו משתמשים בשלב ניתוח הנתונים לא תוטר במקור הנתונים המיוצר על ידי תוכנית הפייתון שלנו או אפליקציית אנדרואיד.

נתחיל לקודד בשיטה (2).

לאינטראקציה עם מכשיר המדידה של בלוטות ', שני טעמים של SDK מסופקים:

1) Python SDK, אותו ניתן להתקין על ידי "pip3 install m2controller", python3 היא השפה בה משתמשים. הדוגמאות לקוד של יישומי משתמש מאוחסנות ב- https://github.com/xiapeiqing/m2robots/tree/maste… לצורך ניסוי זה נשתמש במטוטלת סקריפט python1.py

2) Java SDK, שאינו בשימוש בהוראה זו מכיוון שאנו רוצים הדמיה וניתוח מאוחר יותר של נתוני המטוטלת הנרכשים, מה שעשוי לקחת מעט יותר מאמץ עבורנו לתכנת ב- Java.

קוד המקור של תוכנית איסוף הנתונים של python3 מכיל הערות רבות לפרטי פונקציונליות הקוד. תמונת מצב של קוד המקור מסופקת כאן.

#!/usr/bin/env python#-*-קידוד: UTF-8-*-מ- m2controller יבוא m2controller מ- m2controller יבוא m2 קונסטנט יבוא זמן יבוא datetime יבוא usrCfg מטוטלת יבוא 2

requestExit = שקר

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

#אנו רוצים להשתמש באותה מוסכמה לשמות קבצי יומן כך שמודול ניתוח הנתונים, pendulum2.py, יכול להיות אגנוסטי לאופן שבו אנו מקבלים את קובץ נתוני היומן ################# ############################################### logfilename = " m2flightData%s.txt "%(datetime.datetime.fromtimestamp (time.time ()). strftime ('%Y%m%d_%H%M%S')) dataLogfile = open (שם קובץ," w ")

def signal_handler (sig, frame):

global requestExit print ('משתמש Ctrl-C ליציאה מביצוע התוכנית') requestExit = true signal.signal (signal. SIGINT, signal_handler)

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

#כאשר כל נתוני מדידה יהיו זמינים בקצב של 20 הרץ, פונקציית "שיחה חוזרת" תזומן ################################ ################################# def callbackfunc (telemetry): 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], telemetry ['m_fAccelHwUnit'] [1], telemetry ['m_fAccelHwUnit'] [2], טלמטריה ['m_fGyroHwUnit'] [0], טלמטריה ['m_fGyroHwUnit'] [1], טלמטריה ['m_fGyroHwUnit'] [2], טלמטריה ['m_fMagHwUnit'] ['m_fMagHwUnit'] [1], טלמטריה ['m_fMagHwUnit'] [2], טלמטריה ['m_fRPYdeg'] [0], טלמטריה ['m_fRPYdeg'] [1], טלמטריה ['m_fRPYdeg'] [2]) ## ################################################### ############# אנו מדפיסים את מחרוזת הנתונים למסך ושומרים אותם בקובץ היומן ###################### ######################################### print (dataStr) dataLogfile.writelines (dataStr)

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

#אתחל את הבקר, זכור להגדיר את שדה BleMACaddress ככתובת ה- MAC של המכשיר שלך ################################## ################################TODO: בואו לאתחל את BleMACaddress אם הוא לא מוגדר על ידי המשתמש. בקר = m2controller. BleCtrller (m2Const.etDebian, callbackfunc, usrCfg. BleMACaddress) controller.connect () בעוד נכון: ########################### #######################################המתן לנתוני המדידה שנוצרו ונשלחו ממדידת המטוטלת מכשיר ################################################## ################ controller.m_CommsTunnel.waitForNotifications (1.0) if requestExit: ######################## #########################################שמירת הבית פועלת כאן כאשר אנו מסיימים רישום נתונים. ################################################## ############### controller.stop () dataLogfile.close () הפסקה

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

#איסוף הנתונים הושלם, כעת ננתח את נתוני היומן ######################################## ######################### pendulum2.parseDataLogFile (logfilename)

לעדכון לטווח ארוך, בדוק את

כעת נסביר את שיטת הפעולה שלו. תוכנית פייתון זו כתובה על גבי חבילה הניתנת להתקנה של pip, ושמה m2controller. החבילה ברמה נמוכה יותר מציעה מנגנון החזרה, כך שכל עדכון מדידה שהתקבל יפעיל את פונקציית השיחה החוזרת שכתבנו, וישמור את הנתונים לקובץ יומן מקומי. הפורמט של תוכן נתוני קובצי היומן זהה למה שמופק על ידי אפליקציית נלוות אנדרואיד, כך שניתן להחליף קובץ יומן הנתונים שנוצר על ידי תוכנית פייתון או אפליקציה נלווית אנדריוד.

אות המשתמש ctrl-C, שנתפס על ידי מערכת ההפעלה, מועבר לתוכנית, ועוצר את הלולאה האינסופית שמחכה להגעת נתוני המדידה החדשה.

עד כה, קובץ יומן נוצר בהצלחה, ותוכנית זו תקרא לתוכנית הניתוח לבחון את תוצאות הניסוי שלנו.

להלן שני ניסויים, וההשוואה מראה את ההבדל הבולט מאוד על ידי חיבור מכשיר של 7 גרם במיקומים שונים.

באיור 2, אנו משתמשים בסולם כדי לקבוע את המשקל האמיתי של מכשיר מדידת Bluetooth זה.

איור 3 מתאר את הגדרת המטוטלת שבה מחובר המכשיר 7 גרם לקצה התחתון של המטוטלת. לתצורת ההתקנה באיור 4 המסה של 7 גרם ממוקמת הרבה יותר קרוב לציר המתנדנד.

איור 5 הוא מבט מקרוב על מבנה המטוטלת.

שלב 4: ניתוח נתונים

ניתוח נתונים
ניתוח נתונים
ניתוח נתונים
ניתוח נתונים
ניתוח נתונים
ניתוח נתונים

מכשיר המדידה של בלוטות 'שוקל ~ 7 גרם, שמשקלו הרבה פחות ממקל עץ באורך ~ 1.6 מטר. השתמש בהנחה של "מוט אחיד קשיח", ויש לנו משוואת תקופת מטוטלת זו, T1 = 2*pi*(2l/3g)^0.5

כדי לקבל את כוח הכבידה קבוע, אנו יכולים להשתמש ב- 9.8m/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" והכניס אותו לאותה תיקיה של תוכנית ניתוח פייתון. תמונת מצב של קוד המקור מסופקת כאן.

#!/usr/bin/env python#-*-קידוד: UTF-8-*-יבוא csv יבוא matplotlib.pyplot כ plt plt.style.use ('seaborn-whitegrid') ייבוא numpy כ- np מ- datetime import datetime, timedelta יבוא seaborn כמו sns מ- sklearn.cluster יבוא KMeans מאוספים ייבוא מונה ################################### ##############################פונקציה זו מפעילה את עבודת ניתוח קובצי הנתונים ############# ################################################## ## 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 ') timestampS.append (timedelta (hours = x.hour, minutes = x.minute, seconds = x.second, microseconds = x.microsecond).total_seconds ()) fAccelHwUnit_x.append (float (row [1] [4:])) fAccelHwUnit_y.append (float (שורה [2])) fAccelHwUnit_z.append (float (שורה [3])) fGyroHwUnit_x.append (float (שורה [4])) fGyroHwUnit_y.append (float (שורה [5])) fGyroHwUnit_z.append (float (שורה [6])) fMagHwUnit_x.append (float (שורה [7])) fMagHwUnit_y.append (float (שורה [8])) fMagHwUnit_z.append (צף (שורה [9])) fRPYdeg_r.append (float (שורה [10])) fRPYdeg_p.append (float (שורה [11])) fRPYdeg_y.append (float (שורה [12])) למעט: חותמת זמן להעביר = 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 (חותמות זמן) ################# ################################################ # להשתמש רכיב המגרש בפלט מערכת ההתייחסות של כותרת הגישה לניתוח תקופות מטוטלת ###################################### ########################### analys_timeSequence (חותמות זמן, fRPYdeg_p, FsHz, 'המגרש') ########### ################################################## ####השתמש בתפוקת מדידה גולמית של acceleromter לניתוח תקופות מטוטלת ###################################### ########################### analyse_timeSequence (חותמות זמן, fAccelHwUnit_x, FsHz, 'accel') ############ ################################################### ####השתמש בתפוקת מדידה גולמית בג'ירו לניתוח תקופות מטוטלת ###################################### ############################ analyse_timeSequence (חותמות זמן, fGyroHwUnit_y, FsHz, ' gyro ') print (' done, gratulations:-) ') plt.show () ################################ ################################## בתהליך תקשורת Bluetooth, קיים סיכוי נדיר שחבילת ה- comm comm. תאבדו#אנו משתמשים ב- K-mean כדי לבודד את נתוני המדידה של 20 הרץ מתוך חריגים, הנגרמים על ידי ירידה במנה#צלילה לתוך "אות ומערכת לפרטים נוספים" ################ ################################################ def getSamplingIntervalS (חותמות זמן): plt.figure () sampleIntervalS = np.diff (timestampS) sns.distplot (sampleIntervalS) plt.ylabel ('היסטוגרמה') plt.xlabel ('מרווחי מדידה') אשכול Cnt = 5 ק"מ = KMeans (n_clusters = clusterCnt) km.fit (sampleIntervalS.reshape (-1, 1)) centroids = km.cluster_centers_ elemCnt = Counter (km.labels_) occurrenceCnt = עבור ii בטווח (clusterCnt): occurrenceCnt.append (elemCnt [ii]) FsHz = 1/centroids [occurrenceCnt.index (max (occurrenceCnt))] החזר FsHz

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

#השתמש בספקטרומטר, כלומר, זמן קצר FFT כדי לקבל את רכיב התדר, סל השיא הוא ההערכה הטובה ביותר שלנו לתנודת מטוטלת ########################## ##################################### def analys_timeSequence (חותמות זמן, 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 ("תדר (הרץ)");

# שיטת 'specgram' מחזירה 4 אובייקטים. הם:

# - Pxx: הפריוגרמה # - freqs: וקטור התדרים # - פחים: מרכזי פחי הזמן # - im: matplotlib.image. AxesImage המייצג את הנתונים בעלילה pkresult = np.where (Pxx == np.amax (Pxx)) oscFreqHz = freqs [pkresult [0] [0] הדפס ('תנודת מטוטלת Freq (Hz) =%f, תקופה (Sec) =%f, מקור נתוני הערכה:%s'%(oscFreqHz, 1/oscFreqHz, strComment)) החזר 1/oscFreqHz

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

#האם עלינו להריץ את התוכנית באופן עצמאי, כלומר, לא נקרא על ידי pendulum1.py,#אנו מגדירים שם קובץ ברירת מחדל של נתוני יומן לניתוח #################### ############################################ if _name_ == "_ main_ ": defaultFilename = './PendulumTestData.txt' יבוא os.path אם os.path.isfile (defaultFilename): parseDataLogFile (defaultFilename) אחר: הדפס (" קובץ ברירת המחדל של יומן הרישום %s אינו קיים " %defaultFilename)

לעדכון לטווח ארוך, בדוק את

קוד המקור מכיל הערות מפורטות, בואו ניתן סיכום ברמה גבוהה של ההערכה המתמטית כאן.

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) מכיוון שקצב המדידה כה קריטי ומביא ישירות לשגיאת הערכה של תקופת המטוטלת, אנו רוצים להעריך אותם. מרווח המדידה הנומינלי שלנו הוא 50ms, כלומר 20Hz. הממוצע על כל המדידות נראה תקין, אך מדי פעם אנו מאבדים את חבילת העברת הנתונים, מרווח העדכונים הופך ל -100 ms או 150ms, …

אם אנו משרטטים את הופעת הנתונים הללו, ראו איור 1, כאדם, אנו יכולים בקלות לקבל ערך גלגל עיניים של 0.05 שניות. עם זאת, האם אנו יכולים לעשות זאת טוב יותר?

עלינו להשתמש בשיטת הסיווג כדי לבחור רק את הטובות לחישוב ממוצע. ל- Python יש ארגז כלים בשם KMeans שיעזור לנו לאסוף אשכולות, או לומר סיווג. מושגים אלה משמשים בתחומי ביג דאטה ותחומי AI רבים.

3) איור 2 מכיל שתי תמונות. העלילה העליונה היא רצף תחום זמן של מדידת הזווית המתנדנדת שלנו ב- deg. על ידי התייחסות לחותמת הציר x בציר השני, אנו יכולים לקרוא כ -22.5 מחזורים ב -50 שניות, מה שמתורגם לתקופת מטוטלת של 2.22 שניות. האם יש דרך להפוך את התהליך לאוטומטי ולהעריך הערכה מדויקת יותר? כן, אנו יכולים להשתמש בכלי מתמטי הנקרא ספקטרוגרמה, העושה שימוש בנתח קטן של נתוני מדידה ולספר לנו את תדירותו, ראה האיור להלן. קריאת ציר ה- y עבור הקו הכהה ביותר היא תדר תנודות המטוטלת. היותו קו אופקי מאשר כי תנודת המטוטלת לא השתנתה כלל במהלך הניסוי. הערך ההפוך של תדר התנודה הוא תקופת תנודת המטוטלת.

הדו ח הסופי של התוכנית הוא סיכום טקסט:

תנודת מטוטלת תדירות (הרץ) = 0.449224, תקופה (שניות) = 2.226059, מקור נתוני הערכה: גובה

נוכל למצוא שתוצאת חישוב היד הקודמת שלנו, 2.22 שניות, עולה בקנה אחד עם הערך המחושב של התוכנית.

בהשוואה לערך המחושב תיאורטית 2.0962 (שניות), נותרה לנו ~ 5% שגיאה שנותרה. איך להיפטר מהם? זוכרים שההנחה היא "מוט אחיד קשיח"? אפילו משקל נוסף של 7 גרם נראה טריוויאלי, הוא הגורם הגדול ביותר לשגיאה הנותרת.

כעת אנו מעבירים את המכשיר, קרוב לציר. עיין בשלב הקודם לתמונת תקריב. ניתן להוריד את קובץ היומן שיצרתי כאן:

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

הפעל את אותם שלבי הניתוח, ונקבל תקופה של 2.089867 (שניות), ראה איור 3, שהוא כמעט זהה לתחזית התיאורטית. גדול!

מכיוון שיש לנו לא רק מדידת זווית מתנדנדת, אלא גם מדידה ג'ירוסקופית ומדידת תאוצה באותו קצב. הפעל את אותו ניתוח עבור שתי המדידות האחרות, אנו מקבלים תוצאות באיור 4 ו 5. הערכות מכל שלושת מקורות המדידה מסכימים, מה שגורם לנו ביטחון רב יותר בהצלחת הניסוי שלנו.

להלן התוצאה כפלט הסופי של תוכנית פייתון הפועלת:

תנודת מטוטלת תדירות (הרץ) = 0.478499, תקופה (שניות) = 2.089867, מקור נתוני הערכה: גובה

תנודה מטוטלת תדירות (הרץ) = 0.478499, תקופה (שניות) = 2.089867, מקור נתוני הערכה: אקסל

תנודה מטוטלת תדירות (הרץ) = 0.478499, תקופה (שניות) = 2.089867, מקור נתוני הערכה: גירו

המחשבה האחרונה בשלב זה, כיצד תוצאות ההערכה יכולות להיות זהות בדיוק באמצעות מקור נתוני קלט שונה? זוהי אינטואיציה נגדית. את השאלה הזו אשאיר לקוראים. הנה רמז: זוכר שאנחנו משתמשים ב- FFT לזמן קצר כדי להעריך את תדירות התנודה? בתחום הדיגיטלי, אומדן התדרים ניתן בפחי תדרים נפרדים במקום אומדן מספר צף.

שלב 5: המלצות לעבודה בעתיד

ישנן קטגוריות קטנות של המלצות לעבודה בעתיד.

בשלב מוקדם יותר, אנו מצליחים לצמצם את שגיאת הניסוי שלנו מ ~ 5% עד פחות מ -1%, האם אנו יכולים לעשות זאת טוב יותר? מבחינת גודל התנודה יורדת באופן אקספוננציאלי, גורם אחד התורם יכול להיות גרירת האוויר הנגרמת בעת הנפת המטוטלת. ייתכן שיהיה צורך לשנות את חתך הרוחב של המטוטלת כך שיהיה בצורת ייעול כדי להפחית את הגרירה האווירודינמית.

האם נוכל ליישם רווח משתנה בזמן שנלמד באמצעות טכניקות סינון אדפטיביות להוצאת אות שיא קבוע. בינתיים, תתאם את עוצמת ההחלשה של הכוחות החיצוניים.

כמעט ולא נוכל למצוא דבר פשוט יותר מ"התנועה ההרמונית הפשוטה ". האם נוכל להשתמש במתקנים שאנו מנתחים את המטוטלת כדי לנתח משהו מסובך יותר, פעילות ספורטיבית, רצף שיגור של רקטות מים וכו '?

פריצה שמחה

מוּמלָץ: