Satura rādītājs:

Vienkārša Kicker statusa un rezervācijas sistēma ar lēnu integrāciju: 12 soļi (ar attēliem)
Vienkārša Kicker statusa un rezervācijas sistēma ar lēnu integrāciju: 12 soļi (ar attēliem)

Video: Vienkārša Kicker statusa un rezervācijas sistēma ar lēnu integrāciju: 12 soļi (ar attēliem)

Video: Vienkārša Kicker statusa un rezervācijas sistēma ar lēnu integrāciju: 12 soļi (ar attēliem)
Video: Thank You Song | CoComelon Nursery Rhymes & Kids Songs 2024, Jūlijs
Anonim
Vienkārša Kicker statusa un rezervācijas sistēma ar lēnu integrāciju
Vienkārša Kicker statusa un rezervācijas sistēma ar lēnu integrāciju

Uzņēmumā, kurā es strādāju, ir kicker galds. Uzņēmums aizņem daudzus stāvus, un dažiem darbiniekiem ir nepieciešamas līdz 3 minūtēm, lai nokļūtu pie galda un… lai saprastu, ka galds jau ir aizņemts.

Tāpēc radās ideja izveidot vienkāršu apraides un rezervēšanas sistēmu, kas darbojas reālā laikā.

Uzņēmums izmanto Slack saziņas rīku, kur katram darbiniekam ir konts. Mums ir pat #kicker kanāls tikai diskusijām par… kicker. Kanālu varētu izmantot kā sava veida "ieejas punktu" rezervēšanai un informēt par pašreizējās tabulas statusu.

Kā parasti, ir daudz koncepciju, kā rīkoties ar šādu sistēmu. Bet kopumā visos tajos parādījās viens pamatnoteikums: tam ir jābūt vienkārši lietojamam un bez pārmērīgām darbībām, kas jāveic, strādājot ar sistēmu.

Ierīce un pakalpojums nav piestiprināti pie kicker galda un tos var izmantot jebkuram "kopīgam resursam" (piemēram, galda tenisa galdam, konsolei utt.), Kam nepieciešams sava veida statusa izplatīšanas un rezervēšanas risinājums.

Tātad, sāksim…

1. solis: koncepcijas un prototipu pierādījums

Koncepcijas un prototipu pierādījums
Koncepcijas un prototipu pierādījums
Koncepcijas un prototipu pierādījums
Koncepcijas un prototipu pierādījums
Koncepcijas un prototipu pierādījums
Koncepcijas un prototipu pierādījums

Aptuveni ideja bija izveidot ierīci, kas tiks novietota blakus kicker galdam, ievērojot šīs prasības:

  • daži rādītāji par pašreizējo galda statusu - ja jūs stāvat blakus, jums vajadzētu zināt, ka tas ir bezmaksas vai rezervēts, un pēc 3 minūtēm kāds ieradīsies spēlēt. Luksofori lieliski atbilst idejai:

    • zaļā gaisma - brīvi spēlēt,
    • dzeltena gaisma - rezervēta,
    • sarkanā gaisma - aizņemta.
  • poga (-as) Jūs varat noklikšķināt pirms un pēc spēles, lai visi pārējie tiktu informēti par pašreizējo galda stāvokli. 1 pārslēgšanas pogas vietā es nolēmu izmantot 2 atsevišķas pogas:

    • sarkanā poga - aizņem galdu, sāc spēli (pēc rezervācijas vai ad hoc).
    • zaļā poga - atbrīvošanas tabula.
  • daži displeji ar detalizētāku informāciju par to, kas notiek - rezervācijas taimauts, atkārtots galda statuss, spēles laika taimauts utt.

Ar rezervāciju es domāju tikai rezervāciju nākamajām 3 minūtēm. Sistēma nav veidota tā, lai lietotājs varētu rezervēt galdu precīzā laikā (piemēram, 14:00). Tas nedarbojas kā rezervācija, piem. restorānos, bet tikai dažām minūtēm.

Tā kā trūkst LAN savienojuma, vienīgā iespēja ir izmantot WLAN - tas jebkurā gadījumā ir labākais risinājums. Sistēmas smadzenēm ir jāizmanto Slack API, lai nosūtītu un saņemtu komandas no Slack kanāla. Vispirms es mēģināju izmantot NodeMCU. Es varēju saņemt un saņemt ziņojumus uz un no Slack, bet HTTPS lietojuma un arī Slack "sveiciena ziņojuma" izmēra (~ 300 KB) dēļ NodeMCU zaudēja savienojumu un/vai ieguva kādu dīvainu izņēmumu, kuru nevarēju atrisināt, meklējot internetā.

Tāpēc es nolēmu izmantot kaut ko jaudīgāku: Raspberry Pi 3 (Zero W ar WiFi tajā laikā vēl nebija izlaists). Izmantojot RPi, es varētu mainīt ieviešanas valodu no C uz Java, jo tā man ir ērtāk - tāpēc tā bija priekšrocība. Šodien jūs varat izmantot kaut ko jaudīgāku par NodeMCU un mazāk jaudīgu nekā RPi. Varbūt Raspberry Zero?

Pēc pirmā prototipa uzbūvēšanas uz maizes dēļa ar kādu traku elektroinstalāciju, daudzām skicēm un prototipu veidošanu, sistēma izskatījās, ka tā var darboties.

Ņemot visas šīs idejas un strādājot ar PoC, es sāku plānot dažādas iepriekš minēto priekšmetu izvietojuma konfigurācijas priekšējā panelī, lai tās būtu visinformatīvākās un ērtākās lietošanā. Jūs varat pārbaudīt dažus citus priekšlikumus, varbūt daži jums labāk atbilst. Pēdējais bija manis izvēlētais.

2. darbība: materiāli un instrumenti

Materiāli, kurus izmantoju:

  • Kastīte
  • Raspberry Pi, microSD karte, mikro USB barošanas avots
  • Zaļās un sarkanās arkādes pogas
  • 16x2 LCD ekrāns
  • LED - es izmantoju RGB, bet jūs varat izmantot pareizo krāsu
  • Kabeļi no vīrieša līdz sievietei un no sievietes līdz sievietei
  • Mikro USB interfeiss
  • Mini maizes dēlis tikai dažu vadu pievienošanai
  • Īss mikro USB kabelis, kas darbojas kā džemperis kastes iekšpusē, lai barotu RPi

Manis izmantotie rīki:

  • Asu nazi (piemēram, lielo nazi paklāja griešanai)
  • Rotācijas instruments
  • Karstās līmes pistole
  • Lodēšanas stacija
  • Knaibles, diagonālās knaibles/sānu griezēji
  • Skrūvgriezis
  • Fails
  • Es

Rīki, kas jums, iespējams, ir nepieciešami:

Viss iepriekš minētais, bet "es" vietā tam vajadzētu būt: "tu":)

3. solis: priekšējais panelis - LCD ekrāns

Priekšējais panelis - LCD ekrāns
Priekšējais panelis - LCD ekrāns
Priekšējais panelis - LCD ekrāns
Priekšējais panelis - LCD ekrāns

LCD ekrāna caurums bija vienkāršs. Tikai taisnstūris, kas iederas manā LCD ekrānā. Mēģinot to sagriezt ar asu nazi, es sapratu, ka kastes plastmasa ir diezgan cieta. Tāpēc es izmantoju urbšanas rīku loga griešanai un malu pulēšanai.

4. darbība. Priekšējais panelis - statusa gaismas diodes

Priekšējais panelis - statusa gaismas diodes
Priekšējais panelis - statusa gaismas diodes
Priekšējais panelis - statusa gaismas diodes
Priekšējais panelis - statusa gaismas diodes

LED caurumi ir arī vienkārši. Es tikko paņēmu lielu urbi kokam un pēc tam noslīpēju malas ar urbšanas instrumentu. Lielās gaismas diodes bija cieši pieguļošas. Gaismas diodēm es vēl nelodēju nekādus rezistorus - atstāju to montāžas procesam.

5. darbība. Priekšējais panelis - pogas

Priekšējais panelis - pogas
Priekšējais panelis - pogas
Priekšējais panelis - pogas
Priekšējais panelis - pogas
Priekšējais panelis - pogas
Priekšējais panelis - pogas
Priekšējais panelis - pogas
Priekšējais panelis - pogas

Lielākā problēma ar šīm divām lielajām pogām bija to vienmērīga novietošana ar atbilstošu atstarpi. Es izgriezu caurumus, tikai izmantojot savu urbšanas rīku, jo es varētu pakāpeniski palielināt diametru, lai pogas būtu cieši pieguļošas.

6. darbība: strāvas savienotājs

Barošanas savienotājs
Barošanas savienotājs

Neliels caurums mikro USB barošanai bija ļoti delikāts darbs. Es gribēju, lai caurums būtu pēc iespējas piemērotāks, tāpēc šeit pavadīju daudz laika pulēšanai. Bet es biju apmierināts ar gala rezultātu.

Tad es nogriezu īsu mini USB kabeli, kas tika ievietots kastē. Vienā pusē tas ir pievienots RPi, un, no otras puses, visi kabeļi tika pielodēti pie mikro USB saskarnes saskaņā ar USB pinouts.

Tad es karsti pielīmēju mazo PCB tieši pie kastes (to var redzēt uz fotoattēla montāžas posmā).

7. solis: visu salieciet kopā

Visu salikt kopā
Visu salikt kopā
Visu salikt kopā
Visu salikt kopā
Visu salikt kopā
Visu salikt kopā

Vispirms es lodēju gaismas diodēm atbilstošus rezistorus atbilstoši to krāsai (spriegumam) 3,3 V voltam. Es izmantoju 100Ω sarkanajam, divus rezistorus 82 un 100 dzeltenam (zaļš un sarkans mezgls) un 100Ω zaļam. LED kalkulatoram varat izmantot vienu no tiešsaistes rezistoriem. Bet, lūdzu, veiciet dažus pētījumus atbilstoši spilgtumam un precīzam krāsu toņam, ko vēlaties sasniegt.

Dzeltenās gaismas diodes kājas bija pielodētas kopā, tāpēc pašu LED var kontrolēt tikai ar vienu tapu uz RPi.

Saskaņā ar šo pinout diagrammu:

Tika pievienoti LED mezgli:

  • Zaļa gaismas diode - GPIO1 uz RPI
  • Dzeltena gaismas diode (abas kājas) uz GPIO2 uz RPi
  • Sarkana gaismas diode līdz GPIO0 uz RPi

Es pievienoju LCD, izmantojot I2C tapas uz RPi tapām

  • LCD SDA uz GPIO8 uz RPi
  • LCD SCL uz GPIO9 uz RPi
  • LCD PWR līdz 5V uz RPi
  • LCD GND uz GND uz RPi

LCD tika papildus pielīmēts pie kastes.

Es pievienoju 3.3V un GND pie mazā maizes dēļa, lai varētu tos izmantot pogām.

Zaļā poga tika savienota ar 3.3V caur mini maizes dēli un ar GPIO5 uz RPi.

Sarkanā poga tika pievienota 3.3V caur mini maizes dēli un GPIO4 uz RPi.

Tātad ikreiz, kad nospiežat pogu, uz RPi tapas ir augsts stāvoklis.

Mini bradboard darbojas lieliski, tāpēc es izlaidu visu vadu lodēšanu PCB. Tā vietā es vienkārši pārklāju mini maizes dēli ar karstu līmi, lai kabeļi nenokristu.

Es arī karsti pielīmēju RPi pārsegu pie kastes, lai tas iekšā nesvārstītos.

Es pieskrūvēju priekšējo paneli ar visām lietām iekšā.

Tad es blakus luksoforiem un pogām izdrukāju, izgriezu un pielīmēju vienkāršas etiķetes.

8. darbība: nesteidzīga konfigurācija

Klusa konfigurācija
Klusa konfigurācija
Klusa konfigurācija
Klusa konfigurācija

Izveidojiet savu komandu vietnē Slack.com vai izmantojiet to, kas jums ir, un jums ir vismaz administratora tiesības.

Programmā Slack izveidojiet kanālu pakalpojuma Slack integrācijai (vai izlaidiet kanāla izveidi, ja vēlaties izmantot jau esošo kanālu).

Pievienojiet savai komandai ienākošo Webhooks integrāciju. Atlasiet kanālu un nokopējiet tīmekļa aizķeres URL.

Pievienojiet Bots integrāciju savai komandai. Izvēlieties savam robotam nosaukumu un nokopējiet bot API marķieri.

Jūsu pielāgoto integrāciju pārvaldības lapai vajadzētu izskatīties kā attēlā.

Jums ir jāuzaicina robots kā sava kanāla dalībnieks. To var izdarīt jau kanāla izveides laikā.

Ja vēlāk vēlaties pielāgot pakalpojumu, lūdzu, pārbaudiet Slack API.

9. solis: programmatūras ieviešana

Es izmantoju Raspbian kā operētājsistēmu savam RPi, sekojot šai apmācībai. Lūdzu, piedodiet, es izlaidīšu tā skaidrošanu, jo tas jau ir dokumentēts daudzās vietās un process ir vienkāršs. Es ceru, ka esat pietiekami prasmīgs un pieredzējis, lai varētu patstāvīgi iestatīt RPi. Lūdzu, neaizmirstiet savā Raspberry Pi konfigurēt WiFi piekļuvi;)

Kā minēts prototipēšanas sadaļā, es izmantoju Java, lai ieviestu visas sistēmas smadzenes. Kods ir pieejams vietnē GitHub -

Izmantotās Java bibliotēkas:

  • pi4j - izmantot Raspberry Pi no Java
  • Springboot kā lietojumprogrammu platrorm
  • allbegray/slack-api kā Slack integrācija

Jums ir jārediģē konfigurācijas fails src/resources/config.properties. Ir 3 ieraksti, kas jākonfigurē, lai izmantotu Slack API:

  • channelName - kanāla nosaukums, kurā vēlaties publicēt statusa izmaiņas un saņemt komandas.
  • slackBotToken - robota marķieris, kas konfigurēts jūsu Slack komandas integrācijās un tiks izmantots ziņojumu ievietošanai iepriekš minētajā kanālā. Lūdzu, ņemiet vērā, ka kanāla dalībniekam jāpievieno Slack Bot.
  • webhookUrl - URL, ko varat iegūt no Slack Team pielāgotajām integrācijām.

Projekts ir Mavenized, lai to izveidotu, vienkārši ierakstiet (jums ir jāinstalē vismaz Java 8 un Maven):

mvn tīrs iepakojums

Un mērķa nogurumā varat atrast Springbooted JAR failu. Lai sāktu pakalpojumu:

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

Es iestatīju šo rindu uz.sh skriptu un pievienoju to kā automātisko palaišanu. Tātad, kad barošana ir ieslēgta, pakalpojums tiek palaists automātiski.

LCD ir nepieciešams viens īpašs skaidrojums.

Es izmēģināju dažādas pieejas/bibliotēkas, lai kontrolētu LCD pār I2C no RPi, bet man vienkārši neizdevās. Dažiem LCD nedarbojās pareizi, dažiem parādījās daži atkritumi.

Bet viena lieta ļoti labi strādāja tikai no kastes. Tas ir utilītas komandrindas rīks, kuru es atradu Jūs varat izmantot, lai kontrolētu LCD. Tāpēc es nolēmu izmantot šo rīku tieši no Java. Tas darbojas šādi: parasts Linux process (lcdi2c) tiek izsaukts (ar sagatavotiem parametriem) katru reizi, kad vēlos kaut ko parādīt LCD ekrānā.

Jums ir nepieciešams lejupielādēt rīku un novietot to blakus pakalpojumam JAR

Šī rīka izmantošana ir sava veida uzlaušana un muļķīgs risinājums, bet es ievēroju pirmo inženierijas noteikumu:

Ja tas ir stulbi, bet darbojas … tas nav stulbi

10. solis: lietošanas instrukcija

Lietošanas instrukcija
Lietošanas instrukcija

Jūs varat pārbaudīt kicker tabulas pašreizējo stāvokli izveidotajā Slack kanālā, ierakstot komandu "status" (vai īsi "st") vai tieši pārbaudīt ierīces luksoforus.

Ja jūs vienkārši vēlaties spēlēt - nospiediet sarkano pogu. Uz Slack kanālu tiks nosūtīta ziņa ar informāciju, ka kicker galds ir aizņemts. Kad esat pabeidzis spēlēt - nospiediet zaļo pogu. Uz Slack kanālu tiks nosūtīta ziņa ar informāciju par to, ka kicker galdu var spēlēt bez maksas.

Mainīsies arī luksofori, un LCD ekrānā būs redzama detalizēta informācija.

Tikai gadījumā, ja esat aizmirsis atbrīvot galdu pēc spēles pabeigšanas, taimauts ir iestatīts uz 20 minūtēm. Ja jūs joprojām spēlējat un jums ir nepieciešams vairāk laika, vēlreiz nospiediet sarkano pogu, un spēle tiks pagarināta par 5 minūtēm (attiecas tikai tad, ja līdz taimauta beigām ir atlikušas mazāk nekā 5 minūtes). Atskaņošanas taimauts tiks parādīts LCD ekrānā.

Lai rezervētu kicker galdu, uzrakstiet ziņojumu “rezervēt” (vai vienkārši: “res”) Slack kanālam.

Dzeltenais luksofors ieslēgsies, informējot citus, kas atrodas pie sitiena galda, ka tas ir rezervēts, un drīz kāds ieradīsies spēlēt.

Rezervācijas taimauts ir iestatīts uz 3 minūtēm. Pēc tam kicker galds pārslēdz savu stāvokli uz brīvu spēli.

Ja nepieciešams, varat atcelt rezervāciju, rakstot “Atcelt” Slack kanālā.

Sistēmai ir arī dažas citas nelielas funkcijas, piemēram:

  • Pēc rezervēšanas pogas tiek iesaldētas uz 5 sekundēm. Tas tiek darīts, lai novērstu situācijas, ka tajā pašā laikā kāds rezervē un milisekundi vēlāk kāds nospiež sarkano pogu, domājot, ka tieši viņš/viņa ir galda vadītājs, bet nezinot, ka kāds galdiņu rezervēja tikai milisekundi iepriekš.
  • Nospiežot jebkuru pogu, abas uz pusi sekundes tiek sasaldētas. Tas ir tāpēc, lai novērstu trakus pogu klikšķinātājus, lai Slack kanāls netiktu surogātpasts tik daudz.
  • Slack bezmaksas versija ļauj saglabāt visas komandas 10 000 ziņojumus. Lai saglabātu dažus ziņojumus, pakalpojums izdzēsīs vecos ziņojumus, kas saistīti ar rezervācijas/statusa sistēmu) un paturēs tikai pēdējos 6 ziņojumus. Kāpēc 6? Jo visbiežāk ir 2 statusa scenāriji: "Rezervēts-okupēts-brīvs" un "Okupēts-brīvs". Tātad sistēma var saglabāt vismaz 2 pilnībā aizņemtas sesijas. Lai notīrītu visus sistēmas ziņojumus, ierakstiet komandu "clean" (vai "clear").

11. solis: atbrīvošana

Atbrīvošana
Atbrīvošana
Atbrīvošana
Atbrīvošana

Līdz šim (šīs instrukcijas publicēšanas brīdim) sistēma darbojas 2,5+ mēnešus un to izmanto vairāk nekā 30 cilvēki. Kicker galda statusa atjauninājuma dēļ mēs vienmēr zinām, kad tas ir brīvs vai aizņemts, tāpēc mēs vairs nezaudējam laiku, turp un atpakaļ. Savienojums un pakalpojums ir ļoti stabils, tāpēc mēs varam uz to paļauties.

Tik tālu, labi…

12. darbība: bieži uzdotie jautājumi

Kāpēc rezervācijas taimauts ir iestatīts uz 3 minūtēm?

3 minūtes ir maksimālais rezervācijas laiks, pieņemiet to, kā vēlaties kodā. Parasti tas notiks reti, kad paies pilnas 3 minūtes, un rezervācija tiks pārtraukta. Vairumā gadījumu kāds beidzot ieradīsies un ieņems galdu.

Kāpēc spēles taimauts ir iestatīts uz 20 minūtēm?

Atkarībā no spēlētājiem vidējais spēles laiks ir ~ 10 minūtes. Ja jums jāspēlē ilgāk, vēlreiz nospiediet sarkano pogu, kad atlikušas mazāk nekā 5 minūtes, un taimauts tiks pagarināts līdz 5 minūtēm. Šis taimauts ir iestatīts tikai gadījumā, ja kāds aizmirst atbrīvot tabulu.

Kāpēc ierīcē nav PIN paliktņa rezervācijas apstiprināšanai; nav pieteikumvārdu un paroļu?

Galvenā ideja bija saglabāt vienkāršu stulbumu. Pretējā gadījumā, ja rezervēšana, spēles sākšana un pabeigšana prasa pārāk daudz pūļu, tad neviens to nevēlas izmantot.

Kāpēc ierīce izskatās tik industriāli neglīta?

Tā kā man nebija lāzera griezēja, CNC, 3D printera, izsmalcinātu krāsainu etiķešu veidotāja utt. Jums ir prieks to uzlabot un padarīt skaistāku.

Kāpēc ne tikai ieviest kādu lietotni un pielīmēt lētu planšetdatoru pie sienas ar tādu pašu funkcionalitāti?

Lietotnes, lietotnes visur. Cilvēkiem patīk fiziski mijiedarboties ar lietām un ne tikai pieskarties plakaniem ekrāniem.

Ieteicams: