מה עושים כאשר מודול חיוני לפרויקט עומד להיעלם מהשוק? מתכננים לבד מודול חדש ועל הדרך מוסיפים לו פיצ'רים שימושיים. כך זה נראה.
רקע
בשנתיים האחרונות התרגלתי לבדוק באובססיביות את המלאי של רכיבים ולוחות למיניהם. אין טעם להציע או להבטיח משהו ללקוח אם לא אוכל להשיג את החומרה שאני מתכוון להשתמש בה. כך גיליתי שמודול מסוים, בעל תפקיד חשוב בפרויקט מתפתח של אחד הלקוחות שלי, עומד להיעלם מהשוק. לא בגלל מחסור "סתם", אלא כי הרכיב המרכזי בו, מפסק אופטי אינפרה-אדום מבית SHARP, לא מיוצר מאז 2019. בנוסף, לא היה מודול חלופי זמין עם התכונה המהותית מבחינת הפרויקט – טווח הגילוי.
מפסקים מהסוג הזה עם טווח מתאים (מעל אינץ') הם נדירים. חיפשתי ומצאתי אחד, OPB732, שיכול להתאים, במחיר סביר, והכי חשוב – יש הרבה ממנו. סביבו אפשר לבנות מודול חדש, ועבודה כזו היא תמיד גם הזדמנות לשפר משהו לעומת המודול הקיים. במקרה זה רציתי: 1) קונקטור נוח, שיהיה תואם לשאר החומרה בפרויקט, ו-2) אפשרות לקבוע את סף הרגישות.
החיישן של המודול הישן היה "חכם" במובן זה שהוא ביצע בעצמו עיבוד מסוים, פיצוי לטמפרטורה וכדומה, אבל הפלט שלו היה דיגיטלי פשוט, על סמך סף החלטה פנימי שאי אפשר לשנות. ה-OPB732, לעומת זאת, הוא בעצם רק קופסה עם לד תת-אדום ועם פוטוטרנזיסטור, כך שהפלט שלו אנלוגי – מה שהופך אותו, למעשה, ליותר חיישן קרבה מאשר מפסק אופטי. אם מוסיפים למעגל פוטנציומטר קטן במחלק מתח, ומגבר שרת לצורך השוואת מתחים, אפשר לקבוע את סף הרגישות בסיבוב מברג. אני בחרתי, במקום זאת, להשתמש במיקרו-בקר. היו לכך כמה סיבות, שהעיקרית מביניהן היא שרציתי אופציה לעבד קצת את הקלט האנלוגי, ולהיות מסוגל לשנות את אופן העיבוד בעתיד, בהתאם לתוצאות ניסויים או לדרישות שמתעוררות בשטח.
החומרה
בשלב ראשון רכשתי חיישנים בודדים, כדי לוודא שאני מבין איך לעבוד איתם. לתפקיד המיקרו-בקר בחרתי ב-ATtiny202, שבב חמוד וזול מדור ה-AVR החדש יחסית, עם יכולות שהולמות יפה את המשימה הנוכחית, וכמובן – שיש הרבה ממנו במלאי.
הקווים המנחים לתכנון ה-PCB היו שמידות הלוח יהיו קרובות למידות המודול המקורי, כדי שיוכל להחליף אותו בלי התאמות מכניות יקרות, ושיהיו עליו שלושה ממשקים: הקונקטור ה"רגיל" (פלוס, מינוס וסיגנל פלט), ממשק לצריבת המיקרו-בקר (UPDI), וממשק UART לדיבוג ולשינוי פרמטרים. הממשקים, הרכיבים האקטיביים והפסיביים והחור לבורג השאירו לי מקום גם לגשר (Solder bridge), שבעזרתו אפשר ליצור מודול פשוט יותר, עם חיישן בלבד, שמוציא כפלט ישירות את המתח האנלוגי. אולי גם לזה יהיה שימוש מתישהו.
התוכנה
בגדול, התוכנה אמורה להריץ לולאה פשוטה אחת: לקרוא את הפלט האנלוגי מהחיישן, לבדוק אם הוא מעל לסף מסוים, להוציא פלט דיגיטלי בהתאם ולחזור להתחלה. העיבוד שרציתי להוסיף, לפחות בשלב ראשון, הוא חישוב של ממוצע על פני מספר קריאות, כדי להפחית השפעה של "רעשים" אקראיים. מודול ה-ADC של ה-ATtiny202 עושה את כל זה כמעט לגמרי לבד: אפשר לכוון אותו למצב "Free-Running", בו הוא מבצע מדידות בזו אחר זו עם פסיקה בסיום כל אחת, ולהגדיר שכל מדידה תכלול שתיים-בחזקת-[אפס עד שש] קריאות גולמיות ברצף. צריך רק להוסיף ידנית, בתוך פונקציית הפסיקה, את ההשוואה לסף ואת הפלט הדיגיטלי.
הקוד ה"רגיל" בלולאה הראשית מוקדש לניהול תקשורת UART: פעמיים בשנייה משודר הערך שהתקבל במדידה האחרונה, ואם מתקבל דרך RX ערך חדש (פעמיים ברצף, כדי לצמצם סיכוי לתקלות), הוא נשמר ב-EEPROM והופך להיות סף ההחלטה החדש של המודול.
ציוד היקפי
בגלל מגבלת הגודל של המודול, רק הקונקטור הראשי מבוסס על חיבור Through-hole. ממשקי הצריבה והתקשורת הם SMD – בעצם רק שורות של שלושה פדים עגולים בריווח 2.54 מ"מ. זה הופך את צריבת הקוד ללא-נוחה, אבל צריך לעשות אותה רק פעם אחת. התקשורת, לעומת זאת, מאוד לא נוחה. להלחים חוטים קבועים לפדים זו בעיה בשטח, ומה יכול להחזיק שלושה חוטים זמניים על פדים SMD?
לפני שנה, מישהו יצר דגם להדפסה בתלת-ממד, שמתאם בין יציאת USB לשני חוטי גישור בשביל אספקת חשמל לפרויקטים קטנים. על בסיס אותו רעיון עיצבתי מתקן שיחזיק שלושה חוטי גישור ביציבות בדיוק במקומות הנכונים כך שיגעו בפדים של חיבור ה-UART במודול. כעבור מספר סבבים של התאמת מידות ושיפורים הגעתי לתכנון שמוצג בשרטוט למעלה, שכולל גם "כיס" (בקצה הימני בשרטוט) עבור דבק חם שיחזיק את הפלסטיקים של חוטי הגישור במקום. הוא מתלבש על המודול שלי בנוחות, ומספיק לחץ קל עם האצבעות כדי שהוא לא יזוז ושהתקשורת תהיה יציבה.
ומה הלאה?
במודול שיצרתי, הלד של המפסק האופטי מחובר ישירות לאספקת החשמל ודולק כל הזמן. במצבים מסוימים, ייתכן שהפעלה וכיבוי של הלד על ידי המיקרו-בקר באמצעות טרנזיסטור תהיה יעילה יותר: לדוגמה, אם יש דרישה לצמצום בצריכת הזרם, או אם רוצים לזהות ואף לקזז השפעות חיצוניות לא רלוונטיות (כגון אור שמש שמשפיע על הפוטוטרנזיסטור, גם כשהלד כבוי). בשני המקרים האלה, קצב הדגימה בהכרח יהיה נמוך יותר – כרגע הוא 8,000 פעמים בשנייה – אבל זה מחיר שלפעמים נשלם ברצון… ולפעמים בלית ברירה. מודול עם טרנזיסטור ייתן את הגמישות לבחור, באמצעות קוד התוכנה, בשיטת הפעולה המתאימה ביותר לכל פרויקט בנפרד.