Happiness Tracker mit Raspberry Pi bauen~ 6 min.

fertiger Happiness Tracker - Katjasays.com

Mehrmals im Jahr veranstaltet shopping24, die Firma bei der ich arbeite, so genannte Hacking Days, bei denen die Entwickler mal etwas Neues ausprobieren und umsetzen können. Sei es ein Bastelprojekt, das Entwickeln in einer neuen Programmiersprache, das Ausprobieren von neuen Technologien oder das Bauen von coolen Features, auf die sie Lust haben.

Ich habe zusammen mit Tobi und Jan einen Happiness Tracker mit einem Raspberry Pi gebaut. Der Tracker sollte 4 Buttons haben, die für die Stimmungen „Super“, „Gut“, „Nicht so gut“, „Schlecht“ stehen sollten. Eine Statusleuchte sollte permanent leuchten, damit wir sehen können, dass das Gerät funktionsfähig ist. Wenn jemand auf einen der Buttons drückt, wollten wir ein visuelles Feedback in Form eines Hakens haben, sodass die Person direkt sieht, dass der Druck registriert wurde. Mit Hilfe einer kleinen Animation (es leuchtet eine LED nach der anderen auf) wollten wir einen Zeitraum von 5 Sekunden überbrücken, in der das Gerät vor einem nächsten Druck gesperrt ist, sodass man nicht mehrfach hintereinander schnell auf die Buttons drücken kann und somit das Ergebnis verfälscht.

Der Happiness Tracker ist mittlerweile im Eingangsbereich des Büros platziert, sodass die Mitarbeiter beim Vorbeigehen auf einen Button klicken können, um ihre aktuelle Stimmung einzugeben. Diese wird dann im Anschluss in eine Datenbank gepumpt und kann in einem Insights Board (Grafana) eingesehen werden. Und so sieht das Endergebnis aus:

 

Was braucht man für einen Happiness Tracker?

  • Raspberry Pi (inkl. WLAN)
  • Mini SD Karte
  • Breadboard
  • Protoboard
  • LEDs
  • Widerstände
  • Buttons
  • Kabel
  • Schrumpfschlauch
  • Isolierband
  • Gehäuse
  • Klebefolie
  • Netzteil + Kabel

Welches Werkzeug braucht man?

  • Lötkolben + Lötzinn
  • Schraubendreher
  • Bohrmaschine
  • Schleifpapier
  • Zange
  • Heißklebepistole
  • Computer

Wie haben wir den Happiness Tracker gebaut?

Morgens sind wir erstmal zu Conrad gefahren und haben uns das Zubehör wie den Raspberry Pi, die Buttons und die LEDs gekauft. Dann haben wir uns angeschaut, wie man Dinge mit dem Raspberry Pi verbindet und wofür die einzelnen Pins stehen (GPIO, Ground, etc.). Diese Anleitung hat uns dabei super geholfen. Zu Beginn haben wir also erstmal die einzelnen Komponenten, also Raspberry Pi, Widerstände, LEDs, Buttons mit einem Breadboard zusammengesteckt, um zu sehen, ob alles funktioniert und wie wir die einzelnen Komponenten anordnen müssen. Dabei haben wir uns auch überlegt, welche Komponenten an welchen Pin angelötet werden sollen, um diese Positionen für unser Python Skript nutzen zu können.

erstes Zusammenstecken der Komponenten - Katjasays.com

Dann haben wir den Lötkolben angemacht, damit er schonmal aufwärmt und wir ihn dann zum Anlöten der Kabel an die Einzelteile nutzen können.

Lötkolben bereitmachen - Katjasays.com

In der Zwischenzeit haben wir unser Python Skript geschrieben, das zu Beginn definiert, an welchen Pins des Raspberry Pi welcher Button und welche LED platziert ist. Wir haben den einzelnen Stimmungen verschiedene Farben zugeordnet (z.B. grün für „Super“ oder rot für „Schlecht“) und definiert, dass beim Drücken eines Buttons der Counter der jeweiligen Farbe hochgezählt werden soll. Daraufhin haben wir die Success-Animation, also das Aufleuchten des Hakens, definiert. Weiterhin mussten wir noch die Verbindung zu unserem Monitoring (Graphite) herstellen und die Daten mit einer von uns definierten Message dorthin schicken. Um zu sehen, dass der Happiness Tracker wirklich funktionsbereit ist, haben wir der Status LED gesagt, dass sie immer leuchten soll, wenn das Skript läuft. Um sicher zu stellen, dass das Skript nach jedem Neustart des Raspberry Pi automatisch startet, haben wir zum einen einen Autostart für das Skript eingerichtet und zum anderen mussten wir unseren Code um ein pause() erweitern, damit es nicht einfach nur durchläuft und anhält, sondern die ganze Zeit aktiv bleibt. So sieht unser Skript nun aus:

from gpiozero import LED, Button
from time import sleep, time
from datetime import datetime
import socket
import pickle
from signal import pause

try:
    values = pickle.load(open( "save.p", "rb" ))
except (OSError, IOError) as e:
    values = {"red": 0, "green":0, "yellow":0, "blue":0}

SERVER = 'XXX'
PORT = 1234

led_status = LED(2)
led_1 = LED(27)
led_2 = LED(10)
led_3 = LED(11)
led_4 = LED(5)
led_5 = LED(13)
button_green = Button(14)
button_red = Button(18)
button_yellow = Button(23)
button_blue = Button(25)

def button_pressed(button):
    color = get_color(button.pin.number)
    values[color] += 1
    print(str(button.pin.number) + ' button ' + color + ' pressed at ' + datetime.fromtimestamp(time()).strftime('%Y-%m-%d %H:%M:%S') + ' and was pressed ' + str(values[color]) + ' times')
    success()
    send_data(color, values[color])
    pickle.dump(values, open( "save.p", "wb" ) )

def success():
    led_1.on()
    sleep(0.5)
    led_2.on()
    sleep(0.5)
    led_3.on()
    sleep(0.5)
    led_4.on()
    sleep(0.5)
    led_5.on(
    sleep(3)
    led_1.off()
    led_2.off()
    led_3.off()
    led_4.off()
    led_5.off()

def send_data(color, value):
    message = 'business.happiness.' + color + ' ' + str(value) +' %d\n' % int(time())
    print(message)
    sock = socket.socket()
    sock.connect((SERVER, PORT))
    sock.sendall(str.encode(message))
    sock.close()

def get_color(pin_number):
    return {
        14: 'green',
        18: 'red',
        23: 'yellow',
        25: 'blue',
        }[pin_number]

button_green.when_pressed = button_pressed
button_red.when_pressed = button_pressed
button_yellow.when_pressed = button_pressed
button_blue.when_pressed = button_pressed

led_status.on()

pause()

Anschließend haben wir die Kabel an die Buttons und die LEDs gelötet und die Verbindungen mit einem Schrumpfschlauch verdichtet und gesichert. Die Komponenten haben wir dann mit an das Breadboard gesteckt bzw. sie direkt an das Protoboard gelötet.

LEDs anbringen - Katjasays.com

So weit, so gut. Nun ging es daran, die Einzelteile zu verbinden, also das Protoboard mit dem Raspberry Pi.

Konstrukt zusammenbauen - Katjasays.com

Dieses Konstrukt wollten wir dann in das Gehäuse einbauen, damit der Happiness Tracker schön anzusehen und leicht zu bedienen ist.

anpassen in Box - Katjasays.com

Leider hatten wir an den Kabeln gespart und dadurch viel zu dicke Kabel genutzt, die dann nicht mehr in die Box gepasst haben. Nun hieß es also, die LEDs mit einem neuen Kabel zu versehen und damit das gesamte Konstrukt in der Größe so zu reduzieren, dass es in das Gehäuse passt. Dafür haben wir ein Flachbandkabel genutzt.

neues Kabel anlöten - Katjasays.com

Nun konnte die Oberfläche des Gehäuses angepasst werden. Löcher für die Buttons, LEDs und das Netzkabel wurden gebohrt und die Oberfläche mit einer Klebefolie dekoriert.

Oberfläche bekleben - Katjasays.com

Die Buttons und die LEDs wurden in den Deckel des Gehäuses eingepasst.

Buttons und LEDs anbringen - Katjasays.com

Die Einzelteile und Kabel wurden dann mit Heißkleber fixiert, damit sie sich zum einen nicht lösen und zum anderen nicht in der Box hin und her rutschen.

Teile mit Heißkleber fixieren - Katjasays.com

Schließlich konnte die Box zusammengeschraubt werden. Nachdem das Netzkabel eingesteckt wurde, begann die Statusleuchte zu leuchten, sodass wir sehen konnte, dass der Happiness Tracker auch wirklich funktioniert.

Statusleuchte leuchtet - Katjasays.com

Das Projekt hat wirklich viel Spaß gebracht und ich freue mich schon auf die nächsten Hacking Days! Ein paar Verbesserungen, wie ein zeitversetztes Loggen der Daten sowie eine coole Darstellung im Insights-Board, die eine Übersicht für alle Kollegen bietet, sind noch in Planung, aber schon jetzt finde ich den Happiness Tracker sehr gelungen. Mal sehen, ob er uns auch sinnvolle Aussagen über die Zufriedenheit der Mitarbeiter bringen kann.

1 Stern2 Sterne3 Sterne4 Sterne5 Sterne (4 Bewertungen, Durchschnitt: 5,00 von 5)
Loading...

Kommentar hinterlassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.