לדוד משה היה אקדח: פרויקט מייקינג לַילדים, חלק ב’

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

אקדח הדוד משה במלוא תפארתו

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

צהוב+ירוק: התנעת מנוע
צהוב+כחול: שיר ללא מילים
צהוב+סגול: שיר כולל מילים
כתום+ירוק: סוס
כתום+כחול: חזיר
כתום+סגול: צופר
חום+ירוק: תרנגול
חום+כחול: עז
חום+סגול: פרה

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

https://www.idogendel.com/whitebyte/wp-content/uploads/2019/10/OldMcNoWords.mp3

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

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

אך מודולי ה"בלוקים הלוגיים" שנכנסו לכמה דגמי מיקרו-בקרים חדשים (כגון מודול ה-CLC ב-PIC) יכולים לבצע פעולות כאלה בחומרה, ומבטיחים לקדם אותנו לסדר גודל של כשני מחזורי שעון. ב-PIC שרץ ב-8MHz, זה אומר שהעיכוב בין הקלט לפלט יהיה בסביבות 250 נאנו-שניות במקום מיליונית או שתיים, ובנוסף המיקרו-בקר יהיה פנוי לעשות דברים אחרים אם צריך. לקחתי ג'וק מדגם PIC16F18313 – רכיב משוכלל להפתיע באריזה של 8 פינים, שכולל 2 מודולי CLC, וכתבתי את הקוד המתאים לבדיקה של העניין. הנה מה שהסקופ ראה:

הסיגנל הנכנס בצהוב, פלט ה-CLC בטורקיז
הסיגנל הנכנס בצהוב, פלט ה-CLC בטורקיז (שילוב צילומי מסך, לחצו להגדלה)

ובכן, טעיתי: לא 250 נאנו-שניות אלא קרוב יותר ל-60 נאנו-שניות, מרגע שהסיגנל הנכנס משתנה ועד שמשהו מתחיל לזוז בפלט. הסיבה לטעות היא שהנחתי שמדובר על שעון הפעולות של ה-PIC, שהוא תדר המתנד חלקי 4, אבל למעשה ה-Datasheet דיבר על השעון הגולמי! בכל מקרה זה מצוין. עוד כמה שורות קוד להגרלה אקראית, שקובעת לאיזה חוט להאזין ולאיזה חוט להעתיק, והתוכנה הייתה מוכנה. בדקתי אותה על שולחן העבודה:

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

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

כל החלקים במקומם הסופי בתוך אקדח החיות
כל החלקים במקומם הסופי בתוך אקדח החיות (לחצו להגדלה)

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

כפי שקיוויתי, האקדח זכה להצלחה מיידית בקרב הילדים, ולפני שהם מצליחים להשמיד אותו במשחק פרוע, צילמתי אותו בפעולה למזכרת:

להרשמה
הודע לי על
0 תגובות
Inline Feedbacks
הראה את כל התגובות