ניתוח של מערכת חיישני רוורס לאוטו

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

התצוגה של מערכת חיישני הרוורס בפעולה
התצוגה של מערכת חיישני הרוורס בפעולה

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

שלושת האלמנטים במערכת חיישני הרוורס
שלושת האלמנטים במערכת חיישני הרוורס

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

המוח של מערכת חיישני רוורס סינית
המוח של מערכת חיישני רוורס סינית (לחצו להגדלה)

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

הג'וק באמצע הוא מגבר שרת (NE5532), שלא חקרתי לעומק את הפונקציה שלו במעגל; ייתכן שהוא משמש להגברת האות החוזר מההד. הג'וק משמאל הוא המיקרו-בקר שמנהל את העסק. הכיתוב עליו נמחק כך שקשה לזהות את הדגם, אם כי רוב הסיכויים שמדובר במשהו סיני סופר-זול שאין לנו מה לעשות איתו (למשל מסוג OTP, שאפשר לצרוב עליו קוד רק פעם אחת וזהו).

בכבל הארוך שמחבר בין המוח לתצוגה יש ארבעה חוטים, שמסומנים בשמותיהם על ה-PCB: אדמה, 5V, חוט DA (שניחשתי נכונה שפירושו DATA), וחוט שמסומן BV ושאת תפקידו לא הבנתי באותו זמן. בואו נראה מה יש בתוך התצוגה:

רכיבי מודול התצוגה, חלק קדמי
רכיבי מודול התצוגה, חלק קדמי

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

הצד האחורי של לוח מודול התצוגה

הצד האחורי של לוח מודול התצוגה

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

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

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

שידור מה"מוח" לתצוגה על הסקופ
שידור מה"מוח" לתצוגה על הסקופ

נראה במבט ראשון כמו שידור UART (פרט לעובדה שמתח ברירת המחדל הוא 0), אבל ברזולוציה כזו קשה לראות בדיוק, וגם אין טעם להתאמץ: רואים שהמתח לא גבוה מדי, אז אפשר להשתמש בבטחה בלוג'יק אנלייזר, שהוא כלי הרבה יותר טוב לדברים כאלה. חיברתי וזה מה שהתקבל:

שידור בודד מ"מוח" המערכת, כששום חיישן לא מחובר
שידור בודד מ"מוח" המערכת, כששום חיישן לא מחובר (לחצו להגדלה, אין ברירה)

זהו שידור בודד מתוך רצף של שידורים ברווחים של כ-60-70 אלפיות שנייה. כאן כבר רואים בוודאות שזה לא סוג של UART, כי כל הפולסים מופרדים ובאורכים שונים. אז מה זה כן? הפולס הממושך-יחסית משמאל הוא מן הסתם סימן להתחלה של שידור חדש, והבאים הם ביטים שמקודדים לפי אורך הפולס: קצר ל-0 וארוך ל-1 או להיפך. יש שם 16 ביטים, אז הנחתי שמדובר בשני בייטים, אחד למרחק שמתקבל מהחיישנים מימין ואחד למרחק משמאל.

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

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

הצעד הבא היה להוכיח שצדקתי. לשם כך מדדתי את משכי הפולסים בשידורים, ושחזרתי אותם בעזרת קוד פשוט לארדואינו, שאיפשר לי גם להגדיר מרחקים שונים עבור החיישנים הווירטואליים השונים דרך ה-Serial Monitor. מסיבה שעד עכשיו לא הבנתי, רוב מספרי החיישנים שנדמה היה לי שזיהיתי בשידור המקורי לא התקבלו בברכה ומודול התצוגה התעלם מהם. אבל מצאתי ערכים אחרים שכן עובדים, והצלחתי לשלוט בקלות בגרפיקה. מספר חיישן שנגמר בשני ביטים זהים (00 או 11) נחשב, כך מסתבר, לחיישן שמאלי, וכשהביטים שונים (01 או 10) זהו חיישן ימני. אין הפרדה נוספת, ולמעשה אפשר לשלוח מידע משני חיישנים וירטואליים בלבד, או מספר גדול יותר (ניסיתי עד שישה). מודול התצוגה בוחר את המרחקים הקצרים ביותר מימין ומשמאל ומציג אותם בגרפים לפי ערכי סף קבועים לכל לד. את המרחק הקצר מבין השניים האלה הוא מציג גם בספרות. ערכי הבייט מחולקים במאה ומעוגלים לספרה אחת אחרי הנקודה (למשל, הערך 231 מפוענח ומוצג כ-2.3 בתצוגה, ו-88 יהפוך ל-0.9).

מה שלא קיבלתי בשיטה הזו הם הצפצופים. המודול נשאר חרישי, וזה הפתיע אותי מאוד, כי ההיגיון אומר שאם המרחק המינימלי מחושב במודול התצוגה, גם הצפצופים שפרופורציונליים למרחק הזה צריכים לצאת משם. הסתבר שזה התפקיד של קו BV המסתורי: אספקת מתח ישירה מה"מוח" אל הבאזר שבמודול התצוגה ("Buzzer Voltage"?). המתח ב-BV כשהוא פועל הוא 12V, כדי להפיק צליל רם במיוחד, אבל אפשר היה באותה הקלות להעביר 12V קבוע למודול התצוגה ושהוא יטפל במיתוג שלו לבאזר. אולי לא היו מספיק טיימרים למיקרו-בקר של מודול התצוגה כדי לטפל גם בנושא הזה, או שרצו לשמור אופציה להתקנה עם פידבק קולי בלבד… אני רק מנחש ואשמח למידע מוסמך.

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

להרשמה
הודע לי על
2 Comments
מהכי חדשה
מהכי ישנה לפי הצבעות
Inline Feedbacks
הראה את כל התגובות

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