Egyszerű Kicker állapot és foglalási rendszer laza integrációval: 12 lépés (képekkel)
Egyszerű Kicker állapot és foglalási rendszer laza integrációval: 12 lépés (képekkel)
Anonim
Egyszerű Kicker állapot és foglalási rendszer laza integrációval
Egyszerű Kicker állapot és foglalási rendszer laza integrációval

Egy cégnél, ahol dolgozom, van egy rúgóasztal. A vállalat sok emeletet foglal el, és az alkalmazottak egy részének akár 3 percbe is telhet, amíg az asztalhoz ér, és… rájön, hogy az asztal már foglalt.

Ezért felmerült egy ötlet egyfajta egyszerű státusz -közvetítési és foglalási rendszer kiépítésére, amely valós időben működik.

A vállalat a Slack kommunikációs eszközt használja, ahol minden alkalmazott rendelkezik fiókkal. Van még egy #kicker csatornánk is, csak a… kickerről szóló vitákhoz. A csatorna egyfajta "belépési pontként" használható a foglaláshoz, és tájékoztatást kaphat az aktuális asztal állapotáról.

Mint általában, sok koncepció létezik az ilyen rendszer kezelésére. Általában azonban mindegyikben megjelent egy alapvető szabály: egyszerűnek kell lennie a használathoz, anélkül, hogy túlzott lépéseket kellene végrehajtani a rendszerrel való foglalkozás során.

Az eszköz és a szolgáltatás nincs ragasztva a kicker asztalhoz, és bármilyen "közös erőforráshoz" használható (például ping-pong asztal, konzol, stb.), Amelyhez valamilyen státuszközvetítő és foglalási megoldás szükséges.

Szóval, kezdjük…

1. lépés: A koncepció és a prototípus -bizonyítás

A koncepció és a prototípus -bizonyítás
A koncepció és a prototípus -bizonyítás
A koncepció és a prototípus -bizonyítás
A koncepció és a prototípus -bizonyítás
A koncepció és a prototípus -bizonyítás
A koncepció és a prototípus -bizonyítás

Nagyjából az volt az ötlet, hogy olyan eszközt építsünk, amely a rúgóasztal mellé kerül, a következő követelményeknek megfelelően:

  • néhány mutató az asztal jelenlegi állapotáról - ha mellette áll, tudnia kell, hogy ingyenes vagy fenntartott, és valaki 3 perc múlva jön játszani. A közlekedési lámpák tökéletesen illeszkednek az elképzeléshez:

    • zöld fény - szabadon játszható,
    • sárga fény - fenntartva,
    • piros lámpa - elfoglalt.
  • gomb (ok) A játék előtt és után kattinthat, hogy mindenki más értesüljön az aktuális asztal állapotáról. 1 váltógomb helyett úgy döntöttem, hogy két külön gombot használok:

    • piros gomb - foglalja el az asztalt, indítson játékot (foglalás után vagy esetenként).
    • zöld gomb - kioldási táblázat.
  • néhány kijelző részletesebb információkkal a "történésekről" - foglalási időtúllépés, ismételt asztalállapot, lejátszási időkorlát stb.

Foglalás alatt csak a következő 3 percre szóló foglalást értem. A rendszert nem úgy tervezték, hogy a felhasználó pontosan le tudja foglalni az asztalt (pl. 02:00 PM). Nem úgy működik, mint a foglalás pl. éttermekben, de csak néhány percre.

A LAN -kapcsolat hiánya miatt az egyetlen lehetőség a WLAN használata - mindenesetre ez a legjobb megoldás. A rendszer agyának Slack API -t kell használnia a parancsok küldésére és fogadására a Slack csatornáról. Először a NodeMCU -t próbáltam használni. Képes voltam fogadni és fogadni üzeneteket a Slack -ba és onnan, de a HTTPS használat és a Slack „üdvözlő üzenet” mérete (~ 300 KB) miatt a NodeMCU megszakította a kapcsolatot, és/vagy valami furcsa kivételt kapott, amelyet nem tudtam megoldani az interneten keresztül történő ásás.

Ezért úgy döntöttem, hogy valami erősebbet használok: Raspberry Pi 3 (a Zero W WiFi -vel ekkor még nem jelent meg). Az RPi birtokában a megvalósítási nyelvet C -ről Java -ra válthatnám, mivel ez kényelmesebb számomra - tehát ez előny volt. Ma használhat valami erősebbet, mint a NodeMCU, és kevésbé erőteljeset, mint az RPi. A Raspberry Zero esetleg?

Miután az első prototípust kenyérsütő táblára építette, őrült kábelezéssel, sok vázlattal és prototípus -készítéssel, a rendszer úgy tűnt, hogy működik.

Mindezek az ötletek és a működő PoC birtokában elkezdtem tervezni a fenti elemek különböző elhelyezési konfigurációit az előlapon, hogy azok a leginkább informatívak és legkényelmesebben használhatók legyenek. Ellenőrizheti a többi javaslatot, talán néhány jobban megfelel Önnek. Az utolsót én választottam.

2. lépés: Anyagok és eszközök

Az általam használt anyagok:

  • Doboz
  • Raspberry Pi, microSD kártya, micro USB tápegység
  • Zöld és piros arcade gombok
  • 16x2 LCD kijelző
  • LED -ek - RGB -t használtam, de használhatja a megfelelő színt
  • Férfi - Nő és Nő - Nő - kenyérlap deszkázó kábelek
  • Micro USB interfész
  • Mini kenyértábla csak néhány vezeték csatlakoztatásához
  • Rövid mikro USB kábel, amely jumperként működik a dobozon belül az RPi táplálásához

Eszközök, amelyeket használtam:

  • Éles kés (pl. Használati kés szőnyegvágáshoz)
  • Forgó szerszám
  • Ragasztópisztoly
  • Forrasztóállomás
  • Fogó, átlós fogó/oldalvágó
  • Csavarhúzó
  • Fájl
  • Nekem

Valószínűleg szükséges eszközök:

A fentiek mindegyike, de "én" helyett a következőnek kell lennie: "te":)

3. lépés: Előlap - LCD képernyő

Előlap - LCD képernyő
Előlap - LCD képernyő
Előlap - LCD képernyő
Előlap - LCD képernyő

Az LCD képernyő lyuka egyszerű volt. Csak egy téglalap, amely illeszkedik az LCD képernyőmhöz. Miután megpróbáltam éles késsel vágni, rájöttem, hogy a doboz műanyaga meglehetősen kemény. Tehát fúrószerszámmal vágtam az ablakot és csiszoltam a széleket.

4. lépés: Előlap - Állapotjelző LED -ek

Előlap - Állapotjelző LED -ek
Előlap - Állapotjelző LED -ek
Előlap - Állapotjelző LED -ek
Előlap - Állapotjelző LED -ek

A LED -lyukak szintén egyszerűek. Most vettem egy nagy fúrót fához, majd a széleit fúrószerszámmal csiszoltam. A nagy LED -ek tökéletesen szorosan illeszkedtek. Még nem forrasztottam ellenállást a LED -ekhez - hagytam az összeszerelési folyamatra.

5. lépés: Előlap - gombok

Előlap - Gombok
Előlap - Gombok
Előlap - Gombok
Előlap - Gombok
Előlap - Gombok
Előlap - Gombok
Előlap - Gombok
Előlap - Gombok

Ennek a 2 nagy gombnak a legnagyobb problémája az volt, hogy egyenletesen helyezze el őket a megfelelő távolsággal. Csak a fúrószerszámmal vágtam ki a lyukakat, mivel lépésről lépésre növelhetném az átmérőt, hogy a gombok szorosan illeszkedjenek.

6. lépés: Tápcsatlakozó

Konnektor
Konnektor

Egy kis lyuk a mikro -USB tápellátáshoz nagyon kényes feladat volt. Azt akartam, hogy a lyuk a lehető legjobban illeszkedjen, ezért sok időt töltöttem itt a polírozással. De elégedett voltam a végeredménnyel.

Ezután elvágtam egy rövid mini USB -kábelt, amelyet a dobozba helyeztek. Az egyik oldal az RPi -hez van csatlakoztatva, a másik oldalon az összes kábelt forrasztották a micro USB interfészhez az USB pinoutok szerint.

Ezután a kisméretű NYÁK-t közvetlenül a dobozhoz ragasztottam (ez az összeállítási lépésen látható fényképen látható).

7. lépés: Mindent össze kell rakni

Mindent összerakni
Mindent összerakni
Mindent összerakni
Mindent összerakni
Mindent összerakni
Mindent összerakni

Először megfelelő ellenállásokat forrasztottam a LED -ekhez színük (feszültségük) szerint 3,3 V voltra. 100Ω -ot használtam piroshoz, két 82 és 100 ellenállást sárgához (zöld és piros csomópont), 100Ω -ot zöldhez. Használhatja az online ellenállás egyikét a LED -számológéphez. De kérjük, végezzen némi kutatást a kívánt fényerő és pontos színárnyalat szerint.

A sárga LED lábait összeforrasztották, így maga a LED csak egy tűvel vezérelhető RPi -n.

A pinout diagram szerint:

LED csomópontokat csatlakoztattak:

  • Zöld LED - GPIO1 az Rpi -n
  • Sárga LED (mindkét lábon) GPIO2 -re RPi -n
  • Piros LED GPIO0 -ra RPi -n

Az LCD -t I2C csapok segítségével csatlakoztattam RPi csapokra

  • LCD SDA - GPIO8 RPi -n
  • LCD SCL - GPIO9 RPi -n
  • LCD PWR 5V -ra RPi -n
  • LCD GND -GND RPi -n

Az LCD-t további védelemként melegen ragasztották a dobozhoz.

A 3.3V -ot és a GND -t a kis kenyérsütőhöz kötöttem, hogy gombokhoz használhassam őket.

A zöld gombot a 3.3V -os mini kenyértáblán keresztül és a GPIO5 -hez csatlakoztatta RPi -n.

A piros gombot mini kenyértáblán keresztül a 3.3V -hoz és RPi GPIO4 -hez kötötték.

Tehát amikor megnyomja a gombot, az RPi csap magas állapotot mutat.

A mini bradboard tökéletesen működik, így kihagytam az összes vezeték forrasztását a NYÁK -ba. Ehelyett csak letakartam a mini kenyértáblát forró ragasztóval, hogy a kábelek ne essenek le.

Az RPi borítóját is melegen ragasztottam a dobozhoz, hogy ne lógjon belül.

Megcsavartam az előlapot, benne minden cuccal.

Ezután egyszerű címkéket nyomtam, vágtam és ragasztottam a közlekedési lámpák és gombok mellé.

8. lépés: Laza konfiguráció

Laza konfiguráció
Laza konfiguráció
Laza konfiguráció
Laza konfiguráció

Hozza létre csapatát a Slack.com webhelyen, vagy használja azt, amelyik rendelkezik, és rendelkezik legalább rendszergazdai jogokkal.

A Slack szolgáltatásban hozzon létre egy csatornát a szolgáltatás Slack integrációjához (vagy hagyja ki a csatorna létrehozását, ha már meglévőt szeretne használni).

Adja hozzá a bejövő webhook -integrációt a csapatához. Válassza ki a csatornát, és másolja a webhook URL -címét.

Adja hozzá a Bots integrációt a csapatához. Válasszon nevet a botjának, és másolja a bot API tokent.

Az egyéni integrációkat kezelő oldalnak úgy kell kinéznie, mint a képen.

Meg kell hívnia a botot csatornája tagjaként. Ezt megteheted már a csatorna létrehozása során.

Ha később szeretné személyre szabni a szolgáltatást, ellenőrizze a Slack API -t.

9. lépés: Szoftver implementálása

