Inhaltsverzeichnis:
- Schritt 1: Konzeptnachweis und Prototyping
- Schritt 2: Materialien und Werkzeuge
- Schritt 3: Frontplatte - LCD-Bildschirm
- Schritt 4: Frontplatte - Status-LEDs
- Schritt 5: Frontplatte - Tasten
- Schritt 6: Stromanschluss
- Schritt 7: Alles zusammenfügen
- Schritt 8: Slack-Konfiguration
- Schritt 9: Softwareimplementierung
- Schritt 10: Gebrauchsanweisung
- Schritt 11: Loslassen
- Schritt 12: Häufig gestellte Fragen
Video: Einfaches Kicker-Status- und Reservierungssystem mit Slack-Integration - Gunook
2024 Autor: John Day | [email protected]. Zuletzt bearbeitet: 2024-01-30 07:16
In einer Firma, in der ich arbeite, gibt es einen Kickertisch. Das Unternehmen belegt viele Stockwerke und manche Mitarbeiter brauchen bis zu 3 Minuten, um an den Tisch zu kommen und…zu erkennen, dass der Tisch schon besetzt ist.
Daher entstand die Idee, eine Art einfaches Status-Rundfunk- und Reservierungssystem zu bauen, das in Echtzeit arbeitet.
Das Unternehmen verwendet das Slack-Kommunikationstool, bei dem jeder Mitarbeiter ein Konto hat. Wir haben sogar einen #kicker-Kanal nur für Diskussionen über…Kicker. Der Kanal könnte als eine Art "Einstiegspunkt" für die Reservierung verwendet werden und über den aktuellen Tischstatus informiert werden.
Wie üblich gibt es viele Konzepte, wie man mit einem solchen System umgeht. Aber generell tauchte in allen eine Grundregel auf: Es muss einfach in der Handhabung sein, ohne übertriebene Arbeitsschritte im Umgang mit dem System.
Das Gerät und der Dienst sind nicht an den Kickertisch gebunden und können für jede "gemeinsame Ressource" (wie Tischtennisplatte, Konsole usw.) verwendet werden, die eine Art Statusbroadcasting- und Reservierungslösung benötigt.
Also lasst uns anfangen…
Schritt 1: Konzeptnachweis und Prototyping
Grob war die Idee, ein Gerät zu bauen, das neben dem Kickertisch liegt und folgende Anforderungen erfüllt:
-
einige Indikatoren über den aktuellen Tischstatus - wenn Sie daneben stehen, sollten Sie wissen, dass es frei oder reserviert ist und in 3 Minuten jemand zum Spielen kommt. Ampel passt perfekt zur Idee:
- grünes Licht - kostenlos spielbar,
- gelbes Licht - reserviert,
- rotes Licht - besetzt.
-
Schaltfläche(n) Sie können vor und nach dem Spiel klicken, damit alle anderen über den aktuellen Tischstatus informiert werden. Anstelle von 1 Umschalttaste habe ich mich für 2 getrennte Tasten entschieden:
- roter Knopf - den Tisch besetzen, ein Spiel starten (nach Reservierung oder ad hoc).
- grüne Taste - Tisch freigeben.
- einige Anzeigen mit detaillierteren Informationen über "was los ist" - Reservierungs-Timeout, wiederholter Tischstatus, Spielzeit-Timeout usw.
Mit Reservierung meine ich nur die Reservierung für die nächsten 3 Minuten. Das System ist nicht so ausgelegt, dass der Benutzer den Tisch zu einer genauen Zeit (z. B. 14:00 Uhr) reservieren kann. Es funktioniert nicht wie eine Reservierung z. B. in Restaurants, aber nur für die nächsten Minuten.
Da keine LAN-Verbindung vorhanden ist, ist die einzige Option die Verwendung von WLAN - es ist sowieso die beste Option. Das Gehirn des Systems muss die Slack-API verwenden, um Befehle vom Slack-Kanal zu senden und zu empfangen. Zuerst habe ich versucht, NodeMCU zu verwenden. Ich konnte Nachrichten von und zu Slack empfangen und empfangen, aber aufgrund der HTTPS-Nutzung und der Größe der "Willkommensnachricht" von Slack (~ 300 kB) verlor NodeMCU die Verbindung und / oder bekam eine seltsame Ausnahme, die ich beim Graben durch das Internet nicht beheben konnte.
Also entschied ich mich für etwas Mächtigeres: Raspberry Pi 3 (Zero W mit WiFi war zu diesem Zeitpunkt noch nicht erschienen). Mit RPi konnte ich die Implementierungssprache von C auf Java umstellen, da es für mich bequemer ist - das war also ein Vorteil. Heute können Sie etwas Mächtigeres als NodeMCU und weniger Mächtiges als RPi verwenden. Raspberry Zero vielleicht?
Nach dem Bau des ersten Prototyps auf einem Steckbrett mit einigen verrückten Verkabelungen, viel Skizzieren und Prototyping sah das System so aus, als könnte es funktionieren.
Mit all diesen Ideen und funktionierendem PoC begann ich, verschiedene Platzierungskonfigurationen der oben genannten Elemente auf einem Frontpanel zu planen, damit sie am informativsten und bequemsten zu verwenden sind. Sie können einige der anderen Vorschläge überprüfen, vielleicht passen einige besser zu Ihnen. Der letzte war der von mir Auserwählte.
Schritt 2: Materialien und Werkzeuge
Materialien die ich verwendet habe:
- Kasten
- Raspberry Pi, microSD-Karte, Micro-USB-Netzteil
- Grüne und rote Arcade-Tasten
- 16x2 LCD-Bildschirm
- LEDs - Ich habe RGB verwendet, aber Sie können die richtige Farbe verwenden
- Stecker zu Buchse und Buchse zu Buchse Steckbrett-Überbrückungskabel
- Micro-USB-Schnittstelle
- Mini-Steckbrett, nur um einige Drähte anzuschließen
- Kurzes Micro-USB-Kabel, das als Jumper in der Box dient, um das RPi. mit Strom zu versorgen
Werkzeuge, die ich verwendet habe:
- Scharfes Messer (z. B. Universalmesser zum Schneiden von Teppichen)
- Drehwerkzeug
- Heißklebepistole
- Lötstation
- Zangen, Diagonalzangen/Seitenschneider
- Schraubenzieher
- Datei
- Mir
Werkzeuge, die Sie wahrscheinlich benötigen:
All dies, aber anstelle von "Ich" sollte es sein: "Du":)
Schritt 3: Frontplatte - LCD-Bildschirm
Loch für LCD-Bildschirm war unkompliziert. Nur ein Rechteck, das zu meinem LCD-Bildschirm passt. Nachdem ich versucht hatte, es mit einem scharfen Messer zu schneiden, stellte ich fest, dass der Kunststoff der Schachtel ziemlich hart ist. Also habe ich ein Bohrwerkzeug verwendet, um das Fenster zu schneiden und die Kanten zu polieren.
Schritt 4: Frontplatte - Status-LEDs
LED-Löcher sind auch unkompliziert. Ich habe einfach einen großen Bohrer für Holz genommen und dann die Kanten mit Bohrwerkzeug poliert. Die großen LEDs passten perfekt. Ich habe noch keine Widerstände an die LEDs gelötet - ich habe es für den Zusammenbau belassen.
Schritt 5: Frontplatte - Tasten
Das größte Problem bei diesen 2 großen Tasten war, sie gleichmäßig mit dem richtigen Abstand zu platzieren. Ich schneide die Löcher nur mit meinem Bohrwerkzeug, da ich den Durchmesser Schritt für Schritt erhöhen konnte, damit die Knöpfe fest sitzen.
Schritt 6: Stromanschluss
Ein kleines Loch für die Micro-USB-Stromversorgung war eine sehr heikle Aufgabe. Ich wollte, dass das Loch so fit wie möglich ist, also habe ich hier viel Zeit zum Polieren verbracht. Aber mit dem Endergebnis war ich zufrieden.
Dann schneide ich ein kurzes Mini-USB-Kabel, das in die Box gelegt wurde. Auf der einen Seite wird es in RPi gesteckt, auf der anderen Seite wurden alle Kabel entsprechend der USB-Pinbelegung an die Micro-USB-Schnittstelle gelötet.
Dann habe ich die kleine Platine direkt auf die Box geklebt (auf einem Foto im Montageschritt zu sehen).
Schritt 7: Alles zusammenfügen
Zuerst habe ich den LEDs entsprechend ihrer Farbe (Spannung) entsprechende Widerstände für 3,3V Volt angelötet. Ich habe 100Ω für Rot, zwei Widerstände 82 und 100 für Gelb (grüner und roter Knoten) und 100Ω für Grün verwendet. Sie können den Online-Widerstand für LED-Rechner verwenden. Aber bitte recherchieren Sie selbst nach der Helligkeit und dem genauen Farbton, den Sie erreichen möchten.
Die Beine der gelben LED wurden zusammengelötet, sodass die LED selbst nur über einen Pin am RPi gesteuert werden kann.
Nach diesem Pinbelegungsdiagramm:
LED-Knoten wurden angeschlossen:
- Grüne LED - GPIO1 auf Rpi
- Gelbe LED (beide Beine) an GPIO2 auf RPi
- Rote LED zu GPIO0 auf RPi
Ich habe das LCD mit I2C-Pins an RPi-Pins angeschlossen
- LCD-SDA zu GPIO8 auf RPi
- LCD SCL zu GPIO9 auf RPi
- LCD PWR bis 5V auf RPi
- LCD GND zu GND auf RPi
Als zusätzlicher Schutz wurde das LCD mit Heißkleber auf die Box geklebt.
Ich habe 3,3 V und GND an das kleine Steckbrett angeschlossen, damit ich sie für Tasten verwenden konnte.
Der grüne Knopf wurde über ein Mini-Steckbrett mit 3,3 V und auf RPi mit GPIO5 verbunden.
Der rote Knopf wurde über ein Mini-Steckbrett mit 3,3 V und auf RPi mit GPIO4 verbunden.
Jedes Mal, wenn Sie die Taste drücken, befindet sich der RPi-Pin im High-Zustand.
Das Mini-Bradboard funktioniert gut, also habe ich das Löten aller Drähte in die Leiterplatte übersprungen. Stattdessen habe ich nur das Mini-Steckbrett mit Heißkleber bedeckt, damit die Kabel nicht abfallen.
Ich habe auch die Abdeckung von RPi heiß auf die Box geklebt, damit sie nicht im Inneren wackelt.
Ich schraubte die Frontplatte mit all dem Zeug im Inneren.
Dann habe ich einfache Etiketten gedruckt, ausgeschnitten und neben die Ampeln und Knöpfe geklebt.
Schritt 8: Slack-Konfiguration
Erstelle dein Team auf Slack.com oder verwende das, das du hast und du hast mindestens Administratorrechte.
Erstellen Sie in Slack einen Kanal für die Slack-Integration des Dienstes (oder überspringen Sie das Erstellen eines Kanals, wenn Sie einen bereits vorhandenen verwenden möchten).
Fügen Sie die Integration eingehender Webhooks zu Ihrem Team hinzu. Wählen Sie den Kanal aus und kopieren Sie die Webhook-URL.
Fügen Sie Ihrem Team Bots-Integration hinzu. Wählen Sie einen Namen für Ihren Bot und kopieren Sie das Bot-API-Token.
Die Seite zur Verwaltung benutzerdefinierter Integrationen sollte wie auf dem Bild aussehen.
Sie müssen den Bot als Mitglied Ihres Kanals einladen. Sie können dies bereits beim Erstellen eines Kanals tun.
Wenn Sie den Dienst später anpassen möchten, überprüfen Sie bitte die Slack-API.
Schritt 9: Softwareimplementierung
Ich habe Raspbian als Betriebssystem für mein RPi verwendet, indem ich diesem Tutorial gefolgt bin. Bitte verzeihen Sie mir, dass ich es überspringen werde, es zu erklären, da es an vielen Stellen bereits dokumentiert ist und der Prozess einfach ist. Ich hoffe, Sie sind kompetent und erfahren genug, um RPi selbst einzurichten. Bitte vergessen Sie nicht, den WLAN-Zugang auf Ihrem Raspberry Pi zu konfigurieren;)
Wie im Abschnitt Prototyping erwähnt, habe ich Java verwendet, um das Gehirn des gesamten Systems zu implementieren. Der Code ist auf GitHub verfügbar -
Die von mir verwendeten Java-Bibliotheken:
- pi4j - um Raspberry Pi aus Java zu verwenden
- Springboot als Anwendungsplattform
- allbegray/slack-api als Slack-Integration
Sie müssen die Konfigurationsdatei in src/resources/config.properties bearbeiten. Es gibt 3 Einträge, die Sie konfigurieren müssen, um die Slack-API zu verwenden:
- channelName - Name des Kanals Sie möchten Statusänderungen posten und Befehle erhalten.
- slackBotToken - Token eines Bots, der in Ihren Slack-Team-Integrationen konfiguriert ist und verwendet wird, um Nachrichten an den oben genannten Kanal zu senden. Bitte beachten Sie, dass Sie Slack Bot als Mitglied des Kanals hinzufügen müssen.
- webhookUrl - die URL, die Sie von den benutzerdefinierten Integrationen von Slack Team erhalten können.
Das Projekt ist Mavenized, um es zu erstellen, geben Sie einfach ein (Sie benötigen mindestens Java 8 und Maven installiert):
mvn sauberes Paket
Und im Zielverzeichnis finden Sie die Springbooted JAR-Datei. So starten Sie einen Dienst:
sudo java -jar kicker-reservation-service-0.3.0.jar
Ich habe diese Zeile auf.sh script gesetzt und als Autostart hinzugefügt. Immer wenn das Gerät eingeschaltet ist, startet der Dienst automatisch.
Eine besondere Erklärung ist für das LCD erforderlich.
Ich habe verschiedene Ansätze / Bibliotheken ausprobiert, um LCD über I2C von RPi zu steuern, aber ich bin einfach gescheitert. Bei einigen funktionierte das LCD nicht richtig, bei anderen zeigte es Müll.
Aber eine Sache funktionierte sehr gut direkt aus der Box. Es ist das Dienstprogramm-Befehlszeilentool, das ich gefunden habe, mit dem Sie das LCD steuern können. Also habe ich mich entschieden, dieses Tool einfach direkt aus Java heraus zu verwenden. Es funktioniert so, dass jedes Mal, wenn ich etwas auf dem LCD-Bildschirm anzeigen möchte, ein normaler Linux-Prozess (lcdi2c) (mit vorbereiteten Parametern) aufgerufen wird.
Sie müssen das Tool herunterladen und neben dem JAR-Dienst platzieren
Die Verwendung dieses Tools ist eine Art Hack und eine dumme Lösung. Aber ich folge der 1. Regel der Technik:
Wenn es dumm ist, aber es funktioniert … es ist nicht dumm
Schritt 10: Gebrauchsanweisung
Sie können den aktuellen Status der Kickertabelle im erstellten Slack-Kanal überprüfen, indem Sie den Befehl "status" (oder kurz "st") eingeben oder direkt die Ampel auf dem Gerät überprüfen.
Wenn Sie nur spielen möchten, drücken Sie die rote Taste. Eine Nachricht wird an den Slack-Kanal gesendet mit der Information, dass der Kickertisch besetzt ist. Wenn Sie mit dem Spielen fertig sind, drücken Sie die grüne Taste. Eine Nachricht wird an den Slack-Kanal gesendet mit der Information, dass der Kickertisch kostenlos gespielt werden kann.
Die Ampeln ändern sich auch und der LCD-Bildschirm zeigt einige detaillierte Informationen an.
Für den Fall, dass Sie nach Beendigung des Spiels vergessen, den Tisch freizugeben, gibt es eine Zeitüberschreitung von 20 Minuten. Wenn Sie noch spielen und mehr Zeit benötigen, drücken Sie erneut den roten Knopf und das Spiel wird um 5 Minuten verlängert (gilt nur, wenn bis zum Timeout weniger als 5 Minuten verbleiben). Die Spielzeitüberschreitung wird auf dem LCD-Bildschirm angezeigt.
Um einen Kickertisch zu reservieren, schreibe eine Nachricht „reserve“(oder einfach: „res“) an den Slack-Kanal.
Die gelbe Ampel wird eingeschaltet und informiert andere in der Nähe des Kickertisches, dass es reserviert ist und bald jemand zum Spielen kommt.
Das Reservierungs-Timeout ist auf 3 Minuten eingestellt. Danach wechselt der Kicker-Tisch seinen Status auf Free to Play.
Bei Bedarf können Sie die Reservierung stornieren, indem Sie im Slack-Kanal „Stornieren“schreiben.
Das System hat auch einige andere kleinere Funktionen wie:
- Nach der Reservierung werden die Schaltflächen für 5 Sekunden eingefroren. Dies dient dazu, Situationen zu vermeiden, dass jemand in der gleichen Zeit reserviert und eine Millisekunde später den roten Knopf drückt und denkt, dass er/sie derjenige ist, der den Tisch besetzt, aber ohne zu wissen, dass jemand den Tisch nur eine Millisekunde zuvor reserviert hat.
- Das Drücken einer beliebigen Taste friert beide für eine halbe Sekunde ein. Dies dient dazu, verrückte Schaltflächenklicker zu verhindern, damit der Slack-Kanal nicht so viel Spam erhält.
- Die kostenlose Version von Slack ermöglicht es, 10000 Nachrichten vom gesamten Team zu speichern. Um einige der Nachrichten zu bewahren, löschen Sie die alten Nachrichten zum Reservierungs-/Statussystem) und behalten Sie nur die letzten 6 davon. Warum 6? Denn am häufigsten gibt es 2 Statusszenarien: "Reserviert-Occupied-Free" und "Occupied-Free". Das System kann also mindestens 2 volle belegte-freie Sitzungen speichern. Um alle Systemmeldungen zu bereinigen, geben Sie den Befehl "clean" (oder "clear") ein.
Schritt 11: Loslassen
Bis jetzt (der Moment der Veröffentlichung dieses instructable) läuft das System seit 2,5+ Monaten und wird von mehr als 30 Personen verwendet. Durch das Kicker-Status-Update wissen wir immer, wann es frei oder besetzt ist, damit wir keine Zeit mehr verlieren. Die Verbindung und der Service sind sehr stabil, sodass wir uns darauf verlassen können.
So weit, ist es gut…
Schritt 12: Häufig gestellte Fragen
Warum ist das Reservierungs-Timeout auf 3 Minuten eingestellt?
3 Minuten ist die maximale Reservierungszeit. Übernehmen Sie diese nach Belieben im Code. Im Allgemeinen wird es selten vorkommen, dass volle 3 Minuten vergehen und die Reservierung abgebrochen wird. In den meisten Fällen kommt irgendwann jemand und besetzt den Tisch.
Warum ist die Spielzeitüberschreitung auf 20 Minuten eingestellt?
Je nach Spieler beträgt die durchschnittliche Spielzeit ~10 Minuten. Wenn Sie länger spielen müssen, drücken Sie die rote Taste erneut, wenn weniger als 5 Minuten verbleiben und das Timeout wird auf 5 Minuten verlängert. Dieses Timeout wird nur für den Fall eingerichtet, dass jemand vergisst, den Tisch freizugeben.
Warum gibt es kein PIN-Pad auf dem Gerät, um die Reservierung zu bestätigen; keine Logins und Passwörter?
Die Hauptidee war, es-einfach-dumm zu halten. Wenn die Reservierung, das Starten und das Beenden des Spiels sonst zu viel Aufwand erfordern, wird es niemand benutzen wollen.
Warum sieht das Gerät so industriell-hässlich aus?
Weil ich keinen Laserschneider, CNC, 3D-Drucker, keinen ausgefallenen farbigen Etikettendrucker usw. hatte. Sie sind mehr als erfreut, es zu verbessern und schöner zu machen.
Warum nicht einfach eine App implementieren und ein billiges Tablet mit der gleichen Funktionalität an die Wand kleben?
Apps, Apps überall. Menschen mögen es, physisch mit Dingen zu interagieren und nicht nur auf einen Flachbildschirm zu tippen.
Empfohlen:
Einfaches BLE mit sehr geringem Stromverbrauch in Arduino Teil 2 - Temperatur- / Feuchtigkeitsmonitor - Rev 3: 7 Schritte
Easy Very Low Power BLE in Arduino Teil 2 – Temperatur-/Feuchtigkeitsmonitor – Rev 3: Update: 23. November 2020 – Erster Austausch von 2 x AAA-Batterien seit 15. Januar 2019 dh 22 Monate für 2x AAA AlkalineUpdate: 7. April 2019 – Rev 3 of lp_BLE_TempHumidity, fügt Datum/Uhrzeit-Plots hinzu, verwendet pfodApp V3.0.362+ und automatische Drosselung, wenn
Erstellen Sie eine Raumstation in TinkerCad Codeblock--Einfaches Tutorial: 7 Schritte (mit Bildern)
Erstellen Sie eine Raumstation in TinkerCad Codeblock||Einfaches Tutorial: Während der Gedanke, im Weltraum zu leben, wie Science-Fiction erscheinen mag, umkreist die Internationale Raumstation die Erde mit einer Geschwindigkeit von fünf Meilen pro Sekunde, während Sie dies lesen, und umkreist die Erde einmal alle 90 Minuten. In diesem Projekt lernen Sie
Einfaches POV erstellen: 6 Schritte (mit Bildern)
How to Make Simple POV: Hiii, heute bin ich zurück mit einem interessanten Projekt LED POV (Persistence of Vision) Mit diesem Projekt können Sie einen Namen mit 5 Buchstaben anzeigen sind anfänger mit arduino dann sollten sie defi
Einfaches BLE mit sehr geringem Stromverbrauch in Arduino Teil 3 - Nano V2-Ersatz - Rev 3: 7 Schritte (mit Bildern)
Einfaches BLE mit sehr geringem Stromverbrauch in Arduino Teil 3 - Nano V2-Ersatz - Rev 3: Update: 7. April 2019 - Rev 3 von lp_BLE_TempHumidity, fügt Datums- / Zeitdiagramme mit pfodApp V3.0.362+ hinzu und automatische Drosselung beim Senden von DatenUpdate: 24. März 2019 – Rev 2 von lp_BLE_TempHumidity, fügt weitere Plotoptionen hinzu und i2c_ClearBus, fügt GT832E
Machen Sie ein einfaches Bewegungssensor-Licht! (PIR): 13 Schritte (mit Bildern)
Machen Sie ein einfaches Bewegungssensor-Licht! (PIR): Machen Sie eine kleine & Einfaches Bewegungssensorlicht mit weniger Aufwand und weniger Komponenten. Ein Anfänger könnte dies auch machen. Ein einfaches Verständnis der Funktionsweise von Transistoren und Kenntnisse über Anode und Kathode sind nur erforderlich, um es spannungsfrei zu machen