Sisukord:

Lihtne Kickeri oleku- ja reserveerimissüsteem koos lõdva integreerimisega: 12 sammu (piltidega)
Lihtne Kickeri oleku- ja reserveerimissüsteem koos lõdva integreerimisega: 12 sammu (piltidega)

Video: Lihtne Kickeri oleku- ja reserveerimissüsteem koos lõdva integreerimisega: 12 sammu (piltidega)

Video: Lihtne Kickeri oleku- ja reserveerimissüsteem koos lõdva integreerimisega: 12 sammu (piltidega)
Video: Part 1 - Wuthering Heights Audiobook by Emily Bronte (Chs 01-07) 2024, Juuli
Anonim
Lihtne Kickeri oleku- ja reserveerimissüsteem koos lõtva integratsiooniga
Lihtne Kickeri oleku- ja reserveerimissüsteem koos lõtva integratsiooniga

Ettevõttes, kus ma töötan, on kicker -laud. Ettevõte asub paljudel korrustel ja mõnel töötajal kulub laua juurde jõudmiseks kuni 3 minutit ja … mõistmaks, et laud on juba hõivatud.

Seetõttu tekkis idee luua omamoodi lihtne olekuülekande- ja broneerimissüsteem, mis töötab reaalajas.

Ettevõte kasutab Slacki suhtlusvahendit, kus igal töötajal on konto. Meil on isegi #kicker kanal ainult aruteludeks … kickerist. Kanalit saab kasutada omamoodi "sisenemispunktina" broneerimiseks ja teavitamiseks praeguse tabeli olekust.

Nagu tavaliselt, on sellise süsteemi käsitlemiseks palju kontseptsioone. Kuid üldiselt ilmnes neis kõigis üks põhireegel: süsteemi kasutamine peab olema lihtne ja ilma liigsete toiminguteta.

Seade ja teenus pole kleebislaua külge kinnitatud ja neid saab kasutada mis tahes "ühise ressursi" jaoks (nt pingpongilaud, konsool jne …), mis vajab mingisugust oleku levitamise ja broneerimise lahendust.

Niisiis, alustame…

1. samm: kontseptsiooni ja prototüüpide tõestamine

Tõestus kontseptsioonist ja prototüüpimisest
Tõestus kontseptsioonist ja prototüüpimisest
Tõestus kontseptsioonist ja prototüüpimisest
Tõestus kontseptsioonist ja prototüüpimisest
Tõestus kontseptsioonist ja prototüüpimisest
Tõestus kontseptsioonist ja prototüüpimisest

Laias laastus oli idee ehitada seade, mis asetatakse kicker -laua kõrvale järgides neid nõudeid:

  • mõned näitajad tabeli praeguse oleku kohta - kui seisate selle kõrval, peaksite teadma, et see on tasuta või reserveeritud ja keegi tuleb 3 minuti pärast mängima. Foorid sobivad ideaalselt ideega:

    • roheline tuli - tasuta mängida,
    • kollane tuli - reserveeritud,
    • punane tuli - hõivatud.
  • nupp (id) Saate klõpsata enne ja pärast mängu, et kõik teised saaksid teavet praeguse tabeli oleku kohta. Ühe lülitusnupu asemel otsustasin kasutada kahte eraldatud nuppu:

    • punane nupp - hõivake laud, alustage mängu (pärast broneerimist või ajutist).
    • roheline nupp - vabastamistabel.
  • mõni kuva, mis sisaldab üksikasjalikumat teavet selle kohta, mis toimub - broneeringu ajalõpp, korduv tabeli olek, mänguaeg jne …

Broneeringu all pean silmas ainult järgmise 3 minuti broneeringut. Süsteem ei ole konstrueeritud nii, et kasutaja saaks laua õigel ajal reserveerida (nt 14:00). See ei tööta nagu reserveerimine nt. restoranides, kuid ainult mõne minuti pärast.

LAN -ühenduse puudumise tõttu on ainus võimalus kasutada WLAN -i - see on igal juhul parim valik. Süsteemi aju peab Slacki kanalilt käskluste saatmiseks ja vastuvõtmiseks kasutama Slack API -d. Kõigepealt proovisin kasutada NodeMCU -d. Mul oli võimalik saada ja vastu võtta sõnumeid Slacki ja sealt, kuid HTTPS -i kasutamise ja ka Slacki "tervitussõnumi" suuruse (~ 300 kB) tõttu kaotas NodeMCU ühenduse ja/või sai mõne imeliku erandi, mida ma ei suutnud lahendada Interneti kaudu kaevamise teel.

Seega otsustasin kasutada midagi võimsamat: Raspberry Pi 3 (WiFi -ga Zero W polnud sel ajal veel välja antud). RPi omamisega saaksin rakenduse keele C -lt Java -le vahetada, kuna see on minu jaoks mugavam - seega oli see eelis. Täna saate kasutada midagi võimsamat kui NodeMCU ja vähem võimsat kui RPi. Vaarika null ehk?

Pärast esimese prototüübi ehitamist leivalauale koos mõne hullumeelse juhtmestikuga, palju visandamist ja prototüüpimist, tundus süsteem, et see võib töötada.

Kõigi nende ideede ja PoC -ga töötades hakkasin esipaneelil kavandama ülaltoodud esemete erinevaid paigutusi, nii et need oleksid kõige informatiivsemad ja mugavamad kasutada. Saate vaadata mõnda muud ettepanekut, võib -olla mõni sobib teile paremini. Viimane oli minu valitud.

Samm: materjalid ja tööriistad

Materjalid, mida kasutasin:

  • Kast
  • Raspberry Pi, microSD -kaart, mikro -USB toiteallikas
  • Rohelised ja punased arkaadinupud
  • 16x2 LCD ekraan
  • LEDid - kasutasin RGB -d, kuid saate kasutada õiget värvi
  • Meeste ja naiste ja naiste ja naiste leivaplaadi hüppajakaablid
  • Micro USB liides
  • Mini leivaplaat lihtsalt mõne juhtme ühendamiseks
  • Lühike mikro -USB -kaabel, mis töötab RPi toiteks kasti sees hüppajana

Tööriistad, mida kasutasin:

  • Terav nuga (nt utiliit vaiba lõikamiseks)
  • Pöörlev tööriist
  • Kuum liimipüstol
  • Jootmisjaam
  • Tangid, diagonaaltangid/külglõikurid
  • Kruvikeeraja
  • Fail
  • Mina

Tööriistad, mida tõenäoliselt vajate:

Kõik ülaltoodud, kuid "mina" asemel peaks see olema: "sina":)

Samm: esipaneel - LCD -ekraan

Esipaneel - LCD -ekraan
Esipaneel - LCD -ekraan
Esipaneel - LCD -ekraan
Esipaneel - LCD -ekraan

LCD -ekraani auk oli lihtne. Lihtsalt ristkülik, mis sobib minu LCD -ekraanile. Pärast terava noaga lõikamist mõistsin, et karbi plast on üsna kõva. Niisiis kasutasin akna lõikamiseks ja servade poleerimiseks puurimisvahendit.

Samm: esipaneel - oleku LED -id

Esipaneel - oleku LED -id
Esipaneel - oleku LED -id
Esipaneel - oleku LED -id
Esipaneel - oleku LED -id

LED -augud on samuti lihtsad. Võtsin puidu jaoks lihtsalt suure puuri ja siis poleerisin servad puurimisvahendiga. Suured valgusdioodid sobivad ideaalselt tihedalt. Ma ei jootnud veel ühtegi takisti LED -ide juurde - jätsin selle kokkupanekuks.

Samm: esipaneel - nupud

Esipaneel - nupud
Esipaneel - nupud
Esipaneel - nupud
Esipaneel - nupud
Esipaneel - nupud
Esipaneel - nupud
Esipaneel - nupud
Esipaneel - nupud

Nende kahe suure nupu suurim probleem oli nende ühtlane paigutamine õigete vahedega. Lõikasin augud lihtsalt oma puurimisseadme abil, kuna saaksin läbimõõtu järk -järgult suurendada, nii et nupud oleksid tihedalt kinni.

6. samm: toitepistik

Toitepistik
Toitepistik

Väike auk mikro -USB toite jaoks oli väga delikaatne töö. Tahtsin, et auk oleks võimalikult sobiv, nii et veetsin siin palju aega poleerimiseks. Aga lõpptulemusega jäin rahule.

Seejärel lõikasin lühikese mini -USB -kaabli, mis asetati kasti. Üks külg on ühendatud RPi -ga ja teiselt poolt joodeti kõik kaablid mikro -USB -liidesesse vastavalt USB -pistikutele.

Seejärel liimisin väikese trükkplaadi kuumalt liimiga otse kasti külge (seda on näha fotol kokkupanekuetapil).

Samm: kõik kokku panemine

Kõike kokku pannes
Kõike kokku pannes
Kõike kokku pannes
Kõike kokku pannes
Kõike kokku pannes
Kõike kokku pannes

Esmalt jootsin 3,3V voltide jaoks LED -idele nende värvi (pinge) järgi sobivad takistid. Punase jaoks kasutasin 100Ω, kollase jaoks kaks takisti 82 ja 100 (roheline ja punane sõlm) ja rohelise jaoks 100Ω. LED -kalkulaatori jaoks saate kasutada ühte veebitakistit. Kuid palun uurige ise vastavalt heledusele ja täpsele värvitoonile, mida soovite saavutada.

Kollase LED -i jalad joodeti kokku, nii et LED -i saab RPi abil juhtida vaid ühe tihvtiga.

Selle pinout diagrammi järgi:

LED -sõlmed olid ühendatud:

  • Roheline LED - GPIO1 RPI -l
  • Kollane LED (mõlemad jalad) RPIO -le GPIO2
  • Punane LED kuni GPIO0 RPi -l

Ühendasin LCD, kasutades RP2 tihvtide I2C tihvte

  • LCD SDA kuni GPIO8 RPi -l
  • LCD SCL kuni GPIO9 RPi -l
  • LCD PWR kuni 5V RPi juures
  • LCD GND kuni GND RPi -l

Lisakaitseks liimiti LCD kupli külge.

Ühendasin väikese leivalauaga 3.3V ja GND, et saaksin neid nuppude jaoks kasutada.

Roheline nupp ühendati 3.3V mini leivalaua kaudu ja GPIO5 -ga RPi kaudu.

Punane nupp ühendati 3.3V mini leivalaua kaudu ja GPIO4 -ga RPi kaudu.

Nii et alati, kui nuppu vajutate, on RPi tihvt kõrgel tasemel.

Mini bradboard töötab suurepäraselt, nii et jätsin kõik juhtmed PCB -le jootmise vahele. Selle asemel katsin lihtsalt mini leivalaua kuuma liimiga, et kaablid maha ei kukuks.

Samuti liimisin karbi külge kuumalt RPi katte, nii et see ei hakka seestpoolt kõikuma.

Keerasin esipaneeli kogu kraamiga sisse.

Seejärel trükkisin, lõikasin ja kleepisin valgusfooride ja nuppude kõrvale lihtsaid silte.

8. samm: vaikne konfigureerimine

Slack Configuration
Slack Configuration
Slack Configuration
Slack Configuration

Looge oma meeskond saidil Slack.com või kasutage seda, mis teil on ja teil on vähemalt administraatori õigused.

Looge teenuses Slack teenuse Slack integreerimiseks kanal (või jätke kanal loomata, kui soovite juba olemasolevat kanalit kasutada).

Lisage oma meeskonnale sissetulevate Webhookide integreerimine. Valige kanal ja kopeerige veebihaakimise URL.

Lisage oma meeskonnale robotite integreerimine. Valige oma robotile mõni nimi ja kopeerige bot -i API -märk.

Teie kohandatud integratsioonide haldamise leht peaks välja nägema nagu pildil.

Peate kutsuma roboti oma kanali liikmeks. Seda saate teha juba kanali loomise ajal.

Kui soovite teenust hiljem kohandada, kontrollige palun Slack API -d.

9. samm: tarkvara juurutamine

Kasutasin Raspbiani oma RPi operatsioonisüsteemina, järgides seda õpetust. Palun andesta mulle, ma jätan selle seletamise vahele, kuna see on paljudes kohtades juba dokumenteeritud ja protsess on lihtne. Loodan, et olete piisavalt osav ja kogenud, et RPi iseseisvalt seadistada. Ärge unustage oma Raspberry Pi seadistada WiFi -ühendust;)

Nagu prototüüpimise osas mainitud, kasutasin kogu süsteemi aju rakendamiseks Java -d. Kood on saadaval GitHubis -

Java teegid, mida kasutasin:

  • pi4j - Java -i Raspberry Pi kasutamiseks
  • Springboot kui rakendusplaat
  • allbegray/slack-api kui Slack integratsioon

Peate muutma konfiguratsioonifaili kaustas src/resources/config.properties. Slack API kasutamiseks peate konfigureerima 3 kirjet:

  • channelName - kanali nimi, kuhu soovite postitada oleku muutusi ja saada käske.
  • slackBotToken - teie Slacki meeskonna integratsioonides konfigureeritud roboti märk, mida kasutatakse sõnumite postitamiseks ülalmainitud kanalile. Pange tähele, et peate Slack Boti lisama kanali liikmeks.
  • webhookUrl - URL, mille saate Slack Team'i kohandatud integratsioonidest.

Projekt on Mavenized, nii et selle ehitamiseks sisestage lihtsalt (vajate vähemalt Java 8 ja Maveni installimist):

mvn puhas pakett

Ja sihtmärgi väsimusest leiate Springbooted JAR -faili. Teenuse käivitamiseks toimige järgmiselt.

sudo java -jar kicker-reserveerimine-teenus-0.3.0.jar

Panin sellele reale skripti.sh ja lisasin selle automaatseks käivitamiseks. Nii et alati, kui toide on sisse lülitatud, käivitub teenus automaatselt.

LCD -ekraanile on vaja ühte erilist selgitust.

Proovisin erinevaid lähenemisviise/teeke, et juhtida RPi kaudu I2C -ga LCD -d, kuid ma lihtsalt ei suutnud. Mõne LCD -ekraan ei töötanud korralikult, mõne jaoks aga prügi.

Aga üks asi töötas väga kenasti just karbist välja. Leidsin utiliidi käsurea tööriista, mida saate kasutada LCD juhtimiseks. Nii otsustasin seda tööriista lihtsalt Java -st kasutada. See töötab niimoodi, et iga kord, kui tahan midagi LCD -ekraanil kuvada, kutsutakse (koos ettevalmistatud parameetritega) tavaline Linuxi protsess (lcdi2c).

Peate tööriista alla laadima ja paigutama selle teenuse JAR kõrvale

Selle tööriista kasutamine on omamoodi häkkimine ja rumal lahendus, kuid ma järgin inseneriteaduse esimest reeglit:

Kui see on rumal, aga töötab, pole see rumal

10. samm: kasutusjuhend

Kasutusjuhend
Kasutusjuhend

Saate kontrollida kicker -tabeli praegust olekut loodud Slack -kanalil, sisestades käsu "status" (või mõne aja pärast "st") või otse kontrollides seadme valgusfoore.

Kui soovite lihtsalt mängida - vajutage punast nuppu. Slacki kanalile saadetakse teade, milles on teave, et kicker -tabel on hõivatud. Kui olete mängimise lõpetanud - vajutage rohelist nuppu. Slacki kanalile saadetakse sõnum, milles on teave, et kicker -lauda saab tasuta mängida.

Samuti muutuvad valgusfoorid ja LCD -ekraanil kuvatakse üksikasjalikku teavet.

Igaks juhuks, kui unustate laua vabastada pärast mängimise lõpetamist, on aeg määratud 20 minutile. Kui mängite endiselt ja vajate rohkem aega, vajutage uuesti punast nuppu ja mängu pikendatakse 5 minuti võrra (rakendage ainult siis, kui enne aegumist on jäänud vähem kui 5 minutit). Taasesituse ajalõpp kuvatakse LCD -ekraanil.

Kicker tabeli reserveerimiseks kirjutage Slacki kanalile sõnum „reserve” (või lihtsalt: „res”).

Kollane valgusfoor lülitub sisse, teavitades teisi lööjalaua lähedal olevaid inimesi, et see on reserveeritud, ja varsti tuleb keegi mängima.

Broneeringu ajalõpp on seatud 3 minutile. Pärast seda lülitab kicker tabel oma oleku vabaks mängimiseks.

Vajadusel saate broneeringu tühistada, kirjutades Slacki kanalile „Tühista”.

Süsteemil on ka muid väiksemaid funktsioone, näiteks:

  • Pärast broneerimist külmutatakse nupud 5 sekundiks. Seda selleks, et olukordi ära hoida, et keegi samal ajal ja mõni millisekund hiljem vajutab punast nuppu, arvates, et tema on laua taga, kuid teadmata, et keegi reserveeris laua vaid milisekundit varem.
  • Mis tahes nupu vajutamine külmutab mõlemad pooleks sekundiks. Seda selleks, et vältida hullumeelseid nupuvajutusi, nii et Slacki kanalit ei saadetaks nii palju rämpsposti.
  • Slacki tasuta versioon võimaldab kogu meeskonnale salvestada 10 000 sõnumit. Mõne sõnumi säilitamiseks kustutab teenus reserveerimise/olekusüsteemiga seotud vanad sõnumid) ja säilitab neist ainult viimased 6. Miks 6? Sest enamasti on 2 staatusstsenaariumi: "Reserved-Occupied-Free" ja "Occupied-Free". Seega saab süsteem salvestada vähemalt 2 täielikult hõivatud seanssi. Kõigi süsteemisõnumite puhastamiseks tippige käsk "clean" (või "clear").

11. samm: vabastamine

Vabastamine
Vabastamine
Vabastamine
Vabastamine

Seni (selle juhendi avaldamise hetkeni) töötab süsteem 2,5+ kuud ja seda kasutab rohkem kui 30 inimest. Kicker tabeli oleku värskendamise tõttu teame alati, millal see on vaba või hõivatud, nii et me ei kaota enam aega edasi -tagasi. Ühendus ja teenus on väga stabiilsed, nii et saame sellele loota.

Siiamaani on kõik korras…

12. samm: KKK

Miks on aeg reserveeritud 3 minutile?

Maksimaalne broneerimisaeg on 3 minutit, võtke see vastu nii, nagu teile koodis meeldib. Üldjuhul juhtub seda harva, kui möödub 3 minutit ja broneering aegub. Enamikul juhtudel tuleb keegi lõpuks kohale ja istub laua taha.

Miks on mängimise ajalõpp seatud 20 minutile?

Olenevalt mängijatest on keskmine mänguaeg ~ 10 minutit. Kui teil on vaja kauem mängida, vajutage uuesti punast nuppu, kui on jäänud vähem kui 5 minutit ja ajalõpp pikeneb tagasi 5 minutini. See ajalõpp on seatud juhuks, kui keegi unustab tabeli vabastada.

Miks pole seadmel broneeringu kinnitamiseks PIN -koodi; sisselogimist ja paroole pole?

Põhiidee oli hoida-see-lihtne-loll. Vastasel juhul, kui broneerimine, mängu alustamine ja lõpetamine vajavad liiga palju pingutusi, ei taha keegi seda kasutada.

Miks näeb seade nii tööstuslikult kole välja?

Kuna mul polnud laserlõikurit, CNC -d, 3D -printerit, väljamõeldud värvilist siltide tegijat jne. Teil on selle üle täiustamine ja kaunimaks muutmine väga hea meel.

Miks mitte lihtsalt rakendada mõni äpp ja kleepida sama funktsionaalsusega odav tahvelarvuti seinale?

Rakendused, rakendused kõikjal. Inimestele meeldib asjadega füüsiliselt suhelda ja mitte ainult lameekraanidele koputada.

Soovitan: