הטכנולוגיה שמזהה מכוניות ליד רמזורים זמינה גם לשימושים אחרים, בקנה מידה קטן יותר: בפוסט זה אסקור שני חיישני קירבה אינדוקטיביים (Inductive), סוג שאולי קצת פחות מוכר למייקר הטיפוסי, אך בתנאים מסוימים יכול להיות שימושי לא פחות מהרבה סוגי חיישנים אחרים.
אם האתגר של זיהוי מכוניות ממתינות היה עולה היום, סביר להניח שהיו מתקינים מערכת מצלמות יקרה בטירוף על כל רמזור ועמוד, עם אחסון בענן וחיבור לאינטרנט (כי מה יותר מאובטח מזה), זיהוי מספרי רכב ופרצופים (לטובת הדמוקרטיה וזכויות הפרט), ובסוף זה היה מתקלקל בגשם הראשון. למזלנו האתגר עלה לפני הרבה זמן, כשאנשים עוד השתמשו פה ושם בשכל, וכך נמצא פתרון טוב, זול ואמין – חוץ אולי מאשר לאופנועים וקטנועים…
הפתרון מבוסס על סליל חשמלי – מספר לולאות גדולות של מוליך – שמוטמן במיוחד בכביש (ראיתם מלבן גדול של חריצים דקים בכביש לפני הצומת? זה זה). מעגל חשמלי פשוט-יחסית מעביר בסליל הזה זרם חליפין בתדר גבוה (כמה עשרות עד מאות קילוהרץ), כאשר התדר מסתמך בחלקו על התכונות של הסליל עצמו. הזרמים יוצרים כמובן שדה מגנטי. אם נכנסת לשדה המגנטי הזה מאסה מספיק גדולה של מתכת ברזלית – כמו שיש ברכב פרטי ומעלה – היא משנה אותו ומשפיעה על ההשְראוּת (Inductance) של הסליל. ההשפעה הזו גורמת בתורה לשינוי של תדר הפעולה, ומעגל בקרה קטן מזהה את השינוי ומודיע למערכת הרמזורים שיש רכב ממתין. דברים לא ברזליים, כגון בני אדם או שלוליות מים, לא משפיעים על השדה המגנטי ולא יוצרים התראות שווא.
אותו עיקרון בדיוק יכול לפעול גם בקטן, עם מאסות מתכת הרבה יותר קטנות משל מכונית, ולמרחקים של מילימטרים ספורים. זה מה שעושה חיישן קירבה אינדוקטיבי (נקרא גם Inductive Proximity Switch). בפוסט זה אציג שני דגמים שונים: LJ12A3-4-Z/AX הזול של LEFIRCKO (פחות מ-20 שקלים גם באתרים ישראליים), והדגם TL-W3MB1 היקר של Omron (כ-360 ש"ח ליחידה ב-Digikey). בשביל הקיצור פשוט נקרא להם מכאן והלאה "הזול" ו"היקר".
אך לפני כן, כמה מילים על היתרונות והחסרונות של חיישן אינדוקטיבי באופן כללי. כיוון שהוא לא מסתמך על החזרי אור או צליל, אין לו בעיה עם אבק, לכלוך, אור שמש, מרקם גס או רטיבות שהיו משבשים לגמרי חיישנים מסוגים אחרים. כלומר, הוא מתאים גם לשימוש "בשטח" ודורש פחות תחזוקה. עם זאת, הטווח שלו כאמור קצר מאוד (סביבות 5 מ"מ ואפילו פחות, תלוי בכל מיני גורמים), והוא מזהה פחות או יותר רק מתכות ברזליות – למעשה גם חלק מהמתכות האחרות, אבל ברגישות נמוכה בלבד. מהרבה בחינות הוא דומה ביכולותיו לחיישן Hall effect, אך אנחנו לא צריכים לדאוג לשבץ מגנטים בנקודות הקריטיות. עוד נקודה חשובה היא שחיישנים אינדוקטיביים שפועלים בתדרים זהים יכולים להפריע זה לזה, וצריך הפרדה מרחבית של מספר סנטימטרים ביניהם.
לחיישנים האינדוקטיביים יש כנראה שורשים תעשייתיים, ולכן הפלט שלהם הוא לא סתם High/Low דיגיטלי אלא מגע חשמלי ממש, בתיווך טרנזיסטור. זה יכול להיות PNP או NPN, וכל אחד מהם יכול להיות Normally Closed או Normally Open – שימו לב טוב למספר הדגם המדויק ולדפי הנתונים. המגע הזה יכול "להחזיק" עד כמה מאות מיליאמפר. כמו כן, רוב החיישנים (אם לא כולם) עובדים במתחים גבוהים יותר משל מיקרו-בקרים – היקר, למשל, מיועד ל-12-24V – ולכן אי אפשר לחבר את חוט הפלט שלהם ישר לפין GPIO. כדי לתרגם את הפלט לסיגנל דיגיטלי בטיחותי צריך להוסיף מחלק מתח למעגל.
בדיקות ומדידות
דבר ראשון, ניסיתי לגלות את תדר הפעולה הפנימי של החיישנים. זה מידע שבדרך כלל לא מופיע ב-datasheet, וכמובן שאין גישה נוחה למעגלים הפנימיים, אבל אם מחזיקים את קצה הפרוב של הסקופ מספיק קרוב לשדות מגנטיים משתנים כאלה, לעתים קרובות כן אפשר לראות משהו. בצילומי המסך למטה, הסיגנל היפה משמאל הוא מה שהצלחתי לקלוט מהחיישן הזול, ומימין מהיקר.
נתון שכן מופיע בדפי הנתונים הוא "תדר התגובה", שאם הבנתי נכון מקביל לקצב דגימה. הוא נע בדרך כלל סביב 500Hz. אבל איך מודדים דבר כזה באמצעים ביתיים – איך מזיזים חלקי מתכת במהירות גבוהה על פני החיישן, על שולחן עבודה, בלי סכנה לרכוש ולנפש?
בתור התחלה לקחתי מנוע רטט שחילצתי מבקר משחקים מקולקל. על הציר שלו מותקנת משקולת מתכת לא-סימטרית, מאסיבית מספיק כדי להפעיל את החיישן. האתגר הוא כמובן לייצב את המנוע הרוטט ולשים את החיישן מספיק קרוב מעל אזור המשקולת תוך כדי פעולה, אבל זה אפשרי. הנה פלט שקיבלתי מהחיישן הזול, כשהמנוע קיבל 3V (משמאל) ו-9V (מימין) מסוללות:
והנה הפלט המקביל מהחיישן היקר, באותם מתחים. התדרים הנמוכים יותר נובעים כנראה מהיחלשות הסוללות במהלך הניסויים – גם ככה הן היו גבוליות…
גם מתח של 9V הוא הרבה יותר מהמתח הנקוב של המנוע הזה, והאצבעות כבר כאבו לי מלהחזיק אותו. האם אוכל ליצור סיגנלים עוד יותר מהירים? לקחתי קפיץ גדול (מייקרים לא זורקים כלום), מתחתי בכוח ושחררתי אותו כך שהקצה יחלוף מעל החיישן. זה לא עבד על הפעם הראשונה, ואני אפילו לא בטוח אם בגלל קצב הדגימה או שהקפיץ עבר רחוק מדי, אבל בסוף הצלחתי לזהות אות שנמשך קצת פחות מאלפית שנייה:
עלות ותמורה
דבר שראוי לציון בכל המדידות שביצעתי הוא שהסינגל היוצא נקי מאוד – אין שום bounce, קפיצות או ערכים לא-החלטיים. בין אם זה נובע מאופן הפעולה היסודי או מפילטרים במעגלים של החיישן עצמו, זה חוסך עבודה לנו המשתמשים.
דבר נוסף ראוי לציון הוא ששני החיישנים נראים יעילים באותה מידה. היקר אמנם יותר קטן וזה יתרון במערכות צפופות, אבל מעבר לזה לא ראיתי שום דבר שיצדיק מחיר גבוה פי עשרים כמעט.
ומה לגבי צריכת החשמל? לשני החיישנים יש לד אינדיקציה מובנה, כך שבמצב פעיל שניהם די בזבזניים (6mA לזול ו-12.8mA ליקר). לכן, אם זה משמעותי למערכת שלכם, כדאי לבחור דגם שיהיה רוב הזמן במצב לא-פעיל. במצב לא-פעיל, במתח הפעלה 12V, החיישן הזול צרך כ-1.2mA והיקר 0.7mA.
הסוג הזול הוא אחד מהנפוצים לאיזון אוטומטי (auto-leveling) של משטחי מדפסות תלת ממד. במקום לאזן את המשטח כדי שיהיה מקביל לתנועת ראש ההדפסה (צריך להגיע לדיוק טוב מ- 0.1 מ"מ), כל הדפסה מתחילה במדידה של גובה המיטה במספר נקודות בעזרת חיישן inductive, ואז ב- firmware של המדפסת נעשה תיקון של הגובה z כתלות במיקום על המיטה x,y. עבור המדפיסים זה מוצר צריכה בסיסי 🙂
שמעתי על חיישנים לאיזון (כמו BLTouch) אבל אף פעם לא חשבתי לעומק איך הם עובדים, הנחתי שזה סוויץ' מכני 🙂 תודה!