Përmbajtje:

Sistemi i thjeshtë i statusit dhe rezervimit të goditësit me integrim të ngadaltë: 12 hapa (me fotografi)
Sistemi i thjeshtë i statusit dhe rezervimit të goditësit me integrim të ngadaltë: 12 hapa (me fotografi)

Video: Sistemi i thjeshtë i statusit dhe rezervimit të goditësit me integrim të ngadaltë: 12 hapa (me fotografi)

Video: Sistemi i thjeshtë i statusit dhe rezervimit të goditësit me integrim të ngadaltë: 12 hapa (me fotografi)
Video: Recycled Prolonged Fieldcare Podcast 19: Infection, SIRS, and Sepsis 2024, Korrik
Anonim
Sistemi i thjeshtë i statusit dhe rezervimit të goditësit me integrim të ngadaltë
Sistemi i thjeshtë i statusit dhe rezervimit të goditësit me integrim të ngadaltë

Në një kompani ku unë punoj ka një tavolinë goditjeje. Kompania zë shumë kate dhe për disa nga punonjësit duhen deri në 3 minuta për të arritur në tryezë dhe … për të kuptuar që tryeza është tashmë e zënë.

Prandaj lindi një ide për të ndërtuar një lloj sistemi të thjeshtë të transmetimit dhe rezervimit të sistemit që funksionon në kohë reale.

Kompania përdor mjetin e komunikimit Slack ku çdo punonjës ka një llogari. Ne kemi edhe një kanal #kicker vetëm për diskutime rreth … goditësit. Kanali mund të përdoret si një lloj "pike hyrëse" për rezervime dhe për t'u informuar për statusin e tabelës aktuale.

Si zakonisht, ka shumë koncepte se si të merren me një sistem të tillë. Por në përgjithësi, një rregull themelor u shfaq në të gjithë ata: duhet të jetë i thjeshtë për t'u përdorur pa ndonjë hap të tepërt për t'u kryer kur merret me sistemin.

Pajisja dhe shërbimi nuk janë ngjitur në tryezën e goditjes dhe mund të përdoren për çdo "burim të përbashkët" (si ping-pong tryezë, tastierë, etj …) i cili ka nevojë për një lloj zgjidhjeje të rezervimit të statusit që transmeton amd.

Pra, le të fillojmë…

Hapi 1: Vërtetimi i Konceptit dhe Prototipizimi

Vërtetim i Konceptit dhe Prototipimit
Vërtetim i Konceptit dhe Prototipimit
Vërtetim i Konceptit dhe Prototipimit
Vërtetim i Konceptit dhe Prototipimit
Vërtetim i Konceptit dhe Prototipimit
Vërtetim i Konceptit dhe Prototipimit

Raughly ideja ishte të ndërtohej një pajisje e cila do të vendoset pranë tryezës së goditjes duke ndjekur këto kërkesa:

  • disa tregues në lidhje me statusin aktual të tryezës - nëse jeni duke qëndruar pranë tij, duhet të jeni në gjendje të dini se është falas ose i rezervuar dhe dikush do të vijë të luajë në 3 minuta. Dritat e trafikut përshtaten në mënyrë të përkryer me idenë:

    • drita jeshile - falas për të luajtur,
    • drita e verdhë - e rezervuar,
    • drita e kuqe - e zënë.
  • butona (t) Ju mund të klikoni para dhe pas lojës në mënyrë që të gjithë të tjerët të informohen për statusin e tabelës aktuale. Në vend të 1 butoni të ndërrimit vendosa të përdor 2 butona të ndarë:

    • butoni i kuq - zini tryezën, filloni një lojë (pas rezervimit ose ad hoc).
    • butoni jeshil - tabela e lëshimit.
  • disa ekrane me informacione më të hollësishme në lidhje me "çfarë po ndodh" - afati i rezervimit, statusi i përsëritur i tryezës, koha e lojës, etj …

Me rezervim nënkuptoj vetëm rezervimin për 3 minutat e ardhshme. Sistemi nuk është i dizajnuar në mënyrë që përdoruesi të rezervojë tabelën në kohën e saktë (p.sh. 02:00 pasdite). Nuk funksionon si rezervimi p.sh. në restorante, por vetëm për minuta paraprake.

Për shkak të mungesës së lidhjes LAN, opsioni i vetëm është përdorimi i WLAN - gjithsesi është opsioni më i mirë. Truri i sistemit duhet të përdorë Slack API për të dërguar dhe marrë komanda nga kanali Slack. Së pari u përpoqa të përdor NodeMCU. Unë kam qenë në gjendje të marr dhe marr mesazhe nga dhe nga Slack, por për shkak të përdorimit të HTTPS dhe gjithashtu madhësisë së "mesazhit të mirëseardhjes" të Slack (~ 300kB), NodeMCU humbi lidhjen dhe/ose mori një përjashtim të çuditshëm të cilin nuk mund ta zgjidhja duke gërmuar përmes Internetit Me

Kështu që vendosa të përdor diçka më të fuqishme: Raspberry Pi 3 (Zero W me WiFi nuk ishte lëshuar ende në atë kohë). Duke pasur RPi, unë mund të kaloja gjuhën e zbatimit nga C në Java pasi është më i përshtatshëm për mua - kështu që ky ishte një avantazh. Sot Ju mund të përdorni diçka më të fuqishme se NodeMCU dhe më pak të fuqishme se RPi. Mjedër Zero ndoshta?

Pas ndërtimit të prototipit të parë në një tabelë me disa instalime elektrike të çmendura, shumë skicime dhe prototipime, sistemi dukej se mund të funksiononte.

Duke pasur të gjitha këto ide dhe duke punuar me PoC, fillova të planifikoj konfigurime të ndryshme të vendosjes së artikujve të mësipërm në një panel të përparmë, kështu që ato do të jenë më informative dhe më të përshtatshme për t'u përdorur. Ju mund të kontrolloni disa nga propozimet e tjera, mbase disa ju përshtaten më shumë për Ju. E fundit ishte e zgjedhur nga unë.

Hapi 2: Materialet dhe Mjetet

Materialet që kam përdorur:

  • Kuti
  • Raspberry Pi, kartë microSD, furnizim me energji mikro USB
  • Butonat e gjelbër dhe të kuq të arkadës
  • Ekran LCD 16x2
  • LED - Kam përdorur RGB por mund të përdorni ngjyrën e duhur
  • Mashkull për Femër dhe Femër për Femër kabllo kërcimi për breadboard
  • Ndërfaqe mikro USB
  • Mini bordi i bukës vetëm për të lidhur disa tela
  • Kabllo e shkurtër mikro USB që punon si një kërcyes brenda kutisë për të fuqizuar RPi

Mjetet që kam përdorur:

  • Thikë e mprehtë (p.sh. thikë e dobishme për prerjen e qilimit)
  • Mjet rrotullues
  • Armë me zam të nxehtë
  • Stacioni i saldimit
  • Pincë, pincë diagonale/prerës anësorë
  • Kaçavidë
  • Skedar
  • Une

Mjetet që ndoshta ju duhen:

Të gjitha sa më sipër, por në vend të "Unë" duhet të jetë: "Ti":)

Hapi 3: Paneli i përparmë - Ekran LCD

Paneli i përparmë - Ekran LCD
Paneli i përparmë - Ekran LCD
Paneli i përparmë - Ekran LCD
Paneli i përparmë - Ekran LCD

Vrima për ekranin LCD ishte e drejtpërdrejtë. Vetëm një drejtkëndësh që i përshtatet ekranit tim LCD. Pasi u përpoqa ta pres me një thikë të mprehtë, kuptova se plastika e kutisë është mjaft e fortë. Kështu që unë përdor mjet shpimi për të prerë dritaren dhe për të lustruar skajet.

Hapi 4: Paneli i përparmë - LED të statusit

Paneli i përparmë - LED i statusit
Paneli i përparmë - LED i statusit
Paneli i përparmë - LED i statusit
Paneli i përparmë - LED i statusit

Vrimat LED janë gjithashtu të drejtpërdrejta. Unë thjesht mora një stërvitje të madhe për dru dhe pastaj lëmova skajet me mjet shpimi. LED -të e mëdhenj janë përshtatur fort. Unë nuk i bashkova akoma asnjë rezistencë tek LED -të - e lashë për procesin e montimit.

Hapi 5: Paneli i përparmë - Butonat

Paneli i përparmë - Butonat
Paneli i përparmë - Butonat
Paneli i përparmë - Butonat
Paneli i përparmë - Butonat
Paneli i përparmë - Butonat
Paneli i përparmë - Butonat
Paneli i përparmë - Butonat
Paneli i përparmë - Butonat

Problemi më i madh me këto 2 butona të mëdhenj ishte vendosja e tyre në mënyrë të barabartë me distancën e duhur. I kam prerë vrimat vetëm duke përdorur mjetin tim të shpimit pasi mund të rrisja diametrin hap pas hapi në mënyrë që butonat të përshtaten fort.

Hapi 6: Lidhësi i energjisë

Lidhësi i energjisë
Lidhësi i energjisë

Një vrimë e vogël për energjinë mikro USB ishte një punë shumë delikate për të bërë. Doja që vrima të ishte sa më e përshtatshme, kështu që kalova këtu shumë kohë për lustrim. Por unë isha i kënaqur me rezultatin përfundimtar.

Pastaj kam prerë një mini kabllo të shkurtër USB e cila ishte vendosur brenda kutisë. Nga njëra anë është e kyçur në RPi, dhe në anën tjetër, të gjithë kabllot u ngjitën në ndërfaqen mikro USB sipas pinouteve USB.

Pastaj e ngjita PCB-në e vogël direkt në kuti (mund të shihet në një fotografi në hapin e montimit).

Hapi 7: Vendosja e gjithçkaje së bashku

Vendosja e gjithçkaje së bashku
Vendosja e gjithçkaje së bashku
Vendosja e gjithçkaje së bashku
Vendosja e gjithçkaje së bashku
Vendosja e gjithçkaje së bashku
Vendosja e gjithçkaje së bashku

Së pari bashkova rezistencat e duhura në LED sipas ngjyrës (tensionit) të tyre për 3.3V volt. Kam përdorur 100Ω për të kuqen, dy rezistorë 82 dhe 100 për të verdhë (nyje jeshile dhe të kuqe), dhe 100Ω për të gjelbër. Ju mund të përdorni atë të rezistencës në internet për kalkulatorin LED. Por ju lutemi bëni disa kërkime nga Vetë sipas shkëlqimit dhe tonit të saktë të ngjyrës që dëshironi të arrini.

Këmbët e LED të verdhë u lidhën së bashku kështu që vetë LED mund të kontrollohet vetëm me një kunj në RPi.

Sipas këtij diagrami pinout:

Nyjet LED ishin të lidhura:

  • LED i gjelbër - GPIO1 në Rpi
  • LED i verdhë (të dyja këmbët) në GPIO2 në RPi
  • LED i kuq në GPIO0 në RPi

Unë lidha LCD duke përdorur kunjat I2C në kunjat RPi

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

LCD-ja ishte ngjitur nxehtësisht në kuti si një mbrojtje shtesë.

Unë lidha 3.3V dhe GND në tabelën e vogël të bukës, në mënyrë që t'i përdorja ato për butona.

Butoni jeshil ishte i lidhur me 3.3V përmes mini breadboard dhe me GPIO5 në RPi.

Butoni i kuq ishte i lidhur me 3.3V përmes mini breadboard dhe me GPIO4 në RPi.

Pra, sa herë që shtypni butonin, ekziston një gjendje e lartë në kunjin RPi.

Mini bradboard funksionon mirë, kështu që kalova bashkimin e të gjitha telave në PCB. Në vend të kësaj, unë thjesht mbulova miniboardin me zam të nxehtë, kështu që kabllot nuk do të bien.

Unë gjithashtu ngjita kapakun e RPi në kuti, kështu që nuk do të lëkundet brenda.

Kam vidhosur panelin e përparmë me të gjitha gjërat brenda.

Pastaj printova, preva dhe ngjita etiketa të thjeshta pranë semaforëve dhe butonave.

Hapi 8: Konfigurimi i ngadaltë

Konfigurimi i ngadaltë
Konfigurimi i ngadaltë
Konfigurimi i ngadaltë
Konfigurimi i ngadaltë

Krijoni ekipin tuaj në Slack.com ose përdorni atë që keni dhe keni të paktën të drejtat e administratorit.

Në Slack, krijoni një kanal për integrimin Slack të shërbimit (ose kaloni krijimin e një kanali nëse dëshironi të përdorni një që tashmë e keni).

Shtoni integrimin hyrës të Webhooks në ekipin tuaj. Zgjidhni kanalin dhe kopjoni URL -në e webhook.

Shtoni integrimin e Bots në ekipin tuaj. Zgjidhni një emër për botin tuaj dhe kopjoni shenjën API të botit.

Faqja juaj e menaxhimit të integrimeve me porosi duhet të duket si në foto.

Ju duhet të ftoni botin si anëtar të kanalit tuaj. Mund ta bëni tashmë gjatë krijimit të një kanali.

Nëse dëshironi të personalizoni shërbimin më vonë, ju lutemi kontrolloni Slack API.

Hapi 9: Zbatimi i Softuerit

Kam përdorur Raspbian si një sistem operativ për RPi tim duke ndjekur këtë tutorial. Ju lutem më falni unë do të kaloj duke e shpjeguar pasi është dokumentuar tashmë në shumë vende dhe procesi është i drejtpërdrejtë. Shpresoj se jeni mjaft të aftë dhe me përvojë për të arritur të konfiguroni vetë RPi. Ju lutemi mos harroni të konfiguroni qasjen WiFi në Raspberry Pi juaj;)

Siç u përmend në pjesën e prototipimit, unë përdor Java për të zbatuar trurin e të gjithë sistemit. Kodi është në dispozicion në GitHub -

Bibliotekat Java që kam përdorur:

  • pi4j - për të përdorur Raspberry Pi nga Java
  • Springboot si një platformë aplikimi
  • allbegray/slack-api si Integrim Slack

Ju duhet të redaktoni skedarin e konfigurimit në src/resources/config.properties. Ekzistojnë 3 hyrje që duhet të konfiguroni për të përdorur API Slack:

  • emri i kanalit - emri i kanalit Dëshironi të postoni ndryshimet e statusit dhe të merrni komanda.
  • slackBotToken - shenjë e një boti të konfiguruar në integrimet e ekipit tuaj Slack i cili do të përdoret për të postuar mesazhe në kanalin e përmendur më lart. Ju lutemi vini re Ju duhet të shtoni Slack Bot si anëtar të kanalit.
  • webhookUrl - URL -ja që mund të merrni nga integrimet e personalizuara të Slack Team.

Projekti është Mavenized kështu që për ta ndërtuar thjesht shkruani (Ju duhet të paktën Java 8 dhe Maven të instaluar):

paketë mvn e pastër

Dhe në drejtorinë e synuar Ju mund të gjeni skedarin JAR të Springbooted. Për të filluar një shërbim:

sudo java -jar kicker-rezervim-shërbim-0.3.0.jar

Unë e vendosa këtë linjë në.sh script dhe e shtova atë si një autostart. Pra, sa herë që energjia është e ndezur, shërbimi fillon automatikisht.

Një shpjegim i veçantë është i nevojshëm për LCD.

Provova qasje/biblioteka të ndryshme për të kontrolluar LCD mbi I2C nga RPi, por thjesht dështova. Për disa LCD nuk funksiononte siç duhet, për disa tregonte mbeturina.

Por një gjë ishte duke punuar shumë bukur vetëm jashtë kutisë. Shtë mjeti i linjës së komandës së shërbimeve që kam gjetur Ju mund ta përdorni për të kontrolluar LCD. Kështu që vendosa ta përdor këtë mjet direkt nga Java. Punon kështu që një proces normal Linux (lcdi2c) quhet (me parametra të përgatitur) sa herë që dua të shfaq diçka në ekranin LCD.

Ju duhet të shkarkoni mjetin dhe ta vendosni pranë shërbimit JAR

Përdorimi i këtij mjeti është një lloj hakimi dhe zgjidhje idiote, por unë ndjek rregullin e parë të inxhinierisë:

Nëse është budalla, por funksionon … nuk është budalla

Hapi 10: Udhëzimi i përdorimit

Udhëzim Përdorimi
Udhëzim Përdorimi

Ju mund të kontrolloni statusin aktual të tabelës kicker në kanalin e krijuar Slack duke shtypur komandën "status" (ose së shpejti "st") ose kontrolloni drejtpërdrejt semaforët në pajisje.

Nëse thjesht doni të luani - shtypni butonin e kuq. Mesazhi do të dërgohet në kanalin Slack me informacionin se tabela e goditjes është e zënë. Kur të keni mbaruar së luajtur - shtypni butonin jeshil. Mesazhi do të dërgohet në kanalin Slack me informacionin se tavolina e goditjes është falas për tu luajtur.

Dritat e trafikut gjithashtu do të ndryshojnë dhe ekrani LCD do të tregojë disa informacione të hollësishme.

Vetëm në rast se harroni të lëshoni tryezën pasi të keni mbaruar së luajtur, ekziston një afat kohor i caktuar në 20 minuta. Nëse jeni ende duke luajtur dhe keni nevojë për më shumë kohë, shtypni përsëri butonin e kuq dhe ndeshja do të zgjatet me 5 minuta (zbatohet vetëm kur kanë mbetur më pak se 5 minuta para afatit). Kohëzgjatja e lojës do të paraqitet në ekranin LCD.

Për të rezervuar tryezën e goditjeve, shkruani një mesazh "rezervë" (ose thjesht: "res") në kanalin Slack.

Drita e verdhë e trafikut do të ndizet duke informuar të tjerët pranë tavolinës së goditjes se është e rezervuar dhe së shpejti dikush do të vijë për të luajtur.

Koha e rezervimit është caktuar në 3 minuta. Pas kësaj, tavolina e goditjes ndryshon gjendjen e saj në lojë falas.

Nëse keni nevojë, mund të anuloni rezervimin duke shkruar "anuloni" në kanalin Slack.

Sistemi ka edhe disa veçori të tjera të vogla si:

  • Pas rezervimit, butonat ngrijnë për 5 sekonda. Kjo është për të parandaluar situatat, saqë në të njëjtën kohë dikush rezervon dhe një milisekond më vonë dikush shtyp butonin e kuq duke menduar se Ai/Ajo është ai që zë tryezën, por pa e ditur që dikush e rezervoi tryezën vetëm një milisekond më parë.
  • Shtypja e ndonjë butoni i ngrin të dy për gjysmën e sekondës. Kjo është kështu për të parandaluar klikuesit e çmendur të butonave, kështu që kanali Slack nuk do të spamohet aq shumë.
  • Versioni falas i Slack ju lejon të ruani 10000 mesazhe nga i gjithë ekipi. Për të ruajtur disa nga mesazhet, shërbimi fshini mesazhet e vjetra që lidhen me sistemin e rezervimit/statusit) dhe mbani vetëm 6 të fundit prej tyre. Pse 6? Sepse më së shpeshti ekzistojnë 2 skenarë statusi: "Të rezervuar-të zënë-pa-liri" dhe "të zënë-pa pagesë". Pra, sistemi mund të ruajë të paktën 2 sesione të plota pa zënë. Për të pastruar të gjitha mesazhet e sistemit, shkruani komandën "clean" (ose "clear").

Hapi 11: Lirimi

Duke u lëshuar
Duke u lëshuar
Duke u lëshuar
Duke u lëshuar

Deri tani (momenti i publikimit të këtij udhëzimi), sistemi po funksionon për 2.5+ muaj dhe përdoret nga më shumë se 30 persona. Për shkak të azhurnimit të statusit të tryezës së goditjes, ne gjithmonë e dimë se kur është falas ose i zënë, kështu që ne nuk humbim kohë duke shkuar më mbrapa dhe me radhë. Lidhja dhe shërbimi janë shumë të qëndrueshme, kështu që ne mund të mbështetemi në të.

Deri tani, aq mirë…

Hapi 12: FAQ

Pse koha e rezervimit është caktuar në 3 minuta?

3 minuta është koha maksimale e rezervimit, miratojeni ashtu si ju pëlqen në kod. Në përgjithësi rrallë do të ndodhë, që të kalojnë plot 3 minuta dhe rezervimi të mbarojë. Në shumicën e rasteve dikush do të vijë përfundimisht dhe do të zërë tryezën.

Pse koha e pushimit të lojës është caktuar në 20 minuta?

Në varësi të lojtarëve, koha mesatare e lojës është ~ 10 minuta. Nëse keni nevojë të luani më gjatë, shtypni përsëri butonin e kuq kur të mbeten më pak se 5 minuta dhe afati kohor do të zgjatet përsëri në 5 minuta. Ky afat kohor është vendosur vetëm në rast se dikush harron të lëshojë tryezën.

Pse nuk ka jastëk PIN në pajisje për të konfirmuar rezervimin; nuk ka hyrje dhe fjalëkalime?

Ideja kryesore ishte ta mbash të thjeshtë-budallaqe. Përndryshe, nëse rezervimi, fillimi dhe përfundimi i lojës kërkon shumë përpjekje, atëherë askush nuk do të dëshirojë ta përdorë atë.

Pse pajisja duket kaq industriale-e shëmtuar?

Sepse nuk kam prerës lazer, CNC, printer 3D, prodhues të etiketave me ngjyra të zbukuruara etj. Ju jeni më shumë se të kënaqur ta përmirësoni atë dhe ta bëni atë më të bukur.

Pse të mos zbatoni vetëm një aplikacion dhe të mos ngjitni tabletë të lirë në mur me të njëjtin funksionalitet?

Aplikacione, aplikacione kudo. Njerëzve u pëlqen të ndërveprojnë fizikisht me gjërat dhe jo vetëm të trokasin në ekranet e sheshta.

Recommended: