Mundarija:

Kicker -ning oddiy holati va bronlash tizimi: 12 qadam (rasmlar bilan)
Kicker -ning oddiy holati va bronlash tizimi: 12 qadam (rasmlar bilan)

Video: Kicker -ning oddiy holati va bronlash tizimi: 12 qadam (rasmlar bilan)

Video: Kicker -ning oddiy holati va bronlash tizimi: 12 qadam (rasmlar bilan)
Video: O'ZBEK AKTRISALARI VA XONANDALARINING PARDOZSIZ KO'RINISHI 2021 2024, Iyul
Anonim
Kicker -ning sodda holati va rezerv tizimi
Kicker -ning sodda holati va rezerv tizimi

Men ishlayotgan kompaniyada kicker stoli bor. Kompaniya ko'p qavatni egallaydi va ba'zi xodimlar uchun stolga etib borish uchun 3 daqiqa vaqt ketadi va … stol allaqachon band bo'lganini tushunish.

Shunday qilib, real vaqt rejimida ishlaydigan oddiy statusli translyatsiya va rezervasyon tizimini yaratish g'oyasi paydo bo'ldi.

Kompaniya Slack aloqa vositasidan foydalanadi, bu erda har bir xodimning hisobi bor. Bizda hatto kicker haqida munozaralar uchun #kicker kanali ham bor. Kanalni bron qilish va jadvalning hozirgi holati to'g'risida xabardor qilish uchun "kirish joyi" sifatida ishlatish mumkin.

Odatdagidek, bunday tizim bilan qanday kurashish kerakligi haqida ko'plab tushunchalar mavjud. Umuman olganda, ularning barchasida bitta asosiy qoida paydo bo'ldi: tizim bilan ishlashda ortiqcha harakatlarsiz oddiy ishlatish kerak.

Qurilma va xizmat kicker stoliga yopishtirilmagan va uni har qanday "umumiy manba" uchun (masalan, stol tennisi, konsol va hk.) Ishlatish mumkin.

Xo'sh, boshlaylik …

1 -qadam: Kontseptsiya va prototipni isbotlash

Kontseptsiya va prototipning isboti
Kontseptsiya va prototipning isboti
Kontseptsiya va prototipning isboti
Kontseptsiya va prototipning isboti
Kontseptsiya va prototipning isboti
Kontseptsiya va prototipning isboti

G'alati, quyidagi talablarga muvofiq stol usti yonida o'rnatiladigan qurilmani qurish edi:

  • Jadvalning hozirgi holati haqidagi ba'zi ko'rsatkichlar - agar siz uning yonida turgan bo'lsangiz, u bepul yoki zaxiralanganligini bilishingiz kerak va kimdir 3 daqiqadan so'ng o'ynaydi. Svetoforlar bu fikrga to'liq mos keladi:

    • yashil chiroq - o'ynash bepul,
    • sariq chiroq - himoyalangan,
    • qizil chiroq - ishg'ol qilingan.
  • tugma (lar) ni o'yindan oldin va keyin bosishingiz mumkin, shunda qolganlar jadvalning holati to'g'risida xabardor bo'lishadi. 1 ta almashtirish tugmachasining o'rniga ikkita ajratilgan tugmani ishlatishga qaror qildim:

    • qizil tugma - stolni egallash, o'yinni boshlash (oldindan yoki vaqtincha).
    • yashil tugma - bo'shatish jadvali.
  • "nima bo'layotgani" haqida batafsil ma'lumotga ega bo'lgan ba'zi displeylar - bronlash vaqti, takrorlangan jadval holati, o'yin vaqti tugashi va boshqalar.

Rezervasyon deganda men keyingi 3 daqiqaga band qilishni nazarda tutyapman. Tizim foydalanuvchi jadvalni aniq vaqtda (masalan, 02:00) band qilishi uchun mo'ljallangan emas. Bu rezervasyon kabi ishlamaydi, masalan. restoranlarda, lekin yaqinda.

LAN ulanmaganligi sababli WLAN -dan foydalanishning yagona varianti - bu eng yaxshi variant. Tizim miyasi Slack kanalidan buyruqlarni yuborish va qabul qilish uchun Slack API -dan foydalanishi kerak. Avval NodeMCU -dan foydalanishga harakat qildim. Men Slack -ga va undan xabarlarni qabul qila oldim, lekin HTTPS -ni ishlatganim va Slack -ning "xush kelibsiz xabari" hajmi (~ 300kB) tufayli NodeMCU aloqani uzdi va/yoki g'alati istisnoga ega bo'ldim, men Internet orqali qazishni hal qila olmadim..

Shunday qilib, men kuchliroq narsani ishlatishga qaror qildim: Raspberry Pi 3 (WiFi bilan Zero W hali chiqarilmagan edi). RPi -ga ega bo'lish orqali men dasturlash tilini C -dan Java -ga o'tkaza olardim, chunki bu men uchun qulayroq - shuning uchun bu afzallik edi. Bugun siz NodeMCU -dan kuchliroq va RPi -dan kuchliroq narsadan foydalanishingiz mumkin. Balki Raspberry Zero?

Dasturxonda dastlabki teletomaqamli simlar, ko'p eskizlar va prototiplar o'rnatilgandan so'ng, tizim ishlay olganday tuyuldi.

Bu fikrlarning barchasi va ishlaydigan PoC -ga ega bo'lganimdan so'ng, men yuqoridagi elementlarning turli xil konfiguratsiyalarini old panelda rejalashtirishni boshladim, shunda ular eng ma'lumotli va ulardan foydalanish uchun qulayroq bo'ladi. Siz boshqa takliflarning bir qismini tekshirishingiz mumkin, ehtimol ularning ba'zilari sizga mos keladi. Oxirgisi men tanlagan kishi edi.

2 -qadam: Materiallar va asboblar

Men ishlatgan materiallar:

  • Quti
  • Raspberry Pi, microSD karta, micro USB quvvat manbai
  • Yashil va qizil arja tugmalari
  • 16x2 LCD displey
  • LEDlar - Men RGB ishlatardim, lekin siz mos rangni ishlatishingiz mumkin
  • Erkak -Ayol va Ayol -Ayol uchun non taxtali o'tish kabellari
  • Micro USB interfeysi
  • Kichkina non paneli faqat ba'zi simlarni ulash uchun
  • Qisqa mikro USB kabeli, RPi -ni quvvatlantirish uchun qutining ichida o'tish moslamasi sifatida ishlaydi

Men ishlatgan vositalar:

  • O'tkir pichoq (masalan, gilam kesish uchun ishlatiladigan pichoq)
  • Aylanadigan asbob
  • Issiq yopishtiruvchi qurol
  • Lehimlash stantsiyasi
  • Pense, diagonal penseler/yon kesgichlar
  • Tornavida
  • Fayl
  • Men

Sizga kerak bo'lishi mumkin bo'lgan vositalar:

Yuqorida aytilganlarning hammasi, lekin "Men" o'rniga: "Siz" bo'lishi kerak:)

3 -qadam: old panel - LCD displey

Old panel - LCD displey
Old panel - LCD displey
Old panel - LCD displey
Old panel - LCD displey

LCD displey uchun teshik juda oddiy edi. Faqat LCD displeyimga mos keladigan to'rtburchak. Uni o'tkir pichoq bilan kesmoqchi bo'lganimdan so'ng, qutining plastmassasi juda qattiq ekanligini tushundim. Shunday qilib, men derazani kesish va qirralarini silliqlash uchun burg'ulash asbobidan foydalandim.

4 -qadam: Old panel - holat LEDlari

Old panel - holat LEDlari
Old panel - holat LEDlari
Old panel - holat LEDlari
Old panel - holat LEDlari

LED teshiklari ham oddiy. Men yog'och uchun katta matkap oldim, keyin qirralarini burg'ulash asbobi bilan silliqladim. Katta LEDlar juda qattiq o'rnatilgan. Men hech qanday rezistorni LEDlarga lehimlamadim - men uni yig'ish jarayoniga qoldirdim.

5 -qadam: Old panel - tugmalar

Old panel - tugmalar
Old panel - tugmalar
Old panel - tugmalar
Old panel - tugmalar
Old panel - tugmalar
Old panel - tugmalar
Old panel - tugmalar
Old panel - tugmalar

Bu ikkita katta tugmachaning eng katta muammosi, ularni to'g'ri oraliqda bir tekis joylashtirish edi. Men teshiklarni faqat burg'ulash asbobim yordamida kesib tashladim, chunki men diametrni bosqichma -bosqich oshirishim mumkin edi, shunda tugmalar mahkam o'rnashardi.

6 -qadam: quvvat ulagichi

Quvvat ulagichi
Quvvat ulagichi

Mikro USB quvvat uchun kichik teshik juda nozik ish edi. Men tuynuk iloji boricha mos bo'lishini xohlardim, shuning uchun men bu erda ko'p vaqt polishing uchun o'tkazardim. Lekin yakuniy natijadan qoniqdim.

Keyin men qutiga joylashtirilgan qisqa USB kabelini kesib tashladim. Bir tomondan u RPi -ga ulangan, boshqa tomondan esa barcha kabellar USB -pinlarga muvofiq mikro USB interfeysiga lehimlangan.

Keyin men kichkina tenglikni to'g'ridan-to'g'ri qutiga yopishtirdim (uni montaj bosqichidagi fotosuratda ko'rish mumkin).

7 -qadam: Hammasini bir joyga to'plash

Hamma narsani bir joyga to'plash
Hamma narsani bir joyga to'plash
Hamma narsani bir joyga to'plash
Hamma narsani bir joyga to'plash
Hamma narsani bir joyga to'plash
Hamma narsani bir joyga to'plash

Birinchidan, men LEDlarga ranglarini (kuchlanishiga) qarab 3,3V voltli mos rezistorlarni lehimladim. Men qizil uchun 100Ω, ikkita rezistor 82 va 100 sariq (yashil va qizil tugun) va yashil uchun 100Ω dan foydalanardim. LED kalkulyatori uchun siz onlayn rezistorlardan birini ishlatishingiz mumkin. Iltimos, siz erishmoqchi bo'lgan yorqinlik va aniq rang ohangiga qarab, o'zingiz bir tadqiqot o'tkazing.

Sariq LED oyoqlari bir -biriga lehimlangan, shuning uchun LEDni RPi -dagi bitta pin yordamida boshqarish mumkin.

Ushbu sxemaga muvofiq:

LED tugunlari ulangan:

  • Yashil LED - GPIO1, Rpi -da
  • Sariq LED (ikkala oyog'i) RPi -da GPIO2 ga
  • Qizil LED RPi -da GPIO0 ga

Men LCDni RPi pinidagi I2C pinlari yordamida uladim

  • LCD SDA RPi -da GPIO8 -ga
  • LCD SCL RPi -da GPIO9 -ga
  • LCD PWR 5 V dan RPi gacha
  • LCD GND - GND dan RNDga

LCD qo'shimcha himoya sifatida qutiga issiq yopishtirilgan.

Men 3.3V va GND ni kichik non paneliga uladim, shuning uchun ularni tugmalar uchun ishlatishim mumkin edi.

Yashil tugma 3.3V ga mini -taxtali va GPIO5 -ga RPi orqali ulangan.

Qizil tugma 3.3V ga mini non paneli va GPIO4 ga RPi orqali ulangan.

Shunday qilib, tugmani har bosganingizda, RPi pinida yuqori holat bo'ladi.

Mini bradboard juda yaxshi ishlaydi, shuning uchun men barcha simlarni tenglikka lehimlashni o'tkazib yubordim. Buning o'rniga men kichkina non taxtasini issiq elim bilan yopdim, shunda kabellar tushmaydi.

Men RPi qopqog'ini qutiga issiq yopishtirdim, shunda u ichkarida qimirlamaydi.

Men old panelni ichidagi barcha narsalar bilan burab qo'ydim.

Keyin svetoforlar va tugmalar yoniga oddiy teglarni chop etdim, kesib oldim va yopishtirdim.

8 -qadam: Slack konfiguratsiyasi

Slack konfiguratsiyasi
Slack konfiguratsiyasi
Slack konfiguratsiyasi
Slack konfiguratsiyasi

Slack.com saytida o'z jamoangizni yarating yoki sizda mavjud bo'lganidan foydalaning va siz hech bo'lmaganda administrator huquqlariga egasiz.

Slack -da, xizmatning Slack integratsiyasi uchun kanal yarating (yoki sizda mavjud kanaldan foydalanmoqchi bo'lsangiz, kanal yaratishni o'tkazib yuboring).

O'z jamoangizga yangi Webhooks integratsiyasini qo'shing. Kanalni tanlang va webhook URL manzilini nusxalash.

Jamoangizga botlarni integratsiyasini qo'shing. Botingiz uchun nom tanlang va bot API tokenidan nusxa oling.

Sizning shaxsiy integratsiyangizni boshqaradigan sahifangiz rasmdagi kabi bo'lishi kerak.

Siz botni kanalingizga a'zo sifatida taklif qilishingiz kerak. Siz buni kanal yaratish paytida qilishingiz mumkin.

Agar siz xizmatni keyinroq sozlashni xohlasangiz, Slack API -ni tekshiring.

9 -qadam: dasturiy ta'minotni joriy etish

Men ushbu qo'llanmani bajarib, Raspbian -ni RPi operatsion tizimi sifatida ishlatardim. Iltimos, meni kechiring, men tushuntirishni o'tkazib yubormayman, chunki u ko'p joylarda hujjatlashtirilgan va jarayon oddiy. Umid qilamanki, siz RPi -ni o'zingiz o'rnatishga qodir bo'lgan tajribali va tajribali odamsiz. Iltimos, Raspberry Pi -da WiFi -ga kirishni sozlashni unutmang;)

Prototiplash bo'limida aytib o'tilganidek, men butun tizimning miyasini amalga oshirish uchun Java -dan foydalandim. Kod GitHub -da mavjud -

Men foydalangan Java kutubxonalari:

  • pi4j - Java -dan Raspberry Pi -dan foydalanish
  • Springboot ilova platrormi sifatida
  • allbegray/slack-api Slack integratsiyasi sifatida

Konfiguratsiya faylini src/resources/config.properties da tahrirlashingiz kerak. Slack API -ni ishlatish uchun sozlashingiz kerak bo'lgan 3 ta yozuv mavjud:

  • channelName - kanal nomi Siz holatni o'zgartirish va buyruqlarni qabul qilmoqchisiz.
  • slackBotToken - yuqorida aytib o'tilgan kanalga xabar yuborish uchun ishlatiladigan Slack jamoaviy integratsiyasida tuzilgan bot belgisi. E'tibor bering, siz Slack Bot -ni kanalga qo'shishingiz kerak.
  • webhookUrl - URLni Slack Team -ning maxsus integratsiyasidan olishingiz mumkin.

Loyiha Mavenized, shuning uchun uni yozing (sizga kamida Java 8 va Maven o'rnatilgan bo'lishi kerak):

mvn toza to'plami

Va maqsadli katalogda siz Springbooted JAR faylini topishingiz mumkin. Xizmatni boshlash uchun:

sudo java -jar kicker-rezervasyon-xizmati-0.3.0.jar

Men bu satrni.sh skriptiga o'rnatdim va uni avtomatik ishga tushirish sifatida qo'shdim. Quvvat yoqilganda, xizmat avtomatik ravishda ishga tushadi.

LCD displey uchun bitta maxsus tushuntirish kerak.

Men LCD -ni I2C orqali RPi -dan boshqarish uchun turli yondashuvlar/kutubxonalarni sinab ko'rdim, lekin men muvaffaqiyatsiz bo'ldim. Ba'zilar uchun LCD to'g'ri ishlamasa, ba'zilarida axlat paydo bo'ldi.

Ammo bitta narsa qutidan tashqarida juda yaxshi ishladi. Bu men LCD displeyni boshqarish uchun foydalanishingiz mumkin bo'lgan yordamchi buyruq qatori vositasi. Shuning uchun men ushbu vositani to'g'ridan -to'g'ri Java -dan ishlatishga qaror qildim. Har safar LCD displeyda biror narsani ko'rsatishni xohlaganimda, oddiy Linux jarayoni (lcdi2c) chaqiriladi (tayyor parametrlar bilan).

Siz vositani yuklab olishingiz va uni JAR xizmatining yoniga qo'yishingiz kerak

Ushbu vositadan foydalanish - bu qandaydir xiralashgan va ahmoqona echim, lekin men muhandislikning birinchi qoidasiga amal qilaman:

Agar u ahmoq bo'lsa ham, lekin u ishlaydi … bu ahmoqlik emas

10 -qadam: Foydalanish bo'yicha ko'rsatma

Foydalanish bo'yicha ko'rsatma
Foydalanish bo'yicha ko'rsatma

Siz "status" (yoki qisqa vaqt ichida "st") buyrug'ini yozib, Slack kanalidagi kicker stolining joriy holatini tekshirishingiz yoki to'g'ridan -to'g'ri qurilmadagi svetoforlarni tekshirishingiz mumkin.

Agar siz shunchaki o'ynashni xohlasangiz - qizil tugmani bosing. Xabar Slack kanaliga kicker jadvali band bo'lgan ma'lumot yuboriladi. O'yinni tugatgandan so'ng - yashil tugmani bosing. Xabar Slack kanaliga yuboriladi, unda stolni o'ynash bepul.

Svetoforlar ham o'zgaradi va LCD displey ba'zi batafsil ma'lumotlarni ko'rsatadi.

Agar siz o'yinni tugatgandan so'ng stolni qo'yib yuborishni unutgan bo'lsangiz, 20 daqiqalik tanaffus bo'ladi. Agar siz hali ham o'ynayotgan bo'lsangiz va ko'proq vaqt kerak bo'lsa, qizil tugmani yana bosing va o'yin 5 daqiqaga uzaytiriladi (faqat taym tugashiga 5 daqiqadan kam vaqt qolganida amal qiladi). O'ynash vaqti tugashi LCD displeyda ko'rsatiladi.

Kicker stolini zaxiralash uchun Slack kanaliga "zaxira" (yoki shunchaki: "res") xabarini yozing.

Sariq svetofor yonadi va stol yaqinida boshqalarga zaxiralanganligi haqida xabar beradi va tez orada kimdir o'ynashga keladi.

Rezervasyon vaqti 3 minut qilib belgilangan. Shundan so'ng, kicker jadvali o'z holatini erkin o'ynashga o'zgartiradi.

Agar kerak bo'lsa, Slack kanaliga "bekor qilish" yozib, rezervasyonni bekor qilishingiz mumkin.

Tizim boshqa kichik xususiyatlarga ham ega, masalan:

  • Rezervasyondan so'ng tugmalar 5 soniya davomida muzlatiladi. Bu vaziyatlarning oldini olish uchun, bir vaqtning o'zida kimdir zaxiraga oladi va milisekunddan keyin kimdir qizil tugmani bosadi, u stolni o'tirgan odam deb o'ylaydi, lekin bilmasdan kimdir stolni atigi bir soniya oldin saqlab qo'ygan.
  • Har qanday tugmani bosish ikkalasini ham yarim soniya muzlatib qo'yadi. Bu aql bovar qilmaydigan tugmachalarni bosishining oldini olish uchun, shuning uchun Slack kanaliga u qadar spam yuborilmaydi.
  • Slack -ning bepul versiyasi butun jamoa tomonidan 10000 ta xabarni saqlashga imkon beradi. Xabarlarning bir qismini saqlab qolish uchun, xizmat bron qilish/status tizimiga tegishli eski xabarlarni o'chirib tashlaydi) va ulardan faqat oxirgi 6tasini saqlaydi. Nega 6? Chunki ko'pincha ikkita holat ssenariysi mavjud: "Zaxiralangan-band bo'lmagan" va "Ishg'ol qilinmagan". Shunday qilib, tizim kamida 2 ta to'liq band bo'lmagan sessiyani saqlashi mumkin. Barcha tizim xabarlarini tozalash uchun "tozalash" (yoki "tozalash") buyrug'ini kiriting.

11 -qadam: ozod qilish

Chiqarish
Chiqarish
Chiqarish
Chiqarish

Hozircha (bu ko'rsatma nashr etiladigan payt), tizim 2,5+ oy davomida ishlaydi va 30 dan ortiq kishi foydalanadi. Kicker jadvali holatining yangilanishi tufayli biz har doim bo'sh yoki bo'sh vaqtni bilamiz, shuning uchun endi oldinga va orqaga vaqtni boy bermaymiz. Ulanish va xizmat juda barqaror, shuning uchun biz unga ishonishimiz mumkin.

Hozircha hammasi yaxshi…

12 -qadam: tez -tez beriladigan savollar

Nima uchun bron qilish vaqti 3 minutga o'rnatilgan?

Rezervasyonning maksimal vaqti 3 minut, uni kodda xohlaganingizcha qabul qiling. Umuman olganda, kamdan-kam hollarda bo'ladi, to'liq 3 daqiqa o'tadi va bronlash vaqti tugaydi. Ko'p hollarda, kimdir oxir -oqibat kelib, stolni egallaydi.

Nega o'yinning taymut vaqti 20 daqiqaga o'rnatiladi?

O'yinchilarga qarab, o'rtacha o'yin vaqti ~ 10 minut. Agar sizga uzoqroq o'ynash kerak bo'lsa, 5 daqiqadan kam vaqt qolganida qizil tugmani yana bosing va tanaffus 5 daqiqaga qaytariladi. Bu tanaffus kimdir jadvalni qo'yishni unutgan taqdirda o'rnatiladi.

Rezervatsiyani tasdiqlash uchun nima uchun qurilmada PIN -kod yo'q; login va parol yo'qmi?

Asosiy g'oya oddiy ahmoqlikni saqlash edi. Aks holda, agar o'yinni bron qilish, boshlash va tugatish ko'p kuch talab qilsa, hech kim undan foydalanishni xohlamaydi.

Nima uchun qurilma juda yomon sanoat ko'rinishiga ega?

Chunki menda lazerli kesuvchi, CNC, 3D printer, chiroyli rangli yorliq ishlab chiqaruvchi va boshqalar yo'q edi. Siz uni takomillashtirish va uni yanada chiroyli qilishdan mamnunsiz.

Nega faqat bitta ilovani ishga tushirib, arzon planshetni xuddi shu funksiyaga ega devorga yopishtirib olmaysiz?

Ilovalar, hamma joyda ilovalar. Odamlar narsalar bilan jismonan muloqot qilishni yaxshi ko'radilar va shunchaki tekis ekranga tegmaydilar.

Tavsiya: