Incom ist die Kommunikations-Plattform der Fachhochschule Potsdam

Its functionality is tailored to teaching in the creative domain...modern interface to teaching

Incom ist die Kommunikations-Plattform der Fachhochschule Potsdam mehr erfahren

Tischkamerad: Emotionales Input—Output System

Tischkamerad: Emotionales Input—Output System

Im Werkstattkurs »Physical Computing« entwickelte ich eine Art emotionale Wetterstation.

Tischkamerad

Emotionales Wetter Input — Output System
Von der Thematik einfacher Input Output Systeme war ich fasziniert, dass mir wirklich sehr viele Ideen in den Kopf schossen.

Vom Kühlschrank der mir eine Einkaufsliste schreibt bis über zeichnende Roboter Arme die mir Daten aus meinem Haushaltbuch an eine Tafel zeichnen.

Schnell war mir bewusst, dass dies für mich zeitlich in diesem Kurs nicht möglich wäre.

Aufgabe

Auf die Grundlagen einfacher Input Output Systeme folgte die Aufgabe, in diese Systeme einen emotionalen Aspekt einzubringen.

Inspiration

Inspiriert haben mich die beiden Hauptcharaktere »EVE« und »WALL•E« aus dem gleichnahmigen Film. Diese beiden Roboter kommunizieren über Gestik, Töne und ihren “Gesichtsausdruck”, welcher aber nicht aus viel mehr als ihren (vermeintlichen) Augen besteht.

Die Art und Weise wie »EVE« schon allein mit ihre Augen Emotionen ausdrückt, ist wirklich beeindruckend.

Über »WALL•E« kam ich zu einem Spielzeug für Kinder namens »Cozmo« von der Firma Anki. Man kann sagen, dass »Cozmo« quasi eine Mischung aus den beiden Hauptcharakteren von »WALL•E« ist. Auf jeden Fall sind die Ähnlichkeiten zwischen »EVE« und »Cozmo« nicht zu leugnen.

»Cozmo« ist ein kleiner Roboter, welcher Kisten stapeln und herumschieben kann. Dazu verfügt er über eine Schnittstelle zu einer App, mit welcher man ihn ganz einfach Steuern kann — wie ein RC Car. Es gibt auch kleine Spiele wie »Stein-Schere-Papier« oder »Fangen«. Der kleine Roboter ist auch für ältere Kinder sehr geeignet, da man Spiele auch selbst über eine visuelle Programmiersprache programmieren kann. Außerdem kann er durch die vielen Sensoren und durch die Kamera auf verschiedenste Art und Weise mit dem Benutzer interagieren.

Das Relevante für mein Projekt waren jedoch die Gesichtsausdrücke und deren Animationen, welche besonders gut die eingeschränkten Kommunikationsmöglichkeiten von »Cozmo« ausnutzen.

Idee

Kleine Gadgets, welche man sich auf den Tisch stellen kann kennt man bereits. Meistens haben diese etwas gemeinsam, sie beziehen ihre Energie über die 5 Volt eines USB Anschlusses. Da wären beispielsweise Tee- und Handwärmer, kleine Lampen oder auch ausgefallenere Sachen wie winzige Weihnachtsbäume mit Beleuchtung oder Raketenwerfer mit Schaumstoffmunition.

Meine Idee war eine Art Roboter, welcher eine emotionale Reaktion durch „Gesichtsausdrücke“ auf Sensordaten wiedergibt. Im Umsetzungsprozess stieß ich allerdings auf Schwierigkeiten — Erläuterung unter Umsetzung. Ich entschließ mich deshalb meinen Roboter auf Wetterdaten reagieren zu lassen.

Umsetzung

Wie bereits erwähnt kam mir anfänglich die Idee einen Mikrocontroller mit einigen Sensoren auszustatten. Diese Sensordaten wollte ich zusammenführen und daraus eine Art »Emotionsindex« errechnen. Dieser Index sollte dann einen bestimmten Gesichtsausdruck darstellen. Beispielsweise bei einem Wert von über 100 & unter 200 sollte der Roboter fröhlich schauen.

Probleme

Es traten jedoch zwei Probleme auf. A — die Menge an Sensoren die ich benötigen würde sind nicht billig und B war es mir durch den begrenzten RAM des Arduinos nicht möglich komplexere, pixelbasierte, Animationen auf den Mikrocontroller zu speichern.

Mein Problem A löste ich relativ einfach. Ich sammle nicht selber Daten über die Umwelt, in welcher sich der Roboter befindet sondern reagiere einfach auf die Wetterdaten der OpenWeatherMap.

Problem B war etwas schwieriger zu lösen. Zum testen nutzte ich ein Display aus einem Nokia Telefon aus der Interface Werkstatt. Bei den Tests fiel mir auf, dass einzelne Frames meiner Animation einfach zu viel des Programmspeichers des Microcontrollers belegten — die Aufbauzeiten eines Bildes waren zudem miserabel. Die Auflösung betrug 128x64 Pixel und bei 10 Frames war der Speicher bereits zu 40 % belegt.

Aufbau

Bauteile

Meine Bauteilliste schrumpfte, nach dem ich mich gegen die Sensoren und für den Bezug der Daten über eine API entschied.

Ich suchte nach einem WLAN fähigem Breakoutboard mit Mikrocontroller und wurde bei dem NodeMCU fündig. Dazu ein OLED Display mit einer Auflösung von 128x64 Pixeln.

Bestellung

NodeMCU 7,95 €
OLED Display 10,50 €

Komponentenaufbau

Mehr ist es grundsätzlich nicht.

Als Case habe ich mir eine einfache Pappschachtel gebastelt, ca 5 cm x 5 cm x 5 cm. Das Besondere an OLED Displays ist, dass bei ihnen jeder einzelne Pixel für sich allein emittiert und so keine Hintergrundbeleuchtung benötigt wird. Das Display ist im ausgeschalteten Zustand nämlich nicht zu sehen, erst durch das Anschalten beginnen die einzelnen Pixel durch das dünne Papier der Schachtel zu leuchten.

Programmierung

Die Programmierung hat den größten Teil dieses Projekts ausgemacht. Viel Recherche über Möglichkeiten um auf einem Display Bilder oder Formen wiederzugeben. Ich entschied mich — wie unter Problemen bereits genannt — durch die Problematik des beschränkten Programmspeichers für das Zeichnen von Formen statt und gegen die »Bild für Bild Animation«.

Dabei stieß ich auf die sehr große Library U8g2 von ollikraus.

Diese bietet eine sehr umfangreiche Dokumentation und viele nützliche Funktionen um Formen auf dem Display zu zeichnen.

Code Aufbau

Mein Script besteht aus zwei Teilen. Die main.ccp übernimmt die Verbindung zum Internet, das Auslesen der Wetter-API und folgend die Entscheidung welche Emotion angezeigt wird. Außerdem wird in diesem Script zwischen den beiden Modi gewechselt, welche einerseits die Emotion zeigt oder eine reine Anzeige der Wetterdaten.

Der andere Teil beinhaltet die einzelnen Gesichtsausdrücke. Dabei habe ich mich auf Normal, Fröhlich und Traurig beschränkt. (Bei dieser Entscheidung hatte ich einige schwierige Grundsatzfragen, darüber welches Wetter als gut oder schlecht einzustufen ist.)

main.ccp

Als erstes verbinde ich mich über eine WLAN Verbindung zum Internet und schicke an der OpenWeather Schnittstelle meinen privaten Zugangsschlüssel sowie den Standort.

Als Antwort erhält man ein JSON File vom Server. Diesen JSON Code entschlüssele ich mittels der ArduinoJson.h Library wodurch ich einen einfachen Zugriff auf die Attribute erhalte.

Dort erhalte ich eine Wetterindex Nummer, welche mir mittels einer Tabelle verrät wie das Wetter ist. Anschließend entscheidet eine Funktion basierend auf dieser ID welche Emotion dargestellt wird.

faceexpressions.h

Dieses Script baute ich maximal modular um später sehr einfach weitere Gesichtsausdrücke einbinden zu können. Ich habe einzelne Funktionen für das zeichnen des linken und des rechten Auges sowie für jede einzelne Emotion geschrieben. Diese habe ich mit zahlreichen Variablen wie zufälliger Verschiebung etc. ausgestattet um einen „realistischeren“ Eindruck von Leben zu imitieren.

Um dies zu erreichen habe ich unteranderem eine zufällig auftretende Veränderung der Augengröße und Form sowie blinzeln eingebaut.

weathericons.h

Hier werden nur Wettericons für den Modus der “klassischen” Darstellung ausgegeben. Diese Wettersymbole werden von der API mitgeliefert, sind aber nur in einem normalen PNG Format verfügbar, welches das monochrome Display durch seine einfache »Ein-Aus-Mechanik« nicht darstellen kann. Deshalb habe ich die Symbole per Hand in monochrome Pixelgrafiken umgewandelt.

Demonstration

Fazit

Mir hat dieses Projekt wirklich sehr viel Spaß gemacht und ich habe viel gelernt. Vor allem was den Hardware Teil angeht — Elektrik war nie meine Stärke.

Ich habe auch gemerkt, dass ich einige Schwierigkeiten habe meinen Code ordentlich zu kommentieren — in 1 bis 2 Jahren werde ich wohl selbst nicht mehr verstehen was ich genau programmiert habe. Das muss ich auf jeden Fall noch anpassen.

Auch das Case ist nicht in größter Sorgfalt entstanden — da ist noch viel ästhetischer Raum nach oben. Die meiste Zeit ist in die Recherche und die Programmierung gefloßen.

Ich werde diesen Roboter auf jeden Fall weiter entwickeln und als aller erstes ihm ein ordentliches Case bauen.

Referenzen

Librarys

ArduinoJson.h JSON decoding
U8g2 monochrome graphics
ESP8266WiFi wlan connection
Easing.h easing

Dokumentationen

U8g2 Doku monochrome graphics

Code

Meinen kompletten Projektordner hänge ich als ZIP an.
Ich habe das Atom Editor Plugin PlatformIO benutzt. (besseres library management und code darstellung)

Ein Projekt von

Fachgruppe

Werkstattpraxis

Art des Projekts

Studienarbeit im Grundstudium

Betreuung

Lina Wassong

Zugehöriger Workspace

Physical Computing

Entstehungszeitraum

Wintersemester 2017 / 2018

zusätzliches Material

Noch keine Kommentare