Ezt az oktatóanyagot követve a Raspbian operációs rendszert használtam RPi -mhez. Kérlek, bocsáss meg, kihagyom a magyarázatot, mivel sok helyen már dokumentált, és a folyamat egyszerű. Remélem, elég ügyes és tapasztalt ahhoz, hogy egyedül tudjon RPi -t beállítani. Ne felejtse el beállítani a WiFi hozzáférést a Raspberry Pi készüléken;)

Amint azt a prototípuskészítés részben említettük, a Java -t használtam az egész rendszer agyának megvalósításához. A kód elérhető a GitHubon -

Az általam használt Java könyvtárak:

  • pi4j - a Raspberry Pi használatához a Java -ból
  • A Springboot, mint alkalmazási platform
  • allbegray/slack-api mint Slack integráció

Szerkesztenie kell a konfigurációs fájlt az src/resources/config.properties mappában. Három bejegyzést kell konfigurálnia a Slack API használatához:

  • channelName - a csatorna neve Az állapotváltozásokat közzé szeretné tenni, és parancsokat kapni.
  • slackBotToken - az Ön Slack csapatintegrációiban konfigurált bot jelzője, amelyet üzenetek küldésére használnak a fent említett csatornára. Felhívjuk figyelmét, hogy hozzá kell adnia a Slack Bot -ot a csatorna tagjához.
  • webhookUrl - az URL, amelyet a Slack Team egyéni integrációiból kaphat.

A projekt Mavenized, ezért a felépítéséhez csak írja be (legalább Java 8 és Maven telepítve kell):

mvn tiszta csomag

És a célfáradtságban megtalálható a Springbooted JAR fájl. Egy szolgáltatás elindításához:

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

Ezt a sort.sh szkriptre állítottam, és hozzáadtam automatikus indításként. Tehát amikor a készülék be van kapcsolva, a szolgáltatás automatikusan elindul.

Egy speciális magyarázat szükséges az LCD -hez.

Próbáltam különböző megközelítéseket/könyvtárakat, hogy RPi -ről vezéreljem az LCD -t az I2C felett, de nem sikerült. Egyes LCD -k nem működtek megfelelően, egyesek szemetet mutattak.

De egy dolog nagyon jól működött, csak a dobozból. Ez a segédprogram parancssori eszköze, amelyet találtam Az LCD vezérléséhez használható. Ezért úgy döntöttem, hogy ezt az eszközt közvetlenül a Java -ról használom. Így működik, hogy egy normál Linux folyamatot (lcdi2c) hívnak meg (előkészített paraméterekkel) minden alkalommal, amikor valamit meg akarok jeleníteni az LCD képernyőn.

Töltse le az eszközt, és helyezze a JAR szolgáltatás mellé

Ennek az eszköznek a használata egyfajta hack és buta megoldás. De követem az 1. mérnöki szabályt:

Ha hülyeség, de működik… nem hülyeség

10. lépés: Használati utasítás

Használati utasítás
Használati utasítás

A rúgótábla aktuális állapotát a létrehozott Slack csatornán ellenőrizheti a "status" (vagy rövidesen "st") parancs beírásával, vagy közvetlenül ellenőrizheti az eszköz közlekedési lámpáit.

Ha csak játszani szeretne - nyomja meg a piros gombot. Az üzenet a Slack csatornára kerül elküldésre azzal az információval, hogy a kicker asztal foglalt. Ha befejezte a játékot - nyomja meg a zöld gombot. Az üzenetet elküldjük a Slack csatornára azzal az információval, hogy a kicker asztal szabadon játszható.

A közlekedési lámpák is megváltoznak, és az LCD képernyőn néhány részletes információ látható.

Csak abban az esetben, ha elfelejti felszabadítani az asztalt a játék befejezése után, az időkorlát 20 percre van állítva. Ha még mindig játszik, és több időre van szüksége, nyomja meg újra a piros gombot, és a mérkőzés 5 perccel meghosszabbodik (csak akkor alkalmazza, ha kevesebb mint 5 perc van hátra az időkérés előtt). A lejátszási időtúllépés megjelenik az LCD képernyőn.

A kicker asztal lefoglalásához írjon egy üzenetet „reserve” (vagy csak: „res”) a Slack csatornára.

A sárga jelzőlámpa bekapcsol, és tájékoztatja a rúgóasztal közelében lévőket, hogy le van foglalva, és hamarosan valaki játszani fog.

A foglalási időtúllépés 3 percre van állítva. Ezt követően a kicker asztal szabad állapotba kapcsolja a játékot.

Ha szüksége van rá, akkor törölheti a foglalást a Slack csatornán a „Mégse” felirattal.

A rendszernek van néhány egyéb kisebb funkciója is, mint pl.

  • A foglalás után a gombok 5 másodpercre lefagynak. Ez azért van, hogy megakadályozzuk a helyzeteket, hogy ugyanabban az időben valaki tartalék és egy miliszekundum múlva valaki megnyomja a piros gombot, azt gondolva, hogy ő/ő foglalja el az asztalt, de nem tudja, hogy valaki csak egy ezredmásodperccel lefoglalta az asztalt.
  • Bármelyik gomb megnyomása fél másodpercre lefagyasztja mindkettőt. Ez azért van, hogy megakadályozzuk az őrült gombnyomást, így a Slack csatorna nem lesz ennyire spam.
  • A Slack ingyenes verziója lehetővé teszi, hogy 10000 üzenetet tároljon az egész csapat. Az üzenetek egy részének megőrzése érdekében a szolgáltatás törli a foglalási/állapotrendszerhez kapcsolódó régi üzeneteket), és csak az utolsó 6 -ot tartja meg. Miért 6? Mivel leggyakrabban 2 állapotforgatókönyv létezik: "Foglalt-foglalt-szabad" és "Foglalt-szabad". Tehát a rendszer legalább 2, teljesen elfoglalt munkamenetet képes tárolni. Az összes rendszerüzenet törléséhez írja be a "clean" (vagy "clear") parancsot.

11. lépés: Elengedés

Felszabadító
Felszabadító
Felszabadító
Felszabadító

Eddig (ennek az utasításnak a közzétételének pillanatában) a rendszer 2,5+ hónapig működik, és több mint 30 ember használja. A rúgótábla állapotfrissítése miatt mindig tudjuk, hogy mikor van szabad vagy foglalt, így nem veszítjük el az időt oda -vissza. A kapcsolat és a szolgáltatás nagyon stabil, így bízhatunk benne.

Eddig jó…

12. lépés: GYIK

Miért van beállítva a foglalási időtúllépés 3 percre?

3 perc a maximális foglalási idő, fogadja el úgy, ahogy szeretné a kódban. Általában ritkán fordul elő, hogy teljes 3 perc telik el, és a foglalás időtúllépésre kerül. A legtöbb esetben valaki végül eljön és lefoglalja az asztalt.

Miért van beállítva a lejátszási időtúllépés 20 perc?

A játékosoktól függően az átlagos játékidő ~ 10 perc. Ha hosszabb ideig kell játszania, nyomja meg újra a piros gombot, amikor kevesebb, mint 5 perc van hátra, és az időtúllépés visszaáll 5 percre. Ez az időtúllépés arra az esetre van beállítva, ha valaki elfelejti kiadni az asztalt.

Miért nincs a készüléken PIN -kód a foglalás megerősítéséhez; nincs bejelentkezés és jelszó?

A fő ötlet az volt, hogy egyszerű-buta maradni. Ellenkező esetben, ha a foglalás, a játék indítása és befejezése túl sok erőfeszítést igényel, akkor senki sem akarja használni.

Miért néz ki a készülék ennyire ipari-csúnyának?

Mivel nem volt lézervágóm, CNC -m, 3D -s nyomtatóm, díszes színes feliratozógépem stb.

Miért nem valósít meg néhány alkalmazást, és nem ragad egy olcsó táblagépet a falhoz, ugyanazzal a funkcióval?

Alkalmazások, alkalmazások mindenhol. Az emberek szeretnek fizikailag kapcsolatba lépni a dolgokkal, és nem csak a lapos képernyőkre koppintani.

Ajánlott: