לפני יותר מחמש שנים (איך שהזמן רץ וכל זה), בניתי לבן הבכור את אחד הפרויקטים הראשונים שלי במייקינג: מחסום רכב צעצוע. אחרי הופעה ב-ynet ותקופה מסוימת של שימוש המחסום הזה התקלקל, עבר לאחסון ודי נשכח. לאחרונה החלטתי להחיות אותו, והנה התוצאה.
גלגוליו של שלט
מהגרסה הראשונה של הפרויקט ועד היום, נקודת התורפה האחת והגדולה שלו הייתה השלט הרחוק. בשלב הראשון השתמשתי במשדר ובמקלט של פעמון אלחוטי סיני זול, וכצפוי, מהר מאוד הוא התחיל לעשות בעיות ולפעול בצורה לא סדירה. החלפתי אותו במודולי RF-Kit, שבאותה תקופה רק התחלתי להבין איך הם עובדים, וניסיתי להעביר סיגנל ON/OFF גולמי. בדרך פלא זה עבד… אבל רק מטווח קצר מאוד, וגם אז לעתים רחוקות מדי.
גם בחיים האמתיים, אמנם, לא כל לחיצה על הכפתור בשלט מצליחה לפתוח את שער החנייה, אבל המטרה של הצעצוע לא הייתה לתסכל או לחשל את הילד. הייתי זקוק לפתרון שיעבוד טוב. כשחזרתי לעבוד על המחסום, לפני שבועות ספורים, ניסיתי להיעזר במודולים שתכננתי בעצמי לתקשורת בסיסית עם RF-Kit וג'וקים PT2262/72. למעשה, זו הייתה התקווה האחרונה שלי להפיק איזושהי תועלת מ-RF-Kits באופן כללי, בעקבות התסכול המתמשך מניסיונות השימוש בהם. בטח תופתעו מאוד לשמוע שגם זה לא עבד, אם כי הפעם הסיבה הייתה טיפה שונה.
כאשר המחסום היה במנוחה ולחצתי על הכפתור בשלט, הסיגנל עבר כמו שצריך והמחסום החל להיפתח. אבל כשלחצתי שוב בזמן שהמחסום התחיל להיסגר (מה שאמור, לפי הפונקציונליות של התוכנה שכתבתי, לגרום לפתיחה מחודשת מיידית) המחסום פשוט התעלם מהפקודה ונסגר עד הסוף. דיבוג זריז העלה שמקור הבעיה דווקא במנוע הסרבו הסיני הזול: בזמן שהוא פעל, זה פשוט שיבש את הקליטה האלחוטית. כיוון שלמודולים השונים במערכת היו קבלים מתאימים, ולא הזנתי את הסרבו מפין פלט של הארדואינו או שטות דומה, אני סבור שזו לא הייתה הפרעה באספקת החשמל אלא הפרעה אלקטרומגנטית.
כיוון שבאותו זמן כבר התחלתי להרכיב את לוחות Picadom שלי, האופציה המתבקשת הייתה לעבור לשלט אינפרה-אדום. בהתבסס על טכניקות שכבר השתמשתי בהן בעבר, יצרתי שידור UART (תוכן השידור הוא השם של הילד, באנגלית), הפכתי אותו כך שרוב הזמן המתח על הקו יהיה LOW (בניגוד לברירת המחדל) והרכבתי את התוצאה על גבי גל נושא בתדר 38KHz. הפלט הזה נשלח אל הלד האינפרה-אדום של השלט, ואילו במחסום, בצד הקולט, חיברתי מקלט אינפרה-אדום TL1838 פשוט וזול אל כניסת RX של הארדואינו. התוצאה של כל זה היא שאם יש קו ראיה בין השלט למקלט והמרחק לא גדול מדי, הארדואינו קולט דרך ה-Serial הסטנדרטי שלו את השם של הילד, והתוכנה מזהה זאת ופוצחת בתהליך פתיחת המחסום.
מבט מלמעלה: מקלט ה-IR (שחור), לד (כתום) כפנס אזהרה, ולמטה לא בפוקוס – שלט פיקאדוםשינויים נוספים
כאשר בדקתי את ההפרעות שהסרבו יצר, הבחנתי שהוא מזמזם גם בזמן שהוא אמור להישאר בזווית קבועה. למה? כי הוא סיני וזול, כנראה, לא מצאתי לנכון להתעמק בזה. מה שכן החלטתי לעשות זה למתג את אספקת החשמל לסרבו, בשליטת הארדואינו, כך שבזמן מנוחה הוא לא יקבל שום זרם בכלל. זה גם יפסיק את הזמזום וגם יחסוך בסוללה. מדידות הראו שצריכת הזרם של הסרבו בפעולה לא גדולה מאוד אפילו כשמחזיקים אותו בכוח, כך שטרנזיסטור BS107A שהיה לי בהישג יד (250 מיליאמפר) הספיק למשימה – אם כי צריך להיזהר, ההתנגדות שלו במצב "ON" גבוהה יחסית (עד 6 אוהם!) ובמצבים מסוימים זה עלול להפיל יותר מדי מתח.
התוכנה נכתבה מחדש, אף על פי שאין בה שום דבר יוצא דופן וגם לא התעסקות ישירה עם הרגיסטרים של המיקרו-בקר. זה בסך הכול קוד ארדואינו שמעבד את הקלט הסריאלי בהמתנה לפקודה הנכונה, ואז – במין מכונת מצבים פשוטה – פותח את השער, ממתין וסוגר אותו בחזרה תוך כדי ניהול האורות ושאר הפיצ'פקעס.
מבנה העץ של מחסום הצעצוע נשאר מהגרסה הקודמת, וכך גם מנוע הסרבו והזרוע (עשויה פרופיל עץ דק שמצאתי פעם ברחוב וקש שתייה). שאר השינויים קוסמטיים בעיקרם: את הלדים וחלק מהחיווט החלפתי למשהו יציב ואמין יותר, הארדואינו Duemilanove (מי זוכר?) הוחלף ב-Pro Mini סיני וקומפקטי, והסוללה (9V) הוחלפה בשישיית AA עם הרבה יותר קיבולת. הדבקתי גם כמה מקלות שיחזיקו את בית הסוללות במקום. הנה סרטון של המחסום בפעולה:
הפרויקט נמסר ללקוח, שזכר את הגרסה הקודמת ושמח מאוד. אולי בעוד חמש שנים תהיה גרסה נוספת… אבל בינתיים, קדימה לפרוייקטים אחרים!
תודה על השיתוף,
למה בחרת לנתק את אספקת החשמל לסרבו ולא להפסיק את הpwm, תוכנתית? פונקציית detach עבדה בשבילי היכן שהייתי צריך, ובלי pwm הסרבו בדרך כלל לא מנסה לסגור חוג, ביחוד אם מדובר בסרבו אנלוגי
התשובה הקצרה: לא ידעתי שסרבו אמור להתנהג ככה כשאין סיגנל. התשובה הארוכה: כמו שכתבת, "בדרך כלל"… ואני לא אוהב לסמוך על פיצ'רים שהם "בדרך כלל", במיוחד לא במוצרים סיניים. בכל אופן בדקתי עכשיו, סרבו מהסוג שבו השתמשתי אכן לא זז כשהסיגנל משתתק, וממשיך לצרוך כ-3.5 מיליאמפר.