جدول المحتويات:
- الخطوة 1: إثبات المفهوم والنماذج الأولية
- الخطوة الثانية: المواد والأدوات
- الخطوة الثالثة: اللوحة الأمامية - شاشة LCD
- الخطوة 4: اللوحة الأمامية - مؤشرات LED للحالة
- الخطوة 5: اللوحة الأمامية - الأزرار
- الخطوة 6: موصل الطاقة
- الخطوة 7: وضع كل شيء معًا
- الخطوة 8: تكوين Slack
- الخطوة 9: تنفيذ البرنامج
- الخطوة 10: تعليمات الاستخدام
- الخطوة 11: الإفراج
- الخطوة 12: التعليمات
فيديو: نظام حجز وحالة Kicker بسيط مع تكامل Slack: 12 خطوة (بالصور)
2024 مؤلف: John Day | [email protected]. آخر تعديل: 2024-01-30 07:36
في شركة حيث أعمل هناك طاولة كيكر. تحتل الشركة العديد من الطوابق وبالنسبة لبعض الموظفين يستغرق الأمر ما يصل إلى 3 دقائق للوصول إلى الطاولة و … لإدراك أن الطاولة مشغولة بالفعل.
لذلك ظهرت فكرة لبناء نوع من نظام البث والحجز البسيط الذي يعمل في الوقت الفعلي.
تستخدم الشركة أداة اتصال Slack حيث يكون لكل موظف حساب. لدينا حتى قناة #Kicker فقط للمناقشات حول … كيكر. يمكن استخدام القناة كنوع من "نقطة الدخول" للحجز ولإعلامك بحالة الجدول الحالي.
كالعادة ، هناك العديد من المفاهيم حول كيفية التعامل مع مثل هذا النظام. لكن بشكل عام ، ظهرت قاعدة أساسية واحدة في كل منهم: يجب أن تكون سهلة الاستخدام دون أي خطوات مفرطة في الأداء عند التعامل مع النظام.
الجهاز والخدمة غير ملتصقين بمنضدة كيكر ويمكن استخدامهما لأي "مورد مشترك" (مثل طاولة بينج بونج ووحدة التحكم وما إلى ذلك …) الذي يحتاج إلى نوع من حل حجز AMD.
لذلك دعونا نبدأ…
الخطوة 1: إثبات المفهوم والنماذج الأولية
كانت الفكرة من Raughly هي بناء جهاز يتم وضعه بجانب طاولة Kicker وفقًا للمتطلبات التالية:
-
بعض المؤشرات حول حالة الجدول الحالي - إذا كنت تقف بجانبه ، فيجب أن تكون قادرًا على معرفة أنه مجاني أو محجوز وسيأتي شخص ما للعب في غضون 3 دقائق. تناسب إشارات المرور الفكرة تمامًا:
- الضوء الأخضر - مجاني للعب ،
- الضوء الأصفر - محجوز ،
- الضوء الأحمر - المحتلة.
-
زر (أزرار) يمكنك النقر قبل اللعبة وبعدها حتى يتم إعلام الآخرين بحالة الجدول الحالي. بدلاً من زر تبديل واحد ، قررت استخدام زرين منفصلين:
- الزر الأحمر - احتل الطاولة ، ابدأ اللعبة (بعد الحجز أو المخصص).
- الزر الأخضر - تحرير الجدول.
- يتم عرض بعضها بمعلومات أكثر تفصيلاً حول "ما يحدث" - مهلة الحجز ، وحالة الجدول المتكرر ، ومهلة وقت اللعب ، إلخ …
أعني بالحجز الحجز لمدة 3 دقائق فقط. لم يتم تصميم النظام بحيث يمكن للمستخدم حجز الجدول في الوقت المحدد (على سبيل المثال 02:00 مساءً). لا يعمل مثل الحجز على سبيل المثال في المطاعم ولكن فقط للدقائق القادمة.
نظرًا لعدم وجود اتصال LAN في مكانه ، فإن الخيار الوحيد هو استخدام WLAN - فهو الخيار الأفضل على أي حال. يجب أن يستخدم دماغ النظام Slack API لإرسال واستقبال الأوامر من قناة Slack. أولاً حاولت استخدام NodeMCU. تمكنت من الحصول على رسائل واستلامها من وإلى Slack ولكن بسبب استخدام HTTPS وكذلك حجم "رسالة الترحيب" في Slack (حوالي 300 كيلو بايت) ، كانت NodeMCU تفقد الاتصال و / أو حصلت على بعض الاستثناءات الغريبة التي لم أتمكن من حلها عبر الإنترنت.
لذلك قررت استخدام شيء أكثر قوة: Raspberry Pi 3 (لم يتم إصدار Zero W مع WiFi في ذلك الوقت). من خلال امتلاك RPi ، يمكنني تبديل لغة التنفيذ من C إلى Java لأنها أكثر ملاءمة بالنسبة لي - لذلك كانت هذه ميزة. اليوم يمكنك استخدام شيء أقوى من NodeMCU وأقل قوة من RPi. ربما توت العليق زيرو؟
بعد بناء أول نموذج أولي على لوح تجارب مع بعض الأسلاك المجنونة والكثير من الرسومات والنماذج الأولية ، بدا النظام وكأنه قادر على العمل.
بعد كل هذه الأفكار والعمل على PoC ، بدأت في التخطيط لتكوينات مختلفة لوضع العناصر المذكورة أعلاه على اللوحة الأمامية بحيث تكون أكثر إفادة وملاءمة للاستخدام. يمكنك التحقق من بعض المقترحات الأخرى ، ربما بعضها يناسبك بشكل أفضل. آخر واحد كان المختار من قبلي.
الخطوة الثانية: المواد والأدوات
المواد التي استخدمتها:
- علبة
- Raspberry Pi ، بطاقة microSD ، مصدر طاقة micro USB
- أزرار الممرات الخضراء والحمراء
- شاشة LCD مقاس 16 × 2
- المصابيح - لقد استخدمت RGB ولكن يمكنك استخدام اللون المناسب
- ذكر إلى أنثى ومن أنثى إلى أنثى كابلات توصيل اللوح
- واجهة Micro USB
- لوحة توصيل صغيرة فقط لتوصيل بعض الأسلاك
- كبل USB صغير قصير يعمل كقابس داخل الصندوق لتشغيل RPi
الأدوات التي استخدمتها:
- سكين حاد (مثل سكين متعدد الاستخدامات لقطع السجاد)
- أداة دوارة
- مسدس الغراء الساخن
- محطة لحام
- كماشة ، كماشة قطرية / قواطع جانبية
- مفك براغي
- ملف
- أنا
الأدوات التي ربما تحتاجها:
كل ما سبق ولكن بدلاً من "أنا" يجب أن يكون: "أنت":)
الخطوة الثالثة: اللوحة الأمامية - شاشة LCD
كان ثقب شاشة LCD واضحًا ومباشرًا. مجرد مستطيل يناسب شاشة LCD الخاصة بي. بعد محاولة قصه بسكين حاد ، أدركت أن الصندوق البلاستيكي صعب للغاية. لذلك استخدمت أداة حفر لقطع النافذة وتلميع الحواف.
الخطوة 4: اللوحة الأمامية - مؤشرات LED للحالة
ثقوب LED هي أيضا مباشرة. لقد أخذت للتو مثقابًا كبيرًا للخشب ثم قمت بتلميع الحواف بأداة حفر. تم تركيب المصابيح الكبيرة بإحكام تمامًا. لم أقم بلحام أي مقاومات بمصابيح LED حتى الآن - لقد تركتها لعملية التجميع.
الخطوة 5: اللوحة الأمامية - الأزرار
كانت أكبر مشكلة في هذين الزرين الكبيرين هي وضعها بالتساوي مع التباعد المناسب. لقد قطعت الثقوب فقط باستخدام أداة الحفر الخاصة بي حيث يمكنني زيادة القطر خطوة بخطوة حتى تتناسب الأزرار بإحكام.
الخطوة 6: موصل الطاقة
كان ثقب صغير لطاقة micro USB مهمة حساسة للغاية للقيام بها. كنت أرغب في أن تكون الحفرة مناسبة قدر الإمكان ، لذلك قضيت هنا الكثير من الوقت في التلميع. لكنني كنت راضيا عن النتيجة النهائية.
ثم قطعت كبل USB صغيرًا تم وضعه داخل الصندوق. أحد جوانبها متصل بـ RPi ، وعلى الجانب الآخر ، تم لحام جميع الكابلات بواجهة micro USB وفقًا لمنافذ USB.
ثم قمت بلصق ثنائي الفينيل متعدد الكلور الصغير على الصندوق مباشرة (يمكن رؤيته على صورة في خطوة التجميع).
الخطوة 7: وضع كل شيء معًا
أولاً ، قمت بلحام المقاومات المناسبة لمصابيح LED وفقًا للون (الجهد) لـ 3.3 فولت فولت. لقد استخدمت 100Ω للأحمر ، ومقاومتان 82 و 100 للأصفر (العقدة الخضراء والحمراء) ، و 100Ω للأخضر. يمكنك استخدام أحد المقاوم على الإنترنت لآلة حاسبة 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.3 فولت و GND باللوحة الصغيرة حتى أتمكن من استخدامها للأزرار.
تم توصيل الزر الأخضر بـ 3.3 فولت من خلال لوحة توصيل صغيرة و GPIO5 على RPi.
تم توصيل الزر الأحمر بـ 3.3 فولت من خلال لوحة توصيل صغيرة و GPIO4 على RPi.
لذلك عندما تضغط على الزر ، تكون هناك حالة عالية على دبوس RPi.
يعمل اللوح الصغير المصغر على ما يرام لذا فقد تخطيت لحام جميع الأسلاك في ثنائي الفينيل متعدد الكلور. بدلاً من ذلك ، قمت فقط بتغطية اللوح الصغير بالغراء الساخن حتى لا تسقط الكابلات.
أنا أيضًا غطاء RPi بالغراء بالغراء على الصندوق حتى لا يتأرجح في الداخل.
أنا ثمل اللوحة الأمامية مع كل الأشياء بداخلها.
ثم قمت بطباعة ملصقات بسيطة وقصها ولصقها بجوار إشارات المرور والأزرار.
الخطوة 8: تكوين Slack
قم بإنشاء فريقك على Slack.com أو استخدم الفريق الذي لديك ولديك حقوق المسؤول على الأقل.
في Slack ، قم بإنشاء قناة لتكامل Slack للخدمة (أو تخطي إنشاء قناة إذا كنت تريد استخدام قناة لديك بالفعل).
أضف تكامل Webhooks Incomming إلى فريقك. حدد القناة وانسخ عنوان URL الخاص بخطاف الويب.
أضف تكامل الروبوتات إلى فريقك. اختر اسمًا لبرنامج الروبوت الخاص بك وانسخ الرمز المميز لواجهة برمجة تطبيقات الروبوت.
يجب أن تبدو صفحة إدارة عمليات الدمج المخصصة كما هي في الصورة.
يجب عليك دعوة الروبوت كعضو في قناتك. يمكنك القيام بذلك بالفعل أثناء إنشاء قناة.
إذا كنت ترغب في تخصيص الخدمة لاحقًا ، فيرجى التحقق من Slack API.
الخطوة 9: تنفيذ البرنامج
لقد استخدمت Raspbian كنظام تشغيل لـ RPi باتباع هذا البرنامج التعليمي. أرجوك سامحني ، سأتخطى شرحه لأنه موثق بالفعل في العديد من الأماكن والعملية واضحة ومباشرة. آمل أن تكون ماهرًا وذو خبرة كافية لإدارة إعداد RPi بنفسك. من فضلك لا تنس تكوين وصول WiFi على Raspberry Pi الخاص بك ؛)
كما هو مذكور في قسم النماذج الأولية ، استخدمت Java لتنفيذ دماغ النظام بأكمله. الكود متاح على GitHub -
مكتبات Java التي استخدمتها:
- pi4j - لاستخدام Raspberry Pi من Java
- Springboot كأداة تطبيق
- allbegray / slack-api كتكامل سلاك
تحتاج إلى تحرير ملف التكوين في src / resources / config.properties. هناك 3 إدخالات يجب عليك تكوينها لاستخدام Slack API:
- channelName - اسم القناة تريد نشر تغييرات الحالة وتلقي الأوامر.
- slackBotToken - رمز روبوت تم تكوينه في تكامل فريق Slack الخاص بك والذي سيتم استخدامه لنشر الرسائل على القناة المذكورة أعلاه. يرجى ملاحظة أنه يجب عليك إضافة Slack Bot كعضو في القناة.
- webhookUrl - عنوان URL الذي يمكنك الحصول عليه من عمليات الدمج المخصصة لـ Slack Team.
تم إنشاء المشروع بشكل مبدئي ، لذلك من أجل إنشائه ، اكتب فقط (تحتاج على الأقل إلى تثبيت Java 8 و Maven):
حزمة نظيفة mvn
وفي الدليل الهدف ، يمكنك العثور على ملف Springbooted JAR. لبدء الخدمة:
sudo java -jar- kicker-calling-service-0.3.0.jar
لقد قمت بتعيين هذا السطر على البرنامج النصي.sh وأضفته كبرنامج تشغيل تلقائي. لذلك كلما تم تشغيل الطاقة ، يتم تشغيل الخدمة تلقائيًا.
هناك حاجة إلى شرح خاص واحد لشاشات الكريستال السائل.
لقد جربت طرقًا / مكتبات مختلفة للتحكم في شاشة LCD عبر I2C من RPi لكنني فشلت للتو. بالنسبة لبعض شاشات الكريستال السائل لا تعمل بشكل صحيح ، بالنسبة للبعض كانت تظهر بعض القمامة.
لكن شيئًا واحدًا كان يعمل بشكل جيد جدًا بمجرد إخراجه من الصندوق. إنها أداة سطر أوامر الأداة التي وجدت أنه يمكنك استخدامها للتحكم في شاشة LCD. لذلك قررت فقط استخدام هذه الأداة مباشرة من Java. يعمل مثل هذا أن عملية Linux العادية (lcdi2c) تسمى (مع معلمات معدة) في كل مرة أريد فيها عرض شيء ما على شاشة LCD.
تحتاج إلى تنزيل الأداة ووضعها بجوار خدمة JAR
يعد استخدام هذه الأداة نوعًا من الاختراق والحل الغبي لكني أتبع القاعدة الأولى في الهندسة:
إذا كان غبيًا ، لكنه يعمل … فهو ليس غبيًا
الخطوة 10: تعليمات الاستخدام
يمكنك التحقق من حالة جدول كيكر الحالية على قناة Slack التي تم إنشاؤها عن طريق كتابة أمر "الحالة" (أو "st" قريبًا) أو التحقق مباشرة من إشارات المرور على الجهاز.
إذا كنت تريد اللعب فقط - اضغط على الزر الأحمر. سيتم إرسال رسالة إلى قناة Slack تحتوي على معلومات تفيد بأن جدول Kicker مشغول. عندما تنتهي من اللعب - اضغط على الزر الأخضر. سيتم إرسال رسالة إلى قناة Slack تحتوي على معلومات تفيد بأن طاولة كيكر مجانية للعبها.
ستتغير أيضًا إشارات المرور وستعرض شاشة LCD بعض المعلومات التفصيلية.
فقط في حالة نسيان ترك الطاولة بعد الانتهاء من اللعب ، فهناك مهلة محددة على 20 دقيقة. إذا كنت لا تزال تلعب وتحتاج إلى مزيد من الوقت ، فاضغط على الزر الأحمر مرة أخرى وسيتم تمديد المباراة لمدة 5 دقائق (تنطبق فقط عندما يكون هناك أقل من 5 دقائق متبقية قبل انتهاء المهلة). سيتم عرض مهلة التشغيل على شاشة LCD.
لحجز طاولة كيكر ، اكتب رسالة "احتياطي" (أو فقط: "res") إلى قناة Slack.
سيتم تشغيل إشارة المرور الصفراء لإعلام الآخرين بالقرب من طاولة الركل بأنها محجوزة وسرعان ما سيأتي شخص ما للعب.
تم ضبط مهلة الحجز على 3 دقائق. بعد ذلك ، تحول طاولة كيكر حالتها إلى لعبة مجانية.
إذا كنت بحاجة ، يمكنك إلغاء الحجز عن طريق كتابة "إلغاء" على قناة Slack.
يحتوي النظام أيضًا على بعض الميزات الثانوية الأخرى مثل:
- بعد الحجز ، يتم تجميد الأزرار لمدة 5 ثوانٍ. هذا لمنع المواقف ، في نفس الوقت فقط يحتفظ شخص ما وبعد ذلك بمللي ثانية يضغط شخص ما على الزر الأحمر معتقدًا أنه هو / هي الشخص الذي يشغل الطاولة ولكن دون معرفة أن شخصًا ما حجز الطاولة قبل ميلي ثانية فقط.
- يؤدي الضغط على أي زر إلى تجميد كلاهما لمدة نصف ثانية. هذا لمنع النقرات على الأزرار المجنونة ، لذا لن يتم إرسال بريد عشوائي على قناة Slack كثيرًا.
- يسمح الإصدار المجاني من Slack بتخزين 10000 رسالة من قبل الفريق بأكمله. للحفاظ على بعض الرسائل ، تقوم الخدمة بحذف الرسائل القديمة المتعلقة بنظام الحجز / الحالة) والاحتفاظ فقط بآخر 6 منها. لماذا 6؟ لأنه غالبًا ما يكون هناك سيناريوهان للحالة: "محجوزة - مشغولة - خالية" و "محتلة - خالية". لذلك يمكن للنظام تخزين ما لا يقل عن جلستين كاملتين خالية من المشغولات. لتنظيف جميع رسائل النظام ، اكتب أمر "نظيف" (أو "مسح").
الخطوة 11: الإفراج
حتى الآن (لحظة نشر هذه التعليمات) ، يعمل النظام لمدة 2.5 + شهر ويستخدمه أكثر من 30 شخصًا. نظرًا لتحديث حالة جدول كيكر ، فإننا نعرف دائمًا متى يكون مجانيًا أو مشغولًا حتى لا نضيع الوقت في التنقل ذهابًا وإيابًا بعد الآن. الاتصال والخدمة مستقران للغاية حتى نتمكن من الاعتماد عليها.
حتى الان جيدة جدا…
الخطوة 12: التعليمات
لماذا تم ضبط مهلة الحجز على 3 دقائق؟
3 دقائق هي أقصى مدة للحجز ، استخدمها كما تريد في الكود. بشكل عام ، نادرًا ما يحدث ذلك ، ستمر 3 دقائق كاملة وسيتم انقضاء مهلة الحجز. في معظم الحالات ، يأتي شخص ما في النهاية ويحتل الطاولة.
لماذا تم ضبط مهلة اللعب على 20 دقيقة؟
وفقًا للاعبين ، يبلغ متوسط وقت اللعب حوالي 10 دقائق. إذا كنت بحاجة إلى اللعب لفترة أطول ، فاضغط على الزر الأحمر مرة أخرى عندما يتبقى أقل من 5 دقائق وسيتم تمديد المهلة إلى 5 دقائق. يتم إعداد هذه المهلة فقط في حالة نسيان شخص ما ترك الطاولة.
لماذا لا توجد لوحة PIN على الجهاز لتأكيد الحجز ؛ لا تسجيلات دخول وكلمات مرور؟
كانت الفكرة الرئيسية هي إبقاء الأمر بسيطًا - غبيًا. خلاف ذلك ، إذا احتاج الحجز وبدء اللعبة وإنهائها إلى بذل الكثير من الجهد ، فلن يرغب أحد في استخدامها.
لماذا يبدو الجهاز صناعيًا قبيحًا جدًا؟
نظرًا لأنه لم يكن لدي قاطع ليزر ، أو طابعة CNC ، أو طابعة ثلاثية الأبعاد ، أو صانع ملصقات ملون فاخر ، وما إلى ذلك ، فأنت أكثر من مسرور بتحسينها وجعلها أكثر جمالًا.
لماذا لا تقوم فقط بتنفيذ بعض التطبيقات وتثبيت الجهاز اللوحي الرخيص على الحائط بنفس الوظيفة؟
التطبيقات والتطبيقات في كل مكان. يحب الناس التفاعل الجسدي مع الأشياء وليس فقط النقر على الشاشات المسطحة.
موصى به:
منصة تكامل Ubidots مع LOGO! Siemens باستخدام Node-RED: 13 خطوة
منصة تكامل Ubidots مع LOGO! سيمنز باستخدام Node-RED: منذ بضعة أسابيع أجريت بعض الاختبارات باستخدام LOGO! (وحدة منطقية) من شركة سيمنز ، لقد رأيت لبضعة أشهر أنهم يستخدمونها في التطبيقات الصناعية الأساسية ، على الرغم من أنني لا أعتبرها شخصيًا 100٪ PLC ، فمن السهل دمجها في mon
مستشعر باب يعمل بالبطارية مع تكامل أتمتة المنزل ، WiFi و ESP-NOW: 5 خطوات (بالصور)
مستشعر الباب الذي يعمل بالبطارية مع تكامل أتمتة المنزل ، WiFi و ESP-NOW: في هذا الدليل ، أوضح لك كيف صنعت مستشعر باب يعمل بالبطارية مع تكامل أتمتة المنزل. لقد رأيت بعض أجهزة الاستشعار وأنظمة الإنذار اللطيفة الأخرى ، لكنني أردت أن أصنعها بنفسي. أهدافي: جهاز استشعار يكتشف ويبلغ عن دو
لعبة BBC Microbit Flappy Bird وحالة: 7 خطوات
لعبة BBC Microbit Flappy Bird وحقيبة: هذه الحالة من أجل لعبة ولعبة ميكروبيت من بي بي سي من أجل المتعة اللامتناهية
تكامل بسيط بين Arduino Uno و ESP8266: 6 خطوات
تكامل بسيط بين Arduino Uno و ESP8266: كان هدفنا هو إنشاء مكتبة أوامر Esp8266 AT (استنادًا إلى مكتبة ITEAD) ، والتي من شأنها أن تعمل بشكل جيد على البرامج التسلسلية على معظم أجهزة ESP8266 ، بشرط أن يكون لديها برامج ثابتة تستجيب لأوامر AT (والتي عادة ما تكون الافتراضي للشركة المصنعة)
تكامل IoT-HUB-Live (ESP 8266 ، Arduino): 11 خطوة
تكامل IoT-HUB-Live (ESP 8266 ، Arduino): إذا كان لديك أجهزة إنترنت الأشياء وتحتاج إلى خدمة سحابية لتخزين قياساتك