17 Spiele auf dem EV3

In diesem Kapitel wirst du ein Programm erstellen, das viele der in diesem Buch beschriebenen Programmiertechniken kombiniert. Ich habe jede Technik und jeden Block vorher mit kleinen Beispielprogrammen eingeführt. Jetzt sind sie in einem größeren Kontext zu sehen.

Mit dem Programm, das du erstellst, kannst du ein ZaubertafelSpiel auf dem EV3 spielen. Du kannst mit den großen Motoren als Eingabeknöpfe auf dem EV3-Display Zeichnungen erstellen und verwendest dabei den Berührungssensor und den Farbsensor als zusätzliche Eingabegeräte (siehe Abbildung 17-1).

Image

Abbildung 17-1: Ein Zaubertafel-Spiel auf dem SK3TCHBOT

Schritt 1: Einfache Zeichnungen erstellen

Eine Zaubertafel zeichnet Linien, während du ihre Knöpfe drehst, als wenn du einen Stift über ein Stück Papier bewegen würdest. Der linke Knopf steuert die horizontale Position des Stifts (X) und der rechte die vertikale (Y). Dieses Verhalten ist in einem EV3-Programm überraschend leicht nachzuahmen (siehe Abbildung 17-2).

Image

Abbildung 17-2: Der Ablauf des Basisprogramms für die Zaubertafel

Das Programm zeigt wiederholt einen kleinen Punkt (kleinen Kreis) auf dem EV3-Display an der Position an, die durch die X- und Y-Koordinate angegeben wird. Das Programm ermittelt diese Koordinaten anhand der Drehsensoren der großen Motoren. Der weiße Zeiger (Motor B) steuert die X-Position, der rote Zeiger (Motor C) die Y-Position. Während das Programm Punkte auf das Display schreibt, kannst du Zeichnungen wie mit einem Stift zeichnen, indem du die Zeiger des SK3TCHBOTs drehst.

Als Erstes erstellst du ein neues Projekt namens SK3TCHBOT-Games mit einem Programm namens Etch-A-Sketch. Um den Punkt anzuzeigen, verwendest du einen Anzeigeblock im Modus Formen – Kreis. Du musst jedoch 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 1: Clear

Der Anzeigeblock bietet keine Möglichkeit, das Display einfach zu löschen, ohne etwas Neues anzuzeigen. Du kannst dieses Verhalten jedoch simulieren, indem du einen einzelnen weißen Punkt anzeigst und den Bildschirm löschst. Konfiguriere den Anzeigeblock (siehe Abbildung 17-3), und wandle ihn in einen Eigenen Block namens Clear um.

Image

Abbildung 17-3: Der Eigene Block Clear löscht das EV3-Display. Der fertige Block ist rechts abgebildet.

Eigener Block 2: Coordinates

Jetzt erstellst du einen eigenen Block namens Coordinates (siehe Abbildung 17-4). Er hat zwei numerische Ausgabewerte (X und Y), mit denen du die Position der neuen Punkte steuerst. Sehen wir uns an, wie dieser Block die X-Koordinate berechnet.

Du erinnerst dich, dass der Drehsensor die Anzahl der Motorumdrehungen seit Programmstart in Grad angibt. Im Prinzip könntest du den Sensorwert von Motor B direkt auf die X-Koordinate übertragen. Dadurch würde sich der Stift allerdings zu schnell bewegen: Eine halbe Umdrehung des weißen Zeigers würde den Stift über das ganze Display bewegen. (Das Display ist in X-Richtung 178 Punkte groß.)

Um exaktere Bewegungen zu machen, teilst du den Gradwert durch 3, sodass eine Drehung um 180 Grad den Stift nur über ein Drittel des Displays bewegt. Füge dem Ergebnis der Division 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 du dafür Motor C verwendest und zur Division 64 hinzuzählst (es gibt 128 Punkte in Y-Richtung). Da Motor C verkehrt herum eingebaut ist, erhältst du einen negativen Gradwert, wenn du ihn in Richtung des roten Pfeils in Abbildung 17-1 drehst. Der Stift bewegt sich also nach oben (senkrechter roter Pfeil), was genau das Gegenteil der positiven Y-Richtung ist (senkrechter blauer Pfeil).

Um den Eigenen Block zu erstellen, platzierst du zwei Motorumdrehungsblöcke und zwei Matheblöcke im Programmierbereich und wandelst sie in einen Eigenen Block mit zwei numerischen Ausgängen namens Coordinates um (siehe Abbildung 17-4).

Das Basisprogramm fertigstellen

Jetzt hast du die grundlegenden Komponenten des Programmablaufs aus Abbildung 17-2 erstellt. Schließe das Programm jetzt ab (siehe Abbildung 17-5). Außer den beiden Eigenen Blöcken enthält das Programm einen Anzeigeblock, der den Punkt an den jeweiligen Koordinaten anzeigt (kleiner Kreis), und einen Schleifenblock, der das Programm wiederholt. Lade das Programm auf deinen Roboter herunter und teste es, bevor du es im nächsten Schritt erweiterst.

HINWEIS Wenn du bei der Erstellung dieses Programms Schwierigkeiten hast, lade die fertige Version von http://ev3.robotsquare.com/herunter und vergleiche sie mit deinem Programm.

Image

Abbildung 17-4: Der Eigene Block Koordinaten berechnet die X- und Y-Koordinate des Punkts, der auf dem EV3-Display angezeigt wird. Der fertige Block ist links abgebildet.

Image

Abbildung 17-5: Das Basisprogramm der Zaubertafel Etch-A-Sketch. Der Anzeigeblock ist so eingestellt, dass er das Display nicht löscht. Dadurch bleiben bereits gezeichnete Punkte erhalten, wenn auf dem Display neue hinzugefügt werden.

Schritt 2: Die Stiftsteuerung hinzufügen

Das grundlegende Zaubertafel-Programm macht Spaß, aber du kannst es mit mehr Funktionen erweitern (siehe Abbildung 17-6). Du verwendest den Berührungssensor, um das Zeichnen zeitweise zu unterbrechen, den Farbsensor, um den Stift in einen Radiergummi zu verwandeln, die Mitte-Taste auf dem EV3, um das Display zu löschen, und die Oben- und Unten-Tasten, um die Stiftgröße zu ändern.

Um potenzielle Fehler leichter zu finden, solltest du dein Programm immer testen, wenn du eine neue Funktion hinzugefügt hast. Wenn du bereit bist, kannst du dich der Herausforderung stellen und das Programm nun durch weitere Selbst-entdecken-Aufgaben ausbauen.

Den Stift bewegen, ohne zu zeichnen

Beim Zeichnen hebst du manchmal den Stift an und gehst zu einer neuen Position, ohne zu zeichnen. Um das zu bewerkstelligen, solltest du das Programm nur zeichnen lassen, wenn der Berührungssensor losgelassen ist (siehe Abbildung 17-7). Wenn der Berührungssensor gedrückt wird, passiert nichts. (Der Falsch-Fall des Schalterblocks enthält keine Blöcke.)

Den Stift in einen Radiergummi verwandeln

Als Nächstes fügst du ein Radiergummi-Werkzeug hinzu, indem du das Programm weiße Punkte zeichnen lässt, wenn der Farbsensor ausgelöst wird (siehe Abbildung 17-8). Indem du weiße Punkte zeichnest, kannst du Teile der Zeichnung löschen, was hilfreich ist, wenn du einen Fehler machst.

Wenn du den Farbsensor mit deinem Finger abdeckst, wird die Stärke des reflektierten Lichts mit unter 10% gemessen und das Vergleichsergebnis im Farbsensorblock wird wahr, sodass die Farbeinstellung im Anzeigeblock zu weiß wird. Wenn du deinen Finger vom Sensor wegnimmst, wird die Ausgabe falsch und der Anzeigeblock zeichnet weiter schwarze Punkte auf das Display.

Image

Abbildung 17-6: Der Ablauf des erweiterten Etch-A-Sketch-Programms

Image

Abbildung 17-7: Das Programm zeichnet die neuen Punkte nur, wenn der Berührungssensor nicht aktiviert ist. Um den Stift an eine neue Position zu bewegen, ohne Linien zu zeichnen, drückst zu den Berührungssensor, drehst die Zeiger und lässt den Sensor wieder los, um weiterzuzeichnen.

Image

Abbildung 17-8: Füge einen wie hier konfigurierten Farbsensorblock hinzu und verbinde die logische Datenleitung mit dem Anzeigeblock. Dein Stift funktioniert wie ein Radiergummi, solange du den Farbsensor mit deinem Finger abdeckst.

Den Bildschirm löschen

Um den Bildschirm zu löschen, wenn du die Mitte-Taste drückst, fügst du einen Schalterblock und einen Löschblock hinzu (siehe Abbildung 17-9). Wird keine der EV3-Tasten gedrückt, passiert nichts. (Der Fall Keine Tasten, der auch der Standardfall ist, enthält keine Blöcke.)

Image

Abbildung 17-9: Diese Blöcke löschen den Bildschirm, wenn du die Mitte-Taste drückst.

Die Stiftstärke festlegen

Als Nächstes erweiterst du das Programm, um die Stiftstärke mit den Tasten Oben und Unten auf dem EV3-Stein einzustellen. Dazu verwendest du eine Variable namens Size, um den Wert der Einstellung Radius im Anzeigeblock festzulegen. Dann fügst du die Blöcke hinzu, mit denen du die Variable Size über die EV3-Tasten verändern kannst.

Beginne mit einer numerischen Variablen namens Size und füge zwei Variablenblöcke in dein aktuelles Programm ein (siehe Abbildung 17-10). 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 du den Wert der Variablen nicht veränderst.

Füge jetzt zwei Fälle (Register) in den Schalterblock ein, den du gerade konfiguriert hast, einen Fall für die Taste Oben und einen für die Taste Unten.

Wenn du die Oben-Taste drückst, sollte die Variable Size inkrementiert (um 1 erhöht) werden (siehe Abbildung 17-11). Da das Display recht klein ist, beschränkst du den Wert für Size auf 25. Mit anderen Worten inkrementierst du die Variable nur, wenn ihr aktueller Wert kleiner als 25 ist, was durch einen Vergleichsblock festgestellt wird. Wenn der Wert Size 25 ist und du ihn weiter inkrementierst, gibt der Vergleichsblock falsch aus, du hörst einen Piepton und der Wert wird nicht verändert. Schließlich lässt ein Warteblock das Programm warten, bis die Oben-Taste losgelassen wird. (Wenn du nicht darauf wartest, wiederholt das Programm die Schleife weiter und inkrementiert die Variable bei jedem Durchlauf.)

Die Variable sollte dekrementiert (um 1 verringert) werden, wenn du die Unten-Taste drückst, aber nur, solange der Wert Size größer als 1 ist, damit du keinen Kreis zeichnest, dessen Radius negativ oder 0 ist (das würde nicht funktionieren). Wenn Size 1 beträgt und du versuchst, die Stärke weiter zu verringern, gibt der Vergleichsblock einen Piepton aus und die Variable bleibt unverändert (siehe Abbildung 17-12).

Herzlichen Glückwunsch! Du hast das Programm für die Zaubertafel fertiggestellt. Wenn du geprüft hast, dass es funktioniert, schau nach, ob du es noch mehr erweitern kannst, z.B. mit den Selbstentdecken-Aufgaben 112 bis 114.

Image

Abbildung 17-10: Füge zwei Variablenblöcke in das Programm ein, wie hier gezeigt.

Image

Abbildung 17-11: Wenn du die Oben-Taste drückst und der aktuelle Wert der Variablen Size ist kleiner als 25, wird der Wert um 1 erhöht. Das zweite Register (Keine Tasten) bleibt der Standardfall.

Image

Abbildung 17-12: Wenn du die Unten-Taste drückst und der aktuelle Wert von Size größer als 1 ist, wird der Wert um 1 verringert.

Weitere Experimente

In diesem Kapitel hat du ein Programm erstellt, das viele Programmiertechniken, die du in diesem Buch gelernt hast, kombiniert. Wenn du Spaß daran hattest, dieses Programm zu schreiben, empfehle ich dir die Selbst-entdecken-Aufgaben 115 und 116. Im nächsten Teil dieses Buchs lernst du, wie du zwei weitere coole Roboter baust.

SELBST KONSTRUIEREN 28:
EIN PLOTTER

Bau: Image Programmierung: Image

Kannst du einen Roboter bauen, der Zeichnungen auf einem DIN-A4-Bogen macht? Verwende einen großen Motor, um einen Stift über das Papier zu führen und waagerechte Linien zu zeichnen (X), und einen weiteren großen Motor, um das Papier hin- und zurückzubewegen, um senkrechte Linien zu zeichnen (Y). Schließlich benutzt du den mittleren Motor, um den Stift anzuheben und abzusenken, sodass du den Stift anheben und an anderer Stelle weiterzeichnen kannst. Um die Maschine einfacher steuern zu können, erstellst du einen Eigenen Block, der den Stift über Eingabeparameter für die X- und Y-Koordinaten bewegt.

HINWEIS Zur Inspiration kannst du die Mechanik eines Tintenstrahldruckers studieren. Der Drucker bewegt die Patrone auf einem festen Balken nach links und rechts (so zeichnest du waagerechte Linien) und das Papier über Rollen vor und zurück (so zeichnest du senkrechte Linien).