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.

Hier noch ein paar Fotos vom Innenleben:

Kommentare
  1. […] [Katja]’s team decided to use a Raspberry Pi and some buttons and LEDs to create a ‘happiness tracker‘ for the […]

  2. […] [Katja]’s team decided to use a Raspberry Pi and some buttons and LEDs to create a ‘happiness tracker‘ for the […]

  3. Raspberry Pi Tracks Office Happiness | USOM says:

    […] projects. [Katja]’s team decided to use a Raspberry Pi and some buttons and LEDs to create a ‘happiness tracker‘ for the […]

  4. […] projects. [Katja]’s team decided to use a Raspberry Pi and some buttons and LEDs to create a ‘happiness tracker‘ for the […]

  5. […] The code to do it is written in Python with a healthy dose of GPIO Zero thrown in for good measure. If your German is good, you can read Katja’s account of the project here or alternatively run it through Google Translate for the English. Thanks to Hackaday for spotting […]

  6. Track Happiness at Work With Raspberry Pi - What Do I Make says:

    […] because SEO specialist and programmer Katja Budnikov decided to create an office happiness tracker during her company’s hackathon, using a Raspberry Pi inside of an enclosure with four […]

  7. GF says:

    Können Sie am Ende des Projekts ein Bild vom Steckbrett oder Protoboard teilen? Ich bin ein Anfänger und möchte das in meinem Klassenzimmer umsetzen, aber ich habe Schwierigkeiten mit dem Code. Entschuldigung über die schlechte Übersetzung ins Deutsche!

    Can you share a picture of the breadboard or protoboard at the end of the project? I’m a beginner maker and want to implement this in my classroom but I am having difficulty with the code. Sorry about the poor translation to German!

    1. Katja says:

      Thanks for your message! I’m excited, that you want to build your own happiness tracker! I added a few pictures at the end of the article. The ribbon cable connects the leds to the perfboard where the resistors are. Every led has two connections, one to ground, and the other to one of the raspberry pi’s gpis pins (through the perfboard). The thin black cable is the ground connection between perfboard and raspberry pi. Each resistor on the perfboard is connected to one of the led cables on one end and to a cable going to the raspberry pi on the other end. The ground cables from the leds are all just connected to the one cable that goes to the raspberry pi. There are copper strands on the back of the perfboard, so the resistors and cable connection are arranged to require no extra cables on the backside of the board. Which gpio pins have been used for the leds can be seen in the python code. These instructions were really helpful to figure out how to connect everything: https://www.raspberrypi.org/learning/python-quick-reaction-game/worksheet/

      _____________________________

      Danke für Deine Nachricht und ich freue mich, dass du den Happiness Tracker nachbauen möchtest! Ich habe noch ein paar Bilder am Ende des Artikels hinzugefügt. Das große Multikabel wird mit den LEDs verbunden. Dabei ist immer ein Kabel für den Anschluss an den GPIO und ein weiteres für den Anschluss an Ground. Das schwarze dünne Kabel verbindet das Protoboard mit dem Ground auf dem Raspberry Pi. Die Widerstände führen jeweils von der Reihe mit dem Stromkabel zu einem der LED Kabel, dem, an dem dann der Ground angeschlossen wird. Auf der anderen Seite des Protoboards sind noch Kabel angebracht, die die LED mit den GPIOs auf dem Raspberry Pi verbinden. Sie sind immer so platziert, dass sie einen Steckplatz weiter liegen als der Widerstand. Welche Lampe an welchem GPIO angeschlossen ist, ist an dem Python Code erkennbar. Die Steckplätze auf dem Raspberry Pi kannst du dir in der Anleitung anschauen (https://www.raspberrypi.org/learning/python-quick-reaction-game/worksheet/).

      1. GF says:

        Thanks for the additional pictures! I completed the tracker a while ago and implemented it in my classroom to track students‘ moods, etc. It’s been a big success! I added a camera as well that takes a picture at random intervals to „document“ the button presses.

  8. minnime says:

    Bei diesem Artikel hat mich an einigen Stellen zum Schmunzeln gebracht weil es etwas locker klang. Z.B. wenn es heißt, dass ihr erstmal zu Conrad gefahren seid um das Material zu holen und dann erst geschaut habt welche Funktion die einzelnen Pins haben. Bei Software fange ich leider auch oft erstmal an und stelle später fest, dass das so gar nicht geht und muss es dann neu machen. Bei Hardware ist es aber doch sinnvoll vorher zu wissen was geht und was man braucht, denke ich jedenfalls. Dazu passt auch die Angabe „Widerstände“ in der Materialliste. „Hey ich fahre gleich zum Conrad, braucht noch einer was?“ „Jo, bring mir mal nen paar Widerstände mit“ „Hier, ich hab die ne Packung 5000 Ohm Widerstände mitgebracht 3000er waren schon aus“ „Ach so, ich brauchte eigentlich zwei 2000er, einen 3000er und vier 500er“.
    Klar, am Endergebnis sieht man, dass ihr schon wisst was ihr tut aber so klingt es halt komisch.

    1. Katja says:

      Haha, tatsächlich war es aber so. Wir haben natürlich vorher überlegt, was man an Material so ungefähr brauchen könnte, sind dann aber erst zum Conrad gefahren und haben dann erst einen genaueren Plan aufgestellt. „Widerstände“ waren in diesem Fall ein bunt gemischtes Set aus den unterschiedlichsten Widerständen. Aber du hast schon recht, man sollte sich vorher einen besseren Plan machen, damit man am Ende nicht dasteht, und einem Material fehlt. Da wir vorher noch nicht so viel Erfahrung mit Basteleien mit einem Raspberry Pi hatten, haben wir uns auch während des Bastelns erst dafür entschieden, den Tracker so zu bauen, wie er letztendlich geworden ist. Da haben wir die Pläne schon etwas umgestalten müssen. Auch weil der Platz in der Box, in die der Raspberry Pi und die Kabel etc. verstaut wurden, nur sehr begrenzt war.

Kommentar hinterlassen

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