Tartalomjegyzék:

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)

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

Videó: Egyszerű Kicker állapot és foglalási rendszer laza integrációval: 12 lépés (képekkel)
Videó: ЗАМОРОЗЬТЕ КОСТИ И ВАРИТЕ 6 ЧАСОВ! Рецепт который изменит вашу жизнь! 2024, December
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: