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

מצפן דיגיטלי ומחפש כותרות: 6 שלבים
מצפן דיגיטלי ומחפש כותרות: 6 שלבים

וִידֵאוֹ: מצפן דיגיטלי ומחפש כותרות: 6 שלבים

וִידֵאוֹ: מצפן דיגיטלי ומחפש כותרות: 6 שלבים
וִידֵאוֹ: השתלמות חטב "מהיום עד מחר"- מפגש ראשון- מיומנויות 2024, נוֹבֶמבֶּר
Anonim
מצפן דיגיטלי ומאתר כותרות
מצפן דיגיטלי ומאתר כותרות

מחברים:

Cullan Whelan

אנדרו לופט

בלייק ג'ונסון

הכרות:

האקדמיה הימית של קליפורניה

אוון צ'אנג-סיו

מבוא:

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

אספקה:

- מודול GPS מסוג 6m DIY

- HiLetgo MPU9250/6500 9 צירים 9 DOF 16 ביט

- טבעת NeoPixel Adafruit 16

- סוללת נטענת ליתיום נטענת MakerFocus 4 יחידות 3.7V

- לוח ELEGOO MEGA 2560 R3

- Adafruit Mini Lipo w/Mini -B USB Jack - USB LiIon/LiPoly מטען - v1

- 2.8 אינץ 'TFT עם לוח פריצת מסך מגע עם שקע MicroSD

שלב 1: תכנון הפונקציונליות של הפרויקט

תכנון הפונקציונליות של הפרויקט
תכנון הפונקציונליות של הפרויקט

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

מדינה 1: מדינת טעינה

מצב הטעינה משמש לאפשר ל- Arduino Mega להחזיר נתונים משני החיישנים בעת ההפעלה. המכשיר יציג טעינה על המסך, ינקה את כל ערכי המספרים במסך, והנורות על טבעת NeoPixel יידלקו במעגל.

מצב 2: מצב מצפן

במצב זה המכשיר יפעל כמו מצפן דיגיטלי. טבעת NeoPixel תדלק כדי לציין את כיוון הצפון ביחס לכיוון המכשיר. כותרת המכשיר האמיתית תוצג גם על מסך ה- LCD יחד עם קו הרוחב והאורך של המכשיר. זה יהיה גם בתוך מצב זה שהמשתמש יוכל להזין את כותרת המשתמש שתוצג במצב 3.

מצב 3: מצב מעקב אחר כותרות

במצב זה המכשיר יעזור כעת למשתמש להתבסס על הכותרת הרצויה לו. המכשיר יציג כעת את כותרת המכשירים והמשתמשים בכיוון על מסך ה- LCD יחד עם נתוני קו הרוחב והאורך. טבעת NeoPixel תדלק כעת כדי לציין את כיוון המשתמשים ביחס לכיוון המכשירים.

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

מצב חיישן 1: MPU

אם המכשיר אינו זז נתוני הכותרת יימשכו מה- MPU מכיוון שהם הנתונים המדויקים ביותר כאשר המכשיר אינו זז.

מצב חיישן 2: GPS

אם המכשיר זז נתוני הכותרת יימשכו משבב ה- GPS מכיוון שהם הנתונים המדויקים ביותר במצב זה.

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

שלב 2: הגדרת תרשים חוט

תרשים התקנה וחיווט
תרשים התקנה וחיווט
תרשים התקנה וחיווט
תרשים התקנה וחיווט
תרשים התקנה וחיווט
תרשים התקנה וחיווט

הפרויקט משתמש בלוח שיבוט Arduino Mega הדומה ללוח לעיל. כל הרכיבים בפרויקט יחוברו ללוח זה. למעלה תרשימים מפורטים כיצד לחבר את הרכיבים לפרויקט זה. לכפתורים אין מעגל מפורט מכיוון שניתן להגדיר אותם בדרכים רבות. בפרויקט זה הם משתמשים בנגד למטה של 100K ולחצן פשוט לשליחת אות 3 וולט לסיכה שהוקצתה לו.

שלב 3: בדיקת רכיבים וקוד בסיסי

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

ספריות חובה:

Adafruit_ILI9341_Albert.h

SPI.h

Adafruit_GFX.h

Adafruit_ILI9341.h

TinyGPS ++. H

Adafruit_NeoPixel.h

MPU9250.h

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

שלב 4: כיול MPU

כיול MPU
כיול MPU

הכותרת שנמצאה באמצעות ה- MPU במדינה 2 ובמדינה 3 חולקה לארבעה רבעים. זה היה הכרחי מכיוון ששיטת הכיול שלנו דרשה למצוא את הגודל המינימלי והמקסימלי מהמגנומטר לאורך צירי ה- x וה- y שלו. הדבר נעשה באמצעות סיבוב המכשיר באופן אקראי סביב שלושת הצירים שלו, נקי מכל שדות אלקטרומגנטיים משמעותיים מלבד זה של כדור הארץ. לאחר מכן לקחנו את ערכי המינימום והמקסימום לאורך ציר x ו- y וחיברנו אותם למשוואת קנה מידה על מנת להגביל את הגדלים בין הערכים של שלילי אחד ואחד. באיור לעיל, BigX ו- BigY הם הערכים המרביים של נתוני מגנטומטר לאורך ציר x ו- y בהתאמה, LittleX ו- LittleY הם הערכים המינימליים של נתוני מגנטומטר לאורך ציר x ו- y בהתאמה, IMU.getMagX_uT () ו- IMU.getMagY_uT () הם הערכים הנמשכים מהמגנומטר בכל עת לאורך ציר ה- x וה- y בהתאמה, ו- Mx ו- My הם הערכים החדשים בקנה מידה המשמש לחישוב הכותרת.

שלב 5: קוד סופי

קוד סופי
קוד סופי
קוד סופי
קוד סופי
קוד סופי
קוד סופי
קוד סופי
קוד סופי

השלב האחרון הוא יצירת הקוד הסופי. צירפתי עותק של הקוד הסופי של הפרויקטים. בתוך ההערות נרשמו כדי לסייע בניווט בקוד. האתגר הגדול ביותר של סעיף זה היה לגרום לרבעים לפעול כראוי. יישום הרבעונים הוכיח את עצמו כמייגע ומפרץ את ההיגיון ממה שיכולנו לצפות. בתחילה יישמנו ארקטאן בסיסי (My/Mx) ולאחר מכן המרתנו מרדיאנים למעלות, מכיוון שיציאות Arduino ברדיאנים כברירת מחדל. עם זאת, הרבע היחיד בו עבד היה בין 90 מעלות ל -180 מעלות, מה שנתן לנו תפוקה שלילית ובסופו של דבר הפך לרבע השלישי. הפתרון לכך היה לקיחת הערך המוחלט, מכיוון שהוא עדיין עלה בצורה נכונה. ערך זה הופחת לאחר מכן מ -360 כדי להדליק את נורית ה- NeoPixel הנכונה במצב 2 ופעולה מתמטית דומה שימשה במצב 3 בהתבסס על אם הכותרת הייתה גדולה או קטנה מכותרת הקלט של המשתמש, את שתיהן ניתן לראות ב- קוד מעל. בנתונים לעיל, הכותרת מתאימה לנורית NeoPixel שתדלק על בסיס ההבדל בין הכותרת של המכשיר לבין הסטייה מצפון במקרה של מצב 2, ושל זו של כותרת המשתמש. במקרה זה, 90 עד 180 מעלות תואמים לרביע השלישי. בשני המקרים, tft.print גורם למסך לקרוא את המכשיר בכיוון צפון.

בשלושת הרביעים האחרים, יישום ארקטאן (My/Mx) הוביל להיפוך התוספת תוך כדי סיבוב המכשיר, כלומר זווית הכותרת תספור לאחור כשהיא אמורה לספור למעלה ולהיפך. הפתרון לבעיה זו היה להפוך את החומר לצורת ארקטאן (Mx/My). למרות שזה פתר את היפוך ההגדלה, זה לא נתן את הכותרת הנכונה של המכשיר, וזה המקום בו נכנסו הרבעים. התיקון הפשוט לכך היה להוסיף תזוזה המבוססת על הרבע המקביל. ניתן לראות זאת באיורים הבאים, שהם שוב פיסות קוד ממדינות 2 ו -3 של כל רבע.

הצהרת ה- if הראשונה מתבצעת אם הכותרת המחושבת על ידי משוואת ה- MPU גדולה מכותרת המשתמש. בתנאי זה מתווספת כותרת הקלט של המשתמש לכותרת המכשיר והערך המתאים נגרע מ- 360. אם המשפט אחר מתבצע, משוואת הכותרת MPU מופחתת מכותרת הקלט של המשתמש. תנאים אלה יושמו על מנת לא רק לקבל ערך מדויק עבור ה- NeoPixel, אלא גם להימנע מקבלת ערך מחוץ לטווח המקובל, שהוא בין 0 ל- 359 מעלות.

מוּמלָץ: