תוכן עניינים:

בנה לחצן הפעלה טוב יותר של Raspberry Pi: 4 שלבים
בנה לחצן הפעלה טוב יותר של Raspberry Pi: 4 שלבים

וִידֵאוֹ: בנה לחצן הפעלה טוב יותר של Raspberry Pi: 4 שלבים

וִידֵאוֹ: בנה לחצן הפעלה טוב יותר של Raspberry Pi: 4 שלבים
וִידֵאוֹ: כיצד ליצור מערכת למדידה שוטפת מתקדמת בבית 2024, נוֹבֶמבֶּר
Anonim
Image
Image

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

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

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

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

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

(בסרטון אני מדגים את זה עם Pi Zero v1.2 וצג שעשיתי ממסך מחשב נייד מחדש ובקר מהמזרח הרחוק.)

שלב 1: העיצוב

איך זה עובד
איך זה עובד

זה מה שתעשה כפתור ההפעלה שלי עבורך:

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

הרכיבים מאוד זולים. כל מה שאתה צריך זה:

  • ATTiny85 (שבב תואם Arduino)
  • 3 נגדים: 2 x 330Ω ו -1 x 10kΩ
  • 1 LED - אני מציע ירוק או כחול, אבל זו בחירה שלך
  • קרש לחם ומגשרים, או לוח חשמל, או איך שתרצו לבנות אותו.

שלב 2: איך זה עובד

כמו כל לחצני ההפעלה של Pi, זה מושך סיכת GPIO למצב נמוך כדי לסמן בקשת כיבוי לתוכנית עוזרים הפועלת על ה- Pi. השתמשתי ב- GPIO4 (סיכה 7) אבל אתה יכול להשתמש בכל סיכה אחרת.

הדרך היחידה לדעת ש- Pi סיימה את הכיבוי היא על ידי צפייה בסיכת TxD 8, שאחר כך יורדת. הדבר תלוי בכך שהמסוף הטורי מופעל, שהוא כברירת מחדל. למעשה TxD יעלה ויורד באופן קבוע בזמן שהוא משמש כקונסולה סדרתית, אך הוא לעולם לא יירד ליותר מ- 30mS בכל פעם, אפילו בקצב השידור הנפוץ האיטי ביותר. עדיין ניתן להשתמש בו לקונסולה סדרתית מכיוון שאנו פשוט צופים בה באופן פסיבי.

כדי לאתחל מחדש, עלינו למשוך את SCL1 (סיכה 5) לזמן קצר. סיכה זו משמשת את כל מכשירי I2C (כולל ממשק המידי שלי), אך לאחר תחילת האתחול אנו משאירים אותה לבד.

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

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

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

תוכנית העוזרים הפועלת בפי היא רק קצת יותר מסובכת מאשר לרוב כפתורי הכיבוי. הוא מגיב לדופק נמוך ארוך על סיכת ה- GPIO על ידי הפעלת כיבוי, אך הוא מגיב גם לדופק קצר כשלעצמו מושך את סיכת ה- GPIO לרגע נמוך. כך ה- ATTiny85 יכול לדעת שהוא פועל ולכן יכול לעבור ממצב BOOTING למצב RUNNING.

שלב 3: בניית אב טיפוס הדגמה

בניית אב טיפוס הדגמה
בניית אב טיפוס הדגמה
בניית אב טיפוס הדגמה
בניית אב טיפוס הדגמה
בניית אב טיפוס הדגמה
בניית אב טיפוס הדגמה

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

שלב 4: תכנות ה- ATTiny85

מערכון ארדואינו ותוכנית העוזרים מצורפים לשלב זה. בתיקיית סקיצות Arduino שלך, צור תיקייה בשם PiPwr והעתקי את הקובץ PiPwr.ino לתוכה. השקת ה- Arduino IDE כעת תמצא אותו בספר הסקיצות שלך.

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

ב- IDE Arduino תחת קובץ - העדפות, הוסף

digistump.com/package_digistump_index.json

לכתובות ה- URL של מנהל הלוחות הנוספים.

תחת כלים - לוח אתה אמור לראות כעת מספר אפשרויות Digispark. בחר Digispark (ברירת מחדל - 16.5MHz).

אם ל- ATTiny85 שלך אין מטעין אתחול (או שאתה לא יודע) אז אתה יכול להשיג מתכנת AVR ISP בכמה קילוגרמים. או שאתה יכול להשתמש ב- Arduino Uno או בפרו מיני זול יותר או ננו כמתכנת. גוגל עבור "arduino as isp attiny85" (ללא מרכאות) להנחיות.

אם ברצונך לשנות את המערכון, תמצא את ההערה במלואה ותקווה שיהיה קל לעקוב אחריו. לניפוי באגים הרבה יותר קל להשתמש ב- Arduino Pro Mini או Nano. בטל את התגובה של serial.begin () בהגדרות והצהרות ההדפסה בלולאה () על מנת לראות את השלבים שהוא עובר באמצעות הצג הטורי. ישנן הגדרות סיכה חלופיות במקור, בתגובה, עבור אונו, פרו מיני או ננו.

ב- Raspberry Pi שלך, העתק את הקובץ shutdown_helper.py לתיקייה/etc/local/bin והגדר אותו כמנהל באמצעות הפקודה

sudo chmod +x /usr/local/bin/shutdown_helper.py

כעת ערוך את הקובץ /etc/rc.local עם העורך המועדף עליך. (יהיה עליך לעשות זאת כשורש.) לפני השורה האחרונה (יציאה 0) הכנס את השורה

nohup /usr/local/bin/shutdown_helper.py &

אתחל מחדש ותוכנית העזר תתחיל אוטומטית.

מוּמלָץ: