Projekt 47a: LED-Tetris

Aus HSHL Mechatronik
Version vom 5. Februar 2016, 19:22 Uhr von Eugen Preger (Diskussion | Beiträge) (→‎Fazit)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen

Autoren: Rudi Sugandi, Eugen Preger
Betreuer: Prof. Schneider


Aufgabe

Tetris mit LED-Streifen und Arduino c‘t Make: 1/2015


Erwartungen an die Projektlösung

  • Lesen Sie den Artikel in c‘t hacks 1/2015 (S. 12ff)
  • Planen Sie den Aufbau
  • Beschaffen Sie die Bauteile
  • Realisierung des Aufbaus
  • Machen Sie ein spektakuläres Videos, welches die Funktion visualisiert.
  • Test und wiss. Dokumentation
  • Live Vorführung während der Abschlusspräsentation


Schwierigkeitsgrad

Anspruchsvoll (**)

Einleitung

Tetris Display

In diesem Projekt geht es darum, eine Retro-Spielstation mit einem LED-Display herzustellen und darauf eine spielbare Version des Klassikers „Tetris“ zu laden. Ein Artikel aus der Zeitschrift „c't MAKE (1/2015)“ diente uns dabei als Vorlage.

Planung

In der frühen Planungsphase erkundigt man sich nach früheren Projekten, die ähnliches gebaut haben. Auf der Videoplattform YouTube bestaunt man, wie andere Menschen das Tetris-Spiel mit LEDs realisiert haben. Dies ist die Grundlage für weitere Vorbereitungsarbeiten.

Vorbereitung


Vor der Materialbeschaffung prüft man zunächst, welche Möglichkeiten zur Verfügung stehen (finanziell und Werkzeuge), sowie welche Materialien verwendet werden sollen. Dann skizziert man den Aufbau oder fertigt eine technische Zeichnung an. Schließlich erstellt man eine Materialliste und bestellt bei einem Händler, der möglichst alles auf Lager hat, was man benötigt, um Versandkosten zu sparen.

Verwendete Materialien


  • RGB LED-Steifen WS2812B (60 LEDs/Meter): 3 Meter
  • Taster: 4 Stück
  • Steckernetzteil: 5V, 3A
  • Arduino NANO / UNO
  • MDF-Platten (300x200x8 mm): 3 Stück
  • Kippschalter: 250 V/AC 1,5A: 1 Stück
  • Widerstand 220 Ohm: 1 Stück
  • Widerstand 60 Ohm: 1 Stück
  • Europlatine Hartpapier: 2 Stück
  • Kabel: 0,5 / 0,75 mm²: 3 Meter
  • Sekundenkleber

optional:

  • Magnetischer Summer (für Tonwidergabe): 1 Stück
  • Potentiometer (Lautstärkeregelung): 1 Stück
  • Steckachse für Potentiometer: 1 Stück
  • Folie / Papier (zur Auskleidung des Gehäuses)

Verwendete Software

  • Arduino IDE 1.7.8 (Freeware)
  • Fritzing 0.9.2 (Freeware)

Durchführung

Im Folgenden wird der Aufbau der Spielstation beschrieben.

Display


LED-Streifen geklebt
Verkabelung Displayrückseite

Man schneidet die LED-Streifen in passende Längen zu. Für eine Bildschirmgröße von 10 x 15 Pixeln wie in unserem Fall empfiehlt es sich, 10 Streifen à 15 LEDs zuzuschneiden. Das Zuschneiden von 15 Streifen à 10 LEDs hat zur Folge, dass der Lötaufwand steigt. In beiden Varianten kommt es zu keinem Verschnitt bei den Streifen, da eine LED-Rolle à 1 Meter Länge aus 60 LEDs besteht. Wenn man den Zuschnitt erledigt hat, klebt man die zugeschnittenen selbstklebenden LED-Streifen auf eine der MDF-Platten, die später die Rückplatte der Spielstation wird. Beim Drankleben der Streifen ist der richtige Abstand der Streifen zu beachten. Die LEDs beim WS2812B haben einen Abstand von 16,67mm zueinander. Darum sollten auch die Streifen parallel und im gleichen Abstand geklebt werden, damit die spätere Bildschirmwiedergabe nicht verzerrt wirkt. Sind die LED-Streifen gleichmäßig auf der Rückplatte fixiert, bohrt man am Anfang und am Ende jedes Streifens je 2 Löcher à 2mm Durchmesser durch die Rückplatte. Die Löcher benötigt man für die Spannungsversorgung (5V) und die Datenleitung (DIN) auf einer Seite, sowie Masse (GND) und Datenleitung (DOUT) auf der anderen Seite. Die Leitungen werden an die Streifen gelötet und durch die Löcher zur Rückseite der Platte geführt. Die 10 Spannungsversorgungsleitungen auf der einen, sowie die 10 Masseleitungen auf der anderen Seite verbindet man je miteinander, um eine einzelne Leitung für die Spannungsversorgung und eine für die Masse zu haben. Die Datenleitungen werden dagegen vom DOUT eines Streifens zum DIN des nächsten Streifens bis zum letzten Streifen durchgeschliffen. Der DOUT Anschluss des letzten Streifens bleibt frei.

Blendwerk


Gebohrte Blende

Die zweite MDF-Platte wird später als Blendwerk für die LEDs dienen und wird auf die andere Platte draufgelegt. Doch vorher muss diese Platte bearbeitet werden. Dazu wird zunächst sorgfältig und präzise eine Matrix eingezeichnet, auf der man die Positionen aller Bohrlöcher für die LEDs sieht. Dann werden mit einem dünnen Bohrer alle 150 Löcher vorgebohrt und mit einem Bohrer à 10 mm Durchmesser die Löcher vergrößert. Bei den Bohrarbeiten ist auf hohe Präzision zu achten, damit alle Bohrlöcher den gleichen Abstand zueinander haben. Anschließend werden alle 150 Bohrlöcher mit einem Senker auf einen Durchmesser von 15 mm auf der Oberkante der Platte entgratet. Kleine Unterschiede in den Bohrlochabständen des vorangegangenen Arbeitsschrittes können durch das Senken ausgeglichen werden, sodass man dennoch einen gleichmäßigen sichtbaren Pixelabstand hat. Optional kann man jetzt auf einfachem herkömmlichen DinA4 Blatt oder einer nicht ganz transparenten Folie eine Lochmaske ausdrucken, die auf das Blendwerk gelegt werden kann. Der gedruckte schwarze Bereich um die Bohrlöcher maximiert den Kontrast, während der übrige weiße Teil möglichst viel Licht von den LEDs in Form von Kreisen à 15 mm durchlässt. Ohne Die Abdeckung des Blendwerkes mit Papier oder Ähnlichem sind später die einzelnen SMD-LEDs sichtbar und können für den Spieler als unangenehm blendend wirken.

Arduino Nano Pinbelegung


Auf eine Streifenrasterplatine wird der Arduino Nano gelötet, sowie die zusammengeführten Leitungen 5V und GND. Es ist darauf zu achten, dass auf der Rückseite der Platine unter dem Arduino Nano die Leiterbahnen unterbrochen werden müssen, damit die jeweils gegenüberliegenden Pins des Arduino nicht kurzgeschlossen sind. Die Unterbrechungen dreht man am Besten händisch mit einem 3 mm Metallbohrer. Die Pinbelegung des Arduino ist bis auf einige Stellen frei wählbar. Die 5V-Leitung der LEDs wird auf der Platine mit dem Pin 30 (VIN) des Arduinos verbunden. Auf selbigem Streifen der Platine wird eine weitere Leitung drangelötet, die über einen Kippschalter mit der 5V-Seite der Spannungsversorgung verbunden wird. Über eine Leitung von Pin 29 (GND) oder alternativ Pin 4 (GND) wird entsprechend die Masse der Spannungsversorgung verbunden. Der Kippschalter dient später zum Ein- und Ausschalten der Spielstation. Alternativ können beide Leitungen (5V LED-Leitung und Leitung zum Kippschalter) gemeinsam an Pin 27 (5V) angeschlossen werden. Diese Variante ist jedoch nicht zu empfehlen, da bei angeschlossenem Mini-USB Kabel und ausgeschaltetem Netzteil die Energieversorgung über das USB-Kabel erfolgt, während Pin 27 als 5V Versorgungsspannung vom Arduino für die LEDs fungiert. Da die Maximalbelastbarkeit des Arduinos durch die 150 LEDs um ein Mehrfaches überschritten wird, muss dieser Zustand vermieden werden, um den Arduino nicht zu beschädigen oder zu zerstören. Auf einer weiteren Streifenrasterplatine werden Drucktaster gelötet. Dabei ist auf eine ergonomische Platzierung der einzelnen Taster zu achten, um das spätere Spielerlebnis angenehmer zu gestalten. Benötigt werden mindestens 4 Taster für das Spiel Tetris. Die Links-, Rechts-, Runter- und Dreh-Taste. Optional kann ein weiterer Taster verwendet werden, um in beide Richtungen drehen zu können. Mithilfe von Drahtbrücken werden alle Taster-Ausgänge miteinander Verbunden und zusätzlich ein 60 Ohm Widerstand in Reihe gelötet. Wieder muss beachtet werden, dass entsprechende Stellen auf der Rückseite der Platine unterbrochen werden. An den 4 Eingängen der Taster, sowie an den zusammengeführten Ausgang hinter dem Widerstand werden an die Platine Leitungen drangelötet (insgesamt 5 Leitungen bei 4 Tastern). Da die Platine mit dem Arduino auf der Rückseite der Rückplatte montiert wird und die Platine mit den Tastern auf die Oberseite der Platte, werden weitere 5 Löcher à 2 mm Durchmesser gebohrt, um die 5 Leitungen auf die Rückseite zu führen. Dort werden sie an die Platine gelötet, um die Taster mit dem Arduino zu verbinden. Wir verbinden die Taster mit den Pins 11, 12, 13, 14 (Digitalports D08, D09, D10, D11), sowie die Leitung vom 60 Ohm Widerstand mit Pin Pin 04 (GND). Der Widerstand der Taster dient dazu, dass beim Drücken der Taster die Datenpins nicht kurzgeschlossen sind, obwohl der Arduino diesen Zustand kurzzeitig verkraftet. Die Pins 11 bis 14 sind willkürlich gewählt worden. Das Display wird über Pin 15 (Digitalport D12) angesteuert. Auch dieser Pin ist frei wählbar. Zum Schutz der LEDs wird zwischen dem Arduino unddem DIN des ersten LED-Streifens ein 220 Ohm Widerstand in Reihe gelötet. Ohne den Widerstand würde bei versehentlicher Unterbrechung der Masseleitung ein großer Strom durch die Datenleitung zurückfließen und die erste LED in der Reihe zerstören. Optional und für mehr Spielgenuss kann man einen magnetischen Summer an einen der freien Digitalpins löten, der das Tetris-Spiel durch Tonwiedergabe begleitet. Schließlich ist zuletzt darauf zu achten, dass die Platine mit dem Arduino so platziert ist, dass der Mini-USB-Anschluss für die spätere (Um-)Programmierung frei zugänglich ist.

Energieversorgung


Es genügt eine Spannungsversorgung, wie in der Stückliste angegeben, von 5V mit 3A, wenn man softwareseitig ausschließt, dass alle LEDs gleichzeitig mit 100%iger Leuchtkraft weiß leuchten. Da jede einzelne LED unter Vollast einen Strom von 60 mA (ca. 20 mA pro Farbe), summiert sich der Gesamtstrom bei 150 LEDs auf 9A, was das Netzteil beschädigen kann. Am besten stellt man die Helligkeit auf maximal 80% ein (LEDS.setBrightness(80)) und verwendet unterschiedliche Farben für die Spielsteine des Tetris, damit auch im Falle eines vollen Bildschirms ein Strom von 3A nicht wesentlich überschritten wird.

Software


Die Zeitschrift „c't MAKE“ (Ausgabe 1/2015) stellt uns den Arduino-Sketch für das Tetris-Spiel zu Verfügung. Der Sketch greift auf die Bibliothek „FastLED“ zu, die man ebenfalls herunterladen muss und in den Bibliotheksordner des „Arduino IDE“ einfügt. Beide Links findet man am Ende des Artikels. Den Sketch öffnet man mit besagter Software „Arduino IDE“. Der Programmcode ist in der Sprache C geschrieben. Man muss sich in den Sketch einarbeiten, um zu verstehen, wie sie funktioniert. So kann man etwa das Spiel an die Größe des LED-Bildschirms anpassen, sowie die verwendeten Pins, die Spielgeschwindigkeit, oder Form und Farbe der Tetris-Spielsteine ändern. Außerdem lassen sich Texte einblenden (zum Beispiel HSHL-Begrüßung und Highscore). Die dazugehörige Funktion findet man in dem Reiter ASCII-Zeichensatz, der automatisch neben dem Hauptsketch geöffnet wird. Der Highscore wird im EEPROM des Arduino gespeichert und bleibt somit auch nach dem Ausschalten erhalten. Für ein anderes Spielfeld, kann man in der Software unter field_wight und field_height die Pixel angeben.

Das Tetris-Spiel wird über die 4 Taster wie folgt gesteuert:


Nach dem Einschalten:

Steuerung Funktion
Drehen-Taster lange drücken Vorspann wird übersprungen

Während des Spiels:

Steuerung Funktion
Links-Taste Stein nach links bewegen
Rechts-Taste Stein nach rechts bewegen
Drehen-Taste Stein um 90° nach rechts drehen
Runter-Taste Stein schnell nach unten bewegen
Drehen und Runter gleichzeitig Spielpause
Runter-Taste bei Spielpause Spiel wird fortgesetzt
Alle 4 Tasten gleichzeitig Spiel wird sofort neugestartet

Nach dem Spiel:

Steuerung Funktion
Rechts-Taste Highscore wird angezeigt
Links-Taste Score des letzten Spiels wird wieder angezeigt
Runter-Taste Neues Spiel wird gestartet

Fazit

Neben Tetris lassen sich auch andere Spiele (zum Beispiel Snake) programmieren, die eine gleiche Anzahl an Bildschirmpixeln benötigen.


Links und Foren: http://www.heise.de/make/inhalt/2015/01/012/




→ zurück zum Hauptartikel: Fachpraktikum Elektrotechnik (WS 15/16)