INHOUDSOPGAWE:

Eenvoudige kickerstatus en besprekingstelsel met trae integrasie: 12 stappe (met foto's)
Eenvoudige kickerstatus en besprekingstelsel met trae integrasie: 12 stappe (met foto's)

Video: Eenvoudige kickerstatus en besprekingstelsel met trae integrasie: 12 stappe (met foto's)

Video: Eenvoudige kickerstatus en besprekingstelsel met trae integrasie: 12 stappe (met foto's)
Video: mobile check in application 2024, Julie
Anonim
Eenvoudige kickerstatus- en besprekingstelsel met slap integrasie
Eenvoudige kickerstatus- en besprekingstelsel met slap integrasie

In 'n onderneming waar ek werk, is daar 'n skoppertafel. Die onderneming beslaan baie verdiepings en vir sommige van die werknemers neem dit tot 3 minute om by die tafel te kom en om te besef dat die tafel reeds beset is.

Daarom het 'n idee ontstaan om 'n soort eenvoudige statusuitsending- en besprekingsisteem te bou wat intyds werk.

Die onderneming gebruik Slack -kommunikasiehulpmiddel, waar elke werknemer 'n rekening het. Ons het selfs 'n #kicker -kanaal net vir besprekings oor … skopper. Die kanaal kan gebruik word as 'n soort "toegangspunt" vir besprekings en om ingelig te word oor die huidige tabel se status.

Soos gewoonlik is daar baie konsepte oor hoe om met so 'n stelsel om te gaan. Maar in die algemeen verskyn een basiese reël in almal: dit moet eenvoudig wees om te gebruik sonder om te veel stappe te doen om met die stelsel om te gaan.

Die toestel en die diens word nie by die skopertafel gehou nie en kan gebruik word vir enige 'gemeenskaplike hulpbron' (soos tafeltennistafel, konsole, ens.) Wat 'n soort oplossing vir statusuitsending en reservering benodig.

So, laat ons begin …

Stap 1: Bewys van konsep en prototipering

Bewys van konsep en prototipering
Bewys van konsep en prototipering
Bewys van konsep en prototipering
Bewys van konsep en prototipering
Bewys van konsep en prototipering
Bewys van konsep en prototipering

Die idee was lagwekkend om 'n toestel te bou wat langs die skoppertafel sal lê volgens hierdie vereistes:

  • 'n paar aanduidings oor die huidige tafelstatus - as u langs hom staan, moet u weet dat dit gratis of voorbehou is, en dat iemand binne 3 minute kan speel. Verkeersligte pas perfek by die idee:

    • groen lig - gratis om te speel,
    • geel lig - voorbehou,
    • rooi lig - beset.
  • knoppie (s) U kan voor en na die wedstryd klik sodat almal op die hoogte van die huidige tafel se status kan word. In plaas van 1 knoppie knoppie het ek besluit om 2 geskei knoppies te gebruik:

    • rooi knoppie - sit op die tafel, begin 'n speletjie (na bespreking of ad hoc).
    • groen knoppie - los tafel.
  • 'n paar vertonings met meer gedetailleerde inligting oor "wat aan die gang is" - besprekingstyd, herhaalde tafelstatus, tydsduur vir speeltyd, ens …

Met bespreking bedoel ek net die bespreking vir die volgende 3 minute. Die stelsel is nie so ontwerp dat die gebruiker die tafel op presiese tyd (bv. 02:00) kan bespreek nie. Dit werk nie soos voorbehoud bv. in restaurante, maar slegs vir 'n paar minute.

Omdat daar geen LAN -verbinding is nie, is die enigste opsie om WLAN te gebruik - dit is in elk geval die beste opsie. Die brein van die stelsel moet Slack API gebruik om opdragte vanaf die Slack -kanaal te stuur en te ontvang. Ek het eers probeer om NodeMCU te gebruik. Ek kon boodskappe van en na Slack kry en ontvang, maar as gevolg van HTTPS -gebruik en ook die grootte van die 'welkome boodskap' (~ 300kB) van Slack, het NodeMCU die verbinding verloor en/of 'n vreemde uitsondering gekry wat ek nie kon oplos deur op die internet te grawe nie.

Daarom het ek besluit om iets kragtiger te gebruik: Raspberry Pi 3 (Zero W met WiFi is destyds nog nie vrygestel nie). Deur RPi te hê, kon ek die implementeringstaal van C na Java oorskakel, aangesien dit vir my geriefliker was - so dit was 'n voordeel. U kan vandag iets kragtiger as NodeMCU en minder kragtig as RPi gebruik. Framboos Zero miskien?

Nadat die eerste prototipe op 'n broodbord gebou is met 'n paar bedrieglike bedrading, baie skets en prototipering, het die stelsel gelyk of dit kan werk.

Met al hierdie idees en werkende PoC, het ek begin om verskillende plasingskonfigurasies van bogenoemde items op 'n voorpaneel te beplan, sodat dit die mees insiggewende en gerieflikste is om te gebruik. U kan 'n paar van die ander voorstelle nagaan, miskien pas sommige beter by u. Die laaste een was deur my gekies.

Stap 2: Materiaal en gereedskap

Materiaal wat ek gebruik het:

  • Boks
  • Framboos Pi, microSD kaart, mikro USB kragbron
  • Groen en rooi arcade knoppies
  • 16x2 LCD skerm
  • LED's - ek het RGB gebruik, maar u kan die regte kleur gebruik
  • Manlike tot vroulike en vroulike tot vroulike broodbordkabels
  • Mikro -USB -koppelvlak
  • Mini broodbord net om 'n paar drade aan te sluit
  • Kort mikro -USB -kabel wat as 'n trui in die boks werk om die RPi aan te dryf

Gereedskap wat ek gebruik het:

  • Skerp mes (bv. Mes om tapyt te sny)
  • Roterende hulpmiddel
  • Warm gom geweer
  • Soldeerstasie
  • Tang, skuins tang/sysnyers
  • Skroewedraaier
  • lêer
  • Ek

Gereedskap wat u waarskynlik nodig het:

Al die bogenoemde, maar in plaas van "Ek" moet dit wees: "Jy":)

Stap 3: Voorpaneel - LCD -skerm

Voorpaneel - LCD -skerm
Voorpaneel - LCD -skerm
Voorpaneel - LCD -skerm
Voorpaneel - LCD -skerm

Die gat vir die LCD -skerm was eenvoudig. Net 'n reghoek wat by my LCD -skerm pas. Nadat ek dit met 'n skerp mes probeer sny het, het ek besef dat die boks se plastiek taamlik hard is. Ek gebruik dus 'n boorgereedskap om die venster te sny en die rande te poets.

Stap 4: Voorpaneel - Status -LED's

Voorpaneel - status -LED's
Voorpaneel - status -LED's
Voorpaneel - status -LED's
Voorpaneel - status -LED's

LED -gate is ook eenvoudig. Ek het net 'n groot boor vir hout geneem en daarna die rande met 'n boorgereedskap gepoleer. Die groot LED's pas perfek. Ek het nog geen weerstande aan die LED's gesoldeer nie - ek het dit gelos vir die monteerproses.

Stap 5: Voorpaneel - knoppies

Voorpaneel - knoppies
Voorpaneel - knoppies
Voorpaneel - knoppies
Voorpaneel - knoppies
Voorpaneel - knoppies
Voorpaneel - knoppies
Voorpaneel - knoppies
Voorpaneel - knoppies

Die grootste probleem met hierdie twee groot knoppies was om hulle eweredig met die regte afstand te plaas. Ek sny die gate net met my boorgereedskap, want ek kan die deursnee stap vir stap vergroot sodat die knoppies styf pas.

Stap 6: Kragaansluiting

Kragaansluiting
Kragaansluiting

'N Klein gaatjie vir mikro -USB -krag was 'n baie delikate taak. Ek wou hê dat die gat so fiks as moontlik was, so ek het baie tyd hier deurgebring vir poleer. Maar ek was tevrede met die eindresultaat.

Toe sny ek 'n kort mini -USB -kabel wat in die boks geplaas is. Aan die een kant is dit by RPi ingeprop, en aan die ander kant is alle kabels volgens die USB -aansluitings aan die mikro -USB -koppelvlak gesoldeer.

Toe plak ek die klein PCB direk op die boks vas (dit kan op 'n foto in die monteerstap gesien word).

Stap 7: Alles saamvoeg

Alles aanmekaar sit
Alles aanmekaar sit
Alles aanmekaar sit
Alles aanmekaar sit
Alles aanmekaar sit
Alles aanmekaar sit

Eers het ek geskikte weerstande aan die LED's gesoldeer volgens hul kleur (spanning) vir 3.3V volt. Ek gebruik 100Ω vir rooi, twee weerstande 82 en 100 vir geel (groen en rooi knoop), en 100Ω vir groen. U kan die een van die aanlynweerstand vir LED -sakrekenaar gebruik. Doen asseblief self navorsing oor die helderheid en presiese kleurtoon wat u wil bereik.

Bene van geel LED is aanmekaar gesoldeer sodat die LED self net met een pen op RPi beheer kan word.

Volgens hierdie pinout -diagram:

LED -nodusse is verbind:

  • Groen LED - GPIO1 op Rpi
  • Geel LED (albei bene) na GPIO2 op RPi
  • Rooi LED na GPIO0 op RPi

Ek het LCD gekoppel met I2C -penne op RPi -penne

  • LCD SDA na GPIO8 op RPi
  • LCD SCL na GPIO9 op RPi
  • LCD PWR tot 5V op RPi
  • LCD GND tot GND op RPi

Die LCD is aan die boks vasgeplak as 'n ekstra beskerming.

Ek het 3.3V en GND aan die klein broodbord gekoppel, sodat ek dit vir knoppies kon gebruik.

Die groen knoppie is via die mini -broodbord aan die 3.3V gekoppel en aan GPIO5 op RPi.

Rooi knoppie is via die mini -broodbord aan die 3.3V gekoppel en aan GPIO4 op RPi.

As u op die knoppie druk, is daar 'n hoë toestand op die RPi -pen.

Die mini -bradboard werk goed, so ek het al die drade in die printplaat oorgeslaan. In plaas daarvan het ek die mini -broodbord net met warm gom bedek sodat die kabels nie val nie.

Ek het ook die omslag van RPi aan die boks vasgeplak, sodat dit nie binne kan wankel nie.

Ek het die voorpaneel vasgedraai met al die goed binne.

Toe druk ek, sny en plak eenvoudige etikette langs die verkeersligte en knoppies.

Stap 8: Slap konfigurasie

Slap konfigurasie
Slap konfigurasie
Slap konfigurasie
Slap konfigurasie

Skep u span op Slack.com of gebruik die een wat u het en u het ten minste administratiewe regte.

Skep in Slack 'n kanaal vir die Slack -integrasie van die diens (of slaan 'n kanaal oor as u een wil gebruik wat u reeds het).

Voeg geïntegreerde Webhooks -integrasie by u span. Kies die kanaal en kopieer die webhook -URL.

Voeg Bots -integrasie by u span. Kies 'n naam vir u bot en kopieer die bot -API -token.

Die bladsy van u bestuur van pasgemaakte integrasies behoort op die prentjie te lyk.

U moet die bot as lid van u kanaal nooi. U kan dit reeds doen tydens die skep van 'n kanaal.

Kyk na die Slack API as u die diens later wil aanpas.

Stap 9: sagteware -implementering

Ek het Raspbian gebruik as 'n bedryfstelsel vir my RPi deur hierdie tutoriaal te volg. Vergewe my, ek sal dit nie meer verduidelik nie, want dit is al op baie plekke gedokumenteer en die proses is eenvoudig. Ek hoop dat u vaardig en ervare genoeg is om RPi self op te stel. Moenie vergeet om WiFi -toegang op u Framboos Pi op te stel nie;)

Soos genoem in die prototipe -afdeling, het ek Java gebruik om die brein van die hele stelsel te implementeer. Die kode is beskikbaar op GitHub -

Die Java -biblioteke wat ek gebruik het:

  • pi4j - om Raspberry Pi van Java te gebruik
  • Springboot as 'n toepassingsplatform
  • allbegray/slack-api as Slack-integrasie

U moet die konfigurasielêer in src/resources/config.properties wysig. Daar is 3 inskrywings wat u moet instel om Slack API te gebruik:

  • channelName - naam van die kanaal U wil statusveranderings plaas en opdragte ontvang.
  • slackBotToken - teken van 'n bot wat in u integrasie van u Slack -span gekonfigureer is, wat gebruik sal word om boodskappe op die bogenoemde kanaal te plaas. Let asseblief daarop dat u Slack Bot as lid van die kanaal moet byvoeg.
  • webhookUrl - die URL wat u kan kry by die pasgemaakte integrasies van Slack Team.

Die projek is Mavenized, om dit te bou, tik (u moet ten minste Java 8 en Maven geïnstalleer):

mvn skoon pakket

En in die teikengids kan u die JAR -lêer met Springboote vind. Om 'n diens te begin:

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

Ek stel hierdie reël op.sh script en voeg dit by as 'n outomatiese begin. Dus, as die krag aan is, begin die diens outomaties.

Een spesiale verduideliking is nodig vir die LCD.

Ek het verskillende benaderings/biblioteke probeer om LCD oor I2C vanaf RPi te beheer, maar ek het net misluk. Vir sommige LCD's het dit nie behoorlik gewerk nie, vir sommige was daar rommel.

Maar een ding werk baie lekker net buite die boks. Dit is die opdragreëlhulpmiddel wat ek gevind het en wat u kan gebruik om die LCD te beheer. Daarom het ek besluit om hierdie instrument net direk vanaf Java te gebruik. Dit werk so dat 'n normale Linux -proses (lcdi2c) genoem word (met voorbereide parameters) elke keer as ek iets op die LCD -skerm wil vertoon.

U moet die instrument aflaai en dit langs die JAR -diens plaas

Die gebruik van hierdie instrument is 'n soort hack en dom oplossing, maar ek volg die eerste ingenieursreël:

As dit dom is, maar dit werk … is dit nie dom nie

Stap 10: Gebruiksinstruksie

Gebruiksinstruksie
Gebruiksinstruksie

U kan die huidige status van die skoppertabel op die geskepte Slack -kanaal nagaan deur die opdrag "status" (of kort "st") in te tik of die verkeersligte op die toestel direk na te gaan.

As u net wil speel, druk die rooi knoppie. Die boodskap sal na die Slack -kanaal gestuur word met inligting dat die skopertafel beset is. As u klaar is met speel, druk die groen knoppie. 'N Boodskap sal na die Slack -kanaal gestuur word met inligting dat die skopertafel gratis kan speel.

Verkeersligte sal ook verander en 'n LCD -skerm bevat gedetailleerde inligting.

Vir die geval dat u vergeet om die tafel los te maak nadat u klaar is met speel, is daar 'n tydsduur van 20 minute. As u nog speel en meer tyd nodig het, druk dan weer op die rooi knoppie en die wedstryd word met 5 minute verleng (geld slegs as daar minder as 5 minute oor is voordat die tyd uit is). Die tydsduur vir speel word op die LCD -skerm vertoon.

Om 'n skopertafel te bespreek, skryf 'n boodskap "reserwe" (of net: "res") aan die Slack -kanaal.

Die geel verkeerslig sal aanskakel om ander naby die skoptafel in te lig dat dit gereserveer is, en binnekort sal iemand kom speel.

Die tydsduur vir besprekings is 3 minute. Daarna verander die skoppertafel sy toestand na vry om te speel.

As u dit nodig het, kan u die bespreking kanselleer deur 'kanselleer' op die Slack -kanaal te skryf.

Die stelsel het ook 'n paar ander klein funksies, soos:

  • Na bespreking word die knoppies vir 5 sekondes gevries. Dit is om situasies te voorkom, dat iemand op dieselfde tyd 'n reserwe en 'n milisekonde later op die rooi knoppie druk om te dink dat dit die een is wat die tafel inneem, maar sonder dat iemand weet dat die tafel net 'n milisekonde tevore gereserveer het.
  • Deur op enige knoppie te druk, vries hulle altwee vir 'n halfsekonde. Dit is bedoel om geknoppie -klikers te voorkom, sodat Slack -kanaal nie so baie gemors word nie.
  • Met die gratis weergawe van Slack kan 10000 boodskappe deur die hele span gestoor word. Om sommige van die boodskappe te bewaar, verwyder die ou boodskappe wat verband hou met die bespreking-/statusstelsel) en verwyder slegs die laaste 6 daarvan. Hoekom 6? Omdat daar meestal 2 statusscenario's is: 'voorbehou-beset-vry' en 'beset-vry'. Die stelsel kan dus ten minste 2 sessies sonder besetting stoor. Tik die opdrag "skoon" (of "duidelik") om al die stelselboodskappe skoon te maak.

Stap 11: Maak vry

Vrystelling
Vrystelling
Vrystelling
Vrystelling

Tot nou toe (op die oomblik dat hierdie instruksies gepubliseer is), loop die stelsel langer as 2,5 maande en word dit deur meer as 30 mense gebruik. As gevolg van die statusopdatering van die kicker -tafel, weet ons altyd wanneer dit gratis of beset is, sodat ons nie meer tyd verloor om heen en weer te gaan nie. Die verbinding en die diens is baie stabiel, sodat ons daarop kan staatmaak.

So ver so goed…

Stap 12: Gereelde vrae

Waarom is die tydsduur vir besprekings ingestel op 3 minute?

Die maksimum besprekingstyd is 3 minute; neem dit volgens die kode in soos u wil. Oor die algemeen gebeur dit selde dat die volle 3 minute verbygaan en die bespreking uitgestel word. In die meeste gevalle sal iemand uiteindelik kom en die tafel inneem.

Waarom is die tydsduur vir speel 20 minute?

Afhangende van 'n speler, is die gemiddelde speeltyd ~ 10 minute. As u langer moet speel, druk dan weer op die rooi knoppie as daar minder as 5 minute oor is, en die tydsduur word tot 5 minute verleng. Hierdie time -out word ingestel net as iemand vergeet om die tafel los te maak.

Waarom daar geen PIN -pad op die toestel is om die bespreking te bevestig nie; geen aanmeldings en wagwoorde nie?

Die belangrikste idee was om dit eenvoudig te hou. Andersins, as bespreking, begin en afwerking van die spel te veel moeite verg, sal niemand dit wil gebruik nie.

Waarom lyk die toestel so industrieel?

Omdat ek nie 'n lasersnyer, 'n CNC, 'n 3D -drukker, 'n verfynde etiketmaker gehad het nie, ens. U verbeter dit graag en maak dit mooier.

Waarom nie net 'n app implementeer en 'n goedkoop tablet met dieselfde funksie teen die muur plak nie?

Programme, programme oral. Mense hou daarvan om fisies met dinge te kommunikeer en tik nie net op 'n plat skerm nie.

Aanbeveel: