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

השעון הבינארי האולטימטיבי: 12 שלבים (עם תמונות)
השעון הבינארי האולטימטיבי: 12 שלבים (עם תמונות)

וִידֵאוֹ: השעון הבינארי האולטימטיבי: 12 שלבים (עם תמונות)

וִידֵאוֹ: השעון הבינארי האולטימטיבי: 12 שלבים (עם תמונות)
וִידֵאוֹ: ככה זה כשיש לך חברה רוסיה 2024, יולי
Anonim
השעון הבינארי האולטימטיבי
השעון הבינארי האולטימטיבי
השעון הבינארי האולטימטיבי
השעון הבינארי האולטימטיבי
השעון הבינארי האולטימטיבי
השעון הבינארי האולטימטיבי

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

אספקה

כל הקבצים לפרויקט זה:

את הספריות של קוד Arduino ניתן להוריד מ- GitHub כאן:

ספריית RTC M41T62

ספריית FastLED

ספריית LowPower

שלב 1: הרעיון

לאחרונה נתקלתי בסרטון הבא:

שעון יד בינארי DIY

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

השלב הראשון היה קביעת הקריטריונים לעיצוב שלי. זה מה שהבאתי:

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

קריטריונים אלה הפכו לבסיס לפרויקט כולו. השלב הבא היה להבין איך אני רוצה שהשעון יתפקד!

שלב 2: כמה תיאוריות של צפייה בינארית

כמה תיאוריות של צפייה בינארית
כמה תיאוריות של צפייה בינארית

התוכנית הייתה פשוטה. השעון הבינארי יפעל בדיוק כמו שעון רגיל למעט שהממשק יהיה בינארי, במיוחד BCD (בינארי מקודד עשרוני). BCD הוא סוג של קידוד בינארי שבו כל ספרה עשרונית מיוצגת על ידי מספר סיביות קבוע. אני צריך 4 סיביות כדי לייצג ספרה מ- 0-9. ובשביל תקן

חה: מ מ

פורמט הזמן, אני צריך 4 ספרות כאלה. זה אומר שאני צריך בסך הכל 16 סיביות שיוצגו על ידי 16 נוריות LED.

קריאת הזמן ב- BCD די קלה ברגע שמתרגלים לזה. השורה בתחתית השעון מייצגת את הסיביה הפחות משמעותית (1) והשורה למעלה היא הסיבית המשמעותית ביותר (8). כל עמודה מייצגת ספרה ב-

חה: מ מ

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

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

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

השלב הבא היה יצירת תרשים בלוקים!

שלב 3: הכניסה לעבודה

יציאה לעבודה
יציאה לעבודה

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

השלב הבא היה להתחיל לקבל החלטות על רכיבים בודדים עבור כל בלוק בתרשים הבלוקים!

שלב 4: בחירת רכיבים

מסתבר שיש לא מעט רכיבים במעגל הזה. להלן, בחרתי כמה מהחשובים ביותר יחד עם הסבר מדוע בחרתי בהם.

נוריות הלדים

עבור הממשק הבינארי, הבחירה הייתה די פשוטה. ידעתי שאני רוצה להשתמש בלדים לתצוגה והבנתי שאני צריך 16 מהם (ברשת 4 × 4) כדי להציג כמה שיותר מידע. במהלך המחקר שלי אחר ה- LED המושלם, ה- APA102 המשיך לעלות. מדובר בלד קטן מאוד (2 מ"מ על 2 מ"מ) שניתן להתייחס אליו עם מגוון רחב של צבעים והוא זול למדי. למרות שמעולם לא עבדתי איתם בעבר, נראה היה שהם מתאימים לפרויקט הזה, אז החלטתי להשתמש בהם.

המיקרו -בקר

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

ה- RTC (שעון בזמן אמת)

הדרישה העיקרית ל- RTC הייתה דיוק. ידעתי שלשעון לא תהיה קישוריות לאינטרנט ולכן לא יוכל לכייל את עצמו מחדש באמצעות חיבור לאינטרנט, המשתמש יצטרך לכייל אותו מחדש באופן ידני. לכן, רציתי להפוך את שמירת הזמן למדויקת ככל האפשר. ל- M41T62 RTC יש אחת הדיוקות הגבוהות ביותר שיכולתי למצוא (± 2ppm שזה שווה ערך ל ± 5 שניות בחודש). שילוב הדיוק הגבוה עם תאימות I2C וצריכת הזרם האולטרה נמוכה הפכו את ה- RTC לבחירה טובה לפרויקט זה.

ממיר Boost DC-DC

בחירת ה- IC-DC Boost Converter IC נעשתה פשוט על ידי הסתכלות על המעגל והבנת אילו מתחים וזרמים נדרשים. הפעלת המעגל במתח נמוך תפחית את הצריכה הנוכחית אך לא יכולתי לרדת מתחת ל- 4.5V (מתח המיקרו -מינימלי בשעון 16MHz) ולא יכולתי לעלות מעל 4.5V (המתח המרבי של ה- RTC). המשמעות הייתה שעלי להפעיל את המעגל במהירות 4.5V כדי להפעיל את הרכיבים במסגרת המפרט המומלץ שלהם. חישבתי שהזרם המרבי של המעגל לא יעלה על 250mA. אז התחלתי לחפש ממיר דחיפה שיכול לענות על הדרישות ונתקלתי במהירות ב- TPS61220. ה- TPS61220 דרש רכיבים חיצוניים מינימליים, היה זול למדי והצליח לספק את דרישות הזרם והמתח.

הבטריה

הדרישה העיקרית לסוללה הייתה הגודל. הסוללה צריכה להיות קטנה מספיק כדי שתוכל להיכנס בתוך מארז השעון מבלי להיראות מגושם. הבנתי שהסוללה לא יכולה לעלות על 20mm × 35mm × 10mm. עם אילוצי גודל אלה והדרישה הנוכחית של 250mA הבחירה שלי בסוללות הייתה מוגבלת לסוללות LiPo. מצאתי סוללת "טוריגי ננו-טק 300mAh 1S" ב- Hobbyking שבה החלטתי להשתמש.

IC הטעינה

לא הייתה דרישה מיוחדת לבקר הטעינה אלא שהוא צריך להיות תואם לסוללת 1S LiPo. מצאתי את MCP73831T שהוא בקר טעינה משולב לחלוטין המיועד ליישומי טעינה בתא בודד. אחת התכונות שלו היא היכולת להתאים את זרם הטעינה באמצעות נגד חיצוני אשר מצאתי שימושי למדי ביישום זה.

הגנת LiPo

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

כעת, כשהרכיבים נבחרו הגיע הזמן ליצור את הסכימה!

שלב 5: סכמטי

הסכימטי
הסכימטי

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

השלב הבא היה פריסת הסכימה על לוח PCB!

שלב 6: פריסת PCB

פריסת PCB
פריסת PCB
פריסת PCB
פריסת PCB
פריסת PCB
פריסת PCB
פריסת PCB
פריסת PCB

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

השלב הבא היה יצירת דגם תלת מימד למארז השעונים!

שלב 7: עיצוב תלת מימד

עיצוב תלת מימד
עיצוב תלת מימד
עיצוב תלת מימד
עיצוב תלת מימד
עיצוב תלת מימד
עיצוב תלת מימד

מארז השעון תוכנן לאחר עיצוב שעונים קונבנציונאלי מאוד, קלאסי, באמצעות Fusion 360. השתמשתי במרווח רגיל של 18 מ"מ לרצועת השעון כדי להפוך את השעון למתאים למגוון גדול של רצועות אחרות. החיתוך של ה- PCB תוכנן בגודל 0, 4 מ"מ מה- PCB עצמו כדי להתאים לכל אי דיוק בייצור. כללתי כמה עמודי בורג להרכבת ה- PCB וקצה קטן להנחת ה- PCB. הקפדתי להיסגר את הלוח PCB במרחק של מילימטר מלמעלה מלמעלה כדי למנוע מהקצוות החדים של הלדים להיתקע על הבגדים. גובה המארז נקבע אך ורק על ידי עובי הסוללה. שאר המתחם נועד פשוט להיראות טוב עם קצוות מעוגלים ופינות מלוטשות. הייתי צריך לשמור על עיצוב הדפוס התלת-ממדי ידידותי, כך שאוכל להדפיס אותו תלת-ממדי בבית ללא חומר תמיכה.

עכשיו כשהחומרה הסתיימה הגיע הזמן להתחיל לעבוד על התוכנה!

שלב 8: הקוד

הקוד
הקוד

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

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

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

  • לחיצה על לחצן עליון: התעוררות / מחזור בין מצבי "זמן תצוגה", "תאריך תצוגה", "שעון עצר" ו- "אזעקה".
  • לחצן כפתור עליון: הזן את מצב "הגדר שעה", "הגדר תאריך", "התחל שעון עצר" או "הגדר אזעקה".
  • לחיצה על לחצן תחתון: הגברת הבהירות.
  • לחצן לחצן תחתון: הזן את מצב "בחר צבע".

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

עכשיו כשהקוד הסתיים הגיע הזמן להעלות אותו למיקרו -בקר!

שלב 9: תכנות

תִכנוּת
תִכנוּת

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

צרוב את מטען האתחול ל- ATmega328P-AU SMD

כיצד לצרוב מטען אתחול ולתכנת את המיקרו -בקר באמצעות Arduino Uno רגיל כמתכנת.

השלב הראשון היה להפוך את ה- Arduino Uno ל- ISP על ידי העלאת קוד הדוגמא "ArduinoISP". השתמשתי בלוח לחם יחד עם שקע תכנות וחיברתי את סכמטי ההדרכה. לאחר מכן הצלחתי לצרוב את מטען האתחול למיקרו -בקר פשוט על ידי לחיצה על "צריבת אתחול בוער" ב- IDE של Arduino.

ברגע שלמיקרו -בקר היה מטען אתחול, פשוט הסרתי את המיקרו -בקר הקיים מה- Arduino Uno והשתמשתי בלוח ה- Arduino Uno כמתאם USB -to -Serial כדי להעלות את הקוד אל המיקרו -בקר בשקע התכנות. לאחר השלמת ההעלאה, אוכל להתחיל בתהליך ההלחמה.

השלב הבא היה איסוף כל הרכיבים והלחמתם יחד!

שלב 10: הלחמה

הַלחָמָה
הַלחָמָה
הַלחָמָה
הַלחָמָה
הַלחָמָה
הַלחָמָה
הַלחָמָה
הַלחָמָה

תהליך ההלחמה נחלק לשני חלקים. תחילה היה צורך להלחים את השכבה התחתונה ולאחר מכן את השכבה העליונה.

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

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

הגיע הזמן לאסיפה האחרונה!

שלב 11: הרכבה

הַרכָּבָה
הַרכָּבָה

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

שלב 12: סיכום ושיפורים

סיכום ושיפורים
סיכום ושיפורים
סיכום ושיפורים
סיכום ושיפורים

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

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

אם יש לך מחשבות, הערות או שאלות בנוגע לפרויקט זה, אנא השאר אותם למטה. תוכל גם לשלוח אותם אל [email protected].

תחרות שעונים
תחרות שעונים
תחרות שעונים
תחרות שעונים

פרס ראשון בתחרות השעונים

מוּמלָץ: