pdf | 1.7 Mb - bugnplay.ch

Transcrição

pdf | 1.7 Mb - bugnplay.ch
Bau eines
Led Cube
Programmierung des 2D Spiel Snake in 3D und
Darstellung von verschiedenen Mustern
Maturaarbeit 2012
Autoren: Nicole Trachsler & Lukas Roth
Betreuer: Dr. Adrien Cornaz
Co-Referent: Dr. Kai Köhler
Kantonsschule Wohlen
Inhaltsverzeichnis
Inhaltsverzeichnis .................................................................................................................................... 2
1 Vorwort ................................................................................................................................................ 4
2 Abstract ................................................................................................................................................ 5
3 Einleitung ............................................................................................................................................. 6
4 Hardware .............................................................................................................................................. 7
4.1 Led Cube Konstruktion ................................................................................................................. 7
4.2 Multiplexing Verfahren ............................................................................................................... 11
4.3 Transistoren ................................................................................................................................. 12
4.4 Steuerung ..................................................................................................................................... 12
4.4.1 Arduino Board Mega 2560 ................................................................................................... 12
4.4.2 Pin-Erweiterung.................................................................................................................... 12
4.4.3 M74HC595 Tri-State-Shift-Register .................................................................................... 13
4.4.4 Spannung .............................................................................................................................. 14
4.4.5 Stromstärke ........................................................................................................................... 14
4.4.6 Schaltplan zur Pin-Erweiterung ............................................................................................ 15
4.4.7 Klatschmodul, Steuerungspanel und MP3-Player ................................................................ 16
5 Software ............................................................................................................................................. 18
5.1 Snake ........................................................................................................................................... 19
5.1.1 Snake Initialisierung ............................................................................................................. 19
5.1.2 While Schlaufe ..................................................................................................................... 19
5.1.3 Arduino Board ...................................................................................................................... 21
5.2 Muster.......................................................................................................................................... 22
5.2.1 Glitzern ................................................................................................................................. 22
5.2.2 Regen .................................................................................................................................... 22
5.2.3 Explosion .............................................................................................................................. 24
5.2.4 Zufallswandern ..................................................................................................................... 25
5.2.5 Sinuswelle vom Mittelpunkt................................................................................................. 26
5.2.6 Viereck ................................................................................................................................. 27
5.3 Text anzeigen .............................................................................................................................. 28
5.4 Klatschmodul............................................................................................................................... 29
5.5 Anzeige()-Funktion ..................................................................................................................... 29
6 Schlusswort ........................................................................................................................................ 32
7 Literaturverzeichnis ............................................................................................................................ 33
7.1 Literatur ....................................................................................................................................... 33
7.2 Webseiten .................................................................................................................................... 33
8 Bildverzeichnis ................................................................................................................................... 34
9 Anhang ............................................................................................................................................... 36
9.1 Code Blocks Projekt in separater Datei ....................................................................................... 36
9.2 Source Code für das Arduino Board in separater Datei .............................................................. 36
9.3 Video vom Led Cube .................................................................................................................. 36
9.4 Selbständigkeitserklärung ........................................................................................................... 37
1 Vorwort
Im März 2012 galt es ein Thema für unsere Maturitätsarbeit im kommenden Jahr zu finden.
Wir entschieden uns, dass wir gerne etwas im Bereich der Technik oder Informatik machen
möchten und machten uns Gedanken über mögliche Themen. Unsere erste Idee war, eine Art
3D Bildschirm zu bauen. Als nächstes kam uns die Idee, dass wir das alte und gut bekannte
2D Handyspiel Snake auf einem 3D Bildschirm programmieren könnten. Wir gaben auf der
Videoplattform Youtube das Stichwort Led Cube ein und waren beide sofort fasziniert von
den blinkenden Würfeln.
Das Zusammenspiel aus Elektronik und Informatik interessierte uns und wir wollten mehr
darüber erfahren. Wir entschieden uns dafür, diese Ideen zu kombinieren und einen
Led Cube zu bauen. Auf dem Cube sollte man Muster darstellen können sowie das 2D Spiel
Snake in 3D spielen können. Somit war unser Thema gefunden und wir konnten mit der Arbeit beginnen.
Wir möchten uns herzlich bei unserem Betreuer Herrn Cornaz bedanken, welcher uns zu jeder
Zeit kompetent auf unsere Fragen antwortete. Ebenfalls ein Dankeschön geht an Herrn Köhler, welcher sich als Co-Referent zur Verfügung stellte. Für die finanzielle Unterstützung
danken wir unseren Eltern, die kurzerhand als Sponsoren für unser Projekt einsprangen. Weiter möchten wir allen danken, die mitgeholfen haben, die Arduino Plattform zu entwickeln,
welche uns die Arbeit um einiges erleichtert hat.
Wir empfehlen jedem Leser und jeder Leserin dieser Arbeit, sich unbedingt das Video im
Anhang anzuschauen. Nur so kann man einen Eindruck vom Ganzen bekommen und die Faszination, die dahinter steht, begreifen.
4
2 Abstract
Unsere Hauptfragestellung war der Bau eines
Led Cube, auf welchem wir mit Hilfe
eines Arduino Boards verschiedene Muster programmieren wollten. Wir einigten uns darauf,
512 Leds zu benutzen, da diese Anzahl ausreicht, um grössere Muster schön anzuzeigen. Als
Fernziel nahmen wir uns vor, ein spielbares 3D Snake zu implementieren.
Um uns ein Grundwissen an Elektrotechnik anzueignen, konsultierten wir das Buch ‚Fachkunde Elektronik‘ von Peter Basian. Mit Hilfe von Baukästen und den dazugehörigen Bastlerboards bauten wir einfache Schaltungen. Ausserdem nutzten wir das Internet zur weiteren
Informationsbeschaffung. Später entschieden wir uns dafür, zuerst zwei Prototypen in der
Grösse
und
zu bauen, bevor wir uns an das Endprodukt wagten.
Am Ende hatten wir einen funktionsfähigen blauen
Led Cube. Sofern alle Lötstellen
intakt sind, funktioniert der Würfel einwandfrei. Er ist in der Lage verschiedene komplexe
Muster anzuzeigen. Diese sind auf dem Mikroprozessor auf dem Arduino Mega Board gespeichert und werden in Real-Time berechnet. Somit muss der Cube nicht an den Computer
angeschlossen sein, um zu funktionieren. Es genügt, wenn er über das Netzgerät Strom erhält.
Um Snake zu spielen, muss das Board via USB-Port an den Computer angeschlossen sein.
Mit Hilfe von sechs Tastaturtasten sendet man über die Kommunikationskanäle des Arduino
Boards die neuen Koordinaten der Schlange. Zur einfacheren Ansteuerung der verschiedenen
Led Cube Funktionen haben wir ein User Interface erstellt. Das Programm zeigt beim Spielen
von Snake die aktuelle Punktzahl auf dem Bildschirm an.
Als Zusatzfunktion haben wir ein Klatschmodul von Conrad dazwischen geschaltet, so dass
der Cube auf Klatschen reagieren kann. Klatscht der Benutzer nun laut, wird ein Muster aufgerufen. Wechselt man in den Muster-Modus, wird beim Abspielen der Muster automatisch
Musik dazu abgespielt. Diese Musik stammt von einem alten MP3-Player, welcher ebenfalls
über das Arduino Board angesteuert wird und mit Boxen verbunden ist.
Es gibt noch unendlich viele Möglichkeiten, weitere Muster zu implementieren, somit mussten wir irgendwo einen Schlussstrich ziehen. Auch könnte man den gleichen Würfel mit
RGB-Leds bauen, um unterschiedliche Farben darzustellen. Anstelle des 3D Snake könnte
man zum Beispiel ein 3D Tetris Spiel programmieren oder selbst ein Spiel erfinden. Unsere
verfügbare Zeit genügte leider bei weitem nicht, um alle unsere Ideen zu verwirklichen.
5
3 Einleitung
Die Arbeit ist in zwei Teile aufgeteilt. Im ersten Teil wird die Hardware des Led Cubes erklärt, im zweiten Teil die Software des Würfels. Am Anfang des Hardware Teils wird genau
erklärt, wie der
Led Cube gebaut wird. Es wird gezeigt, was das Multiplexing Verfah-
ren ist und wozu es verwendet wird. Anschliessend wird darauf eingegangen, welches Board
für die Kommunikation mit dem Computer zum Einsatz kommt. Die Funktion des Schieberegisters M74HC595 wird erläutert und es wird aufgezeigt, wie ein einzelnes Schieberegister
geladen wird und wie es in die Schaltung eingebunden wird.
Ebenfalls im Hardware Teil wird veranschaulicht, wie man die benötigte Spannung und
Stromstärke für den Led Cube berechnet. Zur besseren Verständlichkeit wurden Ausschnitte
aus dem Schaltplan eingefügt und erklärt. Am Ende von diesem Teil wird auf die Einbindung
des Klatschmoduls und des MP3-Players eingegangen.
Im zweiten Teil wird zuerst anhand eines Bildes das Grundschema der Software aufgezeigt.
Danach wird ausführlich über die Implementierung des Snake Spiels berichtet. Es wird erklärt, wie das neue Fressen gesetzt wird und wie der Tastaturinput ausgewertet wird. Des
Weiteren wird gezeigt, wie abgefragt wird, ob es nach der nächsten Bewegung zu einer Kollision mit der Schlange selbst kommt und somit ein Game Over ausgegeben werden muss.
Anschliessend wird auf die verschiedenen Muster eingegangen. Dabei werden sechs ausgewählte Muster ausführlich erklärt und mit Codestücken belegt. Die Text Anzeige wird ebenfalls erklärt. Es wird veranschaulicht, wie das Klatschmodul funktioniert. Ganz zum Schluss
wird auf die Anzeige-Funktion eingegangen, welche benötigt wird, um etwas auf dem Led
Cube anzuzeigen.
6
4 Hardware
4.1 Led Cube Konstruktion
Der
Led Cube besteht aus 512 blauen Leds. Alle Leds sind oval und haben einen
Durchmesser von 3mm. Die Anode ist 19mm lang und die Kathode 17mm. Alle 512 Leds
wurden einzeln auf ihre Funktionalität getestet, um zu verhindern, dass später ein defektes
Led eingebaut wird.
Abbildung 1 Led Teststation
Mit einer Bohrmaschine wird in ein Stück Holz ein
Lochgitter gebohrt. Zwischen zwei
Löcher hat es einen Abstand von genau 10mm. Die Kathoden von allen Leds werden um 90°
angewinkelt und 64 Leds mit den Köpfen nach unten in die Löcher gesteckt. Alle Kathoden
zeigen in eine Richtung ausser die Kathoden der untersten Reihe. Die Kathoden überlappen
sich jeweils um etwa 1 mm. An dieser Stelle werden sie mit Lötzinn verlötet.
Abbildung 2 Holzplatte mit einer angefangenen Led Ebene
7
Sind alle 64 Leds miteinander verlötet, werden die letzten 3mm der Anoden mit einer Zange
um 45° angewinkelt, damit man sie später gut auf die nächste Ebene löten kann.
Abbildung 3 Fünf Led Ebenen
Dieser Prozess wird acht Mal wiederholt. Nun wird eine Ebene ins Holz gesteckt und die
zweite gleich ausgerichtet daraufgelegt. Der Abstand zwischen den horizontal aufeinander
gelegten Leds soll 10mm betragen, damit am Schluss ein symmetrischer Würfel entsteht. Um
dies zu vereinfachen, wurde aus Karton eine Abstandshilfe mit der richtigen Dicke gebastelt
und dazwischen gelegt.
Abbildung 4 Drei aufeinander gelötete Ebenen mit Abstandshilfe
8
Hier muss darauf geachtet werden, dass alle Anoden auf der gleichen Höhe zusammengelötet
werden. Mit Hilfe einer Zange können die Leds aus der oberen Ebene beim Löten an der
Anode etwas angehoben werden.
Sind alle acht Ebenen aufeinander gelötet, hat der Würfel ein Ausmass von
. Danach wird aus einer 4mm dicken Sperrholzplatte ein
grosses Quadrat ausgesägt. In die Mitte werden 64 Löcher mit 3mm Durchmesser im Abstand
von 10mm gebohrt. Ebenfalls werden auf einer Seite, nahe an der äussersten Lochreihe, acht
zusätzliche 1mm Löcher gebohrt. Diese werden benötigt, um von jeder Ebene einen Draht
nach unten zu führen. Anschliessend wird die Sperrholzplatte mit einem schwarzen Papier
überzogen. Alle Anoden der untersten Ebene wurden durch die 64 Löcher geführt und unter
der Platte um 90° angewinkelt, um ein herausfallen des Würfels zu verhindern.
Abbildung 5 512 fertig verlötete Leds
9
An jede Ebene wird etwas versetzt ein Draht angelötet. Die Drähte werden möglichst straff
nach unten durch die acht Löcher geführt. Dabei ist darauf zu achten, dass sich diese acht langen Drähte nirgends berühren.
Im untenstehenden Schaltplan sieht man, wie die Anoden und Kathoden verlötet wurden. Für
die ssieben Ebenen, welche nicht auf dem Schaltplan sind, gilt dasselbe. Der einzige Unterschied ist, dass die Kathoden der Ebenen jeweils an einen eigenen Transistor gehängt werden.
Abbildung 6 Schaltplan von einer der acht Ebenen
In der Abbildung unten sieht man den gesamten Led Cube von unten mit den Kabeln von den
Anoden-Stecken und den Ebenen, die zur Steuerungsplatine führen.
10
Abbildung 7 Led Cube von unten
4.2 Multiplexing Verfahren1
Da es kein vernünftiges Board mit 512 IO-Pins gibt, um jedes Led einzeln anzusteuern, muss
eine Lösung gefunden werden, mit welcher die Anzahl benötigter Pins verringert werden
kann. Hier kommt das sogenannte Multiplexing Verfahren zum Einsatz. Bei der Cube Konstruktion wurde bereits erklärt, dass alle Kathoden einer Ebene miteinander verlötet wurden.
So entstanden 64 vertikale Anoden-Stecken. Somit müssen nun nicht an alle Leds 2 separate
Kabel geführt werden, was auf Grund von Platzmangel sowieso unmöglich wäre. Die acht
Drähte von den verschiedenen Ebenen werden alle über einen eigenen Transistor zum Ground
geführt. Die Anzahl benötigter IO-Pins wurde von 512 auf 72 verringert.
Das eigentliche Multiplex Verfahren besteht darin, dass nie alle Ebenen gleichzeitig leuchten
sondern immer nur eine. Die Transistoren der 8 Ebenen werden ganz schnell hintereinander
geöffnet und wieder geschlossen. Geschieht dies mit einer genug hohen Frequenz, kann unser
Auge das Blinken nicht mehr als Blinken wahrnehmen. Das Auge nimmt dann nur noch ein
Leuchten wahr.
Trotz des Multiplexings kann immer noch jedes Led einzeln angesteuert werden. Der Pin,
welcher mit dem Anoden-Stecken, auf welchem das betroffene Led liegt, verbunden ist, wird
1
http://de.wikipedia.org/wiki/Multiplexverfahren, Abruf: 29.8.2012
11
auf High gesetzt. Ebenfalls wird der Pin, der den Transistor der richtigen Ebene steuert, wird
auf High gesetzt.
4.3 Transistoren
Wir verwenden 8 BD139 NPN-Transistoren, um die Ebenen anzusteuern. Alle 64 Kathoden
einer Ebene sind parallel an den Kollector eines Transistors gelötet. So erhält man acht Transistoren, die den Stromkreis einer Ebene öffnen oder schliessen können. Die Emitter sind miteinander verbunden und zu einem gemeinsamen Ground geleitet. Wichtig ist, dass die Transistoren eine Stromstärke von 1.5A vertragen.
4.4 Steuerung
4.4.1 Arduino Board Mega 25602
Um vom Computer aus mit dem Led Cube zu kommunizieren, benötigt man einen Mikroprozessor. Für diesen Led Cube wurde das Bastlerboard Arduino Mega 2560 benutzt. Dieses
Board ist mit 52 digitalen IO-Pins und einigen Input-Pins ausgerüstet. Ausserdem können
einige IO-Pins als serielle Kommunikationskanäle genutzt werden. Über diese Kommunikationskanäle kann das Arduino Board live von einem Computer aus angesteuert werden.
4.4.2 Pin-Erweiterung
Wie im vorigen Kapitel erwähnt, benötigt das Grundgerüst des Led Cubes 8 digitale Ausgänge zum Ansteuern der Transistoren, welche die Ebenen aus- und einschalten. Zusätzliche
werden 64 digitale Ausgänge für die einzelnen vertikalen Verbindungen benötigt. Das Arduino Board Mega 2560 hat jedoch nur 52 Output-Pins, von denen noch zwei für die Kommuni-
2
http://arduino.cc/en/Main/arduinoBoardMega2560, Abruf: 3.1.2013
12
kation mit dem Computer benötigt werden. Um auf die benötigte Anzahl an Pins zu kommen,
werden acht Tri-State-Shift-Register vom Typ M74HC595 zur Hilfe genommen.
4.4.3 M74HC595 Tri-State-Shift-Register3
Das M74HC595 Tri-State-Shift-Register ist ein 8 Bit Schieberegister, welches alle Ausgänge
hoch- beziehungsweise niederohmig schalten kann (Tri-State). Angesteuert wird es über einen
seriellen Input (SER) und zwei Clocks (SCK und RCK). Zuerst werden alle Ausgänge auf
hochohmig gestellt, dabei muss RCK auf Low gesetzt werden, damit man beim Setzen der
neuen Bits die Bits nicht durchflackern sieht. Danach werden mit Hilfe der SCK Clock und
dem seriellen Input die Bits an die richtige Stelle geladen. Anschliessend wird der RCK Pin
wieder auf High gesetzt, um die gesetzten Bits anzuzeigen. Aus einem Ausgang sind somit
acht Ausgänge entstanden, welche ein bisschen verzögert sind, da die Bits zuerst in das
Schieberegister geladen werden müssen.
Hat man mehrere Schieberegister, so gibt es die Möglichkeit diese hintereinander zu schalten.
Das überlaufende Bit kann am Ausgang Q-Quer abgefangen und im nächsten Schieberegister
gespeichert werden. Ausserdem kann man bei allen seriell hintereinander geschalteten Schieberegistern die beiden Clocks (SCK und RCK) parallel schalten.
In dieser Steuerung wird mit acht M74HC595 gearbeitet. Die SCK und RCK werden jeweils
parallel in allen acht Schieberegister geführt, da die Bits bei allen Schieberegistern im gleichen Rhythmus eingelesen werden. So kann man Output-Pins auf dem Arduino Board sparen
und die Bits schneller in das Schieberegister laden. Wie genau die Bits in die Schieberegister
geladen werden, wird im Kapitel Anzeige()-Funktion erklärt.
3
Datasheet des M74HC595, http://www.produktinfo.conrad.com/datenblaetter/150000-174999/155762-da-01en-LOGIK_IC_M74HC595B1R_STM.pdf, Abruf: 3.1.2013
13
Abbildung 8 Schaltplan des M74HC595
4.4.4 Spannung
Ein Led hat einen Spannungsabfall von ca. 3.1 V und leuchtet bei 20 mA hell, ausserdem ist
dann die Lebensdauer maximal. Aufgrund dessen berechnet man den Wiederstand, der seriell
zwischen dem Ausgang des M74HC595 und den vertikalen Verbindungen im Led Cube geschaltet werden muss. Mithilfe des Ohm’schen Gesetzes rechnet man
. In der
Praxis werden 100Ω Wiederstände verwendet, da diese leicht in grossen Mengen erhältlich
sind. So ist sicher gestellt, dass die Spannung nie über den gewünschten Wert kommt, um das
Led nicht zu beschädigen.
4.4.5 Stromstärke
Wie oben erwähnt, benötigen die blauen Leds 20mA, um stark zu leuchten. Um 64 Leds parallel zu schalten, werden also
benötigt. Da das Arduino Board Mega über
das USB Kabel vom Computer oder einem USB-Netzgerät aus versorgt wird, reicht die
Stromstärke nicht aus. Aus dem USB Anschluss des Computers kann man höchstens von fünf
LOAD’s Strom ziehen, die jeweils maximal 0.1A liefern, was zusammen nur 0.5A ergibt.4
Der Led Cube benötigt somit eine externe Stromquelle, welche 5V und ca. 1.28A liefert. Hier
kommt ein Egston BI07-050140-AdV Steckernetzteil, welches 5V Gleichspannung und 1.4A
liefert,
4
zum
http://www.mikrocontroller.net/topic/23513, Abruf: 28.8.2012
14
Einsatz. Die Stromstärke liegt leicht über der benötigten Stromstärke, was die Laufzeit der
Leds jedoch nicht zu stark beeinflussen sollte. Weiter bringt es den Vorteil, dass die Leds genügend hell leuchten.
4.4.6 Schaltplan zur Pin-Erweiterung
Abbildung 9 Schaltplan der M74HC595
15
In der Abbildung 8 sieht man den Schaltplan unserer Steuerung, die mit dem Arduino Mega
2560 verbunden ist und an den Ausgängen (S1-S64) mit den vertikalen Verbindungen des Led
Cubes verbunden ist (Siehe Abb. 6).
Abbildung 10 Platine von oben
Abbildung 11 Platine von unten
Auf den oben eingefügten Grafiken sieht man die Platine von oben und von unten, auf welcher die Tri-State-Shift-Register aufgelötet sind. Es befinden sich noch einige andere Module
auf der Platine, z.B. der Anschluss zum MP3-Player, die Verbindung zu dem Steuerungspanel
usw.
4.4.7 Klatschmodul, Steuerungspanel und MP3-Player
Abbildung 12 Steuerungspanel
Abbildung 13 Klatschmodul von Conrad
16
Als weiteres Element ist am Arduino Board ein Klatschmodul von Conrad angehängt. Dieses
Klatschmodul lässt nach jedem registrierten Klatscher (oder auch anderen lauten Lauten) ein
Relais zusammenziehen oder auseinandergehen. Dies wirkt wie ein Schalter, der an den Pin
51 des Arduino Boards angeschlossen ist. Um zu definieren, wann das Klatschmodul eingeschaltet ist, ist auf dem Steuerungspanel ein Kippschalter vorhanden, der beim Pin 53 ans
Arduino Board angeschlossen ist. Mit dessen Hilfe wird das Klatschmodul an- oder ausgeschaltet. Weiter hat es auf dem Steuerungspanel einen „Startschalter“, mit welchem der Benutzer das automatische Abspielen der Muster starten kann. Der „Startschalter“ ist mit dem
Pin 49 verbunden.
Über den Pin 45 wird ein MP3-Player angesteuert. Der Pin 45 ist mit einem Transistor (NPN
BC547) verbunden, welcher parallel zum Anschaltknopf und Steuerungsknopf des MP3Players geschaltet ist. Den MP3-Player kann man über den Transistor einerseits einschalten,
indem man Pin 45 100 Millisekunden auf High stellt. Weiter kann man die Musik an/abschalten, indem man den Pin 45 für 20 Millisekunden auf High stellt.
Abbildung 14 Schaltplan der Zusatzmodule
17
5 Software
Anschalten
Erste
Prüfung
Zweite
Prüfung
Anzeige
Connected
Snake
Anzeige des vom
PC aus gesendeten
Snake
Automatische
Anzeige der
Muster
Anzeige aller
Muster der Reihe
nach
Klatschmodul
Wechseln der
Muster bei jedem
Klatschen
Start
Disconnected
Abbildung 15 Software-Flowchart
Wie im obigem Diagramm dargestellt, wird sobald dem Arduino Board Strom zugeführt wird
(oder der reboot-Knopf gedrückt wird) geprüft, ob es mit einem Computer verbunden ist, respektive ob der Benutzer den Cube über den Computer steuern will oder nicht. Um diese Prüfung durchzuführen, stellt das Arduino Board über eine serielle Schnittstelle (mit 9600 Bit pro
Sekunde) eine Verbindung mit dem Computer her. Damit der Anwender genügend Zeit für
das Starten des Programmes hat, wartet das Arduino Board, bis der Anwender den StartKnopf auf dem Steuerpad des Cubes drückt. Wenn dieser Knopf nicht gedrückt wurde, dafür
aber ein ‚c‘ (für connected) vom Computer aus gesendet wurde, springt es in die ConnectedSchleife. Wird jedoch der ‚Start’ Knopf gedrückt, geht es in die Disconnected-Schlaufe.
Ist das Programm in der Connected-Schlaufe, wird weiter geprüft, ob der Anwender Snake
spielen will oder ob er in die Muster-Schlaufe gehen will. Befindet sich das Programm jedoch
in der Disconnected-Schlaufe, wird geprüft ob der Anwender den Cube über das Klatschodul
steuern will oder ob er einfach alle Muster sehen will, ohne Einfluss darauf zu nehmen.
Will man eine Schlaufe zurück kommen, (in der Abbildung 15 entspricht dies einem Schritt
nach links), dann sendet der Computer über die serielle Schnittstelle ein ‚b‘ für back. Im
Klatschmodus prüft das Arduino Board regelmässig den Kippschalter, mit welchem der
18
Klatschmodus ein- und ausgeschaltet wird. Ist dieser auf aus, springt es aus der aktuellen
Schlaufe.
5.1 Snake
Hat sich der Anwender für das Spielen des 3D Spiels Snake entschieden, so übernimmt das
Arduino Board nur noch die Aufgabe, dass vom Computer berechnete 3D Bild anzuzeigen.
Das Spiel selbst wird auf dem Computer berechnet.
5.1.1 Snake Initialisierung
Nachdem das Computerprogramm dem Arduino Board erfolgreich mitgeteilt hat, dass der
Anwender Snake spielen möchte, initialisiert es einen
grossen Char Array. Dieser
Array steht für die 512 Leds und wird Feldarray genannt. Jeder Char im Array wird zuerst auf
‚f‘ für frei gesetzt. Danach wird der Punkt mit den Koordinaten [0][0][0] auf ‚s‘ gesetzt, um
zu definieren, wo sich die Schlange am Anfang befindet. Weiter werden drei Variablen vom
Typ Queue initialisiert, welche für die x-,y- und z-Koordinaten der Schlangenteile stehen. Am
Typ Queue können Zahlen hinten angehängt werden. Weiter kann man das vorderste Element
auslesen und/oder löschen.
5.1.2 While Schlaufe
Wenn alle Elemente initialisiert sind, werden solange die folgenden Aktionen ausgeführt, bis
der Spieler Game Over ist oder das Programm beendet wurde.
Fressen setzten
Hat die Schlange im letzten Zug das Fressen gefressen oder wurde noch gar kein Fressen gesetzt, wie es am Anfang des Spieles der Fall ist, werden drei Zufallskoordinaten erstellt. Anschliessend schaut das Programm, ob das Feld mit den besagten Koordinaten frei ist. Ist es
19
frei, so setzt es das Fressen auf diesem Feld. Ist es hingegen besetzt, erstellt es so lange neue
Zufallskoordinaten, bis sie frei sind und das Fressen gesetzt werden kann.
Steuerung der Schlange
Die ganze Zeit über wird per SDL die Tastatur abgefragt. Hat das Programm entschieden,
welche Taste zuletzt gedrückt wurde, prüft es, ob die gedrückte Taste nicht in die Gegenrichtung der aktuellen Richtung zeigt. Falls dies nicht der Fall ist, wird der Input entgegengenommen. Das Programm speichert die Koordinaten, bei denen der Schlangenkopf wäre, wenn
es die Schlange in die vom Benutzer vorgeschlagene Richtung bewegen würde.
Prüfung der Zukunftskoordinaten
Zuerst wird geprüft, ob die Zukunftskoordinaten noch im Spielfeld liegen. Ist dem nicht so,
werden sie so übertragen, dass die Schlange am anderen Ende des Spielfeldes wieder ins Feld
hineinkommt.
Danach wird geprüft, ob sich auf den Zukunftskoordinaten das Fressen befindet. Falls ja, wird
die Punktzahl um eins erhöht. Ausserdem merkt sich das Programm, dass es wieder Fressen
setzen muss. Weiter merkt es sich, dass im aktuellen Durchgang ein Punkt gemacht wurde.
Wurde im aktuellen Durchgang kein Punkt erzielt, wird das letzte Element der Schlange gelöscht. Dies geschieht mit Hilfe der bereits initialisierten Queue. Das älteste Element, dass in
die Queue gesetzt wurde, wird abgerufen und gelöscht. Weiter aktualisiert das Programm den
Feldarray.
Als letzter Schritt wird geprüft, ob an den Zukunftskoordinaten noch keine Schlange ist. Falls
das Zukunftsfeld bereits von einem Schlangenteil belegt wird, hat der Benutzer die Schlange
in ihren eigenen Schwanz gesteuert und somit verloren. Ist das Zukunftsfeld frei, setzt man
den Char im Feldarray auf ‚s‘ für Schlange und speichert die Koordinaten in der Queue.
Anzeige auf dem Bildschirm
Ist der Spieler im aktuellen Zug nicht Game Over gegangen, wird die Punktanzahl mit Hilfe
von SDL auf dem Bildschirm ausgegeben.
20
Anzeige auf dem Led Cube
Bei einem Zug werden nur die Änderungen im gesamten Feld ans Arduino Board übermittelt.
Ein Versuch zeigte, dass es zu lange dauert, dem Arduino Board bei jedem Zug das gesamte
Spielfeld zu schicken. Das Computerprogramm merkt sich während des gesamten Zuges, was
sich am Feldarray verändert hat und speichert die Koordinaten der veränderten Punkte. Danach werden die Anzahl Veränderungen, die Koordinaten der veränderten Punkte und die
Koordinaten des Fressens über den seriellen Kommunikationskanal ans Arduino Board gesendet. Die Datenmenge konnte so um einiges vermindert werden, da pro Zug maximal zwei
Veränderungen gesendet werden müssen.
5.1.3 Arduino Board
Das Arduino Board empfängt zuerst die Anzahl der Veränderungen und danach die Koordinaten der veränderten Felder und stellt alle Boolean an den empfangenen Koordinaten um. Zum
Schluss empfängt es die Koordinaten des Feldes, auf dem sich das Fressen befindet.
Nach dem Empfangen der Daten und dem Aktualisieren des anzuzeigenden Arrays geht es in
eine While-Schlaufe. Hier bleibt es, bis der Computer wieder etwas sendet. In dieser Schlaufe
wird dann die Anzeige()-Funktion aufgerufen, welche den aktuellen Array auf dem Cube anzeigt und weiter unten erläutert wird. Danach wird das Feld im aktuellen Array gewechselt, in
dem sich das Fressen befindet und das Programm springt wieder an den Anfang der Schlaufe.
Ob vom Computer etwas gesendet wurde, testet es mit der Funktion Serial.available(). Serial.available() gibt True zurück, falls etwas im Buffer ist. Ist nichts im Buffer, gibt sie False
zurück. Der Buffer des Arduino Boards kann 64 Bytes speichern.5
5
http://www.arduino.cc, Abruf: 31.12.2012
21
5.2 Muster
Ausser dem Snake Spiel sind auf dem Arduino Board diverse Muster programmiert. Der User
kann diese entweder einzeln über den Computer aufrufen oder er drückt den Start Knopf auf
dem Bedienungspanel. Die Muster werden dann in einer gespeicherten Reihenfolge angezeigt.
Um die Arbeit nicht zu überladen, werden nur einige interessante Funktionen erläutert. Alle
Originalfunktionen können im Anhang der Arbeit im Source Code für das Arduino Board
angesehen werden.
5.2.1 Glitzern
Wird die Funktion Glitzern aufgerufen, werden zuerst alle
Leds abgeschaltet. Anschliessend werden 500 Mal zwei
3D-Koordinaten zufällig bestimmt und die dazugehörigen
Leds angeschaltet, falls sie noch nicht an sind. Zwischen
jedem Anschalten wird der aktuelle Stand kurz angezeigt.
Danach werden erneut 500 Mal zwei 3D-Koordinaten erzeugt und die dazugehörigen Leds abgeschaltet, falls sie
überhaupt an waren. Der gesamte Vorgang wird zwei Mal
Abbildung 16 Glitzern
wiederholt.
5.2.2 Regen
Bei der Regen-Funktion sollen zufällig ‚Tropfen‘ von
oben durch den Led Cube fallen. Um dies zu verwirklichen, wird ein Loop 200 Mal durchlaufen. In diesem
Loop werden zuerst zwei neue Tropfen bestimmt. Dies
geschieht mit Hilfe folgender Codezeile:
Abbildung 17 Regen
22
ledarray[aktuell_led_array][random(0,8)][random(0,8)][7]=HIGH;
In der obersten Ebene des aktuellen Ledarrays wird ein Led auf High gesetzt, dessen x und y
Koordinaten zufällig gewählt werden. Dies geschieht zweimal.
Danach wird der aktuelle Ledarray der Anzeige()-Funktion übergeben. Im nächster Schritt
werden alle Leds eine Ebene nach unten versetzt, indem das darüber liegende Led angesehen
wird und dessen Status kopiert wird:
for (int i=0;i<8;i++)
{
for (int ii=0;ii<8;ii++)
{
for (int iii=0;iii<7;iii++)
{
ledarray[aktuell_led_array][i][ii][iii]=ledarray[aktuell_led_array][i][ii][iii+1];
ledarray[aktuell_led_array][i][ii][iii+1]=LOW;
}
}
}
iii geht nur bis sechs, da die Leds der obersten Ebene bereits gesetzt sind. Die oberste Ebene
muss anders gesetzt werden, da man ansonsten auf eine nicht existierende Ebene zugreifen
würde und es zu einer Speicherübergreifung käme. Danach geht die Funktion wieder an den
Anfang des Loops.
23
5.2.3 Explosion
Abbildung 18 Verlauf der Explosion
Die Explosions-Funktion zeigt acht Mal eine hohle Kugel an einem zufällig bestimmten Mittelpunkt an. Der Aussen- und Innenradius dieser Kugel vergrössert sich jeweils.
Zuerst wird der Mittelpunkt des Kreises mit Hilfe von drei Zufallszahlen von zwei bis sechs
zufällig bestimmt:
x=random(2,6); y=random(2,6); z=random(2,6);
Danach wird jedes durchgegangen und der Abstand zum Mittelpunkt des Kreises ausgerechnet: √(
)
(
)
(
)
, wobei a, b und c für die Koordinaten des
Punktes stehen. Ist der Abstand kleiner als der Aussenradius, wird das besagte Led auf High
gesetzt. Ist er jedoch auch noch kleiner als der Innenradius, wird das Led auf Low gesetzt.
Die beiden Radien werden nun schnell erhöht. Zwischen jeder Erhöhung wird die Anzeige()Funktion aufgerufen.
24
5.2.4 Zufallswandern
Abbildung 19 Verlauf des Zufallswandern
Bei der Zufallswandern-Funktion wird zuerst die unterste Ebene angeschaltet. Diese wird
einige Millisekunden angezeigt. Danach ‚läuft‘ jedes Led zufällig weit nach oben. Die Idee
der Funktion ist, dass die Leds, sobald sie ihren Platz erreicht haben, stehen bleiben.
Um dies auszuführen, erstellt die Funktion einen
Array, in dem sie die Höhe der 64 Leds
speichert. Diese ist am Anfang immer null. Weiter wird ein
Boolean Array erstellt, in
dem gespeichert wird, ob das Led schon mal angehalten hat. Alle Elemente des Arrays werden am Anfang ebenfalls auf False gesetzt, da alle noch nie angehalten haben.
Nun wird für alle senkrecht übereinander liegenden Leds geprüft, ob ihr Led noch nie angehalten hat, ob es noch nicht oben angekommen ist und ob es laufen darf. Dies wird über eine
Zufallszahl entschieden. Die Chance weiterlaufen zu dürfen, beträgt pro Test 66.6%, damit
nicht die Hälfte schon ganz unten nicht mehr weiter kommt. Trifft eine der Bedingungen nicht
zu, wird nur gespeichert, dass das Led dieser Spalte nicht mehr laufen darf. Treffen alle drei
Bedingungen zu, wird zuerst die neue Höhe des Leds gespeichert. Weiter wird das Led um
eins nach oben verschoben und der alte Platz auf Low gesetzt. Der ganze Vorgang wird sieben Mal wiederholt. Hätte ein Led also jedes Mal „Glück“, ist es am Schluss schon oben angekommen.
Der aktuelle Stand wird nun einige Sekunden angezeigt. Danach ‚laufen‘ alle Leds, die noch
nicht oben angekommen sind auch noch Schritt für Schritt nach oben. Dies geschieht auf die
gleiche Weise wie oben beschrieben, mit dem Unterschied, dass die Leds auch laufen dürfen
wenn sie einmal angehalten haben und sie immer laufen dürfen, nicht nur mit einer 66.6%
Chance. Sind alle oben angekommen, ist die Funktion zu Ende.
25
5.2.5 Sinuswelle vom Mittelpunkt
Bei dieser Funktion soll am Mittelpunkt des Cubes eine
Welle entstehen. Dies wird verwirklicht, indem man pro
Säule ein Led anschaltet, dessen Höhe durch eine Sinusfunktion bestimmt wird.
Konkret erzeugt die Funktion einen Loop. Im Loop wird
eine Variable time bei jedem Durchgang um 0.5 erhöht.
Weiter wird zuerst der ganze Array auf Low gesetzt. Da-
Abbildung 20 Sinuswelle
nach wird jede Led-Säule durchgegangen und zuerst der
Abstand der Säule zum Mittelpunkt berechnet. Um eine ganze Periode auf dem Cube abzubilden, muss der Abstand zwischen - und
liegen, da 360° im Bogenmass
Die Sinusfunktion wird im Bogemass berechnet und eine Periode beträgt
√(
)
(
entsprechen.
.
)
Nun wird aus dem Abstand die Höhe des Leds berechnet. Um am Ende eine Amplitude von
vier und eine Periode von acht zu erhalten, wird der Sinus des Abstandes mit der time addiert
und danach mit acht multipliziert. Dann kann die Höhe Werte von -8 bis 8 erreichen. Weiter
wird eins subtrahiert, damit die Höhe nur bis sieben geht. Zum Ganzen wird noch acht addiert. Nun liegt der Abstand zwischen -1 und 15. Um die z-Koordinaten zu bekommen, teilt
man nun das Ganze noch durch vier. So liegt die Höhe schlussendlich zwischen -0.25 und 7.5.
Wandelt man dies nun in einen Integer Wert um, liegt die Höhe zwischen 0 und 7. So wird für
jede Säule ein Led mit den Koordinaten [x][y][Höhe] auf High gesetzt.
(
)
Vor jeder Erhöhung von time wird der aktuelle Array der Anzeige()-Funktion (im Code displedarray) übergeben. Zur Verdeutlichung noch der Source Code:
void sinmitte()
{
for (float time=0;time<3.141*50;time+=0.5)
{
set_ledarray_low_or_high(LOW);
26
for (float i=0;i<8;i++)
{
for (float ii=0;ii<8;ii++)
{
ledarray[aktuell_led_array][(int)i][(int)ii]
[(((int)((sin(time+sqrt((4-i)/4*(4-i)/4+(4-ii)/4*(4-ii)/4)*3.141/1.2))*81))+8)/2]=HIGH;
}
}
displedarray(5);
}
}
5.2.6 Viereck
Bei der Viereck-Funktion sollen am Schluss alle Leds
leuchten, die am Aussenrand des Cubes sind, wie in der
nebenstehenden Grafik gezeigt. Bei der Implementierung des Musters musste viel Code geschrieben werden,
da es schwierig war, das Ganze zu vereinfachen.
Zuerst geht man der x- und y-Achse nach und stellt ein
Led nach dem anderen an, wobei man zwischendurch
Abbildung 21 Viereck auf dem Cube
immer wieder die Anzeige()-Funktion aufruft.
for (int i=0;i<8;i++)
{
ledarray[aktuell_led_array][i][0][0]=HIGH;
ledarray[aktuell_led_array][0][i][0]=HIGH;
displedarray(time);
}
Danach geht man von den letzten zwei angestellten Leds wieder den Kanten entlang nach
oben zum Punkt [7][7][0].
for (int i=0;i<8;i++)
{
ledarray[aktuell_led_array][7][i][0]=HIGH;
ledarray[aktuell_led_array][i][7][0]=HIGH;
ledarray[aktuell_led_array][7][0][i]=HIGH;
ledarray[aktuell_led_array][0][7][i]=HIGH;
displedarray(time);
}
27
Von den drei als letztes angeschalteten Leds geht man nun zum Punkt [7][7][7] und von den
Punkten [7][0][7] und [0][7][7] geht man zum Punkt [0][7][7].
for (int i=0;i<8;i++)
{
ledarray[aktuell_led_array][7][7][i]=HIGH;
ledarray[aktuell_led_array][7][i][7]=HIGH;
ledarray[aktuell_led_array][7-i][0][7]=HIGH;
ledarray[aktuell_led_array][i][7][7]=HIGH;
ledarray[aktuell_led_array][0][7-i][7]=HIGH;
displedarray(time);
}
Alle Kanten mit Ausnahme der Kante von [0][0][7] zu [0][0][0] sind nun gemacht, also wird
diese von [0][0][7] her auch noch auf High gesetzt.
for (int i=0;i<8;i++)
{
ledarray[aktuell_led_array][0][0][7-i]=HIGH;
displedarray(time);
}
5.3 Text anzeigen
Um generell Text auf dem Led Cube anzuzeigen, wird
für jeden Char des anzuzeigenden Strings die Buchstabendispl Funktion aufgerufen. Für jeden Char gibt es
einen
Array, der besagt, wie der Buchstabe in 2D
aussieht. Die Buchstabendispl Funktion lädt nun die 2D
Matrix (x und y) des Chars in eine
Matrix und
verschiebt die 2D Matrix in z-Richtung. Zwischen jedem Verschieben ruft sie die Anzeige()-Funktion auf.
Dies gibt dem Zuschauer das Gefühl, dass sich jeder
Buchstabe auf ihn zubewegt.
Diese Funktion wird an einigen Stellen aufgerufen:
28
Abbildung 22 Buchstabe 'e' auf dem Cube

Wenn man beim Snake Game Over geht, schreibt dies der Led Cube und zeigt die erreichte Punktzahl an.

Beim Start der automatischen Muster-Anzeige und beim Ende.
5.4 Klatschmodul
Ist der Kippschalter auf dem Steuerungspanel des Cubes auf On, dann befindet sich der User
in der Klatschmodulschlaufe. In dieser Schlaufe bleibt er solange, bis der Schalter wieder auf
Off gesetzt wird.
Beim Betreten der Klatschmodulschlaufe wird zuerst der aktuelle und der alte Klatschstand
mit dem aktuellen Stand (Low oder High) am Eingang aktualisiert. Danach wartet das Programm, bis das Klatschmodul seinen Zustand ändert.
Stellt das Arduino Board jedoch eine Änderung beim Klatschmodul fest, lässt es eine Ebene
in eine beliebige Richtung durch den Led Cube fahren.
Wird der Schalter wieder zurückgestellt, geht das Programm automatisch wieder in die Startschlaufe, in der es auf den connected respektive disconnected Befehl wartet.
5.5 Anzeige()-Funktion
Dies ist die wichtigste und meistbenötigte Funktion auf dem Arduino Board. Wie in den obigen Kapiteln häufig erwähnt, wird die Anzeige()-Funktion benötigt, um den von diversen
Funktionen erstellten Led Array auf dem Led Cube anzuzeigen. Der Led Array hat eine Größe
von
, was der Anzahl Leds des Cubes entspricht. Gespeichert sind in ihm pro Led ein
True oder ein False. Um den Array auf dem Led Cube darzustellen, blinkt immer nur eine
Ebene des Cubes (siehe 4.2 Multiplexing Verfahren). Jedoch blinken alle so schnell, dass es
das menschliche Auge nicht sieht. Zuerst schaltet man also die alte Ebene aus, indem man den
Pin des Arduino Boards, der mit dem Transistor der Ebene verbunden ist, auf Low schaltet.
Danach schaltet man den RCK Pin auf Low, damit alle Tri-State-Shift-Register Ausgänge
hochohmig sind.
29
Um nun die einzelne Ebene darzustellen, werden die M74HC595 Shift-Register der Reihe
nach geladen, indem man die SerialClock, welche zu allen Schieberegister parallel führt, zuerst Low setzt. Danach schaut man im Ledarray nach, ob das aktuelle Led leuchten soll oder
nicht, und stellt dann den entsprechenden seriellen Eingang der acht Schieberegister auf High
respektive Low. Hat man die ersten 8 Bits in die 8 verschiedenen Schieberegister geladen,
wird die SerialClock wieder High gesetzt. Der ganze Vorgang wird acht Mal wiederholt, bis
bei allen acht Schieberegister je acht Bits gesetzt sind. Dies entspricht exakt den 64 Pins, die
pro Ebene benötigt werden.
Danach schaltet man zuerst den RCK Pin auf High, damit alle Tri-State-Shift-Register Ausgänge wieder niederohmig sind. Weiter wird der Transistoren-Pin der neuen Ebene auf High
gesetzt, um den Stromkreislauf bei der neuen Ebene zu schließen
Der ganze Vorgang wird je nachdem wie lange man den aktuellen Ledarray sehen möchte
wiederholt. Die Anzahl Wiederholungen wird der Funktion als Argument mitgegeben.
Beim Testen leuchteten die Leds nur sehr schwach, da sie nur zwischen jedem 672. digitalWrite() Befehl auf High gesetzt wurden, was bedeutet dass sie nur 0.148% der Zeit am
Leuchten waren. Um dies zu verhindern, wird immer wenn eine Ebene am Leuchten ist ein
Delay von einer Millisekunde gesetzt. Dies bedeutet, dass die Blinkfrequenz der Leds vermindert wird, da alle acht Ebenen viel länger leuchten. Die Frequenz ist jedoch immer noch
hoch genug, so dass das Auge kein Blinken der Leds wahrnimmt. Der Vorteil des Delays ist,
dass die prozentuale Leuchtdauer der Leds nun drastisch erhöht wurde. Sie leuchten neu zwischen jedem 672. digitalWrite() Befehl und zwischen 7 Millisekunden, was wie oben erwähnt
zwar weniger häufig ist, dafür leuchten sie eine Millisekunde lange. Da die Dauer des Leuchtens nun im Verhältnis zum abgeschalteten Zustand grösser ist, leuchten die Leds heller.
Zur Verdeutlichung der Code der gesamten Funktion:
void displedarray(long long int time)
{
for (long long int faktor=0;faktor<time;faktor++)
{
for (int aktuelleebene=0;aktuelleebene<8;aktuelleebene++)
{
//alte ebene ausschalten (mithilfe des Transistors)
//zuerst aber noch checken ob die alte ebene nicht aktuelle-1, sondern die
//höchste ist =>7(respektive ebene 8)
if (aktuelleebene==0)
{digitalWrite(ebenentransistoren[7],LOW);}
30
else
{digitalWrite(ebenentransistoren[aktuelleebene-1],LOW);}
//zur sicherheit aber eigentlich unnötig den RCK pin LOW setzten
digitalWrite(RCK, LOW);
///alle acht shiftregister laden (M74HC595, 8 Bit)
for(int i = 8 - 1; i >= 0; i--){
//serielle clock low stellen
digitalWrite(SCK_, LOW);
//bei allen acht registern die 8 bits paralell einlesen (zuerst bei allen das
//erste, danach das zweite....)
for (int ii=0;ii<8;ii++)
{
int val = ledarray[aktuell_led_array][i][ii][aktuelleebene];
digitalWrite(serialoutputpins[ii], val);
}
digitalWrite(SCK_, HIGH);
}
//tri state wieder "aufheben" => durchgänge öffnen
digitalWrite(RCK, HIGH);
//aktuelle ebene öffnen, um den strokreislauf zu schliessen
digitalWrite(ebenentransistoren[aktuelleebene],HIGH);
delay(1);//eine Millisekunde warten, da die Led s sonst nur sehr dunkel leuchten
}
}
}
31
6 Schlusswort
Mit Hilfe des Led Cubes wurde gezeigt, dass es möglich ist mit einem Arduino Board, welches nur 52 digitale Output-Pins zur Verfügung stellt, einen funktionsfähigen Led Cube zu
bauen. Die zur Hilfe genommenen Tri-State-Shift-Register ermöglichten im Zusammenspiel
mit dem Multiplexverfahren eine massive Expansion der Output-Pins. So können die 512
Leds im Cube einzeln angesteuert werden, ohne dass zu jedem Led zwei einzelne Kabel geführt werden müssen. Dies ist insbesondere wichtig, da man möglichst gut durch den Cube
sehen sollte, um den 3D Effekt nicht zu verlieren.
Der
Led Cube kann diverse Muster anzeigen, z.B. eine Sinuskurve, explodierende
Kugeln, Regen, Würfel und noch viele mehr. Besonders ist, dass alles Real-Time vom Arduino Board aus berechnet wird und man den Cube auch ohne Verbindung zu einem Computer
laufen lassen kann. Der Gedanke vom 3D Bildschirm konnte verwirklicht werden. Als Benutzer sieht man gut durch den Led Cube und nimmt somit ein echtes 3D Bild wahr. Bei einem
nächsten Led Cube könnten die Abstände zwischen den Leds länger gewählt werden, damit
der Zuschauer noch besser durch den gesamten Cube sieht und der Cube ein bisschen grösser
werden würde.
Ein weiteres Tool ist das Klatschmodul, welches dem Arduino Board mitteilt, ob der Benutzer
geklatscht oder sonst einen lauten Laut gemacht hat. So kann der Led Cube auch auf Geräusche reagieren, was einen besonderen Reiz bietet. Der Benutzer kann so nicht nur dem Spektakel zusehen, sondern auch noch aktiv darauf Einfluss nehmen.
Der Versuch das altbekannte Handyspiel Snake auf dem Led Cube in 3D darzustellen ist geglückt. Das 3D Snake ist spielbar. Der Spieler erkennt das Futter gut durch das Blinken und es
ist eine echte Herausforderung die Schlange im dreidimensionalen Raum zum Futter zu führen. Spass macht es umso mehr, da man am Schluss des Games seine erreichte Punktzahl auf
dem Led Cube sieht.
32
7 Literaturverzeichnis
7.1 Literatur

Basian, Peter: Fachkunde Elektrotechnik. Europa Lehrmittel, Zürich 2012

Willemer, Arnold: Einstieg in C++. Galileo Computing, 4. Auflage
7.2 Webseiten

http://arduino.cc/en/Main/arduinoBoardMega2560, Abruf: 3.1.2013

http://arduino.cc/playground/Interfacing/CPPWindows, Abruf: 15.8.2012

http://de.wikipedia.org/wiki/Multiplexverfahren, Abruf: 29.8.2012

http://lazyfoo.net/SDL_tutorials/lesson11/index.php, Abruf: 22.8.2012

http://www.mikrocontroller.net, Abruf: 10.8.2012

http://www.mikrocontroller.net/topic/23513, Abruf: 28.8.2012

http://www.produktinfo.conrad.com/datenblaetter/150000-174999/155762-da-01-enLOGIK_IC_M74HC595B1R_STM.pdf, Abruf: 3.1.2013
33
8 Bildverzeichnis
Abbildung 1 Led Teststation
Nicole Trachsler & Lukas Roth, 2012
Abbildung 2 Holzplatte mit einer angefangenen Led Ebene
Nicole Trachsler & Lukas Roth, 2012
Abbildung 3 Fünf Led Ebenen
Nicole Trachsler & Lukas Roth, 2012
Abbildung 4 Drei aufeinander gelötete Ebenen mit Abstandshilfe
Nicole Trachsler & Lukas Roth, 2012
Abbildung 5 512 fertig verlötete Leds
Nicole Trachsler & Lukas Roth, 2012
Abbildung 6 Schaltplan von einer der acht Ebenen
Nicole Trachsler & Lukas Roth, 2012
Abbildung 7 Led Cube von unten
Nicole Trachsler & Lukas Roth, 2012
Abbildung 8 Schaltplan des M74HC595
http://www.produktinfo.conrad.com/datenblaetter/150000-174999/155762-da-01-enLOGIK_IC_M74HC595B1R_STM.pdf, Abruf: 3.1.2013
Abbildung 9 Schaltplan der M74HC595
Nicole Trachsler & Lukas Roth, 2012
Abbildung 10 Platine von oben
Nicole Trachsler & Lukas Roth, 2012
Abbildung 11 Platine von unten
Nicole Trachsler & Lukas Roth, 2012
Abbildung 12 Steuerungspanel
Nicole Trachsler & Lukas Roth, 2012
34
Abbildung 13 Klatschmodul von Conrad
Nicole Trachsler & Lukas Roth, 2012
Abbildung 14 Schaltplan der Zusatzmodule
Nicole Trachsler & Lukas Roth, 2012
Abbildung 15 Software-Flowchart
Nicole Trachsler & Lukas Roth, 2012
Abbildung 16 Glitzern
Nicole Trachsler & Lukas Roth, 2012
Abbildung 17 Regen
Nicole Trachsler & Lukas Roth, 2012
Abbildung 18 Verlauf der Explosion
Nicole Trachsler & Lukas Roth, 2012
Abbildung 19 Verlauf des Zufallswandern
Nicole Trachsler & Lukas Roth, 2012
Abbildung 20 Sinuswelle
Nicole Trachsler & Lukas Roth, 2012
Abbildung 21 Viereck auf dem Cube
Nicole Trachsler & Lukas Roth, 2012
Abbildung 22 Buchstabe 'e' auf dem Cube
Nicole Trachsler & Lukas Roth, 2012
35
9 Anhang
9.1 Code Blocks Projekt in separater Datei
9.2 Source Code für das Arduino Board in separater Datei
9.3 Video vom Led Cube: http://www.youtube.com/watch?v=Vz2NAAvF2iI
36
9.4 Selbständigkeitserklärung
Betreuungsperson: Dr. Adrien Cornaz
Co-Referent: Dr. Kai Köhler
Wir erklären hiermit, dass wir diese Arbeit

ohne unerlaubte fremde Hilfe angefertigt

keine anderen als die angegebenen Quellen benutzt und

in eigenen Worten formuliert haben.
Sämtliche Stellen, die wörtlich aus fremden Quellen entnommen oder mit eigenen Worten
wiedergegeben wurden, haben wir als solche gekennzeichnet und die Urheberschaft angegeben.
Name: Trachsler
Vorname: Nicole
Ort, Datum: …………………………..
Unterschrift: ……………………………..
Name:
Vorname: Lukas
Roth
Ort, Datum: …………………………..
Abt.: 4F
Abt.: 4F
Unterschrift: ……………………………..
37