Skip to content →

Spiele auf dem EV3

Für das Zaubertafelspiel kombinieren wir viele Programmiertechniken, die wir kennen gelernt haben. Mit den grossen Motoren als Eingabeknöpfe können wir auf dem EV3-Display Zeichnungen erstellen. Berührungs- und Farbsensor sind zusätzliche Eingabegeräte.

Schritt 1: Einfache Zeichnungen erstellen

Eine Zaubertafel zeichnet Linien, während wir die Knöpfe drehen. Der linke Knopf steuert die horizontale Position X und der rechte die Position Y.

Das Programm zeigt wiederholt einen kleinen Punkt (kleiner Kreis) auf dem Display an der Position X/Y an. Das Programm ermittelt diese Koordinaten anhand der Drehsensoren der grossen Motoren. Der weisse Zeiger (Motor B) steuert die X-Position. Der rote Zeiger (Motor C) die Y-Position. Während das Programm Punkte auf das Display zeichnet, können wir wie mit einem Stift zeichnen. Dazu müssen wir nur die Zeiger des SK3TCHBOTS drehen.

Für das erste Programm benötigen wir einen Anzeigeblock im Modus Formen->Kreis. Wir müssen aber zwei Anzeigeblöcke erstellen, um das Display zu löschen und um die Koordinaten zu berechnen, an denen der Punkt dargestellt werden soll.

Eigener Block: Clear

Der Anzeigeblock bietet keine Möglichkeit, das Display einfach zu löschen, ohne etwas neues anzuzeigen. Wir können dieses Verhalten jedoch simulieren, in dem wir einen einzelnen weissen Punkt anzeigen und den Bildschirm löschen.

Eigener Block: Coordinates

Wir erstellen einen eigenen Block. Dieser hat zwei numerische Ausgabewerte (X und Y), mit denen die Position der neuen Punkte gesteuert wird.

Der Drehsensor gibt die Anzahl der Motorumdrehungen seit Programmstart in Grad an. Wir könnten den Sensorwert von Motor B direkt auf die X-Koordinate übertragen. Dadurch würde sich aber der Stift zu schnell bewegen: Eine halbe Umdrehung des weissen Zeigers würde den Stift über das ganze Display bewegen, denn das Display ist in X-Richtung 178 Punkte breit.

Um exaktere Bewegungen machen zu können, teilen wir den Gradwert durch 3, so dass eine Drehung um 180 Grad den Stift nur über einen Drittel des Displays bewegt. Dem Ergebnis fügen wir 89 hinzu (die Hälfte von 178), damit der Punkt in der Mitte des Displays angezeigt wird, wenn der Gradwert beim Programmstart 0 ist.

Die Vorgehensweise bei der Y-Koordinate ist gleich, abgesehen davon, dass wir Motor C verwenden und zur Division 64 hinzu zählen (es gibt 128 Punkte in Y-Richtung). Da Motor C verkehrt herum eingebaut ist, erhalten wir einen negativen Gradwert, wenn wir ihn in Richtung des roten Pfeiles drehen. Der Stift bewegt sich also nach oben, was genau das Gegenteil der positiven Y-Richtung ist (senkrechter blauer Pfeil).

Das Basisprogramm fertig stellen

Aus den grundlegenden Blöcken stellen wir das Programm fertig und testen es, bevor wir den nächsten Schritt erweitern.

Schritt 2: Stiftsteuerung hinzufügen

Wir erweitern das grundlegende Zaubertafel-Programm mit mehr Funktionen.

  • Mit dem Berührungssensor unterbrechen wir das Zeichnen zeitweise.
  • Mit dem Farbsensor verwandeln wir den Stift in einen Radiergummi.
  • Mit der Mitte-Taste auf dem EV3 löschen wir das Display.
  • Mit den oben/unten-Tasten ändern wir die Stiftgrösse.

Um mögliche Fehler leichter zu finden, testen wir das Programm immer, wenn wir eine Funktion hinzu gefügt haben.

Den Stift bewegen, ohne zu zeichnen

Beim Zeichnen heben wir manchmal den Stift an, ohne zu zeichnen und führen den Stift zu einer neuen Position. Dafür passen wir das Programm an, damit es nur zeichnet, wenn der Berührungssensor losgelassen ist. Wenn der Berührungssensor gedrückt wird, passiert nichts. Der Falsch-Fall des Schalterblockes enthält keine Blöcke.

Den Stift in einen Radiergummi verwandeln

Als Nächstes fügen wir ein Radiergummi-Werkzeug hinzu, in dem wir das Programm weisse Punkte zeichnen lassen, wenn der Farbsensor ausgelöst wird. In dem wir weisse Punkte zeichnen, können wir Teile der Zeichnung löschen. Das kann hilfreich sein, wenn wir einen Fehler gezeichnet haben.

Wenn wir den Farbsensor mit einem Finger abdecken, wird die Stärke des reflektieren Lichts mit unter 10% gemessen. Das Vergleichsergebnis im Farbsensorblock wird wahr, so dass die Farbeinstellung im Anzeigeblock weiss wird. Wenn wir den Finger vom Sensor weg nehmen, wird die Ausgabe falsch und der Anzeigeblock zeichnet weiter schwarze Punkte auf das Display.

Den Bildschirm löschen

Um den Bildschirm zu löschen, wenn wir die Mitte-Taste drücken, fügen wir einen Schalterblock und einen Löschblock dazu. Wird keine EV3-Taste gedrückt, passiert nichts. Der Fall «keine Taste», der auch der Standard-Fall ist, enthält keine Blöcke.

Die Stiftstärke festlegen

Wir erweitern das Programm, um die Stiftstärke mit den Tasten «oben» und «unten» auf dem EV3-Stein einzustellen. Dazu verwenden wir eine Variable «Size» (Grösse), um den Wert der Einstellung «Radius» festzulegen. Dann fügen wir Blöcke hinzu, mit denen wir die Variable «Size» über die EV3-Tasten verändern können.

Wir beginnen mit einer Variable namens «Size» und fügen zwei Variablenblöcke in unser aktuelles Programm ein. Der erste Block initialisiert den Wert auf 1. Der zweite Block sendet den Wert von «Size» an die Radius-Einstellung des Anzeigeblocks. Der Radius ist daher so lange 1, wie der Wert der Variablen nicht verändert wird.

Wir fügen nun zwei Fälle (Register) in den Schalterblock ein: Einen Fall für die Taste «oben» und einen für die Taste «unten».

Wenn die Taste «oben» gedrückt wird, inkrementiert (+1) die Variable «Size». Da das Display recht klein ist, beschränken wir den maximalen Wert auf 25. Mit anderen Worten inkrementieren wir die Variable nur, wenn ihr aktueller Wert kleiner als 25 ist, was wir durch einen Vergleichsblock feststellen. Wenn der Wert von «Size» 25 ist und wir weiter inkrementieren, gibt der Vergleichsblock falsch aus, wir hören einen Piepton und der Wert wird nicht verändert. Schliesslich lässt ein Warteblock das Programm warten, bis die «oben»-Taste losgelassen wird. Wenn wir nicht darauf warten, wiederholt das Programm die Schleife weiter und inkrementiert die Variable bei jedem Durchlauf.

Die Variable soll dekrementieren (-1), wenn wir die «unten»-Taste drücken, aber nur solange «Size» grösser als 1 ist. Sonst würden wir Kreise mit negativem oder 0-Radius zeichnen. Das würde nicht funktionieren. Wenn Size=1 beträgt und wir versuchen, die Stärke zu verringern, gibt der Vergleichsblock einen Piepton aus und die Variable bleibt unverändert.

Herzlichen Glückwunsch! Das Programm für die Zaubertafel ist fertig.

Selbst entdecken: Ein Arcade-Spiel

Wir experimentieren mit einem Arcade-Spiel für den SK3TCHBOT, welches wir herunter laden und ausführen. Wir haben ein zufällig positioniertes Ziel auf dem Display und können einen Spieler steuern. Wenn wir das Ziel innerhalb von 4 Sekunden treffen, gewinnen wir einen Punkte. Wenn wir mehr Zeit brauchen, verlieren wir einen Punkt. Anschliessen erscheint ein neues Ziel auf dem Display. Nach 10 Durchläufen teilt uns das Programm mit, wie gut wir waren.

Mrtz meint, dass so ein Programm sehr schwer sein muss. Da wir nun so viel über mathematische Berechnungen und Variablen gelernt haben, schauen wir uns das Programm genau an. Zusammen erklären wir uns Schritt für Schritt das Programm und stellen fest, dass so ein Programm gar nicht so schwierig ist und wir es gut verstehen können.

Damit sind die Kapitel über verschiedene Programmiertechniken und -möglichkeiten des EV3 abgeschlossen. Wir kehren nun wieder zu SNATCH3R, dem automatischen Roboterarm zurück und werden später an eigenen Robotern tüfteln.

Published in Mindstorms Allgemein