<<

Sternenhimmel

Daniela Huber Ebenböckstraße 10 81241 München 089/97392937, Deutschland [email protected]

Abstract

In dem Projekt „Sternenhimmel“ geht es darum, sich die 12 Tierkreiszeichen der Sternbilder einzeln anzuschauen. Die Sterne werden durch LEDs verkörpert, die an einem schwarzen Regenschirm angebracht wurden. Über eine Eingabe am Laptop und die Verarbeitung der Eingabe mittels eines Arduino Mega, ist es möglich, zwischen den einzelnen Sternbildern zu wechseln und auch Informationen zu jedem Stern zu erhalten. Categories and Subject Descriptors

• Human-centered computing~Information visualization General Terms

Design, Experimentieren und Performance.

Keywords

„Innovativer Regenschirm“ – „Sternenkunde unter dem Regenschirm“

1. Motivation

Das Thema hat mich sehr interessiert, da ich mir ein Projekt mit LEDs vorgestellt hatte, die man in irgendeiner Weise über das Arduino Mega steuern kann. Eine gute Gelegenheit hierfür bietet die Darstellung von Sternenhimmeln, wie es auch schon in verschiedenen Einrichtungen wie z.B. Schwimmbädern oder Museen der Fall ist.

2. Verwandte Arbeiten

Bei den verwandten Arbeiten sind LED-Sternenhimmel zu nennen, die man kaufen kann, um sie in der Wohnung an der Decke anzubringen. Außerdem verwandt zu meinem Thema sind die LED-Sternenhimmel in verschiedenen Schwimmbädern beispielsweise über Ruhebecken, um sich zu entspannen. Auch für den Innenbereich eines Autos gibt es schon Sternenhimmel aus LEDs zum Anbringen. Eine sehr eng verwandte Arbeit ist der Regenschirm mit eingezeichneten Sternbildern, welcher jedoch keine LEDs beinhaltet.

Quelle: unterwegs-magazin.de

Quelle: planetarium-hamburg.de

Des Weiteren gibt es auch schon Schirme mit integrierten Lichtern, bei denen hingegen keine Sternbilder aufgezeigt, oder sogar ausgewählt werden können.

Meine Arbeit verbindet nun die beiden genannten Regenschirmbeispiele und fügt noch die Funktionen hinzu, zwischen den einzelnen Sternbildern zu wechseln und sich Informationen zu den einzelnen Sternen anzeigen zu lassen.

3. Anwendungsszenario und Use Cases

3.1. Anwendungsszenario Sternenhimmel

Der Benutzer soll mit Hilfe des Serial Monitor der Entwicklungsumgebung von Arduino den Sternenhimmel steuern können. Durch verschiedene Eingaben kann entweder ein Sternbild in seiner Gesamtheit, oder nur ein einzelner Stern ausgewählt werden. Wählt man nur einen einzelnen Stern aus, so werden Informationen wie dessen Name und Entfernung ausgegeben. Der Schirm kann dabei sowohl in der Hand gehalten, als auch auf einem Tisch etc. abgelegt werden.

3.2. Use Cases

Voraussetzung: Arduino Entwicklungsumgebung und Serial Montior sind geöffnet, Programm wurde auf den Arduino geladen

Use Case 1: Ziel: ein bestimmtes Sternbild anzeigen lassen Akteure: aktiver Benutzer Bedienablauf: Nutzer gibt den jeweiligen Buchstaben am Computer ein und bestätigt die Eingabe -> Sternbild leuchtet

Use Case 2: Ziel: Informationsausgabe zu einzelnen Sternen starten Akteure: aktiver Benutzer Bedienablauf: Nutzer wird gefragt, ob er Informationen erhalten möchte und bestätigt dies mit der Eingabe „Y“ für „Yes“. Er startet die Informationsausgabe mit der Eingabe von „2“ -> erster Stern des Sternbildes leuchtet alleine und seine Informationen werden auf dem Serial Monitor ausgegeben

Use Case 3: Ziel: Zwischen den einzelnen Sternen eines Sternbildes wechseln Akteure: aktiver Benutzer Bedienablauf: Nutzer kann durch Eingabe von „2“(nächster Stern) und „1“(vorheriger Stern) zwischen den Sternen wechseln -> aktueller Stern leuchtet und seine Informationen werden ausgegeben

4. Entwurf eines Prototyps

4.1. Technologie

Für die Bereitstellung der Masseleitung sind magnetoelektrische Schalter (Relais) im Einsatz. Ich habe die Relais gewählt, da ich von Problemen bei der Masseschaltung mit Transistoren gehört hatte und der Verkabelungsaufwand bei einem Decoder höher gewesen wäre. Mit einem Decoder hätte ich zu jeder LED ein Kabel benötigt, was auf 110 Kabel und eine Masseleitung hinausgelaufen wäre, welche alle zu dem Schirm geführt hätten. Mit den Relais, mit denen ich in gewisser Weise auch eine Dekodierung erzeugt habe, benötige ich jedoch nun nur 14 + 12 Kabel, die zum Schirm hinführen.

Im Programm selbst habe ich char-Arrays für die Sterninformationen benutzt, da String-Arrays einen sehr großen Arbeitsspeicher benötigt hätten, welchen der Arduino nicht zur Verfügung hatte.

4.2. Konzeptueller Aufbau des Prototypen

4.2.1. Server Als Server dient der Arduino (Mega 2560), auf welchem das Sternenhimmelprogramm mit allen nötigen Hintergrunddaten gespeichert wird.

4.2.2. Client Auf der Client-Seite steht der Laptop mit dem Serial Monitor der Arduino- Entwicklungsumgebung und die Tastatur des Laptops. Über die Tastatur und den Serial Monitor werden die Informationen über ein USB-Kabel an den Arduino geschickt, welcher sie auswertet und die digitalen Pins schaltet.

5. Implementierung

5.1. Hard- und Softwareumgebung

Hardware:

Arduino Mega, zwei 8er Relais-Module, 110 LEDs inkl. Widerständen, 12 Bananenstecker, Schaltlitzen 0,14mm², Laptop

Software: Betriebssystem: Windows 7 Entwicklungsumgebung: Arduino Entwicklungsumgebung Version 1.0.4. Programmiersprache: C/C++

Entwicklungsmethode: - zunächst Programmieren eines „Grundcodes“ der verschieden LEDs ansteuern kann - Schalten über die Relais, da die Ausgänge des Arduino nicht für alle 110 LEDs ausreichen - Verbinden von Relais mit LEDs und Programm - Tests nur mit den ersten LEDs jedes Sternbildes, anschließend den zweiten LEDs, usw.

5.2. Kern der Implementierung

Das Programm läuft folgendermaßen ab:

Zunächst werden alle Informationen zu Sternbildern und Sternen in Arrays gespeichert. Dabei besitzt jedes Sternbild ein eigenes Array für die Sterninformationen. Alle Pins, die für das Programm notwendig sind, werden als „Output“ definiert. Zunächst erscheint der Starttext auf dem Display und alle Sternzeicheninformationen werden ausgegeben.

Die Eingabe des Benutzers wird in eine Variable gespeichert. Wenn die Eingabe einer der Buchstaben a-l ist, wird das aktuelle Sternbild gesetzt. Alle Pins der LEDs werden auf HIGH geschaltet, da für eine Sternbildauswahl alle LEDs des Sternbildes leuchten sollen.

Klickt der Benutzer nun auf „Y“, so wird die Informationsausgabe für die Sterne aktiviert und der erste Stern auf null gesetzt. Mit den Tasten „1“ und „2“ kann man nun zwischen den Sternen hin und herschalten. Je nachdem, welche Taste geklickt wird, wird der aktuelle Stern entweder um 1 erhöht oder um 1 erniedrigt. Möchte man den nächsten Stern ansehen, obwohl schon der letzte vorhandene Stern eines Sternbildes ausgewählt ist, so springt man automatisch wieder zum ersten Stern. Das Gleiche passiert in der anderen Richtung. Nun wird erneut geprüft, welches Sternbild aktuell ausgewählt ist, sodass das richtige Array für die Informationsausgabe angesteuert werden kann. Je nach ausgewähltem Stern, werden nun Bayer-Bezeichnung, Name und Entfernung des Sternes ausgegeben.

Damit der jeweils richtige Stern nun auch in dem Schirm leuchtet, wird der Pin des aktuellen Sterns auf HIGH, alle anderen Pins der Sterne auf LOW gesetzt. Ebenso wird der Pin des aktuellen Sternbildes auf HIGH und alle anderen auf LOW gesetzt. So leuchtet nur ein einzelner Stern eines Sternbildes.

Den gesamten Code mit Inline-Kommentaren finden Sie auch im Anhang.

5.3. Umfang des Prototypen

Von meinem Konzept und meinen Vorstellungen des Projektes konnte ich alle notwendigen Programmteile implementieren und auch handwerklich umsetzen.

Wozu ich nicht mehr gekommen bin, ist die Gestaltung einer schönen Benutzeroberfläche. 6. Evaluation

6.1. Ziele der Evaluation und Methodik

Das Ziel meiner Evaluation bestand darin zu testen, ob und wie gut ein Benutzer mit dem Sternenhimmel-Regenschirm zurecht kommt und wie verständlich die Anweisungen zur Ausführung formuliert sind. Dazu bat ich mehrere Personen, den Schirm zu testen und beobachtete das Vorgehen der Testpersonen.

6.2. Durchführung der Evaluation

Jede Testperson musste vor dem Laptop Platz nehmen, um den Schirm zu testen. Dieser lag dazu auf dem Boden, oder wurde von einer anderen Person gehalten. Die Testpersonen wurden ohne jegliche Erklärung mit dem Starttext der Anwendung konfrontiert und sollten nach den erscheinenden Anweisungen handeln.

Alle Testpersonen hatten keine Probleme den Schirm über die Tastatur zu bedienen und den Anweisungen zu folgen. Teilweise war es jedoch schwierig für die Testpersonen gleichzeitig auf den Bildschirm und den Sternenhimmel mit den aufleuchtenden Sternen zu achten.

6.3. Interpretation der Evaluationsergebnisse

Das Problem der Testpersonen gleichzeitig auf den Monitor und die LEDs im Schirm zu achten, entsteht vermutlich durch die Tatsache, dass Laptop und Regenschirm relativ weit voneinander entfernt sind und man ständig den Kopf drehen muss, um einerseits die Informationen und andererseits die leuchtenden LEDs zu sehen.

Das Problem könnte gelöst werden, indem man als Ausgabe- und Steuerungsmedium nicht den Laptop, sondern ein kleineres mobiles Gerät wie beispielsweise ein kleines Display mit Eingabefeldern verwendet.

Außerdem kann die Übersichtlichkeit und Bedienfreundlichkeit durch ein gestalterisch aufgewertetes Benutzerinterface verbessert werden.

7. Zusammenfassung

7.1. Erzielte Ergebnisse

Die vorliegende Studienaufgabe beschäftigte sich mit der Umsetzung eines Sternenhimmels mit Stern- und Sternbildauswahl in einem Regenschirm. Dazu wurden zunächst die wichtigsten Use Cases für das Projekt definiert, sowie Recherchen zu dem Thema angestellt.

Das Projekt besteht dabei aus den Bestandteilen Regenschirm, Laptop und Arduino. Das Programm wurde zunächst nur an wenigen, später an allen LEDs und Sternbildern getestet und in einem laufenden Prozess modifiziert.

Anschließend wurde das Projekt im Hinblick auf Benutzerfreundlichkeit und Verständnis der Anwendung hin getestet. Dafür wurden 5 Personen einem Test mit dem Sternenhimmelregenschirm unterzogen. Der Test ergab, dass die Testpersonen keinerlei Probleme mit dem Benutzen der Anwendung ergaben, jedoch die Mobilität des Ausgabemediums verbessert werden kann.

7.2. Erweiterungsmöglichkeiten / Ausblick

Als Erweiterung ist zunächst zu erwähnen, dass es sinnvoll wäre, nicht den Laptop als Ein- und Ausgabegerät zu verwenden, sondern beispielsweise ein kleines Display mit Eingabefeldern, sodass der gesamte Sternenhimmel mobil wird und nicht an den Laptop gebunden ist. Hierzu ist auch ein Anschluss an Batterien notwendig, um den benötigten Strom für das Arduino zu liefern.

Ein weiterer Erweiterungspunkt ist die Gestaltung einer gestalterisch hochwertigen Benutzeroberfläche, sodass die Ein- und Ausgaben nicht mehr über den Serial Monitor des Arduinos ausgeführt werden müssen.

Ein letzter und sehr wichtiger Punkt ist auch die Regentauglichkeit des Schirmes. Durch die vielen Kabel und Löcher auf der Außenseite des Schirmes ist ein Schutz vor Regen nicht mehr gewährleistet. Eine Idee hierfür wäre es, einen weiteren Regenschirm der gleichen Größe zu erstehen und den Stoff des neuen Schirms über den Sternenhimmelschirm zu spannen, sodass dieser auch wieder als normaler Regenschirm benutzt werden kann.

8. Danksagung

An dieser Stelle danke ich meinem betreuenden Dozenten Prof. Dr. Thomas Rist für seine Unterstützung und die Bereitstellung des Arduino Mega.

Des Weiteren möchte ich meinem Vater, Robert Huber, danken, der mir großzügig seine Werkzeuge und einen Arbeitsbereich zur Verfügung gestellt hat. Außerdem danke ich ihm sehr für die finanzielle Unterstützung.

9. Referenzen

[1] Fasching, Gerhard: Sternbilder und ihre Mythen, Wien, Springer-Verlag, 1998

[2] Berger, Erika: Horoskope, 20.06.2013, url: http://www.astroportal.com/sternzeichen (abgerufen mehrfach ab 10.05.2013)

[3] Klünder, Andreas: sternname, Erscheinungsdatum unbekannt, url: http://aklimex.de/sternname.pdf (abgerufen mehrfach ab 10.05.2013)

[4] Wikipedia, Die freie Enzyklopädie: Tierkreiszeichen, 07.06. 2013, url: http://de.wikipedia.org/w/index.php?title=Tierkreiszeichen&oldid=119302586 (abgerufen am 25.4.2013)

10. Anlagen

[1] Quellcode der Anwendung – Verfasserin: Daniela Huber

[2] Schaltzeichnung – Verfasserin: Daniela Huber

[3] Präsentationsfolien (pdf-Format)

[4] Bilder zur Entstehung

/* @author: Daniela Huber */

/*Variablen für ausgewählte Sterne und Sternbilder, sowie Eingabe */ int sternbild = 0; int stern = 0; int comand = 0; int aktuell = 0; int sternAktuell = -1;

/* Variable, die festlegt, wann die Sterninformationen ausgegeben werden */ boolean Y = false;

/*Aufführung aller vorhandenen Sternzeichen*/ String sternzeichen[12][2] = {{"a: 21.Januar - 19.Februar ", "Wassermann"},{"b: 20.Februar - 20.Maerz ","Fische"},{"c: 21.Maerz - 20.April ","Widder"},{"d: 21.April - 20.Mai ","Stier"},{"e: 21.Mai - 21.Juni ","Zwillinge"},{"f: 22.Juni - 22.Juli ","Krebs"},{"g: 23.Juli - 23.August ","Loewe"},{"h: 24.August - 23.September ","Jungfrau"},{"i: 24.September - 23.Oktober ","Waage"},{"j: 24.Oktober - 22.November ","Skorpion"},{"k: 23.November - 21.Dezember ","Schuetze"},{"l: 22.Dezember - 20.Januar ","Steinbock"}};

/*im Folgenden alle Sterne jedes Sternbildes mit Bayer-Bezeichnung, Namen und Entfernung, soweit vorhanden*/ char wassermann[12][3][16]= {{"lota Aquarii","nicht vorhanden","nicht vorhanden"},{"Theta Aquarii","Ancha","191"},{"Beta Aquarii","Sadalsuud","610"},{"Epsilon Aquarii","Albali","230"}, {"Alpha Aquarii","Sadalmelik","760"},{"Gamma Aquarii","Sadachbia","158"},{"Zeta Aquarii","nicht vorhanden","nicht vorhanden"},{"Lambda Aquarii","Hydor","390"},{"Phi Aquarii","nicht vorhanden","nicht vorhanden"},{"Tau Aquarii","nicht vorhanden","nicht vorhanden"},{"Delta Aquarii","Skat","160"},{"88 Aquarii","nicht vorhanden","nicht vorhanden"}};

char fische[11][3][16] = {{"Lambda Piscium","nicht vorhanden","nicht vorhanden"},{"Gamma Piscium","nicht vorhanden","131"},{"Theta Piscium","nicht vorhanden","nicht vorhanden"},{"lota Piscium","nicht vorhanden","nicht vorhanden"},{"Delta Piscium","nicht vorhanden","nicht vorhanden"},{"Epsilon Piscium","nicht vorhanden","nicht vorhanden"},{"Ny Piscium","nicht vorhanden","nicht vorhanden"},{"Omikron Piscium","nicht vorhanden","nicht vorhanden"},{"Eta Piscium","Kullat Nunu","294"},{"Omega Piscium","nicht vorhanden","nicht vorhanden"},{"Alpha Piscium","Alrischa","139"}};

char widder[4][3][14] = {{"Gamma Arietis","Mesarthim","204"},{"Beta Arietis","Sheratan","60"},{"Alpha Arietis","Hamal","66"},{"41 Arietis","Bharani","160"}};

char stier[10][3][16] = {{"Alpha Tauri","","65"},{"","Tien Kuan","400"},{"","Elnath","131"},{"","Ain","155"},{"","Hyadum I","162"},{"","nicht vorhanden","nicht vorhanden"},{"My Tauri","nicht vorhanden","nicht vorhanden"},{"Xi Tauri","nicht vorhanden","nicht vorhanden"},{"Omikron Tauri","nicht vorhanden","212"},{"Ny Tauri","nicht vorhanden","nicht vorhanden"}}; char zwilling[9][3][18] = {{"Alpha Geminorum","","50"},{"Beta Geminorum","","34"},{"","Wasat","60"},{"","Mekbuda","1400"},{"","Mebsuta","900"},{"","Alhena","105"},{"Xi Geminorum","Alzir","64"},{"My Geminorum","Tejat Posterior","250"},{"","Tejat Prior","250"}};

char krebs[5][3][18] = {{"Delta Cancri","Asellus Australis","150"},{"Gamma Cancri","Asellus Borealis","160"},{"lota Cancri","nicht vorhanden","300"},{"Alpha Cancri","Acubens","180"},{"Beta Cancri","Altarf","230"}};

char loewe[9][3][21] = {{"Beta Leonis","Denebola","36"},{"Theta Leonis","Chort","178"},{"Delta Leonis","Zosma","58"},{"Gamma Leonis","Algieba","126"},{"Zeta Leonis","Aldhafera","260"},{"Eta Leonis","nicht vorhanden","2000"},{"Alpha Leonis","Regulus","78"},{"My Leonis","Rasalas","133"},{"Epsilon Leonis","Ras Elased Australis","251"}};

file:///C|/Users/Daniela/Documents/StudiumFHS/Semester6/Interaktion/Abgabe/code.txt[22.06.2013 13:17:50] char jungfrau[9][3][17] = {{"Epsilon Virginis","Vindemiatrix","102"},{"Delta Virginis","Minelava","200"},{"Zeta Virginis","Heze","73"},{"Alpha Virginis","Spica","262"},{"Theta Virginis","nicht vorhanden","nicht vorhanden"},{"Gamma Virginis","Porrima","39"},{"Eta Virginis","Zaniah","250"},{"Beta Virginis","Zavijah","36"},{"Ny Virginis","nicht vorhanden","nicht vorhanden"}};

char waage[4][3][19] = {{"Gamma Librae","Zuben-el-Akrab","152"},{"Beta Librae","Zuben-el- schemali","120"},{"Alpha Librae","Zuben-el-dschenubi","77"},{"Sigma Librae","Brachium","292"}};

char skorpion[14][3][16] = {{"","Akrab","530"},{"","Dschubba","402"},{"","nicht vorhanden","469"},{"","Alniyat","600"},{"Alpha Scorpii","","604"},{"","Alniyat","500"},{"","Wei","65"},{"My Scorpii","nicht vorhanden","822"},{"Zeta Scorpii","nicht vorhanden","151"},{"Eta Scorpii","nicht vorhanden","72"},{"","Sargas","272"},{"lota Scorpii","nicht vorhanden","1792"},{"","Girtab","464"},{"","Shaula","703"}};

char schuetze[13][3][19] = {{"My Sagittarii","Polis","nicht vorhanden"},{"","Kaus Borealis","78"},{"", "Kaus Medius","350"},{"Gamma Sagittarii", "Nasl", "96"},{"","Kaus Australis","144"},{"","nicht vorhanden","149"},{"","nicht vorhanden","231"},{"Sigma Sagittarii","Nunki","224"},{"","nicht vorhanden","120"},{"","Askella","89"},{"Omikron Sagittarii","nicht vorhanden","nicht vorhanden"},{"","Albaldah","440"},{"","nicht vorhanden","372"}};

char steinbock[10][3][17] = {{"Pi Capricorni","Okul","550"},{"","Dabih","330"},{"Alpha Capricorni","Algiedi","120"},{"","nicht vorhanden","nicht vorhanden"},{"","nicht vorhanden","nicht vorhanden"},{"Zeta Capricorni","nicht vorhanden","nicht vorhanden"},{"","nicht vorhanden","nicht vorhanden"},{"lota Capricorni","nicht vorhanden","nicht vorhanden"},{"Gamma Capricorni","Nashira","139"},{"Delta Capricorni","Deneb Algedi","39"}};

/*Setup*/ void setup() {

Serial.begin(9600);

/* Alle Pins die für die Anwendung benötigt werden, werden als Output definiert */ for(int i = 14; i<= 53; i++){ pinMode(i, OUTPUT); }

/*Starttext mit Ausgabe aller Sternzeichen*/ Serial.println("Willkommen bei der Sternbildauswahl!"); Serial.println("Bitte waehle aus folgenden Sternbildern, indem Du den jeweiligen Buchstaben eingibst und auf 'Senden' klickst:"); for(int j = 0; j <= 11; j++){ Serial.println(sternzeichen[j][0] + sternzeichen[j][1]); } }

void loop() { /* Wenn eine Eingabe vorliegt, speichere sie in Variable comand */ if (Serial.available()){ comand = Serial.read();

/* 97 bis 108 sind die Tasten a bis l */ if(comand >= 97 && comand <= 108){ /* noch keine Informationsausgabe */ Y = false;

/* die Sternbilder werden über die Pins 14 - 25 geschaltet, deshalb comand - 83 */

file:///C|/Users/Daniela/Documents/StudiumFHS/Semester6/Interaktion/Abgabe/code.txt[22.06.2013 13:17:50] sternbild = comand - 83;

/* die einzelnen LED-Reihen werden über die Pins 40 - 53 geschaltet, wenn das gesamte Sternbild leuchten soll werden alle LEDs auf HIGH gesetzt */ for(int i=40; i<=53; i++){ digitalWrite(i, HIGH); }

/* der Name des gewählten Sternbildes befindet sich im Array "sternzeichen", deshalb comand - 97 */ int suche = comand - 97; Serial.println("Du hast das Sternbild " + sternzeichen[suche][1] + " ausgewaehlt!"); Serial.println("Wenn du dir nun Informationen zu den einzelnen Sternen ansehen moechtest, waehle 'Y' !"); }

/* 121 ist die Taste "Y", beim Drücken wird diese auf "true" gesetzt */ if(comand == 121){ Y = true; Serial.println("Um die Informationsausgabe zu starten druecke bitte die '2'"); Serial.println("Um dir den naechsten Stern anzeigen zu lassen klicke '2', um den vorherigen Stern auszuwaehlen klicke '1'"); /* in die Variable aktuell wird das aktuell ausgewählte Sternbild in den Zahlen 0 bis 11 gespeichert */ aktuell = sternbild -14;

/* erster Stern in jedem Sternbild */ stern = 39; sternAktuell = -1; }

/* 49 und 50 sind die Tasten "2" und "1" */ if((comand == 49 || comand == 50) && Y == true){ /* Beim Drücken von "1" wird der vorherige Stern ausgewählt (aktueller Stern - 1) */ if(comand == 49){ stern = stern - 1; sternAktuell = sternAktuell - 1; /* Beim Drücken von "2" wird der nächste Stern ausgewählt (aktueller Stern + 1) */ }else if(comand == 50){ stern = stern + 1; sternAktuell = sternAktuell + 1; }

/* Im Folgenden werden je nach Sternbild (0-12) folgende Codezeilen ausgeführt (erklärt am Sternbild Wassermann) */

if(aktuell == 0 ){ /* Wenn der erste Stern ausgewählt ist und man noch weiter zurück möchte, springe zum letzten Stern des Sternbildes */ if(sternAktuell < 0){ stern = 51; sternAktuell = 11; /* Wenn der letzte Stern ausgewählt ist und man noch einen weiteren Stern ansehen möchte, springe zum ersten Stern des Sternbildes */ }else if(sternAktuell > 11 ){ stern = 40; sternAktuell = 0; } /* Für den ausgewählten Stern gebe die Bayer-Bezeichnung aus */ Serial.print("Bayer-Bezeichnung: ");

file:///C|/Users/Daniela/Documents/StudiumFHS/Semester6/Interaktion/Abgabe/code.txt[22.06.2013 13:17:50] for(int k = 0; k <= 15; k++){ if(wassermann[sternAktuell][0][k] != 0){ Serial.print(wassermann[sternAktuell][0][k]); } } Serial.print("\n"); /* Gebe für den ausgewählten Stern den Namen aus */ Serial.print("Name: "); for(int i = 0; i <= 15; i++){ if(wassermann[sternAktuell][1][i] != 0){ Serial.print(wassermann[sternAktuell][1][i]); } } Serial.print("\n"); /* Gebe für den ausgewählten Stern die Entfernung aus */ Serial.print("Entfernung zur Erde in Lichtjahren: "); for(int j = 0; j <= 15; j++){ if(wassermann[sternAktuell][2][j] != 0){ Serial.print(wassermann[sternAktuell][2][j]); } } Serial.print("\n"); } if(aktuell == 1){ if(sternAktuell < 0){ stern = 50; sternAktuell = 10; }else if(sternAktuell > 10 ){ stern = 40; sternAktuell = 0; } Serial.print("Bayer-Bezeichnung: "); for(int k = 0; k <= 15; k++){ if(fische[sternAktuell][0][k] != 0){ Serial.print(fische[sternAktuell][0][k]); } } Serial.print("\n"); Serial.print("Name: "); for(int i = 0; i <= 15; i++){ if(fische[sternAktuell][1][i] != 0){ Serial.print(fische[sternAktuell][1][i]); } } Serial.print("\n"); Serial.print("Entfernung zur Erde in Lichtjahren: "); for(int j = 0; j <= 15; j++){ if(fische[sternAktuell][2][j] != 0){ Serial.print(fische[sternAktuell][2][j]); } } Serial.print("\n"); } if(aktuell == 2){ if(sternAktuell < 0){ stern = 43; sternAktuell = 3;

file:///C|/Users/Daniela/Documents/StudiumFHS/Semester6/Interaktion/Abgabe/code.txt[22.06.2013 13:17:50] }else if(sternAktuell > 3 ){ stern = 40; sternAktuell = 0; } Serial.print("Bayer-Bezeichnung: "); for(int k = 0; k <= 13; k++){ if(widder[sternAktuell][0][k] != 0){ Serial.print(widder[sternAktuell][0][k]); } } Serial.print("\n"); Serial.print("Name: "); for(int i = 0; i <= 13; i++){ if(widder[sternAktuell][1][i] != 0){ Serial.print(widder[sternAktuell][1][i]); } } Serial.print("\n"); Serial.print("Entfernung zur Erde in Lichtjahren: "); for(int j = 0; j <= 13; j++){ if(widder[sternAktuell][2][j] != 0){ Serial.print(widder[sternAktuell][2][j]); } } Serial.print("\n"); } if(aktuell == 3){ if(sternAktuell < 0){ stern = 49; sternAktuell = 9; }else if(sternAktuell > 9 ){ stern = 40; sternAktuell = 0; } Serial.print("Bayer-Bezeichnung: "); for(int k = 0; k <= 15; k++){ if(stier[sternAktuell][0][k] != 0){ Serial.print(stier[sternAktuell][0][k]); } } Serial.print("\n"); Serial.print("Name: "); for(int i = 0; i <= 15; i++){ if(stier[sternAktuell][1][i] != 0){ Serial.print(stier[sternAktuell][1][i]); } } Serial.print("\n"); Serial.print("Entfernung zur Erde in Lichtjahren: "); for(int j = 0; j <= 15; j++){ if(stier[sternAktuell][2][j] != 0){ Serial.print(stier[sternAktuell][2][j]); } } Serial.print("\n"); } if(aktuell == 4){

file:///C|/Users/Daniela/Documents/StudiumFHS/Semester6/Interaktion/Abgabe/code.txt[22.06.2013 13:17:50] if(sternAktuell < 0){ stern = 48; sternAktuell = 8; }else if(sternAktuell > 8 ){ stern = 40; sternAktuell = 0; } Serial.print("Bayer-Bezeichnung: "); for(int k = 0; k <= 17; k++){ if(zwilling[sternAktuell][0][k] != 0){ Serial.print(zwilling[sternAktuell][0][k]); } } Serial.print("\n"); Serial.print("Name: "); for(int i = 0; i <= 17; i++){ if(zwilling[sternAktuell][1][i] != 0){ Serial.print(zwilling[sternAktuell][1][i]); } } Serial.print("\n"); Serial.print("Entfernung zur Erde in Lichtjahren: "); for(int j = 0; j <= 17; j++){ if(zwilling[sternAktuell][2][j] != 0){ Serial.print(zwilling[sternAktuell][2][j]); } } Serial.print("\n"); } if(aktuell == 5){ if(sternAktuell < 0){ stern = 44; sternAktuell = 4; }else if(sternAktuell > 4 ){ stern = 40; sternAktuell = 0; } Serial.print("Bayer-Bezeichnung: "); for(int k = 0; k <= 17; k++){ if(krebs[sternAktuell][0][k] != 0){ Serial.print(krebs[sternAktuell][0][k]); } } Serial.print("\n"); Serial.print("Name: "); for(int i = 0; i <= 17; i++){ if(krebs[sternAktuell][1][i] != 0){ Serial.print(krebs[sternAktuell][1][i]); } } Serial.print("\n"); Serial.print("Entfernung zur Erde in Lichtjahren: "); for(int j = 0; j <= 17; j++){ if(krebs[sternAktuell][2][j] != 0){ Serial.print(krebs[sternAktuell][2][j]); } }

file:///C|/Users/Daniela/Documents/StudiumFHS/Semester6/Interaktion/Abgabe/code.txt[22.06.2013 13:17:50] Serial.print("\n"); } if(aktuell == 6){ if(sternAktuell < 0){ stern = 48; sternAktuell = 8; }else if(sternAktuell > 8 ){ stern = 40; sternAktuell = 0; } Serial.print("Bayer-Bezeichnung: "); for(int k = 0; k <= 20; k++){ if(loewe[sternAktuell][0][k] != 0){ Serial.print(loewe[sternAktuell][0][k]); } } Serial.print("\n"); Serial.print("Name: "); for(int i = 0; i <= 20; i++){ if(loewe[sternAktuell][1][i] != 0){ Serial.print(loewe[sternAktuell][1][i]); } } Serial.print("\n"); Serial.print("Entfernung zur Erde in Lichtjahren: "); for(int j = 0; j <= 20; j++){ if(loewe[sternAktuell][2][j] != 0){ Serial.print(loewe[sternAktuell][2][j]); } } Serial.print("\n"); } if(aktuell == 7){ if(sternAktuell < 0){ stern = 48; sternAktuell = 8; }else if(sternAktuell > 8 ){ stern = 40; sternAktuell = 0; } Serial.print("Bayer-Bezeichnung: "); for(int k = 0; k <= 16; k++){ if(jungfrau[sternAktuell][0][k] != 0){ Serial.print(jungfrau[sternAktuell][0][k]); } } Serial.print("\n"); Serial.print("Name: "); for(int i = 0; i <= 16; i++){ if(jungfrau[sternAktuell][1][i] != 0){ Serial.print(jungfrau[sternAktuell][1][i]); } } Serial.print("\n"); Serial.print("Entfernung zur Erde in Lichtjahren: "); for(int j = 0; j <= 16; j++){ if(jungfrau[sternAktuell][2][j] != 0){

file:///C|/Users/Daniela/Documents/StudiumFHS/Semester6/Interaktion/Abgabe/code.txt[22.06.2013 13:17:50] Serial.print(jungfrau[sternAktuell][2][j]); } } Serial.print("\n"); } if(aktuell == 8){ if(sternAktuell < 0){ stern = 43; sternAktuell = 3; }else if(sternAktuell > 3 ){ stern = 40; sternAktuell = 0; } Serial.print("Bayer-Bezeichnung: "); for(int k = 0; k <= 18; k++){ if(waage[sternAktuell][0][k] != 0){ Serial.print(waage[sternAktuell][0][k]); } } Serial.print("\n"); Serial.print("Name: "); for(int i = 0; i <= 18; i++){ if(waage[sternAktuell][1][i] != 0){ Serial.print(waage[sternAktuell][1][i]); } } Serial.print("\n"); Serial.print("Entfernung zur Erde in Lichtjahren: "); for(int j = 0; j <= 18; j++){ if(waage[sternAktuell][2][j] != 0){ Serial.print(waage[sternAktuell][2][j]); } } Serial.print("\n"); } if(aktuell == 9){ if(sternAktuell < 0){ stern = 53; sternAktuell = 13; }else if(sternAktuell > 13 ){ stern = 40; sternAktuell = 0; } Serial.print("Bayer-Bezeichnung: "); for(int k = 0; k <= 15; k++){ if(skorpion[sternAktuell][0][k] != 0){ Serial.print(skorpion[sternAktuell][0][k]); } } Serial.print("\n"); Serial.print("Name: "); for(int i = 0; i <= 15; i++){ if(skorpion[sternAktuell][1][i] != 0){ Serial.print(skorpion[sternAktuell][1][i]); } } Serial.print("\n");

file:///C|/Users/Daniela/Documents/StudiumFHS/Semester6/Interaktion/Abgabe/code.txt[22.06.2013 13:17:50] Serial.print("Entfernung zur Erde in Lichtjahren: "); for(int j = 0; j <= 15; j++){ if(skorpion[sternAktuell][2][j] != 0){ Serial.print(skorpion[sternAktuell][2][j]); } } Serial.print("\n"); } if(aktuell == 10){ if(sternAktuell < 0){ stern = 52; sternAktuell = 12; }else if(sternAktuell > 12 ){ stern = 40; sternAktuell = 0; } Serial.print("Bayer-Bezeichnung: "); for(int k = 0; k <= 18; k++){ if(schuetze[sternAktuell][0][k] != 0){ Serial.print(schuetze[sternAktuell][0][k]); } } Serial.print("\n"); Serial.print("Name: "); for(int i = 0; i <= 18; i++){ if(schuetze[sternAktuell][1][i] != 0){ Serial.print(schuetze[sternAktuell][1][i]); } } Serial.print("\n"); Serial.print("Entfernung zur Erde in Lichtjahren: "); for(int j = 0; j <= 18; j++){ if(schuetze[sternAktuell][2][j] != 0){ Serial.print(schuetze[sternAktuell][2][j]); } } Serial.print("\n"); } if(aktuell == 11){ if(sternAktuell < 0){ stern = 49; sternAktuell = 9; }else if(sternAktuell > 9 ){ stern = 40; sternAktuell = 0; } Serial.print("Bayer-Bezeichnung: "); for(int k = 0; k <= 16; k++){ if(steinbock[sternAktuell][0][k] != 0){ Serial.print(steinbock[sternAktuell][0][k]); } } Serial.print("\n"); Serial.print("Name: "); for(int i = 0; i <= 16; i++){ if(steinbock[sternAktuell][1][i] != 0){ Serial.print(steinbock[sternAktuell][1][i]);

file:///C|/Users/Daniela/Documents/StudiumFHS/Semester6/Interaktion/Abgabe/code.txt[22.06.2013 13:17:50] } } Serial.print("\n"); Serial.print("Entfernung zur Erde in Lichtjahren: "); for(int j = 0; j <= 16; j++){ if(steinbock[sternAktuell][2][j] != 0){ Serial.print(steinbock[sternAktuell][2][j]); } } Serial.print("\n"); }

/* Schalte den ausgewählten Stern auf HIGH, alle anderen Sterne auf LOW */ for(int i = 40; i<= 53; i++){ if(i == stern){ digitalWrite(i, HIGH); }else{ digitalWrite(i,LOW); } } } } /* Schalte das ausgewählte Sternbild auf HIGH, alle anderen Sternbilder auf LOW */ for(int i = 14; i<= 25; i++){ if(i == sternbild){ digitalWrite(i, LOW); }else{ digitalWrite(i,HIGH); } }

}

file:///C|/Users/Daniela/Documents/StudiumFHS/Semester6/Interaktion/Abgabe/code.txt[22.06.2013 13:17:50]

Sternenhimmel

Ein Projekt von Daniela Huber Präsentation am 20.6.2013 Bauteile

• Mehrere Meter 0.14mm² Schaltlitze in braun/schwarz und blau • Schrumpfschläuche • zwei 8er Relais Module • 110 LEDs(5V) inkl. Widerstände • Arduino Mega • 12 Paar Bananenstecker • Steckerleisten Funktionsweise

• Über 12 digitale Pins werden die Relais mit Spannung versorgt

• Die Relais „verteilen“ die Masseleitung

• 14 weitere digitale Pins legen an die 14 LEDs des ersten Sternbildes Spannung an Funktionsweise

• Alle 1er LEDs, 2er LEDs, usw jedes Sternbildes sind jeweils miteinander verbunden

• Alle LEDs eines Sternbildes sind ebenfalls miteinander verbunden

• Über das Schalten der digitalen Pins können somit entweder alle LEDs oder nur eine einzelne LED eines Sternbildes leuchten, indem das jeweilige Relais geschalten, und der Strom fließen kann

Arduino

Pin 1 Pin 2 Pin 3 4

2 3

1 2 1

3

Relais Relais 1 2

Vielen Dank für die Aufmerksamkeit Fotos zur Entstehung Arbeitsplatz Arbeitsutensilien Verlöten der Relais mit dem Arduino und Anbringen der Widerstände Erste Lötarbeiten mit LEDs Bei der Arbeit - Anbringen der Löcher im Schirm - LED Lochtest Verkabelung im Anfangs- und Zwischenstadium Anbringen der Relais und des Arduino - Bananenstecker für den Transport - erstes Leuchtbeispiel