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) (z.B den hier Raspberry Pi 3 Modell B (affiliate))
  • 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:

1 Stern2 Sterne3 Sterne4 Sterne5 Sterne (6 Bewertungen, Durchschnitt: 4,33 von 5)
Loading...
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. […] 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. […] as pressing a button. That’s what SEO specialist and programmer Katja Budnikov accomplished after constructing an office happiness tracker during […]

  7. […] as pressing a button. That’s what SEO specialist and programmer Katja Budnikov accomplished after constructing an office happiness tracker during her company’s […]

  8. […] 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 […]

  9. 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/).

Kommentar hinterlassen

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