- חומרים נדרשים:
- תרשים מעגל:
- כיצד עובד למעשה מודול HC-SR04:
- מדידת מרחק בין שני חיישנים קולי (HC-SR04):
- תוכנית חיישן משדר:
- תוכנית לחיישן מקלט:
- עובד:
- רעיון מאולתר - כיול החיישן באמצעות מרחק ידוע:
בדרך כלל משתמשים בחיישן קולי (HC-SR04) למציאת מרחק האובייקט מנקודה מסוימת אחת. זה היה די קל לעשות את זה עם Arduino והקוד הוא גם די פשוט. אבל במאמר זה אנו הולכים לנסות משהו אחר עם חיישני HC-SR04 פופולריים אלה. ננסה לחשב את המרחק בין שני חיישנים קולי כלומר, נגרום לחיישן אחד לשמש כמשדר, ולחיישן השני לשמש מקלט. על ידי כך אנו יכולים לעקוב אחר מיקומו של משדר אחד באמצעות מקלטים קולי רבים המעקב הזה נקרא משולש וניתן להשתמש בו לחסידי מזוודות רובוטים אוטומטיים ויישומים דומים אחרים. מציאת המרחק בין שני חיישנים אמריקאים אולי זה נשמע משימה די פשוטה, אבל עמדתי בפני כמה אתגרים שנדונו בפרויקט זה.
הטכניקה הנדונה במאמר זה אינה מדויקת למדי ואולי לא תועיל בשום מערכות אמיתיות ללא שינויים. בתקופת התיעוד הזה לא מצאתי מישהו שמגיע לתוצאות קרוב יותר לשלי, אז פשוט שיתפתי את דעותיי לגבי האופן שבו קיבלתי את זה לעבוד כך שאנשים שמנסים זאת לא צריכים להמציא את הגלגל מחדש.
חומרים נדרשים:
- ארדואינו (2Nos) - כל דגם
- מודול HCSR04 (2Nos)
תרשים מעגל:
למרות שאנחנו הולכים להפוך חיישן אמריקאי אחד (אולטרסאונד) לעבודה כמשדר והשני כמקלט, חובה לחבר את כל ארבעת הפינים של החיישנים עם הארדואינו. למה לנו? יותר מזה יידונו בהמשך, אך לעת עתה תרשים המעגל יהיה כדלקמן
כפי שניתן לראות תרשים המעגל עבור משדר ומקלט שניהם זהים. בדוק גם: ממשק חיישן קולי Arduino
כיצד עובד למעשה מודול HC-SR04:
לפני שנמשיך הלאה נבין כיצד עובד חיישן HC-SR04. תרשים התזמון שלהלן יעזור לנו להבין את העבודה.
לחיישן שני פינים טריגר והד המשמשים למדידת מרחק כפי שמוצג בתרשים התזמון. ראשית כדי להתחיל במדידה עלינו לשלוח גל אולטראסוני מהמשדר, ניתן לעשות זאת על ידי הגדרת סיכת ההדק גבוהה ל- 10uS. ברגע שהדבר נעשה סיכת המשדר תשלח 8 פרצים קוליים של גלי ארה"ב. הגל האמריקני הזה יפגע באובייקט הקופץ לאחור ויתקבל על ידי המקלט.
כאן דיאגרמת התזמון מראה שברגע שהמקלט יקבל את הגל הוא יביא את סיכת ההד לגובה משך זמן השווה לזמן שנדרש לגל לנסוע מחיישן ארה"ב ולהגיע בחזרה לחיישן. נראה כי דיאגרמת תזמון זו אינה נכונה.
כיסיתי את חלק ה- Tx (המשדר) של החיישן שלי ובדקתי אם הדופק של הד נהיה גבוה, והוא כן הולך גבוה. המשמעות היא שדופק ההד לא ממתין לקבלת הגל האמריקאי (קולי). ברגע שהוא משדר את הגל האמריקני הוא הולך גבוה ונשאר גבוה עד שהגל חוזר חזרה. אז דיאגרמת התזמון הנכונה צריכה להיות משהו כזה המוצג למטה (סליחה על כישורי הכתיבה הלקויים שלי)
הפיכת ה- HC-SR04 שלך לעבודה כמשדר בלבד:
זה די פשוט לעשות HC-SR04 לעבוד כמשדר בלבד. כפי שמוצג בתרשים התזמון עליכם להכריז על סיכת הדק כסיכת פלט ולגרום לו להישאר גבוה למשך 10 מיקרו שניות. זה יוזם את פרץ הגל האולטראסוני. כך שבכל פעם שאנחנו רוצים להעביר את הגל אנחנו פשוט צריכים לשלוט על סיכת ההדק של חיישן המשדר, שהקוד עליו ניתן למטה.
הפיכת ה- HC-SR04 שלך לעבודה כמקלט בלבד:
כפי שמוצג בתרשים התזמון איננו יכולים לשלוט בעליית סיכת ההד מכיוון שהיא קשורה לסיכת הדק. כך שאין סיכוי שנוכל לגרום ל- HC-SR04 לעבוד כמקלט בלבד. אך אנו יכולים להשתמש בפריצה, על ידי כיסוי רק של חלק המשדר של החיישן בקלטת (כפי שמוצג בתמונה למטה) או מכסה שהגל האמריקני לא יכול לברוח מחוץ למעטפת המשדר שלו וסיכת ההד לא תושפע מהגל האמריקני הזה.
עכשיו כדי לגרום לסיכת ההד להתגבר עלינו פשוט למשוך את סיכת ההדק הדמה הזו גבוה למשך 10 מיקרו שניות. ברגע שחיישן מקלט זה יקבל את הגל האמריקני המועבר על ידי חיישן המשדר, פין ההד יירד.
מדידת מרחק בין שני חיישנים קולי (HC-SR04):
עד כה הבנו כיצד לגרום לחיישן אחד לעבוד כמשדר ולחיישן השני לעבוד כמקלט. כעת, עלינו להעביר את הגל הקולי מחיישן המשדר ולקבל אותו עם חיישן המקלט ולבדוק את הזמן שנדרש לגל לנסוע ממשדר למקלט נשמע קל נכון? אבל למרבה הצער !, יש לנו כאן בעיה וזה לא יעבוד.
מודול המשדר ומודול המקלט מרוחקים זה מזה וכאשר מודול המקלט מקבל את הגל האמריקני ממודול המשדר הוא לא יידע מתי המשדר שלח את הגל המסוים הזה. מבלי לדעת את זמן ההתחלה איננו יכולים לחשב את משך הזמן שנדרש וכך את המרחק. כדי לפתור בעיה זו יש לגרום לדופק ההד של מודול המקלט להגיע גבוה בדיוק כאשר מודול המשדר העביר את הגל האמריקני. במילים אחרות, מודול המשדר ומודול המקלט צריכים להפעיל בו זמנית. ניתן להשיג זאת בשיטה הבאה.
בתרשים שלעיל, ה- Tx מייצג את חיישן המשדר ו- Rx מייצג את חיישן המקלט. כפי שמוצג חיישן המשדר ייעשה להעביר גלי ארה"ב בעיכוב ידוע תקופתי, זה כל מה שהוא צריך לעשות.
בחיישן המקלט עלינו איכשהו לגרום לפין ההדק לגובה בדיוק במהלך סיכת המשדר. אז בתחילה אנו גורמים באופן אקראי למפעיל המקלטים להגיע גבוה אשר יישאר גבוה עד שהסי הד יעבור נמוך. סיכת ההד הזו תישאר נמוכה רק כאשר היא תקבל גל אמריקאי מהמשדר. אז ברגע שהוא יורד נמוך אנו יכולים להניח שחיישן המשדר פשוט הופעל. כעת, בהנחה זו ברגע שהההוא נמוך אנו יכולים לחכות לעיכוב הידוע ואז להפעיל את הדק המקלטים. זה יסנכרן חלקית את ההדק של המשדר וגם של המקלט, ולכן אתה יכול לקרוא את משך פעימות ההד המיידי באמצעות pulseIn () ולחשב את המרחק.
תוכנית חיישן משדר:
התוכנית השלמה עבור מודול המשדר נמצאת בתחתית הדף. זה לא עושה דבר מלבד להפעיל את חיישן המשדר במרווח תקופתי.
digitalWrite (trigPin, HIGH); עיכוב מיקרו-שניות (10); digitalWrite (trigPin, LOW);
כדי להפעיל חיישן עלינו לגרום לפין ההדק להישאר גבוה למשך 10uS. הקוד לעשות את אותו הדבר מוצג לעיל
תוכנית לחיישן מקלט:
בחיישן המקלט אנו מכסים את עין המשדר של החיישן כדי להפוך אותו לדמה כפי שפורט קודם. כעת אנו יכולים להשתמש בטכניקה הנ"ל כדי למדוד מרחק בין שני חיישנים. התוכנית המלאה מוצגת בתחתית עמוד זה. להלן מוסברים כמה שורות חשובות
Trigger_US (); בעוד (digitalRead (echoPin) == HIGH); עיכוב מיקרו-שניות (10); Trigger_US (); משך = pulseIn (echoPin, HIGH);
בתחילה אנו מפעילים את החיישן האמריקאי באמצעות הפונקציה Trigger_US () ואז ממתינים עד שסיכת ההד תישאר גבוהה באמצעות לולאת זמן. ברגע שהוא נמוך, אנו מחכים למשך קבוע מראש, משך הזמן הזה צריך להיות בין 10 ל -30 מיקרו שניות שניתן לקבוע באמצעות ניסוי וטעייה (או שתוכלו להשתמש ברעיון מאולתר המופיע להלן). לאחר עיכוב זה, הפעילו את ארה"ב שוב באמצעות אותה פונקציה ואז השתמשו בפונקציה pulseIn () לחישוב משך הגל.
כעת בעזרת אותן נוסחאות ישנות נוכל לחשב את המרחק להלן
מרחק = משך * 0.034;
עובד:
בצע את החיבורים כמוסבר בתוכנית. כסה את החלק Tx של חיישן המקלט כפי שמוצג בתמונה. לאחר מכן העלה את קוד המשדר וקוד המקלט המופיעים להלן למשדר ולמקלט Arduino בהתאמה. פתח את המסך הטורי של מודול המקלט וכדאי לשים לב למרחק בין שני מודולים המוצגים כפי שמוצג בסרטון למטה.
הערה: שיטה זו היא רק אידאולוגיה ואולי אינה מדויקת או מספקת. עם זאת תוכלו לנסות את הרעיון המאולתר למטה כדי להשיג תוצאות טובות יותר.
רעיון מאולתר - כיול החיישן באמצעות מרחק ידוע:
נראה שהשיטה שהוסברה עד כה באופן משונה מספקת, ובכל זאת היא הספיקה לפרויקט שלי. עם זאת ברצוני לחלוק את החסרונות של שיטה זו ודרך להתגבר עליהם. חסרון אחד עיקרי בשיטה זו הוא שאנו מניחים כי פין ההד של המקלט נופל נמוך מיד לאחר שחיישן המשדר העביר את הגל האמריקני, מה שלא נכון מכיוון שלגל ייקח זמן מה לעבור ממשדר למקלט. מכאן שהדק המשדר והדק המקלט לא יהיו מסונכרנים בצורה מושלמת.
כדי להתגבר על כך נוכל לכייל את החיישן באמצעות מרחק ידע בתחילה. אם המרחק ידוע נדע את הזמן שלוקח הגל האמריקאי להגיע למקלט מהמשדר. בואו נשמור את הזמן הזה כ- Del (D) כפי שמוצג להלן.
עכשיו נדע בדיוק אחרי כמה זמן עלינו להפוך את סיכת ההדק של המקלט לגובה כדי להסתנכרן עם ההדק של המשדר. ניתן לחשב משך זה על ידי עיכוב ידוע (t) - דל (D). לא הצלחתי לבדוק את הרעיון בגלל מגבלות זמן ולכן אני לא בטוח עד כמה זה יעבוד. אז אם במקרה אתה מנסה את זה תודיע לי את התוצאות דרך קטע ההערות.