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.