Bachelor-Arbeit - Universität Passau

Transcrição

Bachelor-Arbeit - Universität Passau
Technische Universität München
Fachgebiet
Verteilte Multimodale Informationsverarbeitung
Prof. Dr. Matthias Kranz
Bachelor-Arbeit
Embedded Sensing and Actuation –
Intergration von eingebetteten Systemen in
Alltagsgegenstände
Autor:
Felix Greimel
Matrikelnummer: —
Anschrift:
—
—
Betreuer:
Prof. Dr. Matthias Kranz
Beginn:
2009-12-01
Abgabe:
2010-09-01
Kurzfassung
Im Zuge einer alternden Gesellschaft, aber auch einer wachsenden Nachfrage für Komfortsteigerung wird in diesem Projekt ein Trinkgefäß entwickelt, das sich durch integrierte
Sensoren und einer drahtlosen Kommunikationsschnittstelle in eine intelligente Umgebung
einfügen soll. Für diese intelligente“ Tasse, die zur Benutzung durch Mensch und Ro”
boter gleichermaßen geeignet sein soll, wird eine geeignete Sensorik zur Bestimmung des
Füllstandes, der Temperatur des Getränks und der Neigung und Lage im Raum selbst
entwickelt bzw. installiert. Zukünftige Haushaltsroboter können so mit essentiellen Daten
versorgt werden, die sie sonst nur unter großem technischen Aufwand erfassen könnten.
Mit diesen Daten ist es möglich entsprechend auf die aktuelle Situation zu reagieren. Beispielsweise kann je nach Füllstand die Geschwindigkeit, mit der die Tasse bewegt wird,
angepasst werden. Es könnte eine optimale Aktionsgeschwingdigkeit berechnet werden,
die ein Verschütten des Tasseninhalts gerade verhindert. Die Notwendigkeit eines refills“
”
könnte ebenfalls geprüft werden. Aber auch der Konsument selbst erhält Information
darüber, ob sich das Getränk in einem trinkgerechten Temperaturbereich befindet.
Der durch einen 3D Drucker modellierte Prototyp wird mit einem Mikrocontroller ausgestattet, der über ein Funkmodul die gesammelten Sensordaten an einen, mit einem PC
verbundenen Mikrocontroller überträgt. An diesem Computer wird das Szenario schließlich
mittels einer selbst erstellten Animation wiedergegeben.
2
Abstract
Embedded sensing and actuation - integration of embedded systems into everyday objects
In the course of an aging society and the increasing demand for more convenience, this
project is about the development of a technologically enhanced drinking vessel, which can
be used by humans and robots. It will integrate itself into a smart environment using
embedded sensors and an interface for wireless communication. A special sensor system
is designed and installed specifically for this ”smart” cup in order to detect the liquid
level, the temperature of the beverage and location based information like position and
inclination of the cup itself. Thus, future domestic robots acting as artificial servants can
be supplied with essential data, which otherwise would take an enormous technical effort to
acquire, if they were to detect the information themselves. Being in possession of this data,
it’s possible for the robot or even an entire environment to react accordingly to the current
situation. For example, the velocity the cup is moved with can be chosen depending on
the prevailing liquid level. It would be possible to calculate the optimum speed of action,
at which spilling is just avoided. The need of a refill could be checked as well. But also
the consumer himself can obtain useful information, like the temperature wise drinkability
of the cup’s content.
The prototype, created by a digital fabricator, gets augmented with a microcontroller
which transmits the collected sensor data to a PC-connected microcontroller using a radio
module. Eventually, the scene is reproduced on a PC at the receiving end by an individually
created animation.
3
Inhaltsverzeichnis
Inhaltsverzeichnis
4
1 Einleitung
6
2 Entwicklung der intelligenten Tasse
8
2.1
Ähnliche Projekte und Stand der Technik . . . . . . . . . . . . . . . . . . .
8
2.2
Versuchsaufbau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13
2.2.1
Arduino . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13
2.2.2
Inertialsensor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
19
2.2.3
Temperatursensor . . . . . . . . . . . . . . . . . . . . . . . . . . . .
22
2.2.4
Füllstandssensor . . . . . . . . . . . . . . . . . . . . . . . . . . . .
23
2.2.5
XBee Funkmodul . . . . . . . . . . . . . . . . . . . . . . . . . . . .
26
2.3
Programmierumgebung . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
28
2.4
Programmierung der Mikrocontroller . . . . . . . . . . . . . . . . . . . . .
32
2.5
Kalibrierung der Sensoren . . . . . . . . . . . . . . . . . . . . . . . . . . .
36
2.5.1
Inertialsensor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
36
2.5.2
Temperatursensor . . . . . . . . . . . . . . . . . . . . . . . . . . . .
37
2.5.3
Füllstandssensor . . . . . . . . . . . . . . . . . . . . . . . . . . . .
41
2.6
Darstellung der Sensordaten . . . . . . . . . . . . . . . . . . . . . . . . . .
42
2.7
Animition der Tasse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
46
2.8
Umsetzung im Prototyp . . . . . . . . . . . . . . . . . . . . . . . . . . . .
50
2.8.1
Status-LEDs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
55
2.8.2
IR-LEDs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
57
2.8.3
Interne Elektronik . . . . . . . . . . . . . . . . . . . . . . . . . . .
58
4
INHALTSVERZEICHNIS
5
3 Zusammenfassung
63
4 Danksagung
66
A Schematische Layouts der Arduinos
67
A.1 Arduino Pro Mini . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
68
A.2 Arduino Duemilanove . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
69
B Kalibrierungstabelle des Temperatursensors
70
Abbildungsverzeichnis
74
Literaturverzeichnis
76
Kapitel 1
Einleitung
Der demographische Wandel in den Industriestaaten schreitet unweigerlich voran. Der
wachsende Anteil älterer Bürger an der Gesellschaft hat unter anderem zur Folge, dass
die Anzahl hilfsbedürftiger Menschen stetig ansteigt [SPI08a]. Um diesen Menschen weiterhin ein Leben in Würde zu ermöglichen, ist es notwendig ihnen persönliche Betreuung
zukommen zu lassen, oder im Idealfall ihre Unabhängigkeit zu erhalten. Altenpflege stellt
jedoch ein sehr zeitintensives Unterfangen dar und schon heute besteht ein Defizit an qualifiziertem Pflegepersonal. Somit ergibt sich für Angehörige - sofern überhaupt vorhanden
- eine erhebliche Zusatzbelastung. Daher wird es angestrebt die Selbstpflege der Älteren,
ohne wesentliche Einbußen der Lebensqualität, zu bewahren. Folglich könnten sie in ihrem bisherigen Wohnumfeld länger und eigenständig wohnen [Fra09b]. Unter Zuhilfenahme
moderner Technologien wird daran gearbeitet, diese angestrebte Unabhängigkeit mehr und
mehr zu erreichen [SPI08b].
Aber auch der Normalverbraucher ist an Maßnahmen interessiert, die dessen Lebensqualität steigern. Hier sind den Möglichkeiten den Komfort im eigenen Heim zu erhöhen
kaum Grenzen gesetzt. Durch Technologien zur mobilen Informationsverarbeitung wird
es ermöglicht computerbasierte Geräte unter verschiedensten und dabei auch wechselnden
Bedingungen einzusetzen [GSB02]. Gegenstände wie Universalfernbedienungen, die bei
Annäherung aus dem Stromsparmodus erwachen und mit einem Knopfdruck ein System
aus mehreren Multimediageräten in einen gewünschten Zustand bringen [Log09], finden immer mehr Anklang. Auch Einrichtungen wie tageslichtgesteuerte Jalousien [Zum10, Bec10],
Garagentore und Eingangstüren die sich bei Annäherung öffnen bzw. aufsperren [Sor10]
oder Staubsaugroboter [iRo10] haben bereits Einzug in einige Haushalte gefunden.
Solche Beispiele stellen erst den Anfang dieses Trends dar. Unterstützende Haushaltsroboter werden immer öfter in den heutigen Medien erwähnt [SPI08b, new10, plo08, Tec10].
Die Realisierung der Zukunftsvision eines erwerbbaren, elektronischen Butlers, wie beispielsweise der Care-O-bot [Fra09a], rückt Stück für Stück näher. Aber auch diesem werden gewisse Grenzen gesetzt sein. Die gesamte Entwicklung eines solchen Systems stellt
6
KAPITEL 1. EINLEITUNG
7
ein sehr komplexes Unterfangen dar. Diese wird vereinfacht und beschleunigt, indem die
Intelligenz auf Einzelkomponenten verteilt wird. Das heißt, es wird notwendig einzelne
Gegenstände mit, auf deren Gebrauch abgestimmten, Sensoren zu bestücken. Diese Objekte “wissen folglich über sich Bescheid”. Meist wird dies auch mit dem Ziel verfolgt,
die Sensorik so unsichtbar wie möglich zu verbauen, um den gewohnten Gebrauch dieser
Gegenstände nicht zu behindern. Ein Vorreiter des Pervasive Computings, Mark Weiser,
formulierte dies 1991 folgendermaßen:
The most profound technologies are those that disappear. They weave themselves into the fabric
of every day life, until they are indistinguisable from it. [Wei91]
Geben die Objekte die von den Sensoren stammenden Informationen an reaktionsfähige
Einrichtungen weiter, so entsteht eine intelligente Umgebung aus verteilten Sensor-AktorSystemen.
Aufbauend auf der Vorstellung einiger Beispiele mit ähnlicher Thematik wird im Anschluss
der Verlauf des eigenen Projekts erläutert. Hier wird die Entwicklung einer Tasse beschrieben, die Informationen über ihre räumliche Lage und Details über ihren Inhalt, wie
Temperatur und Füllstand, an einen Empfänger in ihrer Umgebung übermittelt. Dieser Empfänger kann beispielsweise ein Haushaltsroboter sein, welchem es mit Hilfe dieser
Daten erheblich erleichtert wird mit der Tasse zu agieren. Es wäre ein ungleich höherer
Aufwand, eine Apparatur für eine solche mechatronische Haushaltshilfe zu entwickeln, die
ebenso detailliert wie hygienisch eine Messung von Füllstand und Temperatur durchführt.
Abgesehen von einigen wenigen, unscheinbaren Infrarot-LEDs, die im Tassenrand eingelassen sind, und eine auf Leuchtdioden basierende Anzeige, die über trinkgerechte Temperatur informiert, wird sich die Tasse im Auge des Benutzers nicht wesentlich von anderen
unterscheiden (vgl. Abbildung 1.1). Auch Spülmaschinentauglichkeit ist durch einen abnehmbaren Sockel gegeben. Somit steht einer gewohnten Benutzung nichts im Wege.
Im Anschluss an diese Beschreibung folgt ein Résumé über die Entwicklung der Tasse und
deren Anwendung. Abschließend werden noch Erweiterungsmöglichkeiten diskutiert.
Abbildung 1.1:
Anwendungsfall des Prototyps
Kapitel 2
Entwicklung der intelligenten Tasse
2.1
Ähnliche Projekte und Stand der Technik
Inspiriert wurde das vorliegende Projekt von anderen Forschungsprojekten, in denen ebenfalls die Auseinandersetzung mit Sensorik an bzw. in Alltagsgegenständen im Mittelpunkt
stand.
Im Zuge eine alternden Gesellschaft wurde 2005 von Forlizzi et al. der SenseChair entwickelt [FDZ+ 05]. Dieser Wohnzimmersessel soll vor allem älteren Menschen behilflich
sein, die bereits in ihrer Mobilität eingeschränkt sind. So wird im SenseChair Projekt
eine Kommandozentrale“ geschaffen, die bei der Bedienung von umliegenden Geräten,
”
wie z.B. Telefon, Fernsehgerät, Licht oder Kalender, behilflich ist. Auch kann durch eine
Art Statusübermittlung Freunden unverbindlich mitgeteilt werden, dass man beispielsweise offen für einen Besuch wäre. Eine andere Funktion betrifft den Stitzkomfort an sich.
Da ältere Menschen wegen ihrer eingeschränkten Mobilität dazu tendieren, sich bevorzugt
auf einem Platz aufzuhalten, kommt es oft vor, dass sie an diesem Ort einnicken, bzw.
fest einschlafen. Viele beklagen sich danach über Schmerzen. Der SenseChair soll hierbei
Abhilfe schaffen. Über Drucksensoren in den Sitz- und Rückenpolstern wird die aktuelle Körperhaltung des Benutzers analysiert. Abhängig von der Verweildauer und Position
wird der Benutzer via Vibrationen, Licht und Klänge sanft darauf aufmerksam gemacht,
eine ergonomischere Liegeposition zu wählen oder, je nach Uhrzeit, ins Bett zu gehen.
Neben Produkten für unsere älteren Mitmenschen, gibt es natürlich auch Entwicklungen,
die für Jedermann Anwendung finden können. So wurden in anderen Projekten Stühle
ebenfalls mit druckempfindlichen Sensoren ausgestattet und können so beispielsweise auf
eine aufrechte Sitzposition hinweisen [Wei00] oder unter anderem zur Emotionserkennung
beitragen [KRP01, KMP01]. Besonders bei Lernprogrammen könnte hier auf die aktuelle
Aufnahmebereitschaft der Person reagiert werden.
Ein weiteres Beispiel für Sensorik in Alltagsgegenständen liefern Vorwerk zusammen mit
Infineon. Sie entwarfen den Thinking Carpet [Vor], ein mit Drucksensoren ausgestatteter,
8
KAPITEL 2. ENTWICKLUNG DER INTELLIGENTEN TASSE
9
elektronisch vernetzter Teppichboden. Mittels unsichtbarer Sensorik können einige Einrichtungen indirekt gesteuert werden. So ist es beispielsweise möglich die Beleuchtung,
das Raumklima oder eine Alarmanlage mit Hilfe der Daten des Teppichbodens anzusprechen. Zusammen mit bruchsicheren LEDs, Licht- und Temperatursensoren kann ein effektives Notleitsystem - z.B. zum nächsten Notausgang - eingerichtet werden. Besonders in
Bürogebäuden könnte dies Anklang finden. Neuerungen wie diese ermöglichen eine gleichzeitige Erhöhung von Komfort, Sicherheit und Energieeffizienz.
Im Smart Table Projekt [SS03] wurde ein Tisch entwickelt, der passive Objekte - Objekte ohne Intelligenz“ - anhand von Metall- bzw. Magnetlabels erkennt. Dabei können
”
Lage und Orientierung der Gegenstände bestimmt werden. Der Smart Table kann zwischen 32 verschiedenen Objekten unterscheiden und deren Positionsänderung verfolgen.
Ermöglicht wird dies durch zwei unterschiedliche Technologien, Hall-Effekt-Sensorik und
Metallgitter-Kontakt-Sensorik, die durch zwei unabhängige Prototypen getestet wurden.
Als Anwendungsbeispiel wird die Analyse von Lernprozessen, Persönlichkeitsstrukturen
und Sozialverhalten in Kindergärten genannt.
Jun Rekimoto benutzte bereits 1996 in seinem Projekt Tilting Operations for Small Screen
”
Interfaces“ einen FASTRAK Positions- und Orientierungssensor zusammen mit einem Personal Digital Assistant (PDA) und entwickelte somit eine Lösung für einhändiges Navigieren in Menüs mittels Rotationsbewegungen des Geräts durch den Benutzer. Auch digitale,
geographische Karten konnten somit einfach betrachtet werden, indem die Perspektive
oder der gewünschte Ausschnitt mit Hilfe von Tiltsensoren über ein Drehen und Neigen
des Geräts entsprechend gewählt wurde [Rek96].
Immer kleiner werdende Sensorpakete ermöglichen einen Umstieg von einer kabelgebundenen, externen Senorik zu einer kabellosen, integrierten Sensorik [BJ09]. Dies bringt einige
Herausforderungen mit sich, wie eventuell noch hohe Preise für Hardware, eine limitierte
Energieversorgung und die Notwendigkeit einer Datenauswertung unter begrenztem Rechenaufwand. Deswegen werden oft nur die nötigsten Daten verarbeitet und dann an eine
zentrale Recheneinheit gesendet, die daraufhin weitere Schlüsse zieht [VMKA03]. Allerdings werden durch den geringen Platzbedarf und die kabellose Datenübertragung mehr
und mehr Visionen technisch realisierbar und bringen einen intelligenten Haushalt immer
näher.
Kranz et al. veröffentlichten 2007 einen Artikel über kontextsensitive Küchenhilfsmittel
[KSM+ 07]. In ihrem Projekt statteten sie ein Küchenmesser und ein Schneidbrett mit Sensoren aus, mit deren Hilfe die zubereiteten Lebensmittel bestimmt werden können. Dies
kann beispielsweise für die automatische Anzeige von Rezepten oder für das Aufzeichnen
der konsumierten Lebensmittel von Nutzen sein. Die Sensoren wurden so integriert, dass
sie den normalen Gebrauch der Gegenstände nicht beeinträchtigen. Am Schneidbrett wurden an der Unterseite vier Kraftmesszellen und ein empfindlicher Beschleunigungssensor
angebracht. So kann durch speziefische Bewegungsmuster und der Art der Gewichtsverlagerung bei der Benutzung des Bretts, selbst mit gewöhnlichen Messern, auf die Art des
geschnittenen Lebensmittel geschlossen werden. Ein Mikrofon brachte zusätzliche Informationen über die Art der Zubereitung, wie z.B. das Schälen von Gemüse. Am Küchenmesser
KAPITEL 2. ENTWICKLUNG DER INTELLIGENTEN TASSE
10
wurde ein Drehmomentaufnehmer und ebenfalls ein Beschleunigungssensor montiert. Zusammen mit den Daten dieser Sensoren und einem bestimmten Klangmuster konnten im
genannten Projekt zwischen der Verarbeitung von sechs Gemüse und Obstsorten unterschieden werden.
Es bestehen Forschungsgruppen, die sich bereits mit dieser Thematik, unter anderem in
Verbindung mit Trinkgefäßen, auseinander gesetzt haben und teilweise das vorliegende
Projekt beeinflussten. So befassten sich beispielsweise Gellersen et al. von der Universität Karlsruhe in ihrem Projekt Multi-Sensor Context-Awareness in Mobile Devices
”
and Smart Artifacts“ mit der automatischen Informationsverarbeitung in mobilen Gegenständen. Ziel war es, eine mobile Situationserkennung von Gegenständen zu verwirklichen. Unter ökonomischen Gesichtspunkten, bezogen auf Bauteilauswahl sowie Rechenleistung, wurde eine Lösung gefunden, durch die Geräte via Sensoren ihren eigenen Status
bestimmen können. Hierbei handelt es sich um eine so genannte direkte Kontextsensitivität, bei welcher, im Gegensatz zur indirekten Kontextsensitivität, die Daten nicht aus
im Umfeld befindlichen Sensoren stammen, sondern von geräteinternen Sensoren erhoben
werden.
Unter anderem wurde von Gellersen et al. in ihrem Projekt eine Kaffeetasse, die so genannte MediaCup, entwickelt, die sich als Alltagsgegenstand mit voll integrierten Sensoren in
eine intelligente Umgebung einfügen soll. Die somit ermöglichten zusätzlichen Funktionen
wirken sich nicht auf die Funktionalität der Tasse selbst aus, sondern auf ihre Umgebung,
wie in diesem Fall beispielsweise auf einen Armbandcomputer, der vor zu hohen Temperatur des Getränks akustisch warnt (Abb. 2.1). Hier drückt sich der ermittelte Status weniger
in Ziffern aus, als mehr in einem abstrakteren, für den Benutzer angepassten Kontext. Im
Unterschied dazu informiert die intelligente Tasse des eigenen Projekts den Benutzer direkt
über die temperaturbezogene Trinkbarkeit des Inhalts. Dies geschieht über eine einfache
Anzeige, realisiert durch zwei farbige LEDs überhalb des Griffes. Aber auch indirekt über
eine Animation kann der Status mit sowohl abstrakter Darstellung als auch mit den genauen Daten wiedergegeben werden.
Gellersen et al. ermöglichen durch eine kabellose Kommunikationsschnittstelle den Zugriff
des reellen Produkts in die virtuelle Welt. Ein wichtiger Gedanke dabei ist, dass das Objekt
seine ursprüngliche Funktion, Erscheinungsform und seinen Zweck beibehält. Dafür wurde
am Tassenboden ein abnehmbarer Sockel montiert, der die entsprechende Sensorik, den
Mikrocontroller und einen Energiespeicher beinhaltet. Ein mit 1MHz getakteter Mikrocontroller bestimmt den Status der MediaCup mittels eines digitalen Temperatursensors,
drei Ballschaltern für die Bewegungsanalyse und eines Kontaktschalters am Boden der
Tasse. Eine nach oben gerichtete Infrarot LED informiert ein Empfängersystem darüber,
ob sich das Objekt im stationären Zustand befindet, ob daraus getrunken wird, ob damit
gespielt wird oder ob die Tasse getragen wird. Sind mehrere Tassen im gleichen Raum,
kann dadurch auf eine bestimmte Situation, wie beispielsweise eine Besprechung, geschlossen werden und anschließend eventuell auf einem digitalen Eingangsschild vor der Tür
angezeigt werden. [GSB02]
Im Gegensatz zur MediaCup bei dem die Kontextanalyse mit zwei Sekunden vergleichs-
KAPITEL 2. ENTWICKLUNG DER INTELLIGENTEN TASSE
11
Abbildung 2.1: Die HotClock gibt eine akustische Warung aus bei zu heißem Getränk
[Bir10]
weise selten durchgeführt wird, wurden in dieser Arbeit an die intelligente Tasse in Bezug
auf Rechenleistung höhere Anforderungen gestellt. Um eine realistische Animation erstellen zu können bzw. ein System über die exakte Orientierung der Tasse kontinuierlich
zu informieren, ist es notwendig, wesentlich häufiger Daten zu erfassen und zu übertragen.
Dies erfordert dementsprechend einen höheren Energiebedarf. Im Vergleich zum MediaCup
wurden hier nicht Kondensatoren als Energiespeicher verbaut, sondern ein handelsüblicher
Akku eines Mobiltelefons.
Jonathan Lester und Sheatak Patel von der University of Washington und Desney Tan sowie A.J. Bernheim Brush von Microsoft Research verfassten 2010 die wissenschaftliche Publikation Automatic Classification of Daily Fluid Intake“. Diese Abhandlung beschreibt
”
eine Möglichkeit der automatischen Bestimmung täglicher Flüssigkeitsaufnahme.
Initialisierender Gedanke für deren Projekt war, das Körpergewichtsmanagement für Menschen zu erleichtern. Auch mit Hilfe von Informationssendungen im Fernsehen und lehrreichen Druckmedien über Gewichtsmanagement und ausgewogene Ernährung, bleibt es oft
schwierig das persönliche Gewicht zu reduzieren oder zumindest zu halten. Hauptsächlich
KAPITEL 2. ENTWICKLUNG DER INTELLIGENTEN TASSE
12
Industriestaaten sind davon betroffen, da dort Nahrungsmittel im Überfluss vorhanden
sind und die allgemeine körperliche Betätigung auf Grund von Büroarbeitsplätzen immer
geringer wird. Dies stellt mit Auswirkungen auf Gesundheit, Psyche und soziale Akzeptanz
die meisten Betroffenen vor eine persönliche Herausforderung. Somit ist es nicht verwunderlich, dass mehr und mehr Menschen versuchen sich bewusster zu ernähren.
Der Verzehr der meisten Getränke stellt eine optionale Kalorienzufuhr dar. Wenn man
nicht allein auf Wasser zum Ausgleich des Flüssigkeitshaushaltes ausweichen will, ist es
somit notwendig die konsumierten Getränke mit in den Diätplan einzubeziehen. Dies verlangt ein gewissenhaftes Protokollieren.
Nun setzten sich Lester et al. als Ziel, einen Becher oder eine Tasse zu entwickeln, welche die
in ihr enthaltene Flüssigkeit automatisch eindeutig identifiziert, ohne sie auf irgendeine Art
ungenießbar zu machen. Das Sensorpaket zur Analyse muss sich bezüglich der räumlichen
Ausdehnung im Rahmen halten, damit ein gewohnter Gebrauch des Gefäßes erhalten bleibt.
Ebenfalls sollten die einzelnen Bestandteile innerhalb einer gewissen Preisspanne bleiben,
um die Anschaffungskosten möglichst gering und somit das Endprodukt für viele Interessenten finanziell erschwinglich zu halten. Mit handelsüblichen Handmessgeräten für
pH-Wert und elektrischer Leitfähigkeit, sowie einem hochwertigen Spektrometer wurden
von 68 verschiedenen Getränken die spezifischen Daten erhoben. Anschließend wurde ein
Konstrukt aus einem optischen Sensor, IR- und UV-LEDs und LEDs die sichtbares Licht
emittieren im Warenwert vor unter 10 US-$ konstruiert (Abb. 2.2). Zusammen mit den
pH-Wert und Leitwertmessgeräten konnte mit 97.5%er Wahrscheinlichkeit aus zehn Getränken das richtige identifiziert werden.
Abbildung 2.2: l: Sensorpaket des Prototyps, r.o.: Farbsensor, r.u.: LED-Array
[LTPB10]
KAPITEL 2. ENTWICKLUNG DER INTELLIGENTEN TASSE
13
Abschließend wird von den Autoren erwähnt, dass es von Vorteil wäre, die Tasse mit weiteren Sensoren zu bestücken um den Füllstand und somit die Menge des konsumierten
Getränks bestimmen zu können. Auch auf Häufigkeit und ein spezielles Muster des Konsums könnte dadurch geschlossen werden. Mit der Ausstattung der Tasse des vorliegenden
Projekts wäre dies ohne weiteres möglich. Eine Kombination aus Lesters Projekt und dem
dieser Arbeit wäre durchaus denkbar. Mit Hilfe von integrierten Sensoren, wie z. B. dem
Mini-Spektrometer von Hamamatsu Photonics [Ham10], könnte die Elektronik klein gehalten werden. [LTPB10]
Die Kommunikation mit einem Programm zur Haushaltsverwaltung wäre ebenfalls denkbar. So könnte die nächste Bestellung des Getränkevorrats automatisch vonstatten gehen.
Durch Neuerungen wie in den genannten Beispielen werden intelligente Umgebungen
ermöglicht, die den Nutzern erhebliche Vorteile erbringen können. Von der Erhaltung
der Eigenständigkeit in Bezug auf hilfsbedürftige Menschen, über Verbesserung der Sicherheitsbedingungen bis hin zur reinen Komfortsteigerung - wie volle Serviceleistung unter
strenger Bewahrung der Privatsphäre in Restaurants [Bjö02] - werden somit Szenarien
ermöglicht, die bisher nur als Visionen galten.
2.2
Versuchsaufbau
Um nun auf die Integration von eingebetteten Systemen im eigenen Projekt einzugehen
wird im Folgenden der Versuchsaufbau geschildert, der während der Entwicklung des Gesamtsystems Verwendung fand. Auf den genauen Aufbau des Prototyps wird später im
Kapitel 2.8 Umsetzung im Prototyp“ eingegangen. Prinzipiell beinhaltet der Versuchsauf”
bau zwei I/O-Boards, den Arduino-Boards, mit je einem Mikrocontroller und analogen und
digitalen Ein- und Ausgängen. Weiterhin sind ein Inertialsensor, ein Temperatursensor und
ein Füllstandssensor Bestandteile des Aufbaus. Im Verlauf des Projekts, werden zuerst die
verschiedenen Sensoren einzeln an eines der Arduino-Boards angeschlossen, um spezielle Programme für die Auswertung der Sensordaten zu implementieren. Danach werden
die Boards um ein Funkmodul erweitert. Eines der Boards ist mit einem Computer via
USB verbunden und soll als Empfänger dienen. Dadurch kann das andere, sensorbestückte
Board nun an einer beliebigen Position in der Umgebung platziert werden und seine Daten
kabellos an den informationsverarbeitenden Computer übertragen. Es folgt eine detaillierte
Beschreibung der genannten Komponenten.
2.2.1
Arduino
Während des Projekts kamen zwei Ausführungen des Arduino-Boards zur Verwendung:
• Arduino Duemilanove
• Arduino Pro Mini
KAPITEL 2. ENTWICKLUNG DER INTELLIGENTEN TASSE
14
Die meiste Zeit wurde mit dem 2009 (ital. “duemilanove”) eingführten Arduino Duemilanove (siehe Abb. 2.3) gearbeitet. Dieser weist 14 digitale INPUT/OUTPUT Pins auf,
von denen sechs als Pulsweitenmodulationsausgänge genutzt werden können. Der Arduino
stellt unter anderem sechs analoge Eingänge, einen ICSP (In-Circuit Serial Programming)
Anschluss, einen USB-Port und einen Reset-Schalter bereit. Ein 16MHz Quarzoszillator
taktet den gesockelten Mikrocontroller ATmega328 der Firma Atmel.
Abbildung 2.3: Arduino Duemilanove
[Spa10a]
Die Energieversorgung des Duemilanove erfolgt wahlweise über den USB-Port oder über
den dafür vorgesehenen Anschluss in Verbindung mit einer Batterie bzw. einem Netzstecker mit AC/DC Adapter. Die Auswahl erfolgt dabei automatisch, eine Setupänderung
ist nicht notwendig. Wird statt USB eine externe Versorgung gewählt, so kann diese über
die runde 2.1mm Steckerbuchse, deren Pluspol mittig sitzt, mit dem Arduino-Board verbunden werden. Eine weitere Möglichkeit wäre, die Pole, beispielsweise von einer Batterie,
mit den Gnd und Vin Kontakten zu verbinden. Laut offizieller Website [Ard10a] liegt der
Arbeitsbereich des Boards zwischen 6 und 20 Volt. Jedoch werden sieben bis zwölf Volt
empfohlen, da unter sieben Volt der 5V-Pin eventuell die angegebenen fünf Volt nicht erreicht. Über zwölf Volt besteht für den Spannungsregler die Gefahr des Überhitzens, was
wiederum zu einer Beschädigung des Boards führen könnte. Da das Arduino Duemilanove
Board während des Projekts nur über USB versorgt wurde, kam diese Begrenzung nicht
zum Tragen. Neben dem GND-Pin, die Verbindung zum Bezugspotential, gibt es bei den
POWER Pins noch drei Kontakte die Spannung liefern: Vin, 5V und 3V3. Bei Vin handelt
es sich um eine Durchschleifung der Eingangsspannung. Hier liegt der Wert der Versorgungsspannung des Boards an. Der 5V-Ausgang stellt den regulierten Anschluss für den
KAPITEL 2. ENTWICKLUNG DER INTELLIGENTEN TASSE
15
Mikrocontroller und andere Komponenten des Board dar. Die Regulierung geschieht, im
Falle einer Versorgung durch eine externe Energiequelle, mittels eines integrierten Reglers.
Liegt eine USB-Verbindung vor, wird dessen Spannung unverändert übernommen. Am
3V3 Pin werden durch einen FTDI-Chip (Future Technology Devices International ) 3.3V
generiert. Hier können maximal 50mA bereitgestellt werden.
Bezüglich des Speichers ist der Arduino Duemilanove durch den ATmega328 mit 32kB
Flashspeicher ausgerüstet um Code zu speichern. Von diesen werden allerdings 2kB für
den Bootloader benötigt. Der ATmega328 besitzt 2kB SRAM und 1kB EEPROM.
Jeder der 14 digitalen Pins auf dem Duemilanove kann als Eingang oder Ausgang benutzt werden, indem man bei der Implementierung eines Programms auf die Funktionen
pinMode(), digitalWrite() und digitalRead() zurückgreift. Die Pins arbeiten unter
5V und können jeweils maximal 40mA aufnehmen oder bereitstellen. Jeder einzelne besitzt einen eigenen internen Pull-up Widerstand (Standardeinstellung: deaktiviert) mit
20-50kOhm. Zusätzlich haben einige Pins spezielle Funktionen:
• Seriell: Pin 0 (RX) und 1 (TX). Sie werden für das Empfangen (“receive”: RX) und
Übertragen (“transmit”: TX) der seriellen TTL Daten verwendet. Diese Pins sind
mit den entsprechenden Pins des FTDI USB-to-TTL seriellen Chips verbunden.
• Externe Interrupts 2 und 3. Diese Pins können so konfiguriert werden, dass Interrupts bei niedrigen Werten, ansteigenden oder fallenden Flanken oder bei einer
Wertänderung veranlasst werden.
• PWM: Die Pins 3, 5, 6, 9, 10, und 11 stehen, in Verbindung mit der analogWrite()
Funktion, als Ausgang mit 8-bit Pulsweitenmodulation zur Verfügung.
• SPI: Pin 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK). Diese Pins unterstützen die
SPI Kommunikation, die zwar von der Hardware bereitgestellt wird, allerdings gegenwärtig nicht Teil der Arduino Sprache ist.
• LED: Pin 13. Eine SMD Leuchtdiode ist mit dem Pin 13 verbunden. Ist das Signal
das an dem Pin anliegt auf HIGH, leuchtet die LED. Ist der Wert auf LOW, ist sie aus.
Das schematische Layout ist im Anhang A.2 zu finden. Der Duemilanove besitzt sechs
analoge Eingänge, die jeweils eine 10 bit Auflösung bieten, sprich 1024 verschiedene Werte.
Standardmäßig messen sie vom Bezugspotential bis 5V. Es ist jedoch möglich die Obergrenze des Bereichs mit Hilfe des AREF Pins und der Funktion analogReference() zu
verändern. Auch bei den analogen Pins gibt es Kontakte mit speziellen Funktionen: I2C:
Pins 4 (SDA) und 5 (SCL). I2C (TWI) Kommunikation wird über die Wire Bibliothek
unterstützt.
Weitere Pins auf dem Board:
• AREF: Dieser Pins stellt ein Referenzpotential für analoge Eingänge zur Verfügung.
Zugriff, wie bereits erwähnt, über die Funktion analogReference().
KAPITEL 2. ENTWICKLUNG DER INTELLIGENTEN TASSE
16
• RESET: Wird hier ein LOW Signal angelegt, wird der Mikrocontroller zurückgesetzt
und neu gestartet. Typischerweise wird dieser Pin genutzt, um einen Reset-Knopf
auf einem so genannten Shield“, ein Plug-in Board, zu montieren, falls der bereits
”
auf dem Mainboard vorhandene unerreichbar ist.
Der Arduino Duemilanove weist eine Anzahl an Möglichkeiten vor, um mit einem Computer, weiteren Arduinos oder anderen Mikrocontrollern zu kommunizieren. Der Atmega328
stellt die Möglichkeit einer seriellen Kommunikation (UART TTL, 5V) über die digitalen
Pins 0 (RX) und 1 (TX) bereit. Ein FTDI FT232RL Chip (siehe Abb. 2.4) auf dem Board
kanalisiert die genannte serielle Kommunikation über USB. Die FTDI Treiber stellen dem
Computer einen virtuellen COM Port bereit. Diese Treiber sind Teil des Arduino Softwarepakets. Die Arduino Software beinhaltet eine Monitorfunktion, die es ermöglicht einfache
Abbildung 2.4: FTDI Chip
textbasierte Daten an den Arduino zu übermitteln bzw. zu empfangen. Die RX und TX
LEDs auf dem Board blinken auf, wenn mittels des FTDI Chips und der USB-Verbindung
mit dem Computer Daten ausgetauscht werden. Dies ist bei der seriellen Kommunikation
über die Pins 0 und 1 jedoch nicht der Fall. Mit Hilfe der SoftwareSerial Library kann
jeder digitale Pin des Duemilanoves zur seriellen Kommunikation verwendet werden. Der
ATmega328 unterstützt ebenfalls das I2C (TWI) und das SPI Protokoll. Die Arduino Software enthält eine Wire Library um den Gebrauch des I2C Busses zu vereinfachen. Weitere
Informationen können der Arduino Dokumentation bzw. dem Datenblatt des ATmega328
entnommen werden.
Der Arduino Duemilanove kann mit der Arduino Software programmiert werden. Detaillierte Informationen dazu im Kapitel 2.3 Programmierumgebung“. Der ATmega328 auf
”
dem Arduino Duemilanove wird mit vorinstalliertem Bootloader ausgeliefert, wodurch das
Beschreiben des Chips ohne externen Hardware Programmer ermöglicht wird. Hierfür wird
das Kommunikationsprotokoll des STK500 verwendet. Optional kann der Bootloader auch
umgangen und der Mikrocontroller über den ICSP (In-Circuit Serial Programming) Anschluss programmiert werden. Hier bietet sich der Vorteil, den gesamten Flashspeicher des
KAPITEL 2. ENTWICKLUNG DER INTELLIGENTEN TASSE
17
Mikrocontrollers nutzen zu können. Beim Einschalten und Neustart des Mikrocontrollers
entfällt somit die durch den Bootloader verursachte Verzögerung [Ard10d].
Der Arduino Duemilanove wurde so entworfen, dass ein Hardware Reset vor einem Upload,
z.B. durch Betätigen eines Resetschalters, nicht notwendig ist. Stattdessen wird der Arduino via Software durch einen verbundenen Computer zurückgesetzt. Eine der HardwareFlusskontrollleitungen (DTR, “data terminal ready”) des FT232RL ist mit der Resetleitung des ATmega328 über einen 100nF Kondensator verbunden. Wird diese Leitung auf
LOW gezogen, fällt das Signal auf der Resetleitung lang genug um einen Reset am Chip
zu bewirken. Dadurch ermöglicht, kann der Upload mit nur einem Mausklick über die
Arduino Softwareumgebung gestartet werden. Dieser Aufbau hat weitere Auswirkungen.
Falls der Duemilanove mit einem Computer verbunden ist, der das Betriebssystem Mac
OS X oder Linux verwendet, wird jedes mal, wenn eine Softwareverbindung über USB
hergestellt wird, ein Reset ausgeführt. Für die folgende halbe Sekunde, ist der Bootloader
auf dem Duemilanove aktiv. Da der Mikrocontroller so programmiert ist ungewöhnliche
Daten zu ignorieren - z.B. alles ausgenommen neuen Code -, werden die ersten paar Bytes abgeschnitten, nachdem eine Verbindung hergestellt wurde. Falls ein Programm auf
dem Arduino anfänglich eine einmalige Konfiguration oder andere Daten sicher empfangen
soll, muss darauf geachtet werden, dass die Kommunikationssoftware ca. eine Sekunde
verzögert und damit, nach dem Aufbau der Verbindung, gestartet wird. Nach dieser Wartezeit kann mit dem Senden der Daten begonnen werden. Auf dem Duemilanove verläuft
eine spezielle Leitung, deren Durchtrennung die Deaktivierung des Auto-Resets zur Folge
hat. Um eine einfache Reaktivierung zu ermöglichen, wurden bereits Kontakte vorgefertigt. Diese sind mit “RESET-EN”gekennzeichnet. Werden sie zusammen gelötet, ist der
Ausgangszustand wiederhergestellt. Eine weitere Möglichkeit den Auto-Reset zu umgehen
ist, eine Verbindung vom 5V-Pin zum RESET-Pin über einen 110Ω Widerstand zu legen.
Der Arduino Duemilanove hat eine selbstrückstellende Sicherung, die die USB-Ports des
Computers vor Kurzschlüssen und Überströmen schützt. Da die meisten Computer eigene
Schutzmaßnahmen aufweisen, wird hier dadurch eine weitere Sicherheitsebene eingeführt.
Falls mehr als 500mA auf den USB-Port gegeben werden, bricht die Sicherung automatisch
die Verbindung solange auf, bis der Kurzschluss oder die Überlast behoben werden.
Maximale Länge und Breite des Duemilanove Boards betragen 69mm bzw. 54mm, wobei
der USB Anschluss um 7mm und die 2.1mm-Steckerbuchse für die Stromversorgung 2mm
darüber hinaus stehen. Drei Löcher erlauben es, das Board mit Hilfe von Schrauben auf
einer Oberfläche oder in einem Gehäuse zu montieren. Außerdem gilt es zu beachten, dass
der Abstand zwischen den digitalen Pins 7 und 8 fünf Millimeter beträgt und somit kein
ganzzahliges Vielfaches des 2mm Abstands der anderen Pins darstellt. [Ard10a]
Vor Fertigstellung des Gehäuses des Prototyps, hier ist die Tasse an sich gemeint,
wurde zum Mikrocontroller Arduino Pro Mini (siehe Abb. 2.5) gewechselt, da dieser die
folgenden besseren Vorraussetzungen für einen dauerhaft mobilen Einsatz aufweist.
KAPITEL 2. ENTWICKLUNG DER INTELLIGENTEN TASSE
18
Abbildung 2.5: Arduino Pro Mini
[Spa10b]
Der Pro Mini ist wesentlich kleiner als der Duemilanove. Länge und Breite betragen
hier lediglich 33mm bwz. 18mm. Außerdem wird weniger Energie benötigt um das Board
zu betreiben. Die Versorgungsspannung dieser Ausführung beträgt 3.3V. Ein weiterer
Unterschied besteht darin, dass der montierte Mikrocontroller Atmel ATmega328 mit
8MHz anstatt 16MHz getaktet wird. Auch die vorinstallierten Kabelschuhe fehlen hier,
um ohne Vorbearbeitung eine individuelle Lötverbindung zu den Sensoren, Aktoren
oder sonstiger Peripherie zu ermöglichen. Einzig die Kontaktpunkte sind vorhanden.
Dadurch wird eine minimale Höhe von 0,8mm erreicht. Mittels sechs Pins kann der
Arduino Pro Mini mit einem FTDI Kabel oder einem Sparkfun Breakoutboard verbunden
werden. Dieses wiederum kann an den USB-Port eines Computers angeschlossen werden,
um das Board mit Strom zu versorgen und eine Datenübertragung zu ermöglichen.
Alternativ kann der Pro Mini über den Vcc oder RAW Kontakt mit einer regulierten bzw.
unregulierten Spannungsversorgung verbunden werden. Diese sollte 3.3V bis maximal
12V liefern. Wie beim Duemilanove liegen hier 14 digitale Ein- bzw. Ausgänge mit den
selben speziellen Funktionen, sechs analoge Eingänge, ein Reset-Knopf und Löcher für
die Montage vor (schematisches Layout: siehe Anhang A.1). Der Mikrocontroller hält
noch zwei weitere analoge Eingänge bereit, die allerdings noch nicht nach außen geführt
sind. Für deren Verwendung ist es notwendig, entsprechende Verbindungen zu löten.
Weiteres dazu im Kapitel 2.8 Umsetzung im Prototyp“. Mit 32kB Flashspeicher ist
”
hier im Vergleich zum Duemilanove, der ebenfalls mit dem Atmega328 bestückt ist, die
gleiche Speicherkapazität verfügbar. Kommunikation und Programmierung funktionieren
bei beiden Mikrocontrollern gleichermaßen. Um auch hier einen automatischen Software
KAPITEL 2. ENTWICKLUNG DER INTELLIGENTEN TASSE
19
Reset zu ermöglichen, ist beim Pro Mini einer der sechs seitlichen Kontakte mit der
Reset-Leitung des ATmega328 über einen 100nF Kondensator verbunden. Dieser Pin
steht auch in Kontakt mit einer der Hardware-Flusskontrollleitungen des USB-Seriell
Konverters: RTS (“request to send”), falls ein FTDI Kabel verwendet wird; DTR (“data
terminal ready”[Wik10b]) bei der Nutzung eines Sparkfun Breakout-Boards.
2.2.2
Inertialsensor
Die intelligente Tasse wird mit dem Inertialsensor IMU 6DOF Razor - Ultra-Thin IMU
(siehe Abb. 2.6) ausgestattet, durch den Beschleunigungen in und um die drei Raumachsen gemessen werden können.
Abbildung 2.6: Inertialsensor 6DoF Razor
von links nach rechts LPR530AL, ADXL335, LY530ALH [Spa10f]
Dieses, sich im Tassenboden befindende Sensorpaket, ist mit folgenden drei Sensoren
bestückt:
• LPR530AL (pitch and roll)
• LY530ALH (yaw)
• ADXL335 (acceleration)
Der LPR530AL ist in der Lage Änderungen in pitch und roll zu detektieren. Wie aus
Abbildung 2.7 abzulesen ist, handelt es sich bei der Rollbewegung um eine Drehung um
die Längsachse. Die Nickbewegung (engl. “pitch”) stellt eine Rotation um die Querachse
dar. Laut Datenblatt können mit vierfacher Verstärkung Drehraten von bis zu ±300◦ /sec
KAPITEL 2. ENTWICKLUNG DER INTELLIGENTEN TASSE
20
Abbildung 2.7: Roll, Pitch und Yaw
[NAS10]
gemessen werden. Ohne Verstärkung sind sogar bis zu ±1200◦ /sec möglich.
Der LY530ALH zeigt die Drehrate um die Hochachse (engl. “yaw”) an. Auch dieser Sensor arbeitet in einem Bereich von ±300◦ /sec bzw. ohne Verstärkung ±1200◦ /sec.
Beim ADXL335 handelt es sich um einen 3-Wege Beschleunigungssensor, welcher die Geschwindigkeitsänderungen längs der X-, Y- und Z-Achse misst. Mit diesem Sensor ist es
1
g - ein Hundertstel der Erdbeschleunigung - im Bereich von
möglich Änderungen von 100
±3g zu detektieren.
Effektiv werden im Prototyp bisher nur die Daten des Beschleunigungssensors ADXL335
genutzt. Dieser wird zur Detektierung der rotationsbezogenen Lage im Raum genutzt,
da diese Information dank der Erdbeschleunigung immer vorliegt. Bei aufrechtem Stand
der Tasse werden die Werte X = 0.000g, Y = 0.000g und Z = 1.000g gemessen. Liegt die
Tasse beispielsweise 45◦ um die Y-Achse gekippt im Raum werden die Werte X = 0.000g,
Y = 0.695g und Z = 0.700g übertragen. Im Gegensatz dazu liegt bei den Drehratensensoren im besten Fall nur ein Wert ungleich 0 vor, wenn eine Rotationsänderung rotAcc [◦ /s 2 ]
von statten geht. Um hierbei auf die aktuelle Lage deg[◦ ] schließen zu können, wäre eine
zweifache Integration notwendig:
Z
T
Z
T
deg =
rotAcc(τ )d τ d τ
t0
t0
(2.1)
KAPITEL 2. ENTWICKLUNG DER INTELLIGENTEN TASSE
21
Ein weiterer Grund für den Verzicht der Nutzung der Drehratensensoren, ist ein bauteilspeziefisches Problem: Wird ein größerer Ausschlag mit anschließender Ruhephase gemessen,
so folgen nach dem Peak - trotz Stillstand - aus unbekanntem Grund Werte mit umgekehrtem Vorzeichen. Erst nach einiger Zeit gibt der Sensor wieder den Wert 0 aus (vgl.
Abbildung 2.8). Dieses Problem führt, wie das stetige Rauschen, bei einer zweifachen Integration zu einer deutlichen Ungenauigkeit. Wird das Rauschen zuvor gefiltert, werden
kleine bzw. langsame Bewegungen ignoriert. Ohne Filterung akkumuliert sich ein Fehler,
durch welchen Neigungswerte entstehen die nicht der Realität entsprechen. Daher wird für
diese Aufgabe nur der Beschleunigungssensor genutzt.
Abbildung 2.8: Anomalie des Gyrosensors
Trotz der derzeitig alleinigen Nutzung des ADXL335 wurde nicht ein einzelner 3-WegeBeschleunigungssensor verbaut, sondern auf das Sensor-Gesamtpaket IMU 6DOF Razor Ultra-Thin IMU zurückgegriffen, um eventuelle Erweiterungen leichter zu ermöglichen.
Auf die Berechnung (Gleichung 2.2) der translatorischen Lage dist[m] im Raum durch zweifache Integration der Beschleunigungswerte Acc[ sm2 ] wurde verzichtet, da die Koordinaten
des Objekts durch ein externes Trackingsystem wesentlich zuverlässiger ermittelt werden
können.
Z
T
Z
T
dist =
Acc(τ )d τ d τ
t0
(2.2)
t0
Weitere Informationen dazu im Kapitel 2.8.2 “IR-LEDs”.
Um eine Drehung um die vertikale Achse der Tasse und somit die Lage des Henkels bestimmen zu können, wurde in Erwägung gezogen einen Kompass zu integrieren. Da dieser
KAPITEL 2. ENTWICKLUNG DER INTELLIGENTEN TASSE
22
jedoch auch stark von anderen Magnetfeldern als dem Erdmagnetfeld beeinflusst wird,
zusätzliche Energie und Platz benötigt, fiel die Entscheidung, diese Bestimmung ebenfalls
mittels eines externen Trackingsystems durchzuführen.
2.2.3
Temperatursensor
Die Temperatur der von der intelligenten Tasse beinhalteten Flüssigkeit wird mittels eines
handelsüblichen Temperatursensors gemessen (siehe Abb. 2.9).
Abbildung 2.9: Temperatursensor
Dieses wasserdichte Bauelement wird über zwei Litzen-Kontakte angesprochen: Masse und
3.3V. Es besitzt bei Zimmertemperatur einen Eigenwiderstand von 47kΩ. Die Datenerfassung funktioniert über eine einfache Spannungsteilerschaltung (siehe Abb. 2.10). Hierbei
wird ein zusätzlicher 33kΩ Widerstand zwischen Masse und dem Temperatursensor geschaltet. Zwischen Widerstand und Sensor wird der 10 Bit Analogwert abgefragt (→ Pin 0).
Abbildung 2.10: Spannungsteilerschaltung für den Temperatursensor
KAPITEL 2. ENTWICKLUNG DER INTELLIGENTEN TASSE
23
Der Datenbereich liegt bei Werten zwischen 0 und 1023. Ein höherer Wert bedeutet bei
diesem Aufbau eine höhere Temperatur.
2.2.4
Füllstandssensor
Eine weitere Information, welche für den Benutzer interessant sein kann, für einen Haushaltsroboter aber eine wichtige Grundlage für weiteres Handeln darstellt, ist der Füllstand
der intelligenten Tasse. Um festzustellen wie viel Flüssigkeit sie zu jedem Zeitpunkt
beinhaltet, wurden an bestimmten Stellen der Innenseite der Tasse Kontaktsensoren in
Form von Kupferringen aus selbstklebender Kupferfolie angebracht, welche in Verbindung
mit einer leitenden Flüssigkeit, dem Getränk, einen Stromkreis zwischen dem 3.3V
Eingang und Masse bilden.
Teil dieses einfachen Sensors sind parallelgeschaltete Kohlewiderstände von unterschiedlicher Impedanz. Je höher nun der Flüssigkeitslevel ist, desto mehr Metallringe kommen in
Kontakt mit der Flüssigkeit welche als Schalter wirkt und es erhöht sich dadurch die Anzahl der Widerstände die zum Stromkreis beitragen. Folglich sinkt der Gesamtwiderstand
Rges , da ja bekanntermaßen folgender Zusammenhang gilt:
1
1
1
1
1
=
+
+
+ ... +
Rges
R 1 R2 R3
Rn
1
⇒ Rges = 1
+ R12 + R13 + ... + R1n
R1
(2.3)
Die von dem Gesamtwiderstand abhängige Spannung Uout wird am Pin A3 abgegriffen und
ausgewertet. Die Auswertung findet anhand eines Vergleichs von aktuellem Spannungswert und gespeicherten, füllstandsspezifischen Werten statt. Somit wird der gemessene
Wert einem Bereich zugeordnet und die Höhe des Flüssigkeitslevels steht grob fest. Grob,
da es keine prozentgenaue Unterteilung gibt. Auf diese wurde aus konstruktionsbedingten
Gründen verzichtet, da die Leitungen von den Sensoren vertikal in der Tassenwand zum
Mikrocontroller im Tassenboden verlaufen. Je mehr von solchen Leitungen vorhanden sind,
umso mehr wird die mechanische Stabilität des Gesamtobjekts negativ beeinträchtigt. Aus
diesem Grund wird zwischen den gespeicherten Werten interpoliert und es entsteht eine
Schätzung des aktuellen Füllstandes.
Es wurden unterschiedlich große Widerstände ausgewählt, damit der 10-bit Wertebereich
besser ausgenutzt werden kann. Würden Widerstände gleicher Impedanz von beispielsweise 47kΩ verwendet, erfolgt ein großer Sprung des Analogwertes von 0 auf über 500. Dies
führt dazu, dass übrige Bereiche einen weiter eingeschränkten Spielraum haben. Mit der
folgenden Auswahl an Widerständen (auch in Abb. 2.11 zu erkennen) wird diese Unannehmlichkeit umgangen und es resultiert ein linearerer Anstieg der Analogwerte.
KAPITEL 2. ENTWICKLUNG DER INTELLIGENTEN TASSE
24
Abbildung 2.11: Schematischer Aufbau des Füllstandssensors
R0% = 1MΩ,
R1% = 1MΩ, R5% = 630KΩ,
R40% = 100KΩ, R60% = 47KΩ, R80% = 10KΩ,
R10% = 630KΩ,
R100% = 10KΩ
R20% = 100KΩ,
Es gab zwei grundsätzliche Ansätze die Kontakte des Füllstandssensors zu platzieren:
• volumenbasierte Unterteilung
• höhenbasierte Unterteilung
Wie fortan erläutert, stellt die volumenbasierte Methode die objektivere Variante der beiden Unterteilungsmöglichkeiten dar. Hierbei wurde für jede Ringposition die exakte Höhe
in Bezug auf das zu messende Volumen V berechnet. Abbildung 2.12 veranschaulicht die
fortan verwendeten Variablen.
KAPITEL 2. ENTWICKLUNG DER INTELLIGENTEN TASSE
25
Abbildung 2.12: Trigonometrisches Schema der Tasse
Folgende Gleichung beschreibt den Zusammenhang von Volumen, Radius und Höhe:
Z
H
2
Z
r · π dh = π ·
V =
0
H
(r0 + h · tan(α))2 dh.
(2.4)
0
Dieses Integral lässt sich mit Hilfe des 5. Integrals aus [Rad00] lösen und es ergibt sich
H
1
3
V =π·
· (r0 + h · tan(α))
3 · tan(α)
0
3
π
3
=
· r0 + H · tan(α) − r0 .
3 · tan(α)
(2.5)
Somit ergibt sich ein theoretisch maximales Volumen von 380ml. Spätere Messungen am
Prototypen unter Zuhilfenahme einer Briefwaage ergaben 364ml. Hierbei wurde jedoch
darauf geachtet, dass auf keinen Fall Flüssigkeit überläuft.
Anfangs waren die Positionen für 0%, 20%, 40%, 60%, 80% und 100% des Volumens
angedacht. Da jedoch der obere Radius R = r0 +h ·tan(α) eine Abhängigkeit vom Füllstand
aufweist, ändert sich auch das Volumen bei einem konischen Gefäß nicht linear mit der
Gefäßhöhe. Dies war der Anlass für die Einführung der 1%, 5% und 10%-Marken, die eine
feinere Auflösung erlauben, da sich im unteren Bereich das Volumen überdurchschnittlich
schnell mit der Füllhöhe ändert.
KAPITEL 2. ENTWICKLUNG DER INTELLIGENTEN TASSE
Wird Gleichung 2.5 nach H aufgelöst, so folgt
r
1
3 3 · tan(α)
3
·
· V + r0 − r0 .
H =
tan(α)
π
26
(2.6)
50% des Volumens befinden sich etwa bei 59% der Fassungshöhe. Dies entspricht einem
7mm großen Abstand zu einer gedachten 50%-Marke. Wie hier ersichtlich, unterscheidet
sich bei einer konischen Tasse der prozentuale Füllstand bezogen auf das Volumen merklich
von dem Füllstand bezüglich der Gefäßhöhe. Der Durchschnittsverbraucher würde jedoch
eine Tasse als halb voll“ bezeichnen, wenn diese bis zur Hälfte ihrer Höhe gefüllt wäre. Um
”
nun auf diese intuitivere Füllstandsmessung einzugehen, entstand der zweite, rechnerisch
weniger komplexe Ansatz, die Kontaktringe in gleichen Abständen unterzubringen. Hier
wurden wieder 20%-Schritte angewendet:
h=
H
5
·k
mit
k ∈ [0, 1, 2, ..., 5]
(2.7)
wobei H die Gesamthöhe der Tasse und h die Höhe des zu berechnenden Sensorrings
darstellt. k ist ein ganzzahliger Faktor im Intervall von 0 bis einschließlich 5. Die Innenhöhe
der Tasse beläuft sich auf 80mm. Somit würden sich die Ringe auf den Positionen 0mm,
16mm, 32mm, 48mm, 64mm, und 80mm wiederfinden lassen.
Für den Prototyp wurde der erstgenannte, volumenbasierte Ansatz gewählt, da dadurch
eine rein objektive Betrachtung des Füllstandes vorliegt und für weitere Berechnungen
ohne zusätzliche Umrechnung von Nutzen sein kann.
2.2.5
XBee Funkmodul
Der Gesamtaufbau der intelligenten Tasse besteht aus zwei Mikrocontrollern von denen
beide über ein XBee Funkmodul verfügen. Ein Exemplar, der Arduino Pro Mini, bestückt
mit dem Atmel ATmega328, befindet sich in der Tasse. Dieser übernimmt die Aufgabe
der Sensorverwaltung, teilweise die Aufbereitung der durch die Sensoren gelieferten Daten
und das paketweise Versenden dieser Informationen über Funk. Vor der Fertigstellung
des Prototyps wurde für diesen Zweck der Arduino Duemilanove samt montiertem Atmel
ATmega328 genutzt. Dabei wurde das Arduino XBee Shield (Abb. 2.13) auf dem
Duemilanove montiert. Dieses stellt eine komfortable Lösung für die Verbindung mit dem
eigentlichen Funkmodul XBee 2mW Series 2.5 Chip Antenna, wie in Abbildung 2.14 zu
sehen, dar. Das Funkmodul erlaubt eine sehr verlässliche und einfache Kommunikation
zwischen den Mikrocontrollern [Spa10g]. Dabei werden Daten bei einer Sendeleistung von
2mW mit bis zu 250kbps übertragen. Die Reichweite wird im Datenblatt mit bis zu 120m
angegeben.
KAPITEL 2. ENTWICKLUNG DER INTELLIGENTEN TASSE
27
Abbildung 2.13: Arduino XBee Shield
[Spa10c]
Abbildung 2.14: XBee 2mW Series 2.5 Chip Antenna
Auf der anderen Seite des Aufbaus liegt ein Mikrocontroller mit gleicher Funkausstattung
zum Empfangen der aufbereiteten Sensordaten. Dieser ist via USB mit dem Computer
verbunden, der die Daten verarbeitet und eine Animation erstellt.
Beide Funkmodule wurden mit Hilfe des Programms X-CTU v.5.1.4.1 [Dig10] der Firma
Digi International so eingerichtet, dass nur eine Kommunikation zwischen diesen beiden
Exemplaren möglich ist. Dies wird durch die Eingabe der spezifischen Adressen der jeweiligen Geräte erreicht. Eine entsprechende Anleitung ist in [Sev09] zu finden.
Es ist darauf zu achten, dass auf dem Arduino Xbee Shield des Empfängers der obere
KAPITEL 2. ENTWICKLUNG DER INTELLIGENTEN TASSE
28
der beiden Jumper zur Auswahl von XBEE/USB entfernt ist! Der untere nimmt dabei die
Position in Richtung der XBEE Beschriftung ein.
2.3
Programmierumgebung
Generell wurden für zwei prinzipiell unterschiedliche Aufgaben - das Programmieren der
Mikrocontroller und die Darstellung der Daten - zwei eigene, jedoch sich sehr ähnelnde
Programmierumgebungen genutzt.
Zum einen Arduino, eine plattformübergreifende, open source Software, die zum
Programmieren des Mikrocontrollers der Arduino-Boards Anwendung fand. Die Entwicklungsumgebung selbst ist in JAVA geschrieben [Ard10e]. Im Speziellen wurde die Version
Arduino 0018 benutzt. Hierbei handelt es sich um einen schlicht gehaltenen, textbasierten
Editor. Die Arduino Benutzeroberfläche (siehe Abb. 2.16) lässt sich grob in drei Bereiche
einteilen. Im oberen Abschnitt des Fensters ist eine Menüleiste mit den Optionen File,
Edit, Sketch, Tools und Help zu sehen. Diese weisen entsprechende Untermenüs auf.
Darunter befindet sich eine Schnellstartleiste (in Abb. 2.15 dargestellt) mit Icons, die die
gängigsten Befehle repräsentieren: Verify/Compile, Stop, New, Open, Save, Upload to I/O
Board und Serial Monitor.
Abbildung 2.15: Arduino Schnnellstartleiste
Unterhalb der Schnellstartleiste befinden sich die Reiter der offenen Sketches und ein
weiteres Icon, mit dem, mittels eines Menüs, über die geöffneten Dateien bestimmt werden
kann. Den zweiten Bereich stellt das Textfeld für die Eingabe des Codes dar. Bestimmte
Teile der Syntax, wie zum Beispiel Datentypen, vordefinierte Funktionen oder aus
Standardbibliotheken bekannte Konstanten, werden wie gewohnt farblich hervorgehoben.
Eine Nummerierung der Zeilen ist nicht vorhanden. Jedoch wird am unteren Rand der
Arduino GUI die Zeilennummer angezeigt in der sich der Cursor momentan befindet.
Unterhalb des Textfeldes schließt ein Nachrichtenbereich die graphische Oberfläche
der Entwicklungsumgebung ab. Hier können Daten durch den Befehl print() bzw.
println() textbasierend ausgegeben werden. Auch eventuelle Fehlermeldungen des
Compilers werden angezeigt.
Optional kann, z.B. über die beschriebene Schnellstartleiste, ein Fenster, das die Funktion
eines seriellen Monitors erfüllt, geöffnet werden. Werden vom Mikrocontroller mit Hilfe
der Funktion Serial.print() Nutzdaten übertragen, können diese im so genannten
Serial Monitor ausgegeben werden.
In eigenständiger Sprache - Arduino, basierend auf der Sprache Wiring [Ard10c] - können
so in diesem Editor Programme implementiert werden. Im vorliegenden Fall bis zu einer
KAPITEL 2. ENTWICKLUNG DER INTELLIGENTEN TASSE
29
Abbildung 2.16: Arduino Benutzeroberfläche
Größe von ca. 30kB, da größere Projekte den Rahmen der genutzten Mikrocontroller
bezüglich Speicher sprengen würden. Zwar stellen der Arduino Pro Mini und der Arduino
Duemilanove 32kB Flashspeicher zur Verfügung, jedoch werden 2kByte vom Bootloader
benötigt, falls der Upload des Codes nicht über einen externen Hardware-Programmer
geschieht. Im letzteren Fall ist die Ausnutzung des gesamten Speichers möglich [Ard10d].
Diese Programme werden dann mit dem integrierten Compiler überprüft, kompiliert und
auf den Mikrocontroller eines Arduino-Boards z.B. per USB-Port hochgeladen. Dazu
muss über den Menüpunkt Tools → Board die Bezeichnung des verwendeten Boards
ausgewählt werden und danach entweder über das Menu File → Upload to I/O Board
oder die Schnellstartleiste des Programms der Upload-Befehl ausgeführt werden.
KAPITEL 2. ENTWICKLUNG DER INTELLIGENTEN TASSE
30
Die Syntax der Arduino bzw. Wiring-Sprache ist eine Abart der Sprachen C/C++.
Wird ein Quelltext kompiliert, werden zuerst einige kleine Transformationen von der
Arduino-Umgebung durchgeführt um sicher zu stellen, dass der Quelltext in korrektem
C bzw. C++ vorliegt. Erst dann wird mittels des C -Compilers avr-gcc der Sketch
in Maschinencode übersetzt. Nun wird der Code mit den standard Arduino Libraries
verlinkt, um grundlegende Funktionen wie Serial.print() oder digitalWrite() zu
unterstützen. Daraus entsteht eine einzige Hex-Datei, die nun in den Programmspeicher
des Mikrocontrollers hochgeladen werden muss [Ard10b]. Der Upload geschieht mittels
avrdude über eine USB-Verbindung, eine andere serielle Verbindung oder über einen
externen Hardwareprogrammer. Es sind zwei Funktionen notwendig um ein ausführbares
Programm zu implementieren, void setup() und void loop(). Arduino unterscheidet
sich von der Sprache C unter anderem darin, dass nach der Initialisierung globaler
Variablen die Funktion void setup() einmalig ausgeführt wird. In dieser werden beispielsweise die Modi für die Pins des Arduino-Boards festgelegt (INPUT oder OUTPUT),
die Baudrate bestimmt oder ein Bezug zu einer Referenzspannung hergestellt.
Außerdem wird danach die Funktion void loop() als - wie der Name schon vermuten
lässt - Endlosschleife ausgeführt bis die Spannungsversorgung des Boards unterbrochen
wird. In dieser beginnt der eigentliche Arbeitsablauf des Mikrocontrollers. Hier können
weitere Funktionsaufrufe stattfinden. Sensordaten werden empfangen, eventuell schon
aufbereitet und anschließend via USB oder Funk an einen Informationsempfänger gesendet.
Die zweite angesprochene Programmiersoftware nennt sich Processing; Version 1.0.9.
Auch diese ist ein open source Projekt. Diese Entwicklungsumgebung ist auf die Einsatzbereiche Simulation und Animation spezialisiert [Wik10a]. Hierbei steht die graphische
Darstellung, der vom Mikrocontroller zur Verfügung gestellten Daten, im Vordergrund.
Optisch unterscheiden sich beide Editoren, Processing und Arduino, nur im Logo und
einer anderen Oberflächenkolorierung. Abbildung 2.17 zeigt einen Screenshot der Benutzeroberfläche. Auch im Ablauf sind sie sich sehr ähnlich. Wie bei Arduino wird
nach der Initialisierung der globalen Variablen, eine setup-Funktion einmalig ausgeführt,
um beispielsweise die Fenstergröße der graphischen Darstellung zu definieren, eventuell
zusätzliche Eingabegeräte einzurichten und den Ausgangsport des Mikrocontroller als Datenquelle festzulegen. Danach folgt, analog zur loop-Funktion von Arduino, void draw()
- eine Endlosschleife von der aus die Darstellung der eingehenden Daten möglich ist. Nun
kann der Entwickler seiner Kreativität freien Lauf lassen. Viele geometrische Grundformen
liegen als bereits definierte Funktionen zum Abruf bereit. Es kann sowohl in 2D als auch
3-dimensional gezeichnet“ werden. Auch die Kameraperspektive ist frei wählbar.
”
KAPITEL 2. ENTWICKLUNG DER INTELLIGENTEN TASSE
31
Abbildung 2.17: Processing Benutzeroberfläche
Zur komfortableren Darstellung des Quelltextes wurde zwischenzeitlich auf einen weiteren, kostenlos verfügbaren Editor zurückgegriffen. Notepad++ v4.1.2 schafft eine sehr
übersichtliche Ansicht durch weitere farbige Hervorhebung verschiedener Syntax-Elemente
wie z.B. Konstanten, Funktionen, Initialisierungen und Text. Zudem können Funktionen
durch so genannte Faltungen ein- bzw. ausgeblendet werden. Zoom-Stufen und die Anzeige mehrer Quelltextdateien im selben Editor nebeneinander, sorgen für einen angenehmen
Überblick über den vorliegenden Code, um nur einige wenige Vorteile zu nennen. Hierdurch
entspannt sich die Implementierung der einzelnen Programme enorm.
KAPITEL 2. ENTWICKLUNG DER INTELLIGENTEN TASSE
2.4
32
Programmierung der Mikrocontroller
Um eine Kommunikation zwischen beiden Parteien - der Tasse als Sender und ein Computer als Empfänger - zu ermöglichen, müssen dafür zuerst die Funkmodule entsprechend
programmiert werden. Wie bereits in Kapitel 2.2.5 erwähnt, wurde dies durch die Eingabe
der jeweiligen Zieladressen der einzelnen Geräte entsprechend konfiguriert.
Das Hochladen des Quelltextes für den Mikrocontroller geschah beim Arduino Duemilanove auf regulärem Weg über USB. Beim Arduino Pro Mini wurde zusätzlich ein FTDI
Basic Breakout Board [Spa10d] (siehe Abb. 2.18) verwendet.
Abbildung 2.18: FTDI Basic Breakout Board zum Programmieren des Arduino Pro Mini.
[Spa10e]
Im Folgenden wird kurz auf den Quelltext des Programms des sendenden, sich in der Tasse
befindenden Mikrocontrollers eingegangen, welcher die Daten der Sensoren abgreift, diese
teilweise schon aufbereitet und anschließend als String über den seriellen Port übermittelt.
Zu Beginn werden einige Variablen initialisiert, unter anderem ein Integer-Array aus
bekannten Offsets für die jeweiligen Datenströme des Inertialsensors.
Innerhalb der Funktion void setup() wird eine analoge Referenzspannung angegeben
um bei wechselnder Spannungsversorgung immer gleiche Bedingungen zu ermöglichen.
Hiermit sind USB-Anschlüsse unterschiedlicher Computer gemeint, oder z.B. der Wechsel
zwischen UBS und Batterieanschluss. Eine Neukalibrierung der Sensoren entfällt somit.
Auch die genutzte Übertragungsrate des seriellen Protokolls wird hier mittels der Funktion
Serial.begin() definiert. Im vorliegenden Fall wurde eine Baudrate von 9600 gewählt.
Um mögliche Einschwingsequenzen nicht zu übertragen, wird nun eine Verzögerung von
1000ms veranlasst, bis anschließend die Datenaufbereitung beginnt.
Die für die Aufbereitung zuständige Funktion void loop() wird, bis die Spannungsversorgung abbricht, als Endlosschleife ausgeführt. Anfangs werden die Sensordaten von den
KAPITEL 2. ENTWICKLUNG DER INTELLIGENTEN TASSE
33
jeweiligen Analogeingängen abgefragt. Um den Wert des Temperatursensors in der Einheit
Grad Celsius zu erlangen, wird die Funktion Temp_output() aufgerufen. Diese errechnet
den entsprechenden Wert bis auf eine Nachkommastelle genau und gibt ihn als zehnfachen
Wert zurück. Grund hierfür ist die Einigung auf Integerzahlen, welche die spätere
Übertragung mittels der Funktion sprintf() vereinfacht. Detaillierte Informationen zur
Temperaturbestimmung sind im Kapitel 2.5.2 Temperatursensor“ zu finden.
”
Alle Sensordaten werden in das Integer-Array int val[6] geschrieben. Gleichzeitig wird
von dem anliegenden Analogwert der entsprechende Offset subtrahiert. Die Offsets für die
Werte des Beschleunigungssensors wurden so gewählt, dass bei aufrechtem Stillstand der
Tasse, bzw. waagrechter Position des Sensors, alle Werte zu null werden. Eine Ausnahme
stellt in diesem Fall die Z-Koordinate des Beschleunigungssensors dar, da auf sie die
einfache Erdbeschleunigung wirkt. Von ihrem Eingangswert wird ebenfalls ein Offset
subtrahiert (siehe Kapitel 2.5.1 Kalibrierung der Sensoren - Inertialsensor“), jedoch
”
ergibt sich hier ein Wert größer null. Die Werte des Füllstands- und Temperatursensors
werden nicht mit einem Offset verrechnet. Entsprechend sind die Positionen im Offset
Array mit 0 belegt. Nun werden die Daten des Arrays int val[6] mittels der Funktion
sprintf() in eine Variable message geschrieben. Dies geschieht in einer bestimmten
Reihenfolge die auch dem Empfänger bekannt sein muss. Zusätzlich werden Trennzeichen
eingefügt, um die Sensordaten untereinander, aber auch die fortlaufend übertragenen
Nachrichtenpakete unterscheiden zu können. Hierfür werden Strichpunkte ; bzw. die
Zeichen Plus + und Raute # als Anfangs- und Endmarker verwendet.
Abschließend wird die Nachrichtenvariable message mittels der Funktion Serial.print()
über die serielle Verbindung des Mikrocontrollers ausgegeben bzw. verschickt. Die
Leerung des Puffers folgt durch Serial.flush().
Mit einer Verzögerungsfunktion, die das Programm für 20ms pausieren lässt, wird die
Übertragungsrate begrenzt und verhindert somit auf einfache Weise einen Pufferüberlauf
beim Empfänger. Durch diese Verzögerung ergibt sich eine Ausführungsfrequenz von
ungefähr 50Hz. Die Frequenz liegt etwas unterhalb von 50Hz, da die Ausführung des
Programms selbst auch zeitlich ins Gewicht fällt. Außerdem würde eine noch höhere
Abtastung zu keinem weiteren Vorteil führen. Die Funktion delay() stellt das Ende der
Funktion void loop() dar. Nun beginnt der Funktionsablauf von vorne.
KAPITEL 2. ENTWICKLUNG DER INTELLIGENTEN TASSE
Folgender Quelltext stellt einen Ausschnitt des Programms des Senders dar.1
1
2
3
4
5
6
7
// 0 1 2 3 4 5 (pins)
// ax ay az LL T int val[6] = {0,0,0,0,0,0}; // value of individual accelerometer or gyroscope sensor input
int offs[6] = {508, 503, 544, 0,0,0}; // offset of individual sensors
char message[40];
int i;
int counter = 0;
8
9
10
float MIN = 1023; // minimale Temp.
float MAX = 0; // maximale Temp.
11
12
13
14
const int LED_Pin[6] = {12, 13, 2, 3, 4, 5}; // red, green, IR 142◦ , IR 192◦ , IR 226◦ , IR 336◦
boolean LED_State[6] = {LOW, HIGH, HIGH, HIGH, HIGH, HIGH}; // LED_State used to set the LEDs;
long previousMillis[2] = {0, 0}; // will store last time LED was updated
15
16
17
18
void setup(){
analogReference(EXTERNAL);
// using external analog ref of 3.3V for ADC scaling
19
for(int i=0; i<6; i++) // define digital pins as output
pinMode(LED_Pin[i], OUTPUT);
20
21
22
for(i=2; i<6; i++) // turn the IR-LEDs on
digitalWrite(LED_Pin[i], LED_State[i]);
23
24
25
Serial.begin(9600);
26
// setup serial
27
delay (1000); // delay just in case - to get things stabilized
28
29
}
30
31
32
33
34
void loop(){
// initialise message
message[0] = ’\0’;
35
// read accelerometer, liquid level and temperature sensor data (analog input pins)
// 0 1 2 3 4 5 (pins)
// ax ay az LL T
for (i=0; i<6; i++)
val[i]=analogRead(i)-offs[i];
36
37
38
39
40
41
int Temp = Temp_output(val[4]);
42
43
// write string: +;[ax];[ay];[az];[LL];[T];[A5];# into "message"
sprintf(message, "+;%d;%d;%d;%d;%d;%d;#\0", val[0] /*x*/, val[1] /*y*/, val[2] /*z*/,
val[3] /*LL*/, Temp/*T*/, val[5] /*no input yet*/);
44
45
46
47
// show message...
Serial.print(message);
Serial.flush(); // ...now!
48
49
50
51
if(val[3]>10) // if cup is not empty
LED_handling(Temp); // give signals according to temperature
else{ // alternating operation of red and green LED
LED_State[0] = !LED_State[1];
LED_blink(1, 2000);
digitalWrite(LED_Pin[0], LED_State[0]);
digitalWrite(LED_Pin[1], LED_State[1]);
}
52
53
54
55
56
57
58
59
60
counter++;
delay(20); // loop delay; loop executed at ~ 50Hz or 20ms
61
62
63
}
1
Ein Code von VoidBot.net diente hier als erstes Grundgerüst (vgl. [Voi10]).
34
KAPITEL 2. ENTWICKLUNG DER INTELLIGENTEN TASSE
35
Die nachstehende Erläuterung soll den Quelltext des Empfängers (siehe unten) näher
bringen.
Nach der Initialisierung der benötigten Variablen wird in der Funktion void setup()
die selbe Baudrate, wie sie der Sender aufweist, festgelegt. Hier 9600 Baud. Mit
pinMode(13, OUTPUT) wird die, mit Pin 13 verbundene, auf dem Arduino Duemilanove
Board fest installierte LED als ansprechbarer Ausgang definiert.
In der sich dauerhaft wiederholenden Funktion void loop() werden, falls eine serielle
Verbindung hergestellt ist, die anliegenden Daten eingelesen. Bei jedem neu eintreffenden
Datensatz, wird das Signal für die LED auf dem digitalen Ausgang 13 kurzzeitig auf
HIGH gesetzt. Dies geschieht, wenn das Symbol Plus + im aktuellen Paket erkannt wurde.
Somit kann durch einen kurzen Blick auf die Empfangseinheit festgestellt werden, ob
eine Übertragung von Nutzdaten vorliegt. Auch Fehler im Datenstrom können dadurch
unter Umständen erkannt werden. Blinkt die erwähnte LED nicht kontinuierlich mit einer
festen Frequenz und weist eventuell längere Idle-Phasen bzw. längere und dadurch hellere
Leuchtphasen auf, kann darauf geschlossen werden, dass Pakete fehlerhaft übertragen
wurden.
Nach der Ansteuerung der LED wird schließlich das empfangene Datenpaket textuell via
Serial.print() in der Konsole ausgegeben. Um die Ausgabe zu betrachten, kann die
Monitorfunktion Serial Monitor der Arduino GUI verwendet werden (siehe Kapitel 2.3
Programmierumgebung“).
”
1
2
3
4
//Code for receiving data:
char inByte = 0;
int counter = 1;
int counterMAX = 0;
5
6
7
8
9
void setup(){
Serial.begin(9600);
pinMode(13, OUTPUT);
}
10
11
12
13
void loop() {
if(Serial.available()){
inByte=Serial.read();
14
15
16
17
18
19
// blink at new input "+;[ax];[ay];[az];[LL];[T];[A5];#"
if(inByte == ’+’ )
digitalWrite(13, HIGH);
else
digitalWrite(13, LOW);
20
21
22
23
Serial.print(inByte);
} // end if(Serial.available())
} // end loop()
KAPITEL 2. ENTWICKLUNG DER INTELLIGENTEN TASSE
2.5
2.5.1
36
Kalibrierung der Sensoren
Inertialsensor
Die drei Beschleunigungssensoren des Inertialsensors IMU 6DoF Razor für die Achsen x,
y und z besitzen einen 10 Bit Wertebereich. D.h. es liegen Werte zwischen 0 und 1023
vor. Um diesen Werten einen Maßstab mit Einheit zuzuweisen, wurden die Sensoren so
kalibriert, dass der Wert 1,000g, die einfache Erdbeschleunigung, geliefert wird, wenn die
zu kalibrierende Achse vertikal, genau 90◦ , zur Erdoberfläche steht und dabei vom Erdmittelpunk weg zeigt. Dies ist bezüglich der z-Achse im Prototyp der Fall, wenn die Tasse
aufrecht auf waagrechtem Untergrund steht. -1g werden angezeigt wenn die entsprechende
Achse um 180◦ gedreht nun in Richtung Erdmittelpunkt ausgerichtet wird. 0g resultieren
Abbildung 2.19: Kalibrieren und Testen des Inertialsensors mit Hilfe einer graphischen
Anzeige
durch die horizontale Lage der jeweiligen Achse, da bei Stillstand keine Kraft in Richtung
der Achse wirkt. Diese drei Werte -1g, 0g und +1g werden folgendermaßen erreicht:
Der 10 Bit Wert für die horizontale Lage wurde bestimmt und findet nun als Offset Verwendung. Vom aktuellen Wert wird dieser Offset subtrahiert. Beispielhaft ist dieser Wert
für die z-Achse 544“. Dies geschieht, wie bereits in Kapitel 2.4 Programmierung der
”
”
Mikrocontroller“ beschrieben, auf dem Mikrocontroller in der Tasse bzw. testweise auf
dem des Arduino Duemilanove (vgl. Abbildung 2.19). Somit entsteht eine neue Skala mit
positivem und negativem Wertebereich und einem Nullpunkt bei 0g. Das Ergebnis wird
KAPITEL 2. ENTWICKLUNG DER INTELLIGENTEN TASSE
37
anschließend, im Programm zur Darstellung der Sensorwerte, durch einen Faktor dividiert
um den gewünschten Maßstab zu erhalten. Der Faktor wurde mit Hilfe der Erdbeschleunigung bestimmt und ist gleich dem Abstand der 10 Bit Werte zwischen 0g und 1g. Dabei
wurde die Annahme getroffen, dass die Werte mit zunehmender Kraft linear ansteigen und
ein symmetrischer Aufbau der Skala vorliegt. D.h. der zahlenmäßige Abstand zwischen
den Analogwerten von 0g und 1g entspricht dem Abstand zwischen -1g und 0g. Dies trifft
zwar nicht 100%ig zu, jedoch hält sich der Fehler in annehmbaren Grenzen.
2.5.2
Temperatursensor
Um den bisher nur tendenzangebenden 10bit Werten vom Temperatursensor einen Maßstab zu zuweisen, ist eine Kalibrierung notwendig. Als Referenzgerät wurde das digitale
Einstichthermometer DET1R [Con10] verwendet (siehe Abb. 2.20).
Abbildung 2.20: Handelsübliches Einstichthermometer als Referenz bei der Kalibrierung
Hierbei handelt es sich um ein Thermometer mit Nickel-Chrom/Nickel-Thermoelement
(Typ K) mit einem Wertebereich von -10◦ C bis 220◦ C, wie es in jedem größeren Eletrofachmarkt erworben werden kann. Die Genaugigkeit beläuft sich auf ±5%. Um gleichbleibende
Werte unter selben Umgebungsbedingungen, jedoch mit verschiedener Spannungsversorgung zu erhalten, wurde am Arduino der 3.3V Eingang mit der Referenzspannung AREF
verbunden. In einem Wasserkocher wurde nun Wasser bis zum Siedepunkt erhitzt und in
eine vorgewärmte Tasse mit den beiden Thermometern geschüttet. Das Vorwärmen war
notwendig um, verglichen mit einer Tasse bei Zimmertemperatur, eine nicht all zu schnelle
Abkühlung des Wassers zu erreichen. Somit wurde ein Maximalwert von 95.0◦ C gemessen.
Während des Abkühlens wurde zu jedem 0.5◦ C-Sprung auf dem Backthermometer der entsprechende Analogwert des Temperatursensors notiert (siehe Tabelle in Anhang B). Ab
etwa 40◦ C erfolgte eine Zugabe von geringen Mengen Wasser mit Zimmertemperatur durch
KAPITEL 2. ENTWICKLUNG DER INTELLIGENTEN TASSE
38
einen Teelöffel um den Abkühlprozess zu beschleunigen. Um den Wertebereich von 0◦ C 20◦ C kalibrieren zu können, kamen Eiswürfel zum Einsatz. Diese kühlten die zu messende
Flüssigkeit bis auf einen Minimalwert von 0.5◦ C ab. Ab der Entnahme des Eises begann
die Temperaturmessung. Analog zur Messung von 95.0◦ C auf 22.0◦ C wurden hier, während
der Erwärmung bis zurück auf Zimmertemperatur, wieder die Analogwerte zu den jeweiligen 0.5◦ C-Schritten notiert. Auch dieses Mal wurde zum Schluss der Erwärmungsprozess
durch Zugabe kleiner Mengen Wassers beschleunigt.
Wie aus dem Diagramm in Abbildung 2.21 zu entnehmen ist, verhält sich der Temperatursensor nicht linear genug um eine einfache Funktion über alle Temperaturbereiche formulieren zu können. Basierend auf den Messungen (siehe Messwert- bzw. Kalibrierungstabelle
in Anhang B) wurde daraufhin der gesamte Messbereich von 0.5◦ C bis 95.0◦ C in 19 FünfGrad-Schritte unterteilt, für die sich jeweils eine eigene, hinreichend präzise/lineare Funktion finden ließ. Die Temperaturbestimmung wird vollständig durch den tasseninternen
Mikrocontroller und ohne Hilfe von jedweder Software auf anderen Geräten durchgeführt.
Das folgende Beispiel erläutert den Ablauf der Temperaturdetektion durch den Mikrocontroller: Angenommen der 10bit-Analogwert zur bestimmenden Temperatur läge bei 779“.
”
Zuerst wird die Obergrenze des aktuellen Bereichs bestimmt. Hierzu wird der aktuelle Analogwert mit dem entsprechenden, abgespeicherten Analogwert einer ∆5◦ C-Grenze
verglichen. Der gemessene Wert 779“ ist größer als der entsprechende Wert für 60.0◦ C,
”
756“ und kleiner als der zu 65.0◦ C gehörige Wert 791“. Somit ergibt sich als Obergren”
”
ze 65.0◦ C. Zu jedem 5◦ C Intervall - bezogen auf den Analogwert - liegt eine bestimmte
Schrittweite zwischen den 1.0◦ C-Schritten auf dem Mikrocontroller gespeichert vor. In diesem Fall beträgt diese 7“. D.h., dass ein gemessener Wert 777“ bei 63.0◦ C, um sieben
”
”
Einheiten höher ist als der Wert zu 62.0◦ C, 770“. Nun wird der Abstand, dieses mal in
”
Grad Celsius, zur nächsten Temperaturobergrenze errechnet. Dabei wird der gemessene
Analogwert 779“ von dem der Obergrenze, im vorliegenden Fall 65.0◦ C, 791“ subtrahiert
”
”
und anschließend durch die aktuelle Schrittweite dividiert:
(791 - 779) / (7/◦ C) = 12 / (7/◦ C) ≈ 1.7◦ C
Abschließend wird dieser Wert von der vorher bestimmten Obergrenze subtrahiert und die
tatsächliche Temperatur liegt vor:
65.0◦ C - 1.7◦ C = 63.3◦
KAPITEL 2. ENTWICKLUNG DER INTELLIGENTEN TASSE
39
1024
896
33kohm
F(T33)
768
AV
640
512
384
256
128
0
0,0
10,0
20,0
30,0
40,0
50,0
60,0
70,0
80,0
90,0
100,0
Temperature
Abbildung 2.21: Temperatur/Werte-Verlauf des Temperaturfühlers (rot) in einer Spannungsteilerschaltung mit einem 33kΩ Widerstand und der Verlauf der beschreibenden,
stückweise linearen Funktion (schwarz)
KAPITEL 2. ENTWICKLUNG DER INTELLIGENTEN TASSE
40
Im Folgenden ist ein Codeausschnitt des Programms des tasseninternen Mikrocontrollers
zu sehen. Es handelt sich hierbei um die Funktion zur Temperaturbestimmung.
1
2
3
int Temp_output(int aV){
// temperature ranges
int TR[19] = {5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95};
4
// current temperature range (up to cTR)
int cTR;
5
6
7
// temperature upper limit
//t[0]: -xx,0-5.0◦ C; t[1]: 5,5-10,0◦ C; t[2]: 10,5-15,0◦ C; ...
int T_up[20] = {0, 196, 240, 289, 342, 398, 454, 511, 572, 625, 671, 715, 756, 791, 822,
850, 874, 894, 912, 927};
8
9
10
11
12
// current upper limit
int cT_up;
13
14
15
// analog value steps between 1◦ C-steps
//s[0]: 1-10◦ C; s[1]: 10,5-20◦ C; ...
float AVS[19] = {8.2, 8.8, 10.0, 10.6, 11.2, 11.2, 11.4, 12.4, 10.4, 9.0, 9.0, 8.0, 7.0, 6.0,
5.4, 4.8, 4.0, 3.4, 3.1};
16
17
18
19
20
// current analog value step
float cAVS;
21
22
23
float tempvar = 0;
float temperature = 0;
int j;
24
25
26
27
/////////////////// determination of cTR, cT_up and cAVS using aV ///////////////////
28
29
if (aV > T_up[19])
return 99999;
else{
for(j=0; j<19; j++){
if (aV > T_up[j]){
cTR = TR[j];
cT_up = T_up[j+1];
cAVS = AVS[j];
}
else break;
}
tempvar = (cT_up - aV) / cAVS;
temperature = cTR - tempvar;
return temperature*10;
} // end else
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
}
KAPITEL 2. ENTWICKLUNG DER INTELLIGENTEN TASSE
2.5.3
41
Füllstandssensor
Der Füllstandssensensor wurde erst kalibriert, als die Arbeiten am Prototyp vollständig
abgeschlossen waren. Dazu wurde jeweils die Untergrenze eines Bereichs notiert. Diese
definiert sich als geringster überlieferter Analogwert, bei der der 3.3V Ausgang mit dem
entsprechenden Kupferring über die Flüssigkeit einen Stromkreis schließt. Dafür wurde
die Tasse gekippt um den niedrigsten Wert heraus zu finden, da so nur ein kleiner Teil
des Kupferrings mit der Flüssigkeit bedeckt wird und dadurch der Widerstand noch am
größten ist. Anschließend wurde Wasser bis knapp unter den nächsten Kupferring eingefüllt. Der nun vorliegende Analogwert wurde als Obergrenze der obersten, unter Wasser
liegenden Prozentmarke ausgewählt.
Als die Kalibrierung der Füllstandssensorik abgeschlossen war, wurde das Volumen, welches die Kontaktringe beschreiben sollen, nachgemessen. Unglücklicherweise musste dabei
festgestellt werden, dass die Positionen der Ringe vom Designer der Tasse falsch berechnet
wurden und somit in der CAD-Zeichnung nicht an der gewünschten Stelle platziert wurden.
Wie der Tabelle 2.1 zu entnehmen ist, beschreiben die Markierungen anstelle von 0%, 1%,
5%, 10%, 20%, 40%, 60%, 80% und 100% nun, den Messungen zufolge, 0%, 3.3%, 10.5%,
21.8%, 34%, 52%, 67.5%, 81.3% und 94.9%.
soll [%]
0
1
5
10
20
40
60
80
100
ist [Ø%]
0.0
3.3
10.5
21.8
34.0
52.0
67.5
81.3
94.9
soll [ml]
0.0
3.8
19
38
76
152
228
304
380
Messung 1 [ml] Messung 2 [ml]
0
0
15
10
40
40
85
81
131
127
200
195
260
253
313
305
364
357
Tabelle 2.1: angestrebte und tatsächliche Volumenmarkierungen
KAPITEL 2. ENTWICKLUNG DER INTELLIGENTEN TASSE
2.6
42
Darstellung der Sensordaten
Zur anschaulichen Darstellung der Sensorwerte wurde in Processing eine graphische Oberfläche entwickelt. In diesem Programm (GRAPH FINAL.pde) werden alle verfügbaren
Sensordaten sowohl graphisch in Verlaufsdiagrammen, als auch numerisch dargestellt (Abb.
2.22).
Abbildung 2.22: Graphische Darstellung aller Sensorwerte
o.l.: Beschleunigung X, o.m.: Beschleunigung Y, o.r.: Beschleunigung Z
u.l.: Füllstand, u.r.: Temperatur
In der oberen Hälfte sind Akzelerogramme zu sehen, die den Verlauf der Beschleunigungswerte der x, y und z-Achse wiedergeben (v.l.n.r). Diese können um die graue, durchgängige
Nulllinie einen Wertebereich von −3g bis +3g einnehmen. In der unteren Hälfte werden
Füllstand und Temperatur dargestellt. Letztgenante Anzeigen starten am unteren Rand
des Fensters mit 0% bzw. 0◦ C. In früheren Versionen des Programms wurden anstatt
Füllstand und Temperatur im unteren Teil zu Testzwecken die Drehbeschleunigungswerte
der drei Achsen aufgetragen (vgl. Abbildungen 2.8 und 2.19). Diese, vom Gryrometer
gelieferten Daten, stehen allerdings durch einen Mangel an freien Analogeingängen am Arduino Pro Mini im fertigen Prototyp nicht mehr zur Verfügung.
Minimal- und Maximalwerte werden automatisch mitgeloggt und angezeigt. Diese können
durch Drücken der Taste r“ zurückgesetzt werden2 . Zur besseren Unterscheidung werden
”
die Graphen in verschiedenen Farben erstellt. Extrema werden durch weiße Linien hervorgehoben.
Die Zeitachse jedes Diagramms ist nach etwas mehr als 13 Sekunden voll beschrieben. Ist
dieser Zeitraum verstrichen, so wird das Diagramm gelöscht und neue Werte werden von
2
Nur in der endgültigen Version.
KAPITEL 2. ENTWICKLUNG DER INTELLIGENTEN TASSE
43
Vorne aufgetragen.
Folgende Struktogramme beschreiben den Ablauf des Programms GRAPH FINAL.pde:
void setup()
Fenster zeichnen
Hintergrund schwarz einfärben
Schriftart und Größe festlegen
Beschriftungen einfügen
Seriellen Eingang festlegen
bis zum Zeichen # puffern
Nach einer einmaligen Ausführung von void setup() folgt, im Falle eines neuen Ereignisses am seriellen Port, die Funktion void serialEvent().
void serialEvent()
Aktuelles Datenpaket bis # einlesen
Datenpaket bei Zeichen + und ; und # in einzelne Werte teilen
Beginnt Datenpaket mit +, endet mit # und sind
alle 6 Werte vorhanden?a
WAHR
FALSCH
Alle benötigten Werte des Datenpakets zugewiesen?
Nummerierung und
Ausgabe des fehlerhaften Datenstroms:
hnumber i .
Packet
of incorrect string
length: hpacketi)
Wert je nach Position den Darstellungsbereichen zuweisen
Horizontale Position um 1 Pixel erhöhen
H. Position ≥
WAHR
1
3
Fensterbreite
FALSCH
Horizontale Position = 0
alle Anzeigen löschen
Beschriftungen einfügen
∅
Extrema auf aktuellen Wert setzen
a
Der Mikrocontroller in der Tasse sendet die Werte aller Analogeingänge, unabhängig
davon, ob sie belegt sind oder nicht. Bisher werden nur fünf der sechs Eingänge
benötigt.
KAPITEL 2. ENTWICKLUNG DER INTELLIGENTEN TASSE
44
void serialEvent() ruft während ihres Durchlaufes fünf mal die Funktion
void assign(String input, int index) auf, welche die übergebenen Werte entsprechend ihrer Position im Datenpaket den passenden Graphen zuweist.
void assign(String input, int index)
Normieren der einzelnen Werte
Abbilden der Werte auf die halbe Fensterhöhe
Index des Sensorwerts
0
1
2
Extrema
behandeln
Extrema
behandeln
Extrema
behandeln
rote
Linie bei
acc. X
grüne
Linie bei
acc. Y
blaue
Linie bei
acc. Z
3
4
LLZuweisung
Extrema
Extrema be- behandeln
handeln
graue
Linie bei
Liquid Level
gelbe
Line bei
Temperature
Index des Sensorwerts
0
1
2
3
4
Ausblenden
alter
acc.X Werte
Ausblenden
alter
acc.Y Werte
Ausblenden
alter
acc.Z Werte
Ausblenden
alter
Liquid Level
Werte
Ausblenden
alter
Temperature
Werte
neuen acc.X
Wert
und
Extrema
textuell
darstellen
neuen acc.Y
Wert
und
Extrema
textuell
darstellen
neuen acc.Z
Wert
und
Extrema
textuell
darstellen
neuen Liquid
Level Wert
und Extrema textuell
darstellen
neuen Temp.
Wert
und
Extrema
textuell
darstellen
void assign(String input, int index) ruft wiederum void extrema() auf, die
Maxima und Minima speichert und für eine weiße Hervorhebung in den Graphen sorgt.
KAPITEL 2. ENTWICKLUNG DER INTELLIGENTEN TASSE
45
void extrema()
aktueller Wert > Maximum
WAHR
FALSCH
a. Wert < Minimum
Maximum
=
aktueller Wert
weiße
Linie
zeichnen
WAHR
FALSCH
Minimum = a. Wert
∅
weiße Linie zeichnen
Für die Extremabestimmung und die textuelle Ausgabe der Werte wird für den Füllstand
die Funktion int LLcalibration() ausgeführt. Hierbei wird dem eingehenden Analogwert ein Temperaturbereich zugeschrieben und der Wert auf diesen entsprechend abgebildet. Tabelle 2.1 bildet hierfür die Grundlage. Allerdings wurde nun die Prozentanzeige
auf das wahre Fassungsvermögen von 360ml umgerechnet und es ergibt sich folgender Zusammenhang (Tabelle 2.2):
Bereich Min.
0.0
0.57
0.63
0.93
1.26
2.19
2.82
3.50
4.48
4.67
Bereich Max.
0.57
0.63
0.93
1.26
2.19
2.82
3.50
4.48
4.67
10.23
Vol. Min. [%] Vol. Max. [%]
0.0
0.0
0.0
3.5
3.5
11.1
11.1
23.0
23.0
35.8
35.8
54.8
54.8
71.1
71.1
85.7
85.7
100.0
100.0
100.0
Tabelle 2.2: Umrechnung von Analogwerten in prozentuales Volumen
KAPITEL 2. ENTWICKLUNG DER INTELLIGENTEN TASSE
2.7
46
Animition der Tasse
Zusätzlich zur graphischen Darstellung der Sensorwerte wurde ebenfalls mit Processing
eine Animation der Tasse erstellt. Hierbei wurde darauf geachtet, dass mit den Mitteln die
Processing zur Verfügung stellt eine Nachbildung entsteht, die der realen Szene möglichst
nahe kommt. In dieser Animation werden Rotationen um die beiden horizontalen Achsen
X und Y von −90◦ bis +90◦ wiedergegeben. Die genauen Neigungswinkel werden zuätzlich
numerisch im oberen Teil des Fensters angezeigt. Außerhalb den Grenzen von ±90◦
kann davon ausgegangen werden, dass sich keine Flüssigkeit mehr in der Tasse befindet.
Dieser Bereich ist somit irrelevant und eine Entwicklung dieser Darstellung wurde nicht
weiter verfolgt1 . Auch der aktuelle Füllstand ist in der Animation nachzuvollziehen (vgl.
Abbildung 2.23). Dieser kann, wie die Temperatur der Flüssigkeit, ebenso numerisch
Abbildung 2.23: Animation der Tasse
1
Ein weiterer Grund der die Mitentwicklung dieser Darstellung behinderte, waren Probleme die entstehen, wenn ein Vorzeichenwechsel in einer Rotationsmatrix eintritt, z.B. bei cos(89◦ ) nach cos(91◦ ). Da in
Processing nur die Nachmultiplikation, die als Drehung um momentane Achsen interpretiert werden kann,
bei Matrizenmultiplikationen möglich ist, führt ein Vorzeichenwechsel zu einer schwer nachvollziehbaren
Winkeländerung.
KAPITEL 2. ENTWICKLUNG DER INTELLIGENTEN TASSE
47
abgelesen werden. Mit der Information über den aktuellen Füllstand wird über geometrische Zusammenhänge die Schwelle des Übertretens der Flüssigkeit berechnet wenn die
Tasse gekippt wird. Wenn durch eine gleichbleibende Winkeländerung ein Verschütten
kurz bevorsteht, wird eine Warnung ausgegeben. Ist der Berechnung nach Flüssigkeit
verschüttet worden, erscheint die Anzeige spilled“.
”
Im unteren linken Bereich werden permanent die drei Achsen des Koordinatensystems
angezeigt. Die Status-LEDs der Tasse funktionieren in der Animation auf die gleiche
Weise wie in der wahren Szene. Näheres kann in Kapitel 2.8.1 Status-LEDs“ nachgelesen
”
werden.
Bei gedrückter Taste 1“ und gleichzeitiger Betätigung des Mausrades kann in die Szene
”
hinein oder hinaus gezoomt werden. Wird die Taste 2“ gehalten, so kann via Mausrad
”
die Tasse um die Vertikalachse gedreht werden. Gleichzeitig wird ein Koordinatensystem
auf der Tasse angezeigt. Mit Betätigung der Taste 3“ werden Zoom und Drehwinkel um
”
die Vertikalachse auf die Ursprungswerte zurückgesetzt.
Folgende Struktogramme beschreiben den Ablauf des Programms CUP FINAL.pde:
void setup()
Fenster zeichnen
Schriftart und Größe festlegen
Mausrad als Eingabegerät hinzufügen
Liste verfügbarer Ports im Nachrichtenbereich ausgeben
Seriellen Eingang festlegen
bis zum Zeichen # puffern
KAPITEL 2. ENTWICKLUNG DER INTELLIGENTEN TASSE
48
void draw()
Matrix zurücksetzen
Hintergrund schwarz einfärben
Lichter für 3D-Eindruck aktivieren
Daten textuell darstellen
bei starker Tassenneigung warnen
Betrachtungsperspektive wählen
Zoomfaktor einbeziehen
Linkssystem → Rechtssystem
Untergrund zeichnen
Koordinatensystem zeichnen
x/y Translation durch Maus ermöglichen
um vertikal Achse drehena
Schatten der Tasse zeichnen
Nullpunkt nach oben setzen
−90◦ um X rotieren
Füllstand berechnen
Nichts verschüttet?
WAHR
FALSCH
x/y Koord. der Maus auf x/y der Darstellung mappen
∅
Flüssigkeit zeichnen
Beschleunigungswert der Z-Achse > 0
WAHR
Rotation um X
Rotation um −Y
aktuelle Rotationswinkel speichern
a
FALSCH
Rotation um X als
acc. Z > 0 war
Rotation um −Y
als acc. Z > 0 war
∅
Dies kann, wie beschrieben, über die Taste 2“ und dem Mausrad gesteuert
”
werden.
Fortsetzung auf nächster Seite.
KAPITEL 2. ENTWICKLUNG DER INTELLIGENTEN TASSE
49
Fortsetzung void draw()
Infrarot LEDs zeichnena
−90◦ um X rotieren
Status-LEDs zeichnen
Griff zeichnen
Nullpunkt der X-Achse in die Mitte der Tasse setzen
Tassenzylinder zeichnen (Mantel, ...)
Kontakte des Füllstandssensors zeichnenb
Taste 2“ gedrückt?
”
WAHR
FALSCH
Koordinaten auf der Tasse anzeigen
∅
Temperatursensor zeichnen
oberen Tassenrand zeichnen
unteren Tassenrand zeichnen
kleinen vertikalen Abstand zum Sockel einfügen
Sockel zeichnen
Füllstand < 80% und x/y-Rotationswinkel
< 5◦
WAHR
FALSCH
spilled-Anzeige ausblenden
∅
Taste 3“ gedrückt?
”
WAHR
FALSCH
Zoom zurücksetzen
Drehwinkel um Z-Achse zurücksetzen
a
b
∅
4 mal
9 mal
Auf weitere Funktionen des Programms wird im Folgenden nicht weiter eingegangen.
KAPITEL 2. ENTWICKLUNG DER INTELLIGENTEN TASSE
2.8
50
Umsetzung im Prototyp
Eine lange Planungsphase ging der Erstellung des Prototyps voran. In Zusammenarbeit
mit José Antonio Pardos Garcia, ein spanischer Mitarbeiter aus dem Fachbereich Maschinenbau, konnte eine CAD Zeichnung (vgl. Abbildung 2.26) erstellt werden. Mittels
dieser Zeichnung wurde somit ein erstes Exemplar der intelligenten Tasse durch einen 3DDrucker modelliert. Eine externe Firma [xyz10] erhielt dafür den Auftrag. Die Kosten für
das Grundgerüst, d.h. ohne jegliche Elektronik, beliefen sich auf e 180.
Als Vorbild galten vor allem das Projekt MediaCup [GSB02] (Abb. 2.24) und eine handelsübliche Tasse mit Teelichteinschubmöglichkeit (Abblidung 2.25).
Abbildung 2.24: The MediaCup
Abbildung 2.25: Teelichttasse
Das optische Erscheinungsbild dieser Tassen ist nicht besonders außergewöhnlich und führt
dadurch zu keiner Ablenkung des Benutzers. Zusätzlich bringen diese Ausführungen Platz
im unteren Bereich der Tasse mit sich, in der die Elektronik eingebettet werden kann.
Der eigene Prototyp besteht aus zwei Teilen (siehe Abb. 2.27): Der erste Bestandteil
ist die eigentliche Tasse, in welcher der Füllstandssensor, die Infrarot-LEDs, Status-LEDs
und der Temperaturfühler integriert sind. Bei dem zweiten Teil handelt es sich um den
zu öffnenden Sockel, der die restliche Elektronik, wie Energieversorgung, Mikrocontroller,
Funkmodul, Inertialsensor, RFID-Tag, usw. beherbergt. Durch diese Trennung der elektronischen Komponenten entsteht eine pflegeleichte Kombination. Die Tasse beinhaltet
nur passive Bauelemente und ist bezüglich der Elektronik bereits spülmaschinenfest, falls
KAPITEL 2. ENTWICKLUNG DER INTELLIGENTEN TASSE
51
vom Sockel getrennt. Durch einen einfachen Drehmechanismus ist der Sockel jederzeit abnehmbar. Dieser benötigt im Regelfall keine Reinigung. Eine zusätzliche Lackierung soll
den Gesamtaufbau zum einen vor Durchnässung des Matierials schützen und des weiteren
helfen, einen gewissen Hygienestandard einhalten zu können.
Abbildung 2.26: CAD Modellierung
KAPITEL 2. ENTWICKLUNG DER INTELLIGENTEN TASSE
52
Abbildung 2.27: erste Bilder des Prototyps
Nachdem der Prototyp geliefert wurde, musste festgestellt werden, dass die Genauigkeit
des 3D-Druckers bei weitem nicht so hoch ist, wie angenommen. Dies hatte zur Folge,
dass die geplanten Kabelkanäle (Durchmesser 1,6mm) in der Tassenwand teilweise verstopft oder gar ganz geschlossen waren. Ein Aufbohren mittels eines 1mm Bohrers brachte
nur bei Kanälen geringer Länge den gewünschten Erfolg (Abb. 2.28). Bei Versuchen
tiefer in die Tassenwand zu bohren, war die Führung des Bohrers sehr problematisch, so
dass der Bohrkopf vor der gewünschten Stelle wieder austrat und somit die Oberfläche
zerstörte. Daraufhin gab es neben einer kostspieligen Neuanfertigung nur eine passable
Möglichkeit: Die Kabelführungen mussten aufgefräst werden. Dafür wurde der geplante
Kabelverlauf mit einem Stift angezeichnet (Abb. 2.29) und anschließend mit Hilfe eines
DREMELs 1-2mm tief gefräst. Somit konnten die Adern zwar komfortabler verlegt werden,
jedoch bedurfte es nun einer zusätzlichen Versiegelung. Hierbei wurde auf Polyesterharz
zurückgegriffen (Abb. 2.30). Der freigefräste Kanal konnte dadurch wieder verschlossen
und anschließend glatt geschliffen werden (Abb. 2.31).
Wie bereits in Kapitel 2.5.3 Kalibrierung der Sensoren - Füllstandssensor“ beschrieben,
”
fiel bei genauerer Betrachtung der vorgegebenen Vertiefungen für die Metallringe auf, dass
sie nicht die angestrebten Volumenmarkierungen darstellen (vgl. Tabelle 2.1). Der Berechnungsfehler wirkt sich jedoch nicht auf die Funktionalität aus. Das Diagramm in Abbildung
2.32 verdeutlicht den Unterschied nochmals. An den Positionen der Vertiefungen wurde
nun selbstklebende Kupferfolie angebracht. Diese wurde zuvor in 1.5mm bis 2mm breite
Streifen geschnitten. An einer Stelle wurde eine ca. 0.2mm dicke, isolierte Kupferader
KAPITEL 2. ENTWICKLUNG DER INTELLIGENTEN TASSE
Abbildung 2.28: Aufbohren kurzer Kanäle
53
Abbildung 2.29: Das Auffräsen der Kabelkanäle war auf Grund geringer Druckgenauigkeit nötig
Abbildung 2.30: Versiegelung mittels Poly- Abbildung 2.31: Versiegelter und abgeschliffener Kanal; hier einer IR-LED
esterharz
KAPITEL 2. ENTWICKLUNG DER INTELLIGENTEN TASSE
54
100
100
94,87
90
81,32
80
80
67,50
70
Soll
Vol. %
60
60
51,97
Ist
50
40
33,95
40
30
21,84
20
20
10,53
10
10
3,29
0,00
5
1
0
1
2
3
4
5
6
7
8
9
Ring #
Abbildung 2.32: Unterschied der angestrebten und tatsächlichen Volumenmarkierungen
angelötet, um danach im entsprechenden Kanal verlegt zu werden. Da die Kupferfolie eine
nicht ausreichende Länge aufweist, um den gesamten Innenumfang der Tasse zu bedecken,
mussten mehrere Stücke aneinander gereiht werden. Die klebende Seite der Folie ist jedoch
hochohmig. Folglich mussten die einzelnen Teile elektrisch miteinander verbunden werden
und wurden deshalb verlötet. Die nun kreisförmig und horizontal installierten Metallringe
stellen ein Teilsystem des Füllstandssensors dar. Um die gewünschte Funktion zu erfüllen,
werden weiterhin die bereits erwähnten Widerstände benötigt. Diese wurden im Sockel der
Tasse installiert. Abbildung 2.33 zeigt einen der ersten Tests des Sensors mit Flüssigkeit.
Der Henkel der Tasse wurde als senkrechter zwei-Finger-Griff entworfen (vgl. CADZeichnung in Abbildung 2.26). Dessen 90◦ -Geometrie erleichtert Manipulatoren den Umgang mit dem Objekt. Bei komplexeren Formen könnte sich ein sicheres Greifen schwierig gestalten. Der Henkel weist außen eine vertikale Ausdehnung von 60mm und innen
von 40mm mit einer Stärke von 10mm auf. Horizontal werden 13mm Stärke gemessen.
Nachträglich wurde in der CAD-Zeichnung der Griff um mehr als einen Zentimeter nach
unten verlängert, um ein Greifen noch weiter zu vereinfachen. Dies wird allerdings erst in
einer weiterentwickelten Version des Prototyps realisiert.
KAPITEL 2. ENTWICKLUNG DER INTELLIGENTEN TASSE
55
Abbildung 2.33: Kalibrieren des Füllstandssensors
Mittig am Tassenboden ist deutlich der Temperatursensor zu erkennen.
Die Punkte links und rechts davon stellen den 3.3V-Kontakt bzw. den 0%-Kontakt dar.
Die Kupferringe sind die weiteren Kontakte.
2.8.1
Status-LEDs
Knapp über dem Griff wurden zwei farbige Leuchtdioden installiert (vgl. Abbildungen
2.34 und 2.35). Diese informieren den Benutzer auf Grundlage von Daten des Temperaturfühlers und des Füllstandssensors über die Temperatur des Tasseninhalts. Ist die
Tasse leer, leuchten die rote und grüne LED abwechselnd für zwei Sekunden. Befindet sich
Flüssigkeit in der Tasse, so wird die Anzeige aktiviert. Es wird davon ausgegangen, dass
im Regelfall heiße Getränke wie Kaffee oder Tee getrunken werden. Falls eine Temperatur
über 70◦ C bestimmt wird, so leuchtet die rote LED (links)im Dauerbetrieb und deutet
damit an, dass das Getränk noch zu heiß und somit noch nicht ohne Verbrennungsgefahr
trinkbar ist.
Zwischen 60◦ C und 70◦ C blinkt die rote LED mit 2Hz und zeigt dadurch eine bedingte
Trinkbarkeit an. Hier kann das Getränk vorsichtig, mit kleinen Schlücken bereits konsumiert werden.
Unter 60◦ C erlischt die rote Statusanzeige. Ab jetzt besteht auf keinen Fall ein
Verletzungsrisiko bezüglich der Temperatur und dem Genuss steht nichts im Wege. Die
grüne LED (rechts) wird nun aktiv und blinkt mit einer Frequenz von 0.5Hz.
Ab 40◦ C und darunter signalisiert die grüne Leuchtdiode durch Dauerbetrieb das Erkalten
des Getränks. Für den Fall, dass ein sehr kaltes Getränk eingegossen wird, warnt die Tasse
im Bereich unter 5◦ C in einem 5Hz-Takt der grünen LED vor zu schnellem Trinken.
KAPITEL 2. ENTWICKLUNG DER INTELLIGENTEN TASSE
Abbildung 2.34: Prototyp in Bearbeitung
Abbildung 2.35: Status-LEDs überhalb des Griffs
56
KAPITEL 2. ENTWICKLUNG DER INTELLIGENTEN TASSE
2.8.2
57
IR-LEDs
Um eine Ortung der Tasse durch das Trackingsystem zu ermöglichen, wurden vier Infrarot
emmitierende Leuchtdioden auf der Oberkante des Tassenrandes angebracht. Es wurden
LEDs vom Typ SFH 4650 in SMD Bauweise gewählt, da sie zum einen eine vertretbare
Größe aufweisen – klein genug um sie in einer Vertiefung des Tassenrandes so positionieren
zu können, dass weder die optische Erscheinung der Tasse noch die Pflegeeigenschaften
negativ beeinflusst werden. Zum anderen besitzen sie den größten Abstrahlwinkel unter
den handelsüblichen LEDs dieser Größenordnung. Abbildung 2.36 zeigt eine verdrahtete
IR-LED. Die Lötstellen mussten teilweise abgeschliffen werden um die korrekte Passform
für die Aussparungen im Tassenrand beizubehalten.
Abbildung 2.36: SMD IR-LED SF 4650
Wird der Ursprung in den Mittelpunkt der Tasse gelegt, liegen die IR-LEDs um die eigene Höhe im Tassenrand vertieft auf den Positionen 142◦ , 192◦ , 226◦ und 336◦ , wenn der
Griff auf 0◦ angenommen wird. Abbildung 2.37 stellt dies anhand von relativen Gradangaben anschaulich dar. Die Leuchtdioden wurden bewusst nicht äquidistant platziert, da
somit ein Muster entsteht, das die Ausrichtung des Henkels eindeutig bestimmt und durch
das Trackingsystem einfach erkannt werden kann. Wären die Infrarot-LEDs gleichmäßig
über die 360◦ des Tassenrandes verteilt, würde ein Muster erfasst werden, das mehrere
Möglichkeiten für die Position des Henkels zuließe, da das Trackingsystem nur Infrarotquellen und nicht den Henkel selbst detektiert. Von der Option, eine weitere LED auf
dem Griff zu platzieren, wurde abgesehen, da diese beim Benutzen des Henkels eventuell
verdeckt wird, stört oder gar beschädigt wird. Auch die mechanische Stabilität der Tasse
könnte darunter leiden. Die eher krummen Gradzahlen der LED-Positionen sind konstruktionsbedingt. Die Leitungen mussten so platziert werden, dass sie das Verschlusssystem
zwischen Sockel und der Tasse nicht beeinträchtigen. Der Prototyp wurde so entworfen,
KAPITEL 2. ENTWICKLUNG DER INTELLIGENTEN TASSE
58
Abbildung 2.37: Draufsicht der Tasse
Räumliche Verteilung der IR-LEDs
dass er sowohl für Rechtshänder, als auch für Linkshänder komfortabel benutzbar ist. Wird
die Tasse mit der Hand zum Mund geführt, liegen die LEDs so, dass sie den Benutzer beim
Trinken nicht stören. Dies setzt voraus, dass die Lippen bei etwa 270◦ oder 90◦ angesetzt
werden.
2.8.3
Interne Elektronik
In Abbildung 2.38 ist der Sockel im Originalzustand zu sehen wie er von der Auftragsfirma
ausgeliefert wurde. Deutlich erkennbar sind hier die drei konzentrisch angeordneten Zapfen für die mechanische Verbindung mit der Tasse. Durch einen Drehmechanismus kann
die Tasse aufgeschraubt“ werden. Hierbei muss darauf geachtet werden, dass sich der
”
Henkel nach dem Aufschrauben durch eine Rechtsdrehung der Tasse überhalb der Hohlsteckerbuchse des Sockels befindet. Der Sockel beinhaltet die gesamte Elektronik für die
Aufbereitung und Funkübertragung der erfassten Sensordaten. In den zu sehenden Vertiefungen werden Schleifkontakte angebracht, die bei Verbindung von Tasse und Sockel die
Sensoren (Füllstand, Temperatur) und Aktoren (IR-LEDs, Status-LEDs) mit der Elektronik verbindet.
KAPITEL 2. ENTWICKLUNG DER INTELLIGENTEN TASSE
59
Abbildung 2.39 zeigt die endgültige Version des Tassensockels. Hier sind die Vorwiderstände der Infrarot-LEDs von je 120Ω zu sehen. Bei den Schleifkontakten am Sockel
wurden Federn“ aus gefalteter Kupferfolie angebracht. Dies ist darin begründet, dass
”
es praktisch unmöglich ist eine robuste Verbindung durch 24 handgefertigte Lötstellen zu
errichten, da dies exakt gleich hohe Kontakte verlangt. Die genannten Federn tolerieren eine unterschiedliche Bauhöhe der Kontakte und ermöglichen eine wesentlich sicherere
elektrische Verbindung von Sockel und Tasse. An der Tasse wurden in den vorgesehenen Vertiefungen einfache Metallkontakte aus Lötzinn angebracht (siehe Abbildung 2.41).
Diese stellen den Kontakt zu den entsprechenden Bauteilen über Kupferadern her.
Abbildung 2.38: Sockel im Originalzustand
Abbildung 2.39: Sockel nach Bearbeitung
Zur Energieversorgung wurde ein handelsüblicher Mobiltelefonakkumulator in den Sockel
integriert (siehe Abb. 2.42). Urpsrünglich war dieser für Telefone der Serie 3310, 3510,
6800 des Herstellers NOKIA gedacht. Der Akku liefert eine Spannung von 3.7V und weist
eine Nennladung von 1000mAh auf. Die Elektronik konsumiert ca. 120mA, was zu einer
theoretischen Akkulaufzeit von etwas mehr als 8h führt.
Am Sockel wurde unter der Position des Tassenhenkels eine Hohlsteckerbuchse (HEBL 21)
angebracht. Diese hat einen Innendurchmesser von 5.6mm. Der zentrische Pluspol misst
2.1mm.
Abbildung 2.43 zeigt den schematischen Aufbau der Elektronik. Hierbei fällt die Ladeelektronik im linken oberen Bereich auf. Der IC MCP73812 sorgt für eine optimale Ladung in
kürzest möglicher Zeit, bei einer konstanten Ladespannung von 4.2V [Mic07]. Es ist darauf
zu achten, dass bei Anschluss eines Netzteils die richtige Polung ausgewählt wird (innen:+,
außen: −) und die Eingangsspannung über die Hohlsteckerbuchse innerhalb der Grenzen
von min. 3.75V und max. 6V bleibt. So ist auch ein Betrieb ohne den beschriebenen Akku
möglich.
KAPITEL 2. ENTWICKLUNG DER INTELLIGENTEN TASSE
Abbildung 2.40: Tasse im Originalzustand.
Hier sind die Montageführungen gut
ersichtlich.
60
Abbildung 2.41: Tasse nach Bearbeitung.
Metallkontakte verbinden Bauteile der
Tasse mit dem Sockel.
Abbildung 2.42: Inhalt des Sockels, noch ohne RFID-Transponder
2kΩ
MCP73812
33kΩ
IR-LED 142° 192° 226° 336°
120Ω
XBee Explorer Regulated +
XBee Series 2.5, 2mW Antenna
Plug-and-Socket Connection
3,7V Mobile Phone Battery
Power Plug
3.75V - 6V
1µF
1µF
91Ω
Status LEDs
100Ω
Arduino Mini Pro
Temperature Sensor
6DoF with ADXL335 + Gyros
100kΩ Ring 5
630kΩ Ring 4
630kΩ Ring 3
1MΩ Ring 2
1MΩ Ring 1
10kΩ Ring 9
10kΩ Ring 8
47kΩ Ring 7
100kΩ Ring 6
Liquid Level Sensor
Liquid works as switch
47kΩ
KAPITEL 2. ENTWICKLUNG DER INTELLIGENTEN TASSE
61
Abbildung 2.43: schematischer Aufbau der Elektronik
KAPITEL 2. ENTWICKLUNG DER INTELLIGENTEN TASSE
62
Am abnehmbaren Boden des Sockels wurde unter dem Inertialsensor ein RFIDTransponder in einer dafür vorgesehenen Aussparung fixiert (siehe Abb. 2.44). Dieser
soll im Zusammenspiel mit einem Lesegerät die Tasse identifizieren. Er kann auch zur
Feststellung der Anwesenheit der Tasse beitragen. Eine mögliche Umsetzung wäre ein
entsprechend ausgestatteter Untersetzer.
Abbildung 2.44: Einblick in den Sockel
Der Sockel samt Elektronik kommt auf ein Gewicht von 119g. Die Tasse selbst wiegt
235g. Daraus resultiert ein Gesamtgewicht von 354g. Eine Tasse mit vergleichbarem
Fassungsvermögen wiegt ca. 280g. Der Prototyp ist also etwas schwerer als eine Tasse von
ähnlicher Größe.
Kapitel 3
Zusammenfassung
In diesem Projekt wurde ein Alltagsgegenstand entwickelt, der sich mittels Funktechnik
in eine intelligente Umgebung aus Sensor-Aktor-Systemen einfügen lässt. Die entwickelte
Tasse fungiert als Informationsquelle, indem sie Werte der eigenen Sensorik erfasst und
teilweise aufbereitet. Somit können weitere Schlüsse durch informationsverarbeitende Einrichtungen getroffen werden.
In Zusammenarbeit mit einem Maschinenbauingenieur wurde das Grundgerüst des Prototyps entworfen. Dieses wurde von einer externen Firma produziert. Die Sensoren für die
Tasse wurden zum Teil selbst entworfen und mussten verbaut, verdrahtet, sowie kalibriert
werden.
Zwei Darstellungsformen wurden für die Werte der internen Sensorik implementiert. Zum
einen, ein zeitlicher Verlauf der Sensordaten mittels sich ständig aktualisierenden Diagrammen, und zum anderen eine Animation der Tasse selbst. Bei letzterer können Rotationsbewegungen, der Füllstand und das Verhalten der LEDs nachvollzogen werden.
Es kann festgehalten werden, dass Animationen mit Processing sehr schnell und einfach
erstellt werden können. Allerdings sind die Grenzen des Programms schnell erreicht. So
können beispielsweise geometrische Formen nicht relativ zueinander verschoben werden,
sondern nur absolut. Auch Wechselwirkungen wie z.B. Andocken“ sind nicht möglich.
”
Ebenso die realistische Darstellung einer Wasseroberfläche ist hier nicht machbar. Um eine detaillierte, realistischere Animation erstellen zu können, müsste man auf professionelle
Software zurückgreifen. Probleme machte unter anderem das in Processing vorherrschende
Linkssystem (Koordinatensystem) bei 3D-Anwendungen und die unumgängliche Nachmultiplikation bei Matrizenrechnungen, was eine Vorstellung deutlich erschwert.
Es brauchte einige Zeit bis die Funkverbindung zwischen Sender und Empfänger aufgebaut
werden konnte. Dies lag an einer notwendigen, jedoch sehr ungewöhnlichen Stellung eines
Jumpers am Arduino XBee Shield.
Die Erstellung der CAD-Zeichnung der Tasse war sehr zeitintensiv und sorgte für eine
unwillkommene Verzögerung. Auch die Ungenauigkeit des 3D-Druckers sorgte für einen
wesentlich höheren Arbeitsaufwand.
63
KAPITEL 3. ZUSAMMENFASSUNG
64
Da es sich in diesem Projekt um die Entwicklung eines Prototypen handelt, konnten an
diesem einige Verbesserungsmöglichkeiten ausfindig gemacht werden. Die im Folgenden
genannten Aspekte können bei zukünftigen Ausführungen in Betracht gezogen werden.
Die Kupferfedern“ auf dem Sockel könnten robuster gestaltet werden. Möglicherweise
”
bringt eine andere Form oder dickeres Material Abhilfe. Derzeit ist ab und zu ein
Zurückbiegen der Federn notwendig, um den Kontakt von Sensoren der Tasse und der
Elektronik im Sockel zu garantieren. Dies ist unkomfortabel und kann nach geraumer Zeit
Ermüdungsbrüche zur Folge haben.
Die Materialstärke der Führung an der Tassenunterseite für die Montagezapfen ist in vertikaler Richtung grenzwertig gering ausgefallen. Um bei häufigem Gebrauch der Tasse einen
dauerhaft intakten Aufschraubmechanismus sichern zu können, sollten diese Führungen
verstärkt werden.
Hohe Temperaturunterschiede zwischen Flüssigkeit und Lufttemperatur stellen für den
Füllstandssensor des Prototyps noch ein großes Problem dar. Dampft der Tasseninhalt
stark, so kondensiert Wasser an der Tasseninnenwand und es entsteht ein Kontakt zwischen der Flüssigkeit und allen Kupferringen. Dies hat zur Folge, dass der Widerstand des
Füllstandssensors auf ein Minimum sinkt und der Mikrocontroller dies als einen Füllstand
von 100% interpretiert. Eventuell könnte zusätzlich, oder alternativ zur aktuellen Methode
der Füllstandsbestimmung, ein empfindlicher Gewichtssensor eingesetzt werden und dieses
Problem beheben. Dies wäre auch deswegen von Vorteil, da der Gewichtssensor zu einer höheren Auflösung bei der Füllstandsbestimmung beitragen kann und bei aufrechtem
Stand der Tasse äußerst zuverlässliche Werte liefert.
Ebenso hätte eine glattere Oberfläche der Innenwand eine Verbesserung zur Folge. Derzeit kommt es manchmal zu Verfälschungen der Füllstandsanzeige, da sich in der Oberflächenstruktur des Prototyps das Wasser hält. Eine andere Lackierung oder ein anderes
Grundmaterial der Tasse wären hier zu wählen.
Da der Temperatursensor im Tassenboden eingelassen ist und nicht komplett von der
Flüssigkeit umspült wird, reagiert er nur langsam auf starke Temperaturschwankungen.
In folgenden Ausführungen sollte dies berücksichtigt werden.
Anstelle einer Steckverbindung von Elektronik und Batterie, durch die man zwischen EIN
(Dauerbetrieb) und AUS wählen kann, könnte man sich eine Schaltung überlegen, die das
System in gewissen Situationen in einen Standby-Modus überführt. Bei einem bestimmten Ereignis würde ein Interrupt diesen Ruhezustand beenden und zur Wiederaufnahme
des Betriebs führen. Somit wäre im Vergleich zur aktuellen Ausführung das unkomfortable Ausschalten“ nicht mehr nötig. Durch die verminderte Leistungsaufnahme wird ein
”
wesentlich längerer Betrieb zwischen den Ladezyklen möglich.
In zukünftigen Projekten könnte der derzeit kabelgebundene (über die Hohlsteckerbuchse)
Wiederaufladevorgang des sockelinternen Akkus kabellos über Induktion erfolgen. Durch
platzieren der Tasse auf einem entsprechend ausgestattetem Untersetzer würde dem System
Energie zugeführt werden. Dies würde den Umgang mit dem Produkt noch intuitiver gestalten, da man sich keine Gedanken mehr über den Ladestatus des Akkus machen müsste.
Hier könnte der RFID-Chip Nutzen bringen und benötigte Ladeeinstellungen übermitteln.
KAPITEL 3. ZUSAMMENFASSUNG
65
Alternativ zur Methode der Induktionsladung, oder auch zusätzlich, könnte man ein flexibles Display, das sich der Wölbung anpasst, an der Außenwand der Tasse anbringen.
Dadurch würden dem Benutzer detaillierte Informationen über Ladestatus, verbleibende
Betriebszeit oder anderen Sensorwerten direkt zur Verfügung stehen. Neben Temperatur
und Füllstand könnte auch die bisher konsumierte Flüssigkeitsmenge, sowie die bisherige
Kalorienzufuhr angezeigt werden und somit einen Betrag zu einer ernährungsbewussteren
Lebensweise liefern. Eine Kombination aus dem vorliegenden Projekt und dem in Kapitel
2.1 erwähnten Projekt von Lester et al. ist durchaus denkbar.
Wurde ein ausgereiftes Folgeprodukt entwickelt, so wäre es notwendig auf eine andere
Produktionsmethode auszuweichen um die hohen Kosten für das Grundgerüst der Tasse
drastisch zu reduzieren. Auch eine kompakter gestaltete Elektronik würde der Gestaltung
des optischen Erscheinungsbildes mehr Freiheit lassen. Ein kleinerer Sockel und ein durch
verringertes Gewicht würden die Tasse optimieren. Geringe Anschaffungskosten machen
die intelligente Tasse als interessantes Forschungsobjekt attraktiv. Langfristig könnte sie
sich, durch die mit sich bringenden Vorteile, auch als willkommene Erweiterung des privaten Haushalts oder gar in der Gastronomie etablieren.
Abschließend zeigt Abbildung 3.1 den fertigen Prototyp.
Abbildung 3.1: Der Prototyp als Ergebnis dieses Projekts
Kapitel 4
Danksagung
Abschließend möchte ich mich noch herzlich bei Prof. Matthias Kranz für die hervorragende Betreuung und sein großzügiges Entgegenkommen bedanken. Seine äußerst freundliche
Art sorgte für ein ausgesprochen angenehmes Arbeitsklima und machte ihn zu einer gern
gesehenen Anlaufstelle für Rückfragen. Herzlichen Dank auch an Luis Roalter für die
großartige Betreuung. Hier konnte ich auf eine sehr freundschaftliche Art der Hilfestellung jederzeit zurückgreifen. Ein Dankeschön geht auch an José Antonio Pardos Garcia.
Die gute Zusammenarbeit mit dem äußerst netten spanischen Kollegen machte Spaß und
gestaltete die Arbeit abwechslungsreich. Weiterhin möchte ich mich noch vorallem bei
Benedikt Tratz bedanken, der mir mit Rat und Tat zur Seite stand. Vielen Dank auch an
Sophie Kindsmüller für das Korrekturlesen und sehr konstruktive Anregungen, an Theresa
Brünger für das Korrekturlesen, an Richard Heinz für die mathematische Unterstützung,
an Jan Dreßler für Ratschläge und an meine Mutter Veronika Wimmer für den geistigen
Beistand.
66
Anhang A
Schematische Layouts der Arduinos
Siehe Seiten 68 bis 69.
67
ANHANG A. SCHEMATISCHE LAYOUTS DER ARDUINOS
A.1
Arduino Pro Mini
68
ANHANG A. SCHEMATISCHE LAYOUTS DER ARDUINOS
A.2
Arduino Duemilanove
69
Anhang B
Kalibrierungstabelle des
Temperatursensors
Siehe Seite 71ff.
70
Sheet1
Temp °C
33kOhm AW
100,0
99,5
99,0
98,5
98,0
97,5
97,0
96,5
96,0
95,5
95,0
94,5
94,0
93,5
93,0
92,5
92,0
91,5
91,0
90,5
90,0
89,5
89,0
88,5
88,0
87,5
87,0
86,5
86,0
85,5
85,0
84,5
84,0
83,5
83,0
82,5
82,0
81,5
81,0
80,5
80,0
79,5
79,0
78,5
78,0
77,5
77,0
76,5
76,0
75,5
75,0
74,5
74,0
73,5
73,0
72,5
72,0
71,5
71,0
70,5
70,0
69,5
69,0
68,5
68,0
67,5
67,0
66,5
942,8
941,2
939,6
938
936,4
934,8
933,2
931,6
930
928,4
926,8
925,2
923,6
922
920
919
917
916
915
913
912
911
909
908
905
904
902
900
899
896
894
892
890
889
887
884
882
880
878
876
874
872
869
866
864
862
860
857
855
852
850
848
845
843
840
837
834
831
828
825
822
819
816
813
810
808
805
801
T(n)-T(n-1)
T(n)-T(n-2)
1,6
1,6
1,6
1,6
2
1
2
1
1
2
1
1
2
1
3
1
2
2
1
3
2
2
2
1
2
3
2
2
2
2
2
2
3
3
2
2
2
3
2
3
2
2
3
2
3
3
3
3
3
3
3
3
3
3
3
2
3
4
3,6
°C-Schritt
ca
3,1
3
2
3
3
4
3,4
3
3
5
4
3
4
5
4
4
5
5
4,8
4
5
5
5
5
5,4
6
6
6
6
6
5
Page 1
6
F(T 33)
Abweichung
926,8
925,25
923,7
922,15
920,6
919,05
917,5
915,95
914,4
912,85
912
910,3
908,6
906,9
905,2
903,5
901,8
900,1
898,4
896,7
894
892
890
888
886
884
882
880
878
876
874
871,6
869,2
866,8
864,4
862
859,6
857,2
854,8
852,4
850
847,3
844,6
841,9
839,2
836,5
833,8
831,1
828,4
825,7
822
819
816
813
810
807
804
801
0
0,05
0,1
0,15
0,6
0,05
0,5
-0,05
-0,6
-0,15
0
-0,7
-0,4
-1,1
0,2
-0,5
-0,2
0,1
-0,6
0,7
0
0
0
-1
-1
0
0
0
0
0
0
-0,4
0,2
0,8
0,4
0
-0,4
0,2
-0,2
0,4
0
-0,7
-0,4
-1,1
-0,8
-0,5
-0,2
0,1
0,4
0,7
0
0
0
0
0
-1
-1
0
Sheet1
66,0
65,5
65,0
64,5
64,0
63,5
63,0
62,5
62,0
61,5
61,0
60,5
60,0
59,5
59,0
58,5
58,0
57,5
57,0
56,5
56,0
55,5
55,0
54,5
54,0
53,5
53,0
52,5
52,0
51,5
51,0
50,5
50,0
49,5
49,0
48,5
48,0
47,5
47,0
46,5
46,0
45,5
45,0
44,5
44,0
43,5
43,0
42,5
42,0
41,5
41,0
40,5
40,0
39,5
39,0
38,5
38,0
37,5
37,0
36,5
36,0
35,5
35,0
34,5
34,0
33,5
33,0
32,5
32,0
31,5
798
795
791
788
784
781
777
773
770
767
763
760
756
752
748
744
740
736
732
728
724
720
715
712
708
703
698
694
690
685
680
675
671
666
662
658
654
648
643
637
634
630
625
620
615
610
605
600
595
589
584
578
572
566
561
555
548
543
535
528
521
516
511
506
501
495
489
484
477
471
3
3
4
3
4
3
4
4
3
3
4
3
4
4
4
4
4
4
4
4
4
4
5
3
4
5
5
4
4
5
5
5
4
5
4
4
4
6
5
6
3
4
5
5
5
5
5
5
5
6
5
6
6
6
5
6
7
5
8
7
7
5
5
5
5
6
6
5
7
6
7
7
7
7
7
7
7
7
8
8
8
8
8
9
7
10
9
8
10
9
9
8
9
11
9
9
10
10
10,4
10
11
12
11
13
12,4
13
14
10
10
12
12
Page 2
11,4
798
795
791
787,5
784
780,5
777
773,5
770
766,5
763
759,5
756
752
748
744
740
736
732
728
724
720
715
710,5
706
701,5
697
692,5
688
683,5
679
674,5
671
666,5
662
657,5
653
648,5
644
639,5
635
630,5
625
619,8
614,6
609,4
604,2
599
593,8
588,6
583,4
578,2
572
565,8
559,6
553,4
547,2
541
534,8
528,6
522,4
516,2
511
505,3
499,6
493,9
488,2
482,5
476,8
471,1
0
0
0
-0,5
0
-0,5
0
0,5
0
-0,5
0
-0,5
0
0
0
0
0
0
0
0
0
0
0
-1,5
-2
-1,5
-1
-1,5
-2
-1,5
-1
-0,5
0
0,5
0
-0,5
-1
0,5
1
2,5
1
0,5
0
-0,2
-0,4
-0,6
-0,8
-1
-1,2
-0,4
-0,6
0,2
0
-0,2
-1,4
-1,6
-0,8
-2
-0,2
0,6
1,4
0,2
0
-0,7
-1,4
-1,1
-0,8
-1,5
-0,2
0,1
Sheet1
31,0
30,5
30,0
29,5
29,0
28,5
28,0
27,5
27,0
26,5
26,0
25,5
25,0
24,5
24,0
23,5
23,0
22,5
22,0
21,5
21,0
20,5
20,0
19,5
19,0
18,5
18,0
17,5
17,0
16,5
16,0
15,5
15,0
14,5
14,0
13,5
13,0
12,5
12,0
11,5
11,0
10,5
10,0
9,5
9,0
8,5
8,0
7,5
7,0
6,5
6,0
5,5
5,0
4,5
4,0
3,5
3,0
2,5
2,0
1,5
1,0
0,5
464
459
454
449
443
438
432
426
420
415
410
403
398
392
385
379
374
369
364
359
353
347
342
336
329
323
318
314
309
304
299
294
289
284
279
273
269
264
259
254
249
244
240
236
232
228
222
216
213
208
204
200
196
191
186
183
179
175
171
165
163
7
5
5
5
6
5
6
6
6
5
5
7
5
6
7
6
5
5
5
5
6
6
5
6
7
6
5
4
5
5
5
5
5
5
5
6
4
5
5
5
5
5
4
4
4
4
6
6
3
5
4
4
4
5
5
3
4
4
4
6
2
13
10
11
11
11,2
12
10
12
13
11
11,2
10
11
11
13
11
10,6
9
10
10
10
10
10
10
10
9
8
10
8,8
9
9
8
10
7
8
8
Page 3
8,2
465,4
459,7
454
448,4
442,8
437,2
431,6
426
420,4
414,8
409,2
403,6
398
392,4
386,8
381,2
375,6
370
364,4
358,8
353,2
347,6
342
336,7
331,4
326,1
320,8
315,5
310,2
304,9
299,6
294,3
289
284
279
274
269
264
259
254
249
244
240
235,6
231,2
226,8
222,4
218
213,6
209,2
204,8
200,4
196
191,9
187,8
183,7
179,6
175,4
171,3
167,2
163,1
1,4
0,7
0
-0,6
-0,2
-0,8
-0,4
0
0,4
-0,2
-0,8
0,6
0
0,4
1,8
2,2
1,6
1
0,4
-0,2
0,2
0,6
0
0,7
2,4
3,1
2,8
1,5
1,2
0,9
0,6
0,3
0
0
0
1
0
0
0
0
0
0
0
-0,4
-0,8
-1,2
0,4
2
0,6
1,2
0,8
0,4
0
0,9
1,8
0,7
0,6
0,4
0,3
2,2
0,1
Abbildungsverzeichnis
1.1
Anwendungsfall des Prototyps . . . . . . . . . . . . . . . . . . . . . . . . .
2.1
2.2
2.3
2.4
2.5
2.6
2.7
2.8
2.9
2.10
2.11
2.12
2.13
2.14
2.15
2.16
2.17
2.18
2.19
2.20
2.21
Die HotClock gibt eine akustische Warung aus bei zu heißem Getränk . . .
l: Sensorpaket des Prototyps, r.o.: Farbsensor, r.u.: LED-Array . . . . . . .
Arduino Duemilanove . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
FTDI Chip . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Arduino Pro Mini . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Inertialsensor 6DoF Razor . . . . . . . . . . . . . . . . . . . . . . . . . . .
Roll, Pitch und Yaw . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Anomalie des Gyrosensors . . . . . . . . . . . . . . . . . . . . . . . . . . .
Temperatursensor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Spannungsteilerschaltung für den Temperatursensor . . . . . . . . . . . . .
Schematischer Aufbau des Füllstandssensors . . . . . . . . . . . . . . . . .
Trigonometrisches Schema der Tasse . . . . . . . . . . . . . . . . . . . . .
Arduino XBee Shield . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XBee 2mW Series 2.5 Chip Antenna . . . . . . . . . . . . . . . . . . . . .
Arduino Schnnellstartleiste . . . . . . . . . . . . . . . . . . . . . . . . . . .
Arduino Benutzeroberfläche . . . . . . . . . . . . . . . . . . . . . . . . . .
Processing Benutzeroberfläche . . . . . . . . . . . . . . . . . . . . . . . . .
FTDI Basic Breakout Board zum Programmieren des Arduino Pro Mini. .
Kalibrieren und Testen des Inertialsensors mit Hilfe einer graphischen Anzeige
Handelsübliches Einstichthermometer als Referenz bei der Kalibrierung . .
Temperatur/Werte-Verlauf des Temperaturfühlers (rot) in einer Spannungsteilerschaltung mit einem 33kΩ Widerstand und der Verlauf der beschreibenden, stückweise linearen Funktion (schwarz) . . . . . . . . . . . . . . .
Graphische Darstellung aller Sensorwerte . . . . . . . . . . . . . . . . . . .
Animation der Tasse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
The MediaCup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Teelichttasse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
CAD Modellierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
erste Bilder des Prototyps . . . . . . . . . . . . . . . . . . . . . . . . . . .
Aufbohren kurzer Kanäle . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.22
2.23
2.24
2.25
2.26
2.27
2.28
74
7
11
12
14
16
18
19
20
21
22
22
24
25
27
27
28
29
31
32
36
37
39
42
46
50
50
51
52
53
ABBILDUNGSVERZEICHNIS
75
2.29 Das Auffräsen der Kabelkanäle war auf Grund geringer Druckgenauigkeit
nötig . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.30 Versiegelung mittels Polyesterharz . . . . . . . . . . . . . . . . . . . . . . .
2.31 Versiegelter und abgeschliffener Kanal; hier einer IR-LED . . . . . . . . . .
2.32 Unterschied der angestrebten und tatsächlichen Volumenmarkierungen . .
2.33 Kalibrieren des Füllstandssensors . . . . . . . . . . . . . . . . . . . . . . .
2.34 Prototyp in Bearbeitung . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.35 Status-LEDs überhalb des Griffs . . . . . . . . . . . . . . . . . . . . . . . .
2.36 SMD IR-LED SF 4650 . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.37 Draufsicht der Tasse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.38 Sockel im Originalzustand . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.39 Sockel nach Bearbeitung . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.40 Tasse im Originalzustand. . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.41 Tasse nach Bearbeitung. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.42 Inhalt des Sockels, noch ohne RFID-Transponder . . . . . . . . . . . . . .
2.43 schematischer Aufbau der Elektronik . . . . . . . . . . . . . . . . . . . . .
2.44 Einblick in den Sockel . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
53
53
53
54
55
56
56
57
58
59
59
60
60
60
61
62
3.1
65
Der Prototyp als Ergebnis dieses Projekts . . . . . . . . . . . . . . . . . .
Literaturverzeichnis
[Ard10a]
Arduino.cc. Arduino - ArduinoBoardDuemilanove. http://arduino.cc/en/
Main/ArduinoBoardDuemilanove, 2010.
[Ard10b]
Arduino.cc. Arduino - BuildProcess.
BuildProcess, 2010.
[Ard10c]
Arduino.cc. Arduino - Homepage. http://www.arduino.cc, 2010.
[Ard10d]
Arduino.cc. Arduino - Programmer.
Programmer, 2010.
[Ard10e]
Arduino.cc.
Arduino - Software.
Software, 2010.
[Bec10]
Beckhoff Automation GmbH. Application Note DK9221-0110-0016. download.
beckhoff.com/download/.../DK9221-0110-0016.pdf, 2010.
[Bir10]
Birgit Schmidt. watch1.jpg. http://mediacup.teco.edu/picture_library/
watch/watch1.jpg, 2010.
[Bjö02]
S. Björk. Designing Mobile Ad Hoc Collaborative Applications: Scenario experiences with Smart-Its. Mobile Ad Hoc Collaboration Workshop at CHI 2002),
2002.
[BJ09]
J. Barton and E. Jung. Distributed, Embedded Sensor and Actuator Plattforms. Ambient Intelligence with Microsystems, pages 105–129, 2009.
[Con10]
Conrad
Online
Shop.
Voltcraft
DET1R
EinstThermometer.
http://www.conrad.de/ce/de/product/109986/
Voltcraft-DET1R-Einst-Thermometer, 2010.
[Dig10]
Digi Interational. Diagnostics, Utilities and MIBs - XBee / XBee-PRO ZB
(ZigBee) Adapters - Technical Support. http://www.digi.com/support/
productdetl.jsp?pid=3654&osvid=0&s=366&tp=5, 2010.
[FDZ+ 05]
J. Forlizzi, C. DiSalvo, J. Zimmermann, B. Mutlu, and A. Hurst. The SenseChair: The lounge chair as an intelligent assistive device for elders. DUX
76
http://arduino.cc/en/Hacking/
http://arduino.cc/en/Hacking/
http://www.arduino.cc/en/Main/
LITERATURVERZEICHNIS
77
2005: Proceedings of the 2005 conference on Designing for Use eXperience, 31,
2005.
[Fra09a]
Frauenhofer IPA. Care-O-bot Startseite. http://www.care-o-bot.de/, 2009.
[Fra09b]
Frauenhofer Presse. Serviceroboter für den Haushalt. http://www.youtube.
com/watch?v=DMOIV9FMlpM, 2009.
[GSB02]
Hans W. Gellersen, A. Schmidt, and M. Beigl. Multi-Sensor ContextAwareness in Mobile Devices and Smart Artifacts. Mobile Networks and Applications, 5(7):341–351, 2002.
[Ham10]
Hamamatsu Photonics.
Mini-spectrometer MS series (C10988MA.
http://jp.hamamatsu.com/products/sensor-ssd/pd186/4029/C10988MA/
index_en.html, 2010.
[iRo10]
iRobot Corporation.
Heimroboter.
robots_roomba560.cfm, 2010.
[KMP01]
A. Kapoor, S. Mota, and R. W. Picard. Towards a Learning Companion that
Recognizes Affect. M.I.T. Media Lab, 2001.
[KRP01]
B. Kort, R. Reilly, and R. W. Picard. An Affective Model of Interplay Between
Emotions and Learning: Reenginieering Educational Pedagogy - Building a
Learning Companion. M.I.T. Media, Laboratory, 2001.
http://www.irobot.com/de/home_
[KSM+ 07] M. Kranz, A. Schmidt, A. Maldonado, R. B. Rusu, M. Beetz, B. Hörnler, and
G. Rigoll. Context-Aware Kitchen Utilities. TEI’07: Proceedings of the 1st
international conference on tangible and embedded interaction, pages 213–214,
2007.
[Log09]
Logitech international S.A.
Harmony 550 - User Manual, version
1.1.
http://logitech-en-amr.custhelp.com/cgi-bin/logitech_en_
amr.cfg/php/enduser/fattach_get.php?p_sid=AJBvob1k&p_li=&p_
accessibility=&p_redirect=&p_file_id=324882&p_tbl=9&p_id=3938&p_
created=1208456195&p_olh=0, 2009.
[LTPB10]
J. Lester, D. Tan, S. Patel, and A.J. Bernheim Brush. Automatic Classification
of Daily Fluid Intake. Pervasive Health 2010 Proceedings, 2010.
[Mic07]
Microchip Technology Inc. MCP73811/2. http://ww1.microchip.com/
downloads/en/DeviceDoc/22036b.pdf, 2007.
[NAS10]
NASA.
rollPitchRevA.
rollPitchRevA.jpg, 2010.
[new10]
Sieber S. news.de. Haushaltsroboter - Mint gegen Schmutz. http://www.
news.de/technik/855039432/mint-gegen-den-schmutz/1/, 2010.
http://weboflife.nasa.gov/images/
LITERATURVERZEICHNIS
78
[plo08]
ploynt.de. Toyota stellt neuen Haushaltsroboter vor. http://www.ploynt.de/
news/Toyota_stellt_neuen_Haushaltsroboter_vor-1-2199.htm, 2008.
[Rad00]
B. Rade, L. und Westergren. Springers mathematische Formeln, Taschenbuch
für Ingenieure, Naturwissenschaftler, Informatiker, Wirtschaftswissenschaftler, Dritte, durchgesehene Auflage. Springer-Verlag, Berlin Heidelberg, 2000.
[Rek96]
J. Rekimoto. Tilting Operations for Small Screen Interfaces. Proceedings for
the ACM Symposium on User Interface Software and Technology, 1996.
[Sev09]
Antipasto Hardware Blog: Severino.
XBee Shield to XBee Shield
Communication.
http://antipastohw.blogspot.com/2009/01/
xbee-shield-to-xbee-shield.html, 2009.
[Sor10]
Sorex - Wireless Solutions GmbH.
Gebrauchsanweisung wirelessKey BASIC. http://www.sorex-austria.com/tl_files/news/News_Pdf/
Gebrauchsanweisung_Hardware_wirelessKey_Basic.pdf, 2010.
[Spa10a]
SparkFun Electronics. Arduino Main Board. http://www.sparkfun.com/
commerce/product_info.php?products_id=666, 2010.
[Spa10b]
SparkFun Electronics. Arduino Pro Mini 328 - 3.3V/8MHs. http://www.
sparkfun.com/commerce/product_info.php?products_id=9220, 2010.
[Spa10c]
SparkFun Electronics. Arduino XBee Shield. http://www.sparkfun.com/
commerce/product_info.php?products_id=8471, 2010.
[Spa10d]
SparkFun Electronics. FTDI Basic Breakout - 5V. http://www.sparkfun.
com/commerce/product_info.php?products_id=9115, 2010.
[Spa10e]
SparkFun Electronics. Ftdi basic breakout board. http://www.sparkfun.
com/commerce/images/products/09115-03-L.jpg, 2010.
[Spa10f]
SparkFun Electronics. IMU 6DOF Razor - Ultra Thin IMU. http://www.
sparkfun.com/commerce/product_info.php?products_id=9431, 2010.
[Spa10g]
SparkFun Electronics. XBee 2mW Series 2.5 Chip Antenna. http://www.
sparkfun.com/commerce/product_info.php?products_id=8691, 2010.
[SPI08a]
SPIEGEL ONLINE. Überalterung: Statistisches Bundesamt erwartet rund 58
Prozent mehr Pflegefälle bis 2030. http://www.spiegel.de/wirtschaft/0,
1518,542372,00.html, 2008.
[SPI08b]
Weingärtner A. SPIEGEL ONLINE. Deutsche Haushaltsroboter: Digitale Butler spülen und servieren. http://www.spiegel.de/netzwelt/tech/0,1518,
537189,00.html, 2008.
[SS03]
P. Steurer and M. B. Srivastava. System Design of Smart Table. Proceedings
of the IEEE International Conference on Pervasive Computing and Communications, pages 473–480, 2003.
LITERATURVERZEICHNIS
[Tec10]
79
Techniknews.net.
Haushaltsroboter - bald schon Alltag?
http://
techniknews.net/haushaltsroboter-bald-schon-alltag/, 2010.
[VMKA03] E. Vildjiounaite, E. Malm, J. Kaartinen, and P. Alahuhta. Context Awareness
of Everyday Objects in a Household. Ambient Intelligence: First European
Symposium, EUSAI 2003, Veldhoven, The Netherlands, November 3.-4, 2003,
Proceedings (Lecture Notes in Computer Science), pages 177–191, 2003.
[Voi10]
VoidBot.net. Razor IMU and Arduino. http://voidbot.net/razor-6dof.
html, 2010.
[Vor]
Vorwerk & Co. Teppichwerke GmbH & Co KG. Future requires Visions. http:
//www.vorwerk-teppich.de/sc/vorwerk/thcarper_orgatech_en.html.
[Wei91]
Mark Weiser. The Computer for the 21st Century. Scientific American,
265(3):94–104, 1991.
[Wei00]
P. Weiss. Chair becomes personalized posture coach. SCIENCE NEWS 2000,
158(21):327, 2000.
[Wik10a]
Wikipedia. Arduino-Plattform - Wikipedia. http://de.wikipedia.org/
wiki/Arduino-Plattform, 2010.
[Wik10b]
Wikipedia. EIA-232 - Wikipedia. http://de.wikipedia.org/w/index.php?
title=EIA-232&oldid=74535886, 2010.
[xyz10]
xyz print 3D-Druckservice. 3D-Modelle - schnell, zuverlässig, günstig. http:
//www.xyz-print.de/, 2010.
[Zum10]
Zumtobel Licht GmbH. LUXMATE - LITENET. www.zumtobel.com/PDB/
teaser/de/luxmate_litenet.pdf, 2010.

Documentos relacionados