כיבוי עצמי לארדואינו

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

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

איפה לשים את הסוויץ'?

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

כשהארדואינו מחובר למחשב בכבל USB, ברור שאי אפשר לחבר מפסק כזה בלי להשחית את הכבל או את לוח הארדואינו עצמו, וזה לא פתרון מומלץ. עדיף לדאוג לאספקת חשמל דרך חיבור ה-DC של הלוח או ישירות לפינים Vin או 5V, בעזרת חוטים שנוח כך או אחרת להפריד או לחתוך באמצע בשביל המפסק.

במקרה שלי, מטעמי נוחות, בחרתי בסוללת 9V עם מתאם שמתחבר (בסופו של דבר) לפינים Vin ו-GND. היזהרו לא לחבר בטעות לפין 5V, זה עלול לטגן את הארדואינו.

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

כשטרנזיסטור אחד לא מספיק

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

כפי שהזכרתי פעם, יש לנו BJT מסוג NPN, שבו מתח (וזרם) ברגל ה-Base מאפשרים לזרם לעבור מה-Collector ל-Emitter. יש גם את סוג PNP שפועל כתמונת ראי – בהסתכלות מצד הארדואינו, אם נחבר את ה-Base לאדמה אז יעבור זרם בין ה-Emitter ל-Collector. אנחנו יודעים גם שאם רוצים להשתמש בהם כמתגים לאספקת חשמל, אז NPN צריך להיות ממוקם "אחרי" הצרכן, כלומר בין הצרכן ל"אדמה" של מקור הכוח, ואילו PNP צריך להיות ממוקם לפני הצרכן, כלומר בין ה"פלוס" של מקור הכוח לבין הצרכן.

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

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

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

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

בעיית הבוטלואודר

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

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

ניתוח מעקפים

כמו בבדיחה הידועה על אלכוהול, ארדואינו הוא גם המקור לבעיות וגם הפתרון להן. המיקרו-בקר אולי לא יספיק לתת לנו את סיגנל ה-HIGH הדרוש בזמן, אבל הרכיבים שעל הלוח יספיקו בקלות, דרך פין 5V. נחבר פין זה דרך נגד גדול ל-Base של ה-NPN, והוא ישמור על הברז פתוח באופן מיידי כמעט.

רגע, אם 5V הקבוע שולט ב-NPN, איך סוגרים את הברז בתוכנה? פשוט מאד, מחברים את פין הקלט/פלט אחרי הנגד הנ"ל, כלומר בצמוד ל-Base, ועובדים בלוגיקה הפוכה. כל עוד המיקרו-בקר עסוק בהכנות שלו, הפין יהיה כברירת מחדל במצב קלט (High impedance), ולא ישפיע על ה-Base. לאחר מכן, כשנרצה לנתק את החשמל, נגדיר את הפין הזה כפין פלט ונוריד אותו ל-LOW. זה יחבר את ה-Base ישירות ל-GND, ההשפעה של פין 5V תיעלם, ה-NPN ייסגר, ה-PNP ייסגר, ו…

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

כדי להתגבר על המכשול הזה, הוספתי קבל בין ה-Base של ה-NPN לבין האדמה. הערך הנכון של הקבל תלוי גם במטען שנותר בארדואינו וגם בערך של הנגד מ-5V ל-Base. עיקרון הפעולה הוא שבזכות הנגד, הקבל נטען בהדרגה עד שהוא מגיע למתח הדרוש להפעלת הטרנזיסטור. זהירות – אם הנגד גדול מדי (או שהקבל גדול מדי), הזמן שזה לוקח יהיה ארוך יותר ממשך הלחיצה ואנחנו שוב בבעיית ה-Bootloader. לעומת זאת, כשהערכים מתאימים, הפין של הארדואינו שהופך ל-LOW "מנקז" את הקבל בבת אחת (אולי כדאי אפילו לשים נגד קטן ביניהם, שלא יהיה זרם חזק מדי!), בלוח אין מספיק מטען כדי למלא אותו מחדש, והכיבוי הופך לסופי ומוחלט.

הנה שרשור באתר של ארדואינו, שנעזרתי בו להבנת ובניית המעגל. מי שרוצה יכול להגיע משם גם לשרטוטים.

יום עצמאות שמח!

להרשמה
הודע לי על
7 Comments
מהכי חדשה
מהכי ישנה לפי הצבעות
Inline Feedbacks
הראה את כל התגובות

אם מדברים על זה…

תוכל להסביר לי בבקשה בקצרה איך מיישמים תאורת חירום עם רכיבים פשוטים? רק אם זה לא מסובך להסביר.

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

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

לייק

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