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

סטטוס פשוט ומערכת הזמנות של בועטים עם שילוב רפוי: 12 שלבים (עם תמונות)
סטטוס פשוט ומערכת הזמנות של בועטים עם שילוב רפוי: 12 שלבים (עם תמונות)

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

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

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

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

החברה משתמשת בכלי תקשורת Slack שבו לכל עובד יש חשבון. יש לנו אפילו ערוץ #קיקר רק לדיונים על … בועטים. הערוץ יכול לשמש מעין "נקודת כניסה" להזמנה ולהודיע על מצב הטבלה הנוכחית.

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

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

אז בואו נתחיל…

שלב 1: הוכחת קונספט ואב טיפוס

הוכחת קונספט ואב טיפוס
הוכחת קונספט ואב טיפוס
הוכחת קונספט ואב טיפוס
הוכחת קונספט ואב טיפוס
הוכחת קונספט ואב טיפוס
הוכחת קונספט ואב טיפוס

הרעיון בצחוק היה לבנות מכשיר שיונח ליד שולחן הבועטים בהתאם לדרישות הבאות:

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

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

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

בהזמנה אני מתכוון רק להזמנה ל -3 הדקות הבאות. המערכת אינה מתוכננת כך שהמשתמש יכול להזמין את השולחן בזמן מדויק (למשל 14:00). זה לא עובד כמו הסתייגות למשל במסעדות אבל רק לדקות עולות.

בגלל היעדר חיבור LAN במקום, האפשרות היחידה היא להשתמש ב- WLAN - היא בכל מקרה האפשרות הטובה ביותר. מוח המערכת חייב להשתמש ב- Slack API כדי לשלוח ולקבל פקודות מערוץ Slack. ראשית ניסיתי להשתמש ב- NodeMCU. הצלחתי לקבל ולקבל הודעות מ- Slack וממנה, אך בגלל השימוש ב- HTTPS וגם בגודל "הודעת קבלת הפנים" של Slack (~ 300kB), NodeMCU ניתק את החיבור ו/או קיבל חריג מוזר שלא הצלחתי לפתור בחפירה דרך האינטרנט..

אז החלטתי להשתמש במשהו חזק יותר: Raspberry Pi 3 (Zero W עם WiFi עדיין לא פורסם באותה תקופה). על ידי בעל RPi, יכולתי לעבור את שפת ההטמעה מ- C ל- Java מכיוון שהיא נוחה לי יותר - כך שזה היה יתרון. היום אתה יכול להשתמש במשהו חזק יותר מאשר NodeMCU ופחות חזק מ- RPi. פטל אפס אולי?

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

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

שלב 2: חומרים וכלים

חומרים בהם השתמשתי:

  • קופסא
  • פטל פטל, כרטיס microSD, ספק כוח מיקרו USB
  • כפתורי ארקייד ירוקים ואדומים
  • מסך LCD בגודל 16x2
  • נוריות - השתמשתי ב- RGB אך ניתן להשתמש בצבע המתאים
  • זכר לנקבה ונקבה לנקבה כבלי מגשר קרשים
  • ממשק מיקרו USB
  • קרש לחם מיני רק לחיבור כמה חוטים
  • כבל מיקרו USB קצר שעובד כמגשר בתוך התיבה כדי להפעיל את ה- RPi

כלים בהם השתמשתי:

  • סכין חדה (למשל סכין כלי לחיתוך שטיח)
  • כלי רוטרי
  • אקדח דבק חם
  • תחנת הלחמה
  • צבת, צבת אלכסונים/חותכי צד
  • מברג
  • קוֹבֶץ
  • לִי

כלים שאתה כנראה צריך:

כל האמור לעיל אבל במקום "אני" זה צריך להיות: "אתה":)

שלב 3: לוח קדמי - מסך LCD

לוח קדמי - מסך LCD
לוח קדמי - מסך LCD
לוח קדמי - מסך LCD
לוח קדמי - מסך LCD

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

שלב 4: לוח קדמי - נוריות סטטוס

לוח קדמי - נוריות סטטוס
לוח קדמי - נוריות סטטוס
לוח קדמי - נוריות סטטוס
לוח קדמי - נוריות סטטוס

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

שלב 5: לוח קדמי - לחצנים

לוח קדמי - כפתורים
לוח קדמי - כפתורים
לוח קדמי - כפתורים
לוח קדמי - כפתורים
לוח קדמי - כפתורים
לוח קדמי - כפתורים
לוח קדמי - כפתורים
לוח קדמי - כפתורים

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

שלב 6: מחבר מתח

מחבר מתח
מחבר מתח

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

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

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

שלב 7: חיבור הכל

לחבר הכל ביחד
לחבר הכל ביחד
לחבר הכל ביחד
לחבר הכל ביחד
לחבר הכל ביחד
לחבר הכל ביחד

תחילה הלחנתי נגדים מתאימים לנורות על פי צבעם (מתח) עבור 3.3 וולט. השתמשתי ב- 100Ω עבור אדום, שני נגדים 82 ו- 100 עבור צהוב (צומת ירוק ואדום), ו- 100Ω עבור ירוק. אתה יכול להשתמש באחד הנגד המקוון עבור מחשבון LED. אבל אנא עשה קצת מחקר בעצמך על פי הבהירות וטון הצבע המדויק שאתה רוצה להשיג.

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

על פי תרשים pinout זה:

צמידי LED חוברו:

  • LED ירוק - GPIO1 על Rpi
  • LED צהוב (שתי הרגליים) ל- GPIO2 ב- RPi
  • LED אדום ל- GPIO0 ב- RPi

חיברתי LCD באמצעות סיכות I2C על סיכות RPi

  • LCD SDA ל- GPIO8 ב- RPi
  • LCD SCL ל- GPIO9 ב- RPi
  • LCD PWR עד 5V ב- RPi
  • LCD GND ל- GND ב- RPi

ה- LCD הודבק בחום לקופסה כהגנה נוספת.

חיברתי 3.3V ו- GND ללוח הלחם הקטן כדי שאוכל להשתמש בהם ללחצנים.

כפתור ירוק היה מחובר ל- 3.3V באמצעות לוח לחם מיני ול- GPIO5 ב- RPi.

כפתור אדום היה מחובר ל- 3.3V באמצעות לוח לחם מיני ו- GPIO4 ב- RPi.

אז בכל פעם שאתה לוחץ על הכפתור, יש מצב גבוה על סיכת ה- RPi.

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

הדבקתי גם את המכסה של RPi לקופסה כך שהוא לא יתנדנד בפנים.

דפקתי את הלוח הקדמי עם כל הדברים בפנים.

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

שלב 8: תצורה רפוי

תצורה רפוי
תצורה רפוי
תצורה רפוי
תצורה רפוי

צור את הצוות שלך ב- Slack.com או השתמש בצוות שלך ויש לך לפחות זכויות מנהל.

ב- Slack, צור ערוץ לשילוב Slack של השירות (או דלג על יצירת ערוץ אם ברצונך להשתמש בערוץ שכבר יש לך).

הוסף שילוב Webhooks כולל לצוות שלך. בחר את הערוץ והעתק את כתובת האתר של webhook.

הוסף אינטגרציה של בוטים לצוות שלך. בחר שם כלשהו לבוט שלך והעתק את אסימון ה- API של bot.

דף ניהול האינטגרציות המותאמות אישית שלך צריך להיראות כמו בתמונה.

עליך להזמין את הבוט כחבר בערוץ שלך. אתה יכול לעשות את זה כבר במהלך יצירת ערוץ.

אם ברצונך להתאים אישית את השירות מאוחר יותר, בדוק את ממשק ה- API Slack.

שלב 9: יישום תוכנה

השתמשתי ב- Raspbian כמערכת הפעלה ל- RPi שלי על ידי ביצוע הדרכה זו. אנא סלח לי אני אדלג על הסבר כפי שהוא כבר מתועד בהרבה מקומות והתהליך פשוט. אני מקווה שאתה מיומן ומנוסה מספיק כדי שתוכל להתקין RPi לבד. אנא אל תשכח להגדיר גישה WiFi ב- Raspberry Pi שלך;)

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

ספריות הג'אווה בהן השתמשתי:

  • pi4j - לשימוש ב- Raspberry Pi מ- Java
  • Springboot כפלטפורמת יישומים
  • allbegray/slack-api כאינטגרציה Slack

