בפוסט קצר זה אדגים את השימוש בחיישן קרבה אופטי קטן וזול, שמסוגל להבחין בגופים בטווח של סנטימטר או שניים (לכן הוא נקרא חיישן קרבה ולא חיישן מרחק). למה רכיב כזה טוב? סבלנות. קודם כל, בואו ונראה את החיישן בפעולה:
החיישן שבסרטון הוא מדגם TCRT5000, ואפשר למצוא דילים של עשרה כאלה בשני דולרים וקצת. למעשה, זוהי קופסת פלסטיק שמחזיקה נורית LED אינפרה-אדומה (IR) בצד אחד, פוטוטרנזיסטור בצד שני, וביניהם מחיצה קטנה ואטומה. פוטוטרנזיסטור הוא טרנזיסטור – כלומר רכיב עם כניסה, יציאה ו"ברז" לשליטה – אך בניגוד לטרנזיסטורים "רגילים", הברז כאן מתופעל לא על ידי מתח חשמלי אלא על ידי אור, ובמקרה הספציפי הזה תדר תת-אדום. כאשר הפוטוטרנזיסטור קולט אור תת-אדום בתדר המתאים, הוא פותח את הברז ביחס לעוצמת ההארה.
בשימוש רגיל הנורית מאירה ברציפות, אך המחיצה חוסמת את האור והוא לא מגיע לפוטוטרנזיסטור. לעומת זאת, כשחפץ כלשהו מתקרב מספיק לרכיב, האור שיוצא מהנורית משתקף מהחפץ, חוזר לפוטוטרנזיסטור מעבר למחיצה ומפעיל אותו. לכן, מדידה של פעולת הפוטוטרנזיסטור מאפשרת לנו לגלות אם יש חפץ מול הרכיב, ואם כן – עד כמה הוא קרוב.
כמובן, מעבר למרחק הפיזי, יש גורם נוסף שמשפיע על תוצאת המדידה: עד כמה החומר ממנו עשוי החפץ (או הצבע בו הוא צבוע) מחזיר את האור האינפרה-אדום. כפי שהראיתי בסרטון, אפשר לנצל את העניין הזה כדי לגלות לא רק מרחקים אלא גם מרקמים או בהירויות. שימו לב גם שמקורות אינפרה-אדום בסביבה (שמש, נורות ליבון או הלוגן, אש וכו') עשויים להשפיע על התוצאות.
החיווט הבסיסי של הרכיב לארדואינו מופיע, סכמטית, בשרטוט הבא. המתח לנורית עובר דרך נגד 220 אום כפי שמומלץ לנוריות LED באופן כללי, ואילו הפוטוטרנזיסטור בעצם פותח או סוגר מעגל בין פין הקלט האנלוגי A0 בארדואינו לבין ה-Ground. כשאין אור, יש למעשה נתק בין השניים – וכדי שהארדואינו יקבל קריאה בעלת משמעות גם במקרה כזה, מוסיפים Pull-up resistor. בסרטון נגד ה-Pull-up הוא חיצוני, אך כפי שמוסבר בקישור אפשר להחליף אותו בנגד פנימי.
בעזרת הארדואינו והמוניטור הטורי (Serial monitor) שלו ביצעתי מדידות ובדקתי אילו ערכים אני מקבל כאשר יש או אין חפץ מול הסנסור. על סמך המדידות המקדימות הללו קבעתי את ערך הסף 50, שמופיע בקוד להלן. שימו לב גם שאני משתמש בפינים אנלוגיים בתור פלט דיגיטלי להדלקה של הנורית האדומה והירוקה – סתם כדי להראות שזה אפשרי.
// TCRT5000 IR Proximity Sensor Demo // Sensor input to A0 // Green LED to A4, red LED to A5 void setup() { pinMode(A4, OUTPUT); pinMode(A5, OUTPUT); } void loop() { if (analogRead(A0) < 50) { digitalWrite(A4, HIGH); digitalWrite(A5, LOW); } else { digitalWrite(A4, LOW); digitalWrite(A5, HIGH); } }
ולסיום, תשובה לשאלה שהוצגה בהתחלה: מי צריך סנסורים עם טווח מוגבל כל כך? ובכן, חישבו למשל על מדפסת שגוררת דף נייר מהמגש וצריכה לזהות מתי בדיוק הקצה שלו מגיע לטווח של ראש ההדפסה; דמיינו מכונת חריטה עם ראש עולה ויורד שצריך להגיע לגובה מדויק מעל פני השטח; או מעגל בקרת איכות במפעל, שמודד אורך של ופלים מצופים שחולפים מתחתיו על מסוע שנע במהירות קבועה; ואפילו, כמו שהוצג בסרטון, קורא של ברקודים גדולים וגסים במיוחד. בקיצור, כרגיל, השמים והדמיון הם הגבול…
שאלה אני צריך חיישן מרחק, אבל עם פיזור ממוקד או רוחבי, זאת אומרת חיישן שינוע בתנועה יקרא תנועה רק החל מגובה של כשניים עד שלושה ס"מ והמרחק עד מטר מטר וחצי רוחב הפיזור גם כמטר עד מטר וחצי אם יש דבר כזה אז מהיא המלצתך
דרישתי גובה מינימום 1-3 ס"מ
רוחב מ1-1,5 מטר
אורך 1-1,5
המקום צובר אבק ויתכן שיהיה קשה לשים חישו אינפרה אדום
בכבוד רב
אבי
את מגבלת הגובה אפשר ליישם באמצעות כיסוי פיזי מתאים של חלק משדה הראיה של החיישן. לגבי השאר, נדמה לי שלמרות הכל "חיישני נפח" באינפרה-אדום הם המומלצים, ואם הם לא מכוונים למעלה, סביר להניח שלא יצטבר עליהם יותר מדי אבק.
מסתבר שאינפרה אדום אפשר להפיק גם באמצעות נורת הלוגן
למה דווקא חיברת כPULL UP?
אם קראת את הפוסט הזה:
https://www.idogendel.com/whitebyte/archives/799
תבין למה אני אהסס כרגע לקרוא לזה Pull-up 🙂
בכל אופן, אני לא זוכר כרגע למה בדיוק בחרתי בקונפיגורציה הזו – אם אינני טועה, אפשר באותה מידה לחבר כך ש"ברירת המחדל" של הפין תהיה GND עם נגד, ואילו הפוטוטרנזיסטור יעביר 5V. איך שנוח לך.
היי עידו
איפה קנית את החיישן הזה?
ב-BuyInCoins החביב עליי, כאן: [עדכון: הלינק שהיה פה לא תקף יותר]
ראיתי שיש כאלה גם באיביי באותו מחיר, ויש סנסורים אחרים שפועלים על אותו עיקרון, עם מסגרות פלסטיות שחוסמות טוב יותר זליגה של אור וכניסה של אור סביבתי (חפש reflective sensor) הכל תלוי בצרכים ובתקציב שלך.