בעצמכם: פותר סכסוכי המזגן במשרד
בנו במו ידיכם גאדג'ט פשוט ונטול פניות, שיכול לשים קץ לכל המלחמות בעולם – או לפחות לאלה שמתרחשות סביב עניין המיזוג בסביבת העבודה המשותפת
אחד הגורמים העיקריים לאי-נחת, סכסוכים ואפילו חילופי מהלומות במשרד הממוצע הוא, ללא ספק, המזגן. יש את אלה שתמיד חם או קר להם מדי, לא משנה מה; אחרים בדיוק הגיעו מבחוץ ורמת המיזוג הנוכחית לא מספיקה להם; יש כאלה שאוהבים לכוון את הטמפרטורה לפי טעמם (או בשביל הפרנציפ) כשאף אחד לא מסתכל, בשאיפה שלא יבחינו במעשה הפחדני; ומכיוון שקשה למצוא מדד אובייקטיבי לחום או לקור בפינת העבודה של כל אחד, העניינים מידרדרים במהרה לסוודרים בקיץ, חפצים מתעופפים וכן הלאה.
לא עוד! עם מעט אלקטרוניקה ותכנות (למי שמעז, ויודע להרכיב חלקי אלקטרוניקה יחד), גם אתם יכולים לבנות מדחום אורות קומפקטי לשולחן העבודה, שיוכיח לכולם שאתם צודקים והם טועים בעניין המיזוג, אם השלט משקר או לא נמצא בטווח הראיה של כולם. מדחום פשוט זה מתרגם את הענין לצבעים - הוא מאיר בירוק כאשר הטמפרטורה הסביבתית היא בטווח הרצוי, באדום כשהיא גבוהה מדי ובכחול כשהיא נמוכה מדי. ככה זה יעבוד:
הרכיבים
מדחום האורות מבוסס על שלושה רכיבים אלקטרוניים. הראשון הוא נורית RGB LED. בניגוד לנוריות LED רגילות, שמאירות בגוון אחד ויחיד ויש להן שתי רגליים (אחת לפלוס ואחת למינוס החשמליים), לנוריות של שלושת צבעי היסוד (RGB – אדום, ירוק וכחול) יש ארבע רגליים: אחת משותפת ושלוש לשליטה על כל צבע בנפרד. כל צבע צורך חשמל כמו נורית נפרדת, וזה דבר שצריך לקחת בחשבון בעת תכנון המעגל החשמלי. נוריות LED מסוגלות להתמודד עם כמות מוגבלת של זרם, ולכן מחברים בינן לבין מקור החשמל נגד. אם נחבר נגד אחד ויחיד לרגל המשותפת של ה-RGB LED, הוא עלול להעביר יותר מדי זרם לצבע בודד, אבל פחות מדי לשניים או שלושה. לכן נהוג לחבר שלושה נגדים נפרדים, אחד לכל רגל של צבע. עם זאת, מכיוון שבפרויקט זה אנחנו יודעים שבכל רגע נתון יוצג אך ורק צבע אחד, אנחנו יכולים להתעלם מהעניין באלגנטיות ולחבר בכל זאת נגד יחיד לרגל המשותפת.
הרכיב השני הוא חיישן טמפרטורה ממשפחת LM35. זהו רכיב קטן, שקל להתבלבל בינו לבין טרנזיסטורים (כי הם נפוצים מאד ומגיעים לעתים קרובות במארז זהה). גם לו יש רגל לפלוס, רגל למינוס – ורגל פלט באמצע, שמוציאה מתח חשמלי שעולה ככל שהטמפרטורה בסביבת החיישן גבוהה יותר. טווח המדידה של הרכיב הספציפי שנעשה בו שימוש כאן (LM35DZ) הוא 0-100 מעלות צלסיוס, עם שגיאה של עד חצי מעלה לכל כיוון.
הרכיב השלישי הוא מיקרו-בקר, אותו נתכנת כך שיקרא את המידע מהחיישן ויפעיל את האורות בהתאם. כל ארדואינו רגיל יתאים למשימה, אך לטובת האסתטיקה אעביר את הפרויקט הסופי למיקרו-בקר קטנטן מדגם ATtiny85, שגם אותו אפשר לתכנת באמצעות סביבת הפיתוח של הארדואינו.
להפוך טמפרטורות לאור
בהמשך ניתן להוריד את קוד המקור, אך לטובת מי שמעוניין בחישוב - בין החיבור הפיזי של חיישן הטמפרטורה לבין ידיעת הטמפרטורה בפועל יש מספר שלבי ביניים. ראשית, כאמור, החיישן מוציא מתח חשמלי שמשתנה בהתאם לטמפרטורה – מתחיל באפס ועולה במאית וולט לכל מעלה צלסיוס. בקצה העליון של טווח המדידה, מאה מעלות, אנחנו אמורים לקבל אם כך וולט אחד בדיוק – פרט לעניין פעוט אחד, והוא ששאר הרכיבים במעגל ייטגנו ככל הנראה מהחום העז ויפסיקו לעבוד.
השלב השני נובע מהאופן שבו הארדואינו מודד מתחים. הקריאה שהוא מבצע אינה ישירה, אלא המרה של המתח האנלוגי לערך דיגיטלי. הטווח הרציף 0-5V הופך, בארדואינו, לערכים הבדידים 0-1023 (רזולוציה של 10 ביטים). אם נחלק את טווח המתחים שאפשר לקלוט במספר הערכים האפשריים, שהוא 1024, נגלה שהארדואינו מסוגל למדוד מתחים רק בקפיצות של כ-0.00488 וולט. כלומר, עליה של מעלה אחת תיקלט כעליה של שתי יחידות, פחות או יותר, ומאה מעלות ייקלטו כערך 204 או 205, בהתאם לאופן עיגול התוצאות.
כדי להגיע לערך הטמפרטורה במעלות צלסיוס, כפי שאנחנו מכירים ביומיום, עלינו לבצע חישוב הפוך. אגב, למדחום שלנו זה ממש לא חיוני – הוא יכול לדעת מתי הטמפרטורה עולה או יורדת גם בלי להתייחס לסולם המדידה הספציפי – אך למען הנוחות שלנו, נחלק את הערך הבדיד שהארדואינו קולט ב-2.049. לא מאמינים? בידקו במחשבון.
גם אם חישוב הטמפרטורה מושלם, ואף אחד לא נגע במזגן כשלא הסתכלנו, אין סיכוי שנקבל את אותה תוצאה בדיוק בכל פעם. שינויים קטנים בסביבת העבודה, כגון משב רוח קל, או "פספוסים" בלתי נמנעים של המעגלים האלקטרוניים גורמים לתנודות ולקפיצות אקראיות במדידה. אם נמדוד לעתים קרובות מדי ונרשה לכל הבדל זעיר לבוא לידי ביטוי באורות הצבעוניים, נקבל לא מדחום אורות אלא מופע דיסקו מחריד.
הפתרון הוא לרכך, בדרך אחת או יותר, את ההשפעה של התנודות הקטנות. קוד התוכנה של המערכת יכול, למשל, למדוד את הטמפרטורה מספר פעמים בהפרשי זמן קצרים, לחשב ממוצע ולהשתמש בו במקום בכל מדידה בנפרד. התגובה של שינוי האורות לא חייבת להתבצע בכל פעם שיש הפרש כלשהו בין המדידה הנוכחית לטמפרטורה הרצויה, אלא רק כאשר הערך המוחלט של ההפרש גדול מסף מסוים (נניח מעלה אחת). כמו כן, הבדיקה כולה לא חייבת להתבצע ללא הרף – טמפרטורה במשרד לא משתנה כל כך מהר, ופעם אחת בשניה היא די והותר.
בעיית האיפוס
מהי הטמפרטורה הרצויה, ואיך "צורבים" אותה למערכת? זוהי כמובן נקודת התורפה של הגאדג'ט: אם מתכנתים את המערכת כך שתכיר טמפרטורת יעד קבועה אחת ויחידה, נניח 25 מעלות, סביר להניח שהיא לא תתאים לצרכים האישיים של כל משתמש. מצד שני, אם ניתן למשתמשים את האפשרות להגדיר את הטמפרטורה כרצונם, נפתח בכך פתח למניפולציות זדוניות מסוג חדש. זוהי בעיה שקשורה לגורם האנושי הרבה יותר מאשר לתכנות ואלקטרוניקה, ולכן נשאיר את פתרונה לתגובות שלכם.
ההרכבה
המערכת הסופית מנצלת ארבעה פיני קלט/פלט של הארדואינו, או של המיקרו-בקר העצמאי: אחד לקריאה של המתח מהחיישן, ושלושה להפעלה של האור האדום, הירוק או הכחול בנורית ה-LED. בנוסף, אפשר לראות בתמונה מייצב מתח שממיר את מתח הסוללה (9V במקרה זה) למתח המתאים למיקרו-בקר ולרכיבים האחרים (5V), קבל לייצוב טוב עוד יותר של המתח הזה, נגד להגבלת הזרם ל-LED כדי שלא יישרף, וכמה "גשרי" מתכת להעברה של חשמל לכל הנקודות הדרושות.
את הקוד המלא של הפרויקט, לקימפול והעלאה דרך סביבת הפיתוח של הארדואינו, אפשר להוריד כאן. הוא מותאם ל-ATtiny85, אם כי בשינוי זהיר של המספרים בשלוש השורות הראשונות אפשר להריץ אותו גם על ארדואינו רגיל.
שימושים בעולם האמתי
למדחומים בסיסיים שכאלה אפשר למצוא לא מעט שימושים רציניים. בכל מעבד מודרני יש מדחום פנימי, שמוודא שהרכיב לא מתחמם יותר מדי. במקומות רבים, החל במקררים תעשייתים וכלה בחדרים של תינוקות בני יומם, צריך לשמור על טמפרטורה פחות או יותר קבועה, ומכשיר כזה יכול לתת אינדיקציה ראשונית לאחראים האנושיים - או לתפקד כתרמוסטט ולהפעיל בעצמו את המיזוג.
גלגול קודם של המדחום מבוסס-הארדואינו הזה אפשר למצוא בבלוג שלי, "הבייט הלבן", וכרגיל, מי שמתעניין בתחום מוזמן להצטרף לאתר של קהילת המייקרים הישראלית.