עליך לערוך קובץ תצורה ב- src/resources/config.properties. יש 3 ערכים שעליך להגדיר כדי להשתמש ב- Slack API:

  • channelName - שם הערוץ שברצונך לפרסם שינויים בסטטוס ולקבל פקודות.
  • slackBotToken - אסימון של בוט שהוגדר באינטגרציות של צוות Slack שלך שישמש לפרסום הודעות לערוץ שהוזכר לעיל. שימו לב, עליכם להוסיף את Slack Bot כחבר בערוץ.
  • webhookUrl - כתובת האתר שתוכל לקבל מהאינטגרציות המותאמות אישית של Slack Team.

הפרויקט הוא Mavenized אז כדי לבנות אותו פשוט הקלד (אתה צריך לפחות Java 8 ו- Maven מותקן):

חבילת נקי mvn

ובמדריך היעד תוכל למצוא את קובץ ה- JAR של Springboot. כדי להתחיל שירות:

sudo java -jar kicker-reservation-service-0.3.0.jar

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

יש צורך בהסבר מיוחד אחד ל- LCD.

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

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

עליך להוריד את הכלי ולמקם אותו ליד שירות JAR

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

אם זה טיפשי, אבל זה עובד … זה לא טיפשי

שלב 10: הוראות שימוש

הוראות שימוש
הוראות שימוש

אתה יכול לבדוק את המצב הנוכחי של טבלת הבועטים בערוץ Slack שנוצר על ידי הקלדת הפקודה "סטטוס" (או בקרוב "רחוב") או לבדוק ישירות את הרמזורים במכשיר.

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

גם רמזורים ישתנו ומסך LCD יציג מידע מפורט.

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

כדי להזמין שולחן בועט, כתוב הודעה "שמור" (או רק: "מיל") לערוץ Slack.

הרמזור הצהוב ידליק ויודיע לאחרים ליד שולחן הבועטים שהוא שמור ובקרוב מישהו יבוא לשחק.

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

אם אתה צריך, תוכל לבטל הזמנה על ידי כתיבת "ביטול" בערוץ Slack.

למערכת יש גם כמה תכונות משניות אחרות כמו:

  • לאחר ההזמנה, הכפתורים קופאים למשך 5 שניות. זאת בכדי למנוע מצבים, שבדיוק באותו הזמן מישהו שומר ושנייה לאחר שניות מישהו לוחץ על כפתור אדום מתוך מחשבה שהוא/היא זה שכובש את השולחן אך ללא ידיעה שמישהו שמר את השולחן רק מיליסייה לפני.
  • לחיצה על כל כפתור מקפיאה את שניהם למשך חצי שנייה. זה כדי למנוע לחיצות כפתורים מטורפות, כך שערוץ Slack לא יזבל ספאם עד כדי כך.
  • הגרסה החינמית של Slack מאפשרת לאחסן 10000 הודעות על ידי כל הצוות. כדי לשמר חלק מההודעות, שירות מחק את ההודעות הישנות הקשורות למערכת הזמנות/סטטוסים) ושמור רק 6 מהן האחרונות. למה 6? מכיוון שלרוב ישנם 2 תרחישי סטטוס: "שמור-כבוש-חופשי" ו"כבוש-חופשי ". כך שהמערכת יכולה לאחסן לפחות 2 הפעלות מלאות ללא תפוס. כדי לנקות את כל הודעות המערכת, הקלד פקודה "נקי" (או "נקה").

שלב 11: שחרור

משחרר
משחרר
משחרר
משחרר

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

בינתיים הכל טוב…

שלב 12: שאלות נפוצות

מדוע הזמן הקצוב להזמנה מוגדר ל -3 דקות?

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

מדוע פסק הזמן למשחק מוגדר ל -20 דקות?

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

מדוע אין משטח PIN במכשיר המאשר את ההזמנה; אין כניסות וסיסמאות?

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

מדוע המכשיר נראה כה תעשייתי-מכוער?

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

למה לא פשוט ליישם איזו אפליקציה ולהדביק טאבלט זול לקיר עם אותה פונקציונליות?

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

מוּמלָץ: