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

מערכת מיקום מבוססת אולטראסאונד: 4 שלבים (עם תמונות)
מערכת מיקום מבוססת אולטראסאונד: 4 שלבים (עם תמונות)

וִידֵאוֹ: מערכת מיקום מבוססת אולטראסאונד: 4 שלבים (עם תמונות)

וִידֵאוֹ: מערכת מיקום מבוססת אולטראסאונד: 4 שלבים (עם תמונות)
וִידֵאוֹ: אולטראסאונד ראשון בהריון 2024, דֵצֶמבֶּר
Anonim
מערכת מיקום מבוססת אולטראסוניקה
מערכת מיקום מבוססת אולטראסוניקה

כל הגרסאות של מכ"מים אולטראסוניים שמצאתי למכשירי ארדואינו (Arduino - Radar/Ultrasonic גלאי, Arduino Ultrasonic Radar Project) הינם מכ"מים נחמדים מאוד אך כולם "עיוורים". כלומר, המכ"ם מזהה משהו אבל מה הוא מזהה?

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

זו התוצאה שאני מקווה שתאהבו.

שלב 1: איך זה עובד?

איך זה עובד?
איך זה עובד?

מערכות המיקום נוצרות על ידי שלוש תחנות חיישנים עם גלאים אולטראסוניים ו- id_node 1, 2 ו- 3 היוצרות מלבן או ריבוע שסוחפים זווית של 90º והמקומות ביניהם ידועים כפי שמוצג בתמונה 1.

const float distance between1and2 = 60.0;

const float distance between2and3 = 75.0;

חיישנים אלה מודדים את המרחק והזווית של אובייקטים אחרים עם id_node הגדול מ -3 שיש להם גם גלאי קולי שסוחף זווית של 170 °.

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

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

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

שלב 2: כיצד להגדיר את שלוש תחנות החיישן והאובייקטים

כיצד להגדיר את שלוש תחנות החיישן והאובייקטים
כיצד להגדיר את שלוש תחנות החיישן והאובייקטים
כיצד להגדיר את שלוש תחנות החיישן והאובייקטים
כיצד להגדיר את שלוש תחנות החיישן והאובייקטים

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

אז עליך לעדכן את מרחק הגילוי המרבי ("valid_max_distance") המותר ואת המינימום ("valid_min_distance") (סנטימטרים) כדי לשפר את הזיהוי ולהגביל את אזור הזיהוי:

int valid_max_distance = 80;

int valid_min_distance = 1;

צומת המזהה של תחנות החיישנים הללו ("הצומת הזה" בקוד שלהלן) הן 1, 2 ו -3 וצומת המזהה של תחנת האב היא 0.

const uint16_t this_node = 01; // כתובת הצומת שלנו בפורמט Octal (Node01, Node02, Node03)

const uint16_t other_node = 00; // כתובת הצומת הראשי (Node00) בפורמט Octal

כל תחנת חיישן גורפת וזווית של 100º ("max_angle" בקוד למטה)

#הגדר min_angle 0

#הגדר max_angle 100

כנ"ל הפונקציה היחידה של אובייקט היא לזהות אובייקטים ולשלוח את רשימת המרחקים, הזוויות ואובייקט ה- ID הנמדד לתחנת האב. המזהה של אובייקט אחד ("זה_צומת" בקוד שלהלן) חייב להיות גדול מ -3.

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

const uint16_t this_node = 04; // כתובת הצומת שלנו בפורמט אוקטל (Node04, Node05, …)

const uint16_t other_node = 00; // כתובת הצומת הראשי (Node00) בפורמט Octal int valid_max_distance = 80; int valid_min_distance = 1; #הגדר צלע מינימלית 0 #הגדר צירוף מקסימלי 170

שלב 3: כיצד להגדיר את תחנת המאסטר

כיצד להגדיר את תחנת המאסטר
כיצד להגדיר את תחנת המאסטר
כיצד להגדיר את תחנת המאסטר
כיצד להגדיר את תחנת המאסטר
כיצד להגדיר את תחנת המאסטר
כיצד להגדיר את תחנת המאסטר

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

ראשית עליך לעדכן את המרחק (סנטימטרים) בין חיישן 1 ל -2 ואת המרחק בין 2 ל -3.

const float distancebetween1and2 = 60.0;

const float distancebetween2and3 = 70.0;

הסקיצה מחשבת את מיקום האובייקטים באופן הבא:

  • עבור כל שידורי האובייקטים (id_node הגדול מ -3) חפשו את אותו המרחק בכל שידור של החיישנים האולטראסוניים (id_node 1, 2 או 3).
  • כל הנקודות הללו יוצרות רשימה של "מועמדים" (מרחק, זווית, id_node) למיקום של אובייקט אחד ("process_pointobject_with_pointssensor" בסקיצה).
  • עבור כל "מועמד" מהרשימה הקודמת, הפונקציה "מועמד_בחירה_בין_חיישן 2 ו -3" מחשבת מנקודת מבטו של החיישן האולטראסוני 2 ו -3 מי מהם תואם את המצב הטריגונומטרי הבא (ראו תמונות 2 ו -3)

מרחק צף 2 = sin (רדיאנים (זווית)) * מרחק;

float distancefroms3 = cos (radians (angle_candidate)) * distance_candidate; // מצב טריגונומטריה 1 שרירי הבטן (distancefroms2 + distancefroms3 - distancebetween2and3) <= float (max_diference_distance)

כאמור, עבור כל "מועמד" מהרשימה הקודמת, הפונקציה "מועמד_בחר_בין_סנסור 1 ו -2" מחשבת מנקודת מבטו של החיישן האולטראסוני 1 ו -2 מי מהם תואם את הקשר הטריגונומטרי הבא (ראו תמונה 2 ו -3)

מרחק צף 1 = sin (רדיאנים (זווית)) * מרחק; מרחק צף 2 = cos (רדיאנים (זווית_מועמד)) * מרחק_מועמד; // מצב טריגונומטריה 2 שרירי הבטן (distancefroms1 + distancefroms2 - distancebetween1and2) <= float (max_diference_distance)

רק המועמדים (מרחק, זווית, id_node) התואמים לתנאי הטריגונומטריה 1 ו -2 הם אובייקטים מזוהים שזוהו על ידי תחנות החיישנים 1, 2 ו -3

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

שלב 4: רשימת החומרים

Image
Image

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

  • לוח ננו
  • חיישן קולי
  • מנוע מיקרו סרוו
  • מודול אלחוטי NRF24L01
  • מתאם NRF24L01

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

  • לוח ננו
  • מודול אלחוטי NRF24L01
  • מתאם NRF24L01

מוּמלָץ: