Lego-Mindstorm NXT Tutorial: Schalter Informatik 2012 1 Lego Mindstorm NXT Tutorial 1. Schleifen Mit dem «Schleifen»-Block kannst du den Roboter veranlassen sich zu wiederholen. Dabei kannst du selber bestimmen wie oft eine Aktion wiederholt werden soll. Du findest die Schleifen auf der «Allgemeinen Palette Schleifen» 1.1. Die -Schleife Die einfachste Schleifenart ist die -Schleife. Der Roboter wiederholt diesen Block ohne je aufzuhören. Bei dieser Schlaufe musst du den Roboter abstellen bzw. das Programm manuell anhalten. Wenn du einen neuen Schleifenblock aus der «Allgemeinen Palette» wählst, dann erhältst du standardmässig eine -Schleife. Aufgabe 1 Der Roboter soll in einem Quadrat unendlich lange herumfahren. Geschwindigkeit und Richtung des Umlaufsinns kannst du selber bestimmen. 1.2. Die Zeit-Schleife Mit der Zeit-Schleife kannst du wie der Name bereits verrät bestimmte Blöcke eine vorbestimmte Zeit lang ausführen. D.h. der Roboter führt die Anweisungen in den Blöcken so lange aus, bis die Zeit vorüber ist. Eine -Schleife kannst du ganz einfach in eine Zeit-Schleife umwandeln, wenn du im «Konfigurationsfenster» die «Steuerungseigenschaft» des Blocks auf «Zeit» umstellst. Die Dauer der Schleife kannst du bei «Bis» in Sekunden festlegen. Aufgabe 2 Ändere das Programm aus Aufgabe 1 so, dass der Roboter genau 20 Sekunden lang «im Quadrat» fährt. Am Schluss soll der Roboter eine Melodie spielen. 1.3. Die Zählen-Schleife Diese Schleifenart zählt die Anzahl Durchläufe der Schleife. Ist eine bestimmte Anzahl erreicht, wird die Schleife verlassen. Die Änderung einer beliebigen Schleife in eine Zählen-Schleife geschieht wie im letzten Beispiel: Ändere im «Konfigurationsfenster» die «Steuerungseigenschaft» des Blocks in «Zählen». Die Eigenschaft «Bis» legt die Anzahl Durchläufe fest. Aufgabe 3
Lego-Mindstorm NXT Tutorial: Schalter Informatik 2012 2 Ändere das Programm aus Aufgabe 2 so, dass der Roboter genau 12 Durchläufe der Schleife ausführt! Danach sollte er wieder in der Ausgangslage stehen. Nach den 4 Runden soll der Roboter die Anzahl Durchläufe auf dem Display des NXT schreiben und eine Melodie abspielen. 1.4. Die Sensor-Schleife Wie der Name bereits sagt, wird diese Schleife so oft wiederholt, bis ein bestimmter Sensor reagiert. Dabei steht dir die ganze Palette an Sensoren zur Verfügung: Berührungssensor, Drehsensor, Eingehende Nachricht, Geräuschsensor, Lichtsensor, NXT-Taste, Timer und der Ultraschallsensor. Den Sensor kannst du im «Konfigurationsfenster» bei der «Steuerungseigenschaft Sensor» auswählen. Die Empfindlichkeit des Sensors kannst du danach im zweiten «Konfigurationsfenster» einstellen. Aufgabe 4 Der Roboter soll erst auf ein lautes Klatschen geradeaus losfahren. Er fährt so lange geradeaus, bis der Ultraschallsensor auf eine Distanz von unter 30cm reagiert. Dann soll er sich um 90 drehen. 1.5. Abschlussaufgabe Aufgabe 5 Der Roboter soll erst auf ein lautes Klatschen beginnen. Solange der Ultraschallsensor nicht reagiert, soll der Roboter geradeaus fahren. Wenn der Sensor reagiert, soll er kurz rückwärts fahren und sich anschliessend um 90 drehen. Dann führt er die Schritte 2 und 3 wieder aus. Diese Aktionen führt er so lange aus, bis er beim fünften Hindernis angekommen ist. Dann soll er stehen bleiben und «Good Bye» rufen.
Lego-Mindstorm NXT Tutorial: Schalter Informatik 2012 3 2. Schalter Ohne Schalter lassen sich keine komplexen und intelligenten Programme schreiben. Sie dienen dazu dem Roboter eine Entscheidungsmöglichkeit anzubieten. Wenn wir z.b. den Roboter so programmieren wollen, dass er bei der Berührung des Tastsensors «Hallo» sagt und bei der Aktivierung des Ultraschallsensors «Goodbye», dann ist das nur mit einem Schalter möglich. 2.1. Der Sensor-Schalter Dieses Programm fährt geradeaus (1), bis der 1. Tastsensor gedrückt wird (2). Dann sagt er «Goodmorning»(3) und wartet, bis der 2. Tastsensor gedrückt wird (4). Anschliessend meldet er sich mit den Worten «Goodbye». Wir möchten aber erreichen, dass der Roboter wann immer der erste Sensor aktiviert wird, «Goodmorning» sagt und unabhängig davon, wenn der 2. Sensor betätigt wird, sich mit «Goodbye» meldet. Hier hilft uns der Schalter bzw. die Verzweigung: Der Sensor-Schalter ermöglicht es uns eine Verzweigung für den Roboter einzubauen: Wenn der 1. Sensor gedrückt wurde, dann soll er «Goodmorning» sagen, wenn nicht, soll er nichts machen. Wenn wir diesen Schalter in eine -Schleife einbetten, dann passiert nichts, bis wir den ersten Sensor betätigen. Aufgabe 1 Der Roboter soll, wann immer der Tast-Sensor aktiviert wird, «Goodmorning» sagen und sich (unabhängig davon), mit «Goodbye» melden, sobald der Geräuschsensor aktiviert wird. Aufgabe 2 Der Roboter startet innerhalb eines grossen weissen Kreises, der mit einer dicken schwarzen Linie umrandet ist. Er soll immer innerhalb dieses Kreises fahren und ihn nie verlassen. Ausserdem soll er Hindernissen, die im Kreis herumliegen, ständig ausweichen.
Lego-Mindstorm NXT Tutorial: Lösungen 4 3. Variabeln Wenn dein Roboter irgendwelche Objekte aufsammeln soll, dann muss er wissen, wann er alle Objekte beisammen hat und mit der Aufgabe fertig ist. Dafür gibt es Variabeln. Sie können einen Wert enthalten, der entweder eine Zahl, ein Text oder ein Logikwert (entweder Wahr oder Falsch) ist. Sie werden durch einen Koffer-Block dargestellt. Du findest ihn in der «Vollständigen Palette» im «Daten-Block». 3.1. Variabeln anlegen Es gibt zwar drei vordefinierte Variabeln, aber die tragen für unsere Zwecke nicht den richtigen Namen. Um eine neue Variable zu definieren, klickst du im Menu «Bearbeiten» auf «Variablen definieren». 1. Im neuen Fenster kannst du auf «Erstellen» klicken. 2. Gib der Variable einen sinnvollen Namen: Wenn sie Runden zählen soll, dann kannst du sie «Zaehler» nennen, wenn sie den Vornamen einer Person enthalten soll, dann nennst du sie sinnvollerweise «Vorname». 3. Unsere Variable soll die Runden zählen, also ist sie vom Typ «Zahl». 4. Klick danach auf «Schliessen». Die Variable ist nun definiert (in der Programmiersprache sagt man auch «deklariert») und sie steht uns für den Gebrauch im Programm zur Verfügung. 1. Zuerst müssen wir die Variable «Zaehler» auf Null setzen in der Fachsprache heisst das «Inintialisieren». 2. Als nächstens wollen wir die Variable in drei Schritten um Eins erhöhen. Dazu müssen wir sie erst «lesen»,
Lego-Mindstorm NXT Tutorial: Lösungen 5 3. dann brauchst du aus der «vollständigen Palette» den «Mathe-Block». Verbinde den Ausgang der Variable mit dem Eingang «A» des Mathe-Blocks und addiere die Zahl Eins dazu. 4. Um die neue Zahl nicht zu verlieren, musst du das Ergebnis wieder in die Variable schreiben. 5. Verbinde dazu den Ausgang der Addition mit dem Eingang der Variable. 6. Das Ergebnis soll der Roboter auf den Bildschirm schreiben. Deswegen müssen wir die Zahl zuerst in Text umwandeln. 7. Verbinde den Ausgang der Addition mit dem Eingang des Converters. 8. Zusätzlich soll die Anzeige «Runde =» als Information auf den Bildschirm schreiben. Positioniere den Text am oberen Bildschirmrand. 9. Nun kann der Wert der Variable «Zaehler» darunter geschrieben werden. 10. Verbinde den Ausgang des Converters mit dem Eingang der Bildschirmausgabe. 11. Spiel einen kurzen Ton oder einen Klang, damit du die Runden auch akustisch mitverfolgen kannst. 12. Der Roboter soll das Zählen genau 5 Runden durchführen und danach abbrechen. Wir verwenden dafür eine «Logik-Schleife»: Dieser schalten wir ein «Logik-Block» aus der «Allgemeinen Palette» vor. 13. Dieser vergleicht die Zählvariable ständig mit der Zahl fünf und meldet «wahr» oder «falsch» an die «Logik-Schleife». 14. Die Schleife soll aufhören, wenn sie die Meldung «wahr» vom «Logik-Block» erhält, sonst dreht sie unendlich weiter. 15. Das Signal des «Logik-Blocks» muss mit dem Eingang der Schleife verbunden werden. 16. Zu guter Letzt soll der Roboter sich verabschieden. Aufgabe 1 Der Roboter soll vorwärts fahren und 10 Hindernissen ausweichen. Wie das Ausweichmanöver
Lego-Mindstorm NXT Tutorial: Lösungen 6 funktioniert, kannst du selber festlegen. 3.2. Zufallszahlen verwenden Manchmal ist es notwendig eine Entscheidungsmünze zu werfen. Je nachdem, wie sie fällt, entscheidet sich der Roboter zufällig für eine Aktion. Auf der «Vollständigen Palette» unter «Daten» findest du den Würfel. Du kannst einen Würfelbereich (in der Fachsprache Wertebereich genannt) festlegen: Von wo bis wo soll die Zufallszahl sein? Sie wird dann über den Datenknoten herausgegeben. Aufgabe 2 Der Roboter soll solange Hindernissen zufällig nach links oder rechts ausweichen. Jedes Mal, wenn er ausweichen muss, soll er einen Spruch sagen. Aufgabe 3 Der Roboter soll solange kreuz und quer fahren und Hindernissen ausweichen, bis er die rote oder die blaue Kugel findet. Dann soll er sie weg schlagen. 4. Eigene Blöcke Wenn dein Roboter irgendwelche Objekte aufsammeln soll, dann muss er wissen, wann er alle Objekte beisammen hat und mit der Aufgabe fertig ist. Dafür gibt es Variabeln. Sie können einen Wert enthalten, der entweder eine Zahl, ein Text oder ein Logikwert (entweder Wahr oder Falsch) ist. Sie werden durch einen Koffer-Block dargestellt. Du findest ihn in der «Vollständigen Palette» im «Daten-Block».
Lego-Mindstorm NXT Tutorial: Lösungen 7 5. Lösungen Die -Schleife 1.1 Lösung zu Aufgabe 1 2.1_Schleifen_A1.rbt 1. Beim 2. Motorblock fahren wir um die Ecke, indem wir mit dem Motor B vorwärts und mit C rückwärts fahren. So dreht der Roboter schneller. 2. Was die Dauer der Aktion angeht, musst du ein bisschen experimentieren. Sie hängt von der Unterlage ab. Die angegebene Gradzahl hat nichts mit der absoluten Gradzahl der Roboterposition zu tun! Die Zeit-Schleife 1.2 Lösung zu Aufgabe 2 2.2_Schleifen_A2.rbt 1. Die Zeit-Schleife musst du auf 20 Sekunden einstellen.
Lego-Mindstorm NXT Tutorial: Lösungen 8 2. Aus dem Klangblock musst du noch einen Ton auswählen oder auch eine Klangdatei. Die Zählen-Schleife 1.3 Lösung zu Aufgabe 3 2.3_Schleifen_A3.rbt 1. Den Rundenzähler kannst du aktivieren, indem du im «Konfigurationsfenster» die Eigenschaft «Anzeige Zähler» aktivierst. 2. Beim NXT kann man keine Zahlen direkt auf den Bildschirm schreiben. Du musst die Zahl zuerst in einen Text (engl. String) umwandeln. Den Umwandler findest du auf der «vollständige Palette» unter «Grosser Funktionsumfang». 3. Verbinde den Rundenzähler mit dem Eingang des Umwandlers (engl. converter), indem du mit der Maus an den Anfang klickst bis du beim Converter angelangt bist. 4. Schreibe den Text «Anzahl Runden» auf den Bildschirm. 5. Setze einen Anzeigeblock aus der «Allgemeinen Palette» und öffne den Datenknoten. 6. Verbinde den Ausgang des Converters mit dem Texteingang des Anzeigeblocks. 7. Damit die Anzeige auf dem Bildschirm nicht gleich verschwindet, weil das Programm beendet ist, wartet der Roboter noch 10 Sekunden.
Lego-Mindstorm NXT Tutorial: Lösungen 9 Die Sensor-Schleife 1.4 Lösung zu Aufgabe 4 2.4_Schleifen_A4.rbt 1. Das Warten auf das Klatschen könntest du auch mit einer Schleife realisieren. NXT bietet einen eigenen Block, der wartet bis ein Sensor aktiviert wurde. 2. Wähle eine Ultraschall-Sensor-Schleife. Diese musst du noch korrekt konfigurieren. Sie soll erst unter 30cm reagieren. 3. Realisiere die Drehung wie in den letzten Beispielen.
Lego-Mindstorm NXT Tutorial: Lösungen 10 Die Abschlussaufgabe 1.5 Lösung zu Aufgabe 5 2.5_Schleifen_A5.rbt 1. Warte auf das Klatschen oder eine andere Geräuschkulisse, die laut genug ist. 2. Wir müssen die Aktionen nach fünf Durchgängen abbrechen, deswegen verwenden wir eine Zählen- Schleife, die nach fünf Durchgängen aufhört. 3. In dieser Schleife führen wir die Vorwärtsbewegung aus, und zwar so lange, bis der Ultraschallsensor sich meldet! 4. Danach fahren wir kurz rückwärts 5. und drehen gleich darauf um 90. 6. Um das Ergebnis auszugeben, müssen wir die Rundenzahl in Text umwandeln. 7. Die Rundenzahl wird hier in den Converter eingespeist. 8. Den Display-Block brauchen wir für die Anzeige. 9. Die umgewandelte Rundenzahl wird dem Bildschirm übergeben. 10. Der Text gesprochen. 11. Damit die Anzeige auf dem Bildschirm nicht gleich verschwindet, weil das Programm beendet ist, wartet der Roboter noch 10 Sekunden.
Lego-Mindstorm NXT Tutorial: Lösungen 11 Der Sensor-Schalter 2.1 Lösung zu Aufgabe 1 3.1_Schalter_A1.rbt 1. Hier wird der Tastsensor abgefragt. Wird er betätigt, 2. sagt er «Goodmorning»; wenn nicht, passiert nichts. 3. Wenn der Geräuschsensor reagiert, dann 4. sagt er «Goodbye», sonst nicht. 5. Das Ganze ist einer -Schleife eingebettet, damit das Programm wiederholt wird. Abbrechen musst du das Programm über die NXT-Stop-Taste. Tipp: Wenn du bei einem Schalter unter der Eigenschaft «Anzeige» die Markierung der «offenen Ansicht» aufhebst, werden die Schalter in kompakter Form dargestellt. Wenn du auf die einzelnen Schalterchen klickst, siehst du die entsprechenden Bedingungen.
Lego-Mindstorm NXT Tutorial: Lösungen 12 Der Sensor-Schalter 2.1 Lösung zu Aufgabe 2 3.1_Schalter_A2.rbt 1. Das ganze Programm ist einer -Schleife eingebettet, damit das Programm wiederholt wird. Abbrechen musst du das Programm über die NXT-Stop-Taste. 2. Wenn der Helligkeitssensor 3. «hell» ist, dann fährt er vorwärts. 4. sonst fährt er kurz rückwärts 5. und dreht um. 6. Ähnlich funktioniert der Tastsensor: Wenn er betätigt wird, 7. dann fährt er kurz rückwärts und 8. dann dreht er um 90 um.
Lego-Mindstorm NXT Tutorial: Lösungen 13 Variabeln anlegen 3.1 - Lösung zu Aufgabe 1 4.1_Variable_A1.rbt 1. Zuerst wird eine Zählvariable deklariert und auf die Zahl 0 initiiert. 2. Eine Logik-Schleife sorgt dafür, dass das Programm erst nach 10 Hindernissen abbricht. 3. Der Ultraschallsensor regiert auf Hindernisse; wenn er auf keines trifft, soll er vorwärts fahren, wenn er eines trifft, dann 4. soll er den Wert der Rundenzählvariable lesen. 5. Im Additionsblock wird die Zahl 1 mit der 6. Zählvariablen addiert und weitergeleitet. 7. Der alte Variabelwert wird durch den neuen überschrieben. 8. Der neue Wert an die Variable übergeben. 9. Der Roboter fährt kurz rückwärts 10. und dreht dann um. 11. Der Vergleichen-Block dient als Abbruchbedingung für die Logik-Schleife. 12. Der Block wird durch den Variabelwert gefüttert.
Lego-Mindstorm NXT Tutorial: Lösungen 14 13. Die Logik-Schleife wird abgebrochen, wenn sie vom Vergleichen-Block die Meldung «wahr» erhält. Zufallszahlen verwenden 3.2 - Lösung zu Aufgabe 2 4.2_Variable_A2.rbt 1. Wir fangen mit einer Zähl-Schleife an. Der Roboter soll nach 10 ausgewichenen Hindernissen stehen bleiben. 2. Danach wird der Ultraschallsensor abgefragt: 3. Solange er nichts unter 40cm meldet, 4. fährt der Roboter geradeaus. Dieser Ast ist in der Abbildung ausgeblendet. 5. Wenn nicht, muss er einen Würfel werfen, der nur die Zahlen 0 oder 1 würfeln kann. 6. Der Logik-Schalter wird vom Würfel gespiesen: Je nach dem, ob die Zahl 0 oder 1 ist, macht er 7. eine Linksdrehung oder 8. eine Rechtsdrehung.
Lego-Mindstorm NXT Tutorial: Lösungen 15 9. Danach muss er nochmals würfeln: Nun ist aber der Wertebereich von 0 bis 4. 10. Je nach dem spielt er eine andere Melodie oder sagt einen anderen Spruch. Um den Schalter von zwei Möglichkeiten auf fünf möglichen Entscheidungen zu erhöhen, musst du zuerst die «offene Ansicht» aufheben. Danach kannst du im Bedienungsfeld auf das «+»-Zeichen klicken, damit sich die Möglichkeiten auffächern. 11. Spiele eine Melodie oder einen Ton. 12. Klick jeden der fünf Äste an und lege jeweils eine Melodie fest.