Differences
This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
| lehrkraefte:snr:informatik:bruehl-2022:variablen-2 [2022/03/08 18:05] – [Programmierung des Roboters über Zustände (anders als bei der Turtle!)] Olaf Schnürer | lehrkraefte:snr:informatik:bruehl-2022:variablen-2 [2022/03/28 10:53] (current) – [Lösungsvorschläge] Olaf Schnürer | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| + | ~~NOTOC~~ | ||
| + | |||
| + | ====== Variablen sinnvoll einsetzen und erste Schritte mit dem Roboter ====== | ||
| + | |||
| + | ===== Lernziele heute ===== | ||
| + | |||
| + | * Spirale mit Turtle zeichnen und | ||
| + | * Spirale mit Roboter abfahren: [[https:// | ||
| + | |||
| + | ===== Hausaufgaben besprechen ===== | ||
| + | |||
| + | * Klasse 1c: Spalte Einmaleins oder $n$-Eck | ||
| + | |||
| + | ===== Steuerung der Turtle durch Variablen ===== | ||
| + | |||
| + | ==== Aufgabe 1 (Algorithmenentwurf) ==== | ||
| + | <WRAP center round todo 100%> | ||
| + | **" | ||
| + | |||
| + | Finde einen Algorithmus zum Zeichnen der folgenden " | ||
| + | |||
| + | * Die Spirale soll von innen her gezeichnet werden. | ||
| + | * Zuerst soll die Schildkröte 10 Pixel vorwärts gehen und dann nach jeder Abbiegung 10 Pixel weiter gehen als zuvor. | ||
| + | * Zusätzlich soll am Ende die Gesamtlänge der Spirale ausgegeben werden. | ||
| + | |||
| + | <WRAP left round box 100%> | ||
| + | {{: | ||
| + | </ | ||
| + | |||
| + | Bemerkung: Wir sind nicht an der naiven Lösung interessiert, | ||
| + | </ | ||
| + | |||
| + | ==== Aufgabe 2 (Algorithmus bzw. Flussdiagramm in Python-Programm übersetzen) ==== | ||
| + | <WRAP center round todo 100%> | ||
| + | **Einzelarbeit, | ||
| + | |||
| + | Verwandle unser Flussdiagramm in ein Python-Programm zum Zeichnen der obigen Spirale; dabei soll '' | ||
| + | |||
| + | Wie immer: Speichere dein Programm ab. Später werden wir es verwenden, um den Roboter eine Spirale abfahren zu lassen. | ||
| + | |||
| + | <hidden **Bonusaufgaben: | ||
| + | * Definiere am Anfang drei Variablen '' | ||
| + | * Definiere zusätzlich eine weitere Variable '' | ||
| + | * Definiere eine zusätzliche Variable '' | ||
| + | {{: | ||
| + | * Statt all diese Variablen am Anfang des Programms zu definieren, kannst du auch einige davon vom Benutzer erfragen. Verwende etwa '' | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | ==== Aufgabe 3 (Einübung des gerade Gelernten an einem neuem Problem) ==== | ||
| + | |||
| + | <WRAP center round todo 100%> | ||
| + | **Einzelarbeit, | ||
| + | |||
| + | Erweitere den Programmcode | ||
| + | <code python> | ||
| + | from gturtle import * | ||
| + | makeTurtle() | ||
| + | # hideTurtle() | ||
| + | |||
| + | n = input(" | ||
| + | s = 70 | ||
| + | d = 10 | ||
| + | |||
| + | # Hier ist dein Code zu ergaenzen. | ||
| + | </ | ||
| + | so, dass ineinanderliegende Quadrate gezeichnet werden, wie in der Skizze unten angedeutet. Dabei soll gelten: | ||
| + | * '' | ||
| + | * Das kleinste Quadrat hat eine Seitenlänge von '' | ||
| + | * Benachbarte Quadrate unterscheiden sich in der Seitenlänge um '' | ||
| + | * Wenn man die Startwerte von '' | ||
| + | |||
| + | Gerne darf zuvor ein Flussdiagramm erstellt werden, wenn das hilft. | ||
| + | |||
| + | {{: | ||
| + | |||
| + | <hidden **Bonusaufgaben: | ||
| + | In beliebiger Reihenfolge zu bearbeiten: | ||
| + | * Verändere die Dicke des Zeichenstifts von Quadrat zu Quadrat. | ||
| + | * Zeichne '' | ||
| + | * Zeichne nun die Quadrate (bzw. '' | ||
| + | {{: | ||
| + | * Falls du auch die Farbe variieren willst, geht das am einfachsten mit dem Befehl '' | ||
| + | <code python> | ||
| + | setPenColor(makeColor(" | ||
| + | farbe = farbe-1/n | ||
| + | </ | ||
| + | {{: | ||
| + | * Wenn du [[https:// | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | ==== Aufgabe 4, Hausaufgabe (kann eventuell während der Lektion begonnen werden) ==== | ||
| + | |||
| + | <WRAP center round todo> | ||
| + | Schreibe ein Programm, das vom Benutzer eine Zahl '' | ||
| + | |||
| + | Du darfst kreativ sein und Farbe und Stiftdicke beliebig wählen und auch von Quadrat zu Quadrat variieren. Du darfst auch konzentrische '' | ||
| + | |||
| + | Für '' | ||
| + | |||
| + | {{: | ||
| + | |||
| + | Abgabe bis **spätestens Sonntagabend 23:59 Uhr** vor der nächsten Doppellektion über den folgenden Link: | ||
| + | |||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | |||
| + | <hidden Hinweis:> | ||
| + | Verwende eine '' | ||
| + | |||
| + | Nach dem Zeichnen jedes Quadrats: Bewege die Schildkröte (ohne dass sie zeichnet) ein wenig nach links und nach unten (und drehe sie danach wieder in die gewünschte Richtung). | ||
| + | Was "ein wenig" bedeutet, musst du herausfinden. | ||
| + | |||
| + | <hidden Alternative:> | ||
| + | Damit die Quadrate alle ihren Mittelpunkt in der Mitte haben: Gehe jeweils mit '' | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | ====== Erste Schritte mit dem Roboter ====== | ||
| + | |||
| + | [[https:// | ||
| + | |||
| + | [[https:// | ||
| + | |||
| + | ===== Spiral challenge: Wessen Roboter fährt am Ende der Lektion die " | ||
| + | |||
| + | |||
| + | |||
| + | ===== Programmierung des Roboters über Zustände (anders als bei der Turtle!) ===== | ||
| + | <WRAP center round important 100%> | ||
| + | Turtle- und Roboterprogrammierung unterscheiden sich! Finde die Unterschiede in den beiden folgenden Programmen und versuche sie zu erklären! | ||
| + | <WRAP left round box 47%> | ||
| + | <code python> | ||
| + | from mbrobot import * | ||
| + | |||
| + | forward() | ||
| + | delay(2000) | ||
| + | right() | ||
| + | delay(500) | ||
| + | stop() | ||
| + | </ | ||
| + | </ | ||
| + | <WRAP right round box 47%> | ||
| + | <code python> | ||
| + | from gturtle import * | ||
| + | makeTurtle() | ||
| + | |||
| + | forward(200) | ||
| + | |||
| + | right(130) | ||
| + | </ | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | <WRAP center round info 100%> | ||
| + | <hidden Bitte ausklappen> | ||
| + | * Die Befehle '' | ||
| + | * Sie versetzen den Roboter in den entsprechenden Bewegungszustand (Vorwärtsbewegung bzw. Rechtsdrehung). Dieser Zustand bleibt so lange erhalten, bis der Roboter in einen anderen Zustand versetzt wird. | ||
| + | |||
| + | * Der Befehl '' | ||
| + | |||
| + | * Am Ende jedes Roboterprogramms sollte der Befehl '' | ||
| + | |||
| + | * Am Anfang ist ein Befehl wie '' | ||
| + | |||
| + | Tafelanschrieb dazu: | ||
| + | |||
| + | {{: | ||
| + | |||
| + | </ | ||
| + | </ | ||
| + | |||
| + | ===== Roboter in Betrieb nehmen ===== | ||
| + | |||
| + | Wir arbeiten mit dem Maqueen-Roboter (DF Robot) - der Mechanik - und der micro: | ||
| + | |||
| + | Je zwei Leute bekommen einen Roboter. Bitte sorgsam behandeln! | ||
| + | |||
| + | * Die Batteriebox aus dem schwarzen Säckli NICHT verwenden. | ||
| + | * Den Mikrocontroller/ | ||
| + | * Computer per USB-Kabel mit dem micro:bit verbinden. | ||
| + | * In Tigerjython über das Menü " | ||
| + | * {{: | ||
| + | * In Tigerjython über das Menü " | ||
| + | * {{: | ||
| + | * Dies kann gut 1-2 Minuten dauern. Im Ausgabebereich von Tigerjython wird angezeigt, was gerade passiert. Am Ende erscheint " | ||
| + | * {{: | ||
| + | * Schalte den Roboter an (kleiner Schieberegler " | ||
| + | |||
| + | <WRAP center round info 100%> | ||
| + | Es gibt zwei Ausführungsarten: | ||
| + | * Simulationsmodus mit dem üblichen Run-Button {{: | ||
| + | * Realmodus/ | ||
| + | |||
| + | Im Robotermodus wird das Programm auf den Mikropprozessor hochgeladen und sofort ausgeführt (falls der Mikroprozessor eingesteckt ist und der Roboter angeschaltet ist). Eventuell wird man noch aufgefordert, | ||
| + | |||
| + | Der Roboter kann dann auch ausgesteckt werden und das Programm kann mit dem Knopf neben der USB-Buchse am micro:bit gestartet werden. | ||
| + | </ | ||
| + | |||
| + | |||
| + | ==== Aufgabe 5 (Roboter kennenlernen) ==== | ||
| + | |||
| + | <WRAP center round todo 100%> | ||
| + | **Partnerarbeit** | ||
| + | |||
| + | Kopiere das folgende Python-Programm in Tigerjython und führe es zuerst im Simulationsmodus und dann im Realmodus aus. | ||
| + | |||
| + | Lerne deinen Roboter durch Experimentieren kennen! Für welche Werte der beiden Variablen | ||
| + | * fährt dein Roboter zuerst eine Strecke von ca. 10 cm ab und | ||
| + | * dreht sich dann um ca. $90^\circ$ nach rechts? | ||
| + | **Seid nicht zu idealistisch. Auf dem Fussboden können die Werte anders sein als auf dem Tisch ...** | ||
| + | |||
| + | Schreibe das Programm mit Hilfe einer '' | ||
| + | |||
| + | <code python> | ||
| + | from mbrobot import * | ||
| + | |||
| + | zeitVorwaerts = 4000 | ||
| + | zeitRechtsdrehung = 2000 | ||
| + | |||
| + | delay(1000) # Damit der Roboter nach Kopfdruck nicht sofort losfährt. | ||
| + | |||
| + | forward() | ||
| + | delay(zeitVorwaerts) | ||
| + | right() | ||
| + | delay(zeitRechtsdrehung) | ||
| + | stop() | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | |||
| + | ==== Aufgabe 6, Hausaufgabe (quadratische Spirale mit Roboter abfahren - kann eventuell während der Lektion begonnen werden) ==== | ||
| + | |||
| + | <WRAP center round todo 100%> | ||
| + | **Partnerarbeit** | ||
| + | |||
| + | Programmiere den Roboter so, dass er eine " | ||
| + | |||
| + | Verwende dazu die Erkenntnisse aus der vorigen Aufgabe und dein Turtle-Programm für die quadratische Spirale (du musst dort nur ein paar Änderungen vornehmen). | ||
| + | |||
| + | Wenn du es zu Hause in Einzelarbeit ohne Roboter machst: Verwende den Simulationsmodus. | ||
| + | |||
| + | <hidden **Bonusaufgabe** (bitte ausklappen)> | ||
| + | Mit den Befehlen '' | ||
| + | |||
| + | Schreibe dein Programm so um, dass die LEDS bei jeder Abbiegung ihren Zustand wechseln. | ||
| + | |||
| + | (Der " | ||
| + | |||
| + | <hidden Hinweis zur LED-Steuerung (bitte ausklappen)> | ||
| + | Mir fallen zwei Möglichkeiten ein: | ||
| + | - " | ||
| + | - Eleganter: Verwende eine neue Variable '' | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | ---- | ||
| + | |||
| + | Abgabe bis **spätestens Sonntagabend 23:59 Uhr** vor der nächsten Doppellektion über den folgenden Link: | ||
| + | |||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | </ | ||
| + | |||
| + | ==== Spiral challenge: Wessen Roboter fährt die " | ||
| + | |||
| + | ... falls am Ende genug Zeit ist ... | ||
| + | ==== Zusammenfassung ==== | ||
| + | |||
| + | <hidden Was habt ihr heute gelernt? Zuerst selbst überlegen!> | ||
| + | * Vom Problem zum Programm (Algorithmen- und Programmentwurf) | ||
| + | * Flussdiagramm als Zwischenschritt | ||
| + | * Turtlesteuerung mit Hilfe von Variablen: Spirale zeichnen | ||
| + | * Programmierung des Roboters: Quadrat und Spirale | ||
| + | * Roboter machen im Gegensatz zur Turtle oft nicht ganz genau das, was man sich erhofft, denn es gibt viele Einflussfaktoren: | ||
| + | </ | ||
| + | |||
| + | |||
| + | ====== Für die Schnellen ====== | ||
| + | |||
| + | |||
| + | ==== Aufgabe 7, Bonusaufgabe (Verwendung eines Sensors, Rasenmäh-Roboter) ==== | ||
| + | |||
| + | <WRAP center round todo 100%> | ||
| + | (1) Halte deine Hand in unterschiedlichen Abständen vor den Roboter, während das folgende Programm läuft, um zu verstehen, wie du die Werte des Abstandssensors bekommst. | ||
| + | |||
| + | Damit '' | ||
| + | <code python> | ||
| + | from mbrobot import * | ||
| + | |||
| + | # Die folgende Zeile ist dasselbe wie " | ||
| + | while True: | ||
| + | d = getDistance() | ||
| + | print(d) | ||
| + | delay(100) | ||
| + | </ | ||
| + | |||
| + | (2) Verstehe das folgende Programm durch Ausprobieren: | ||
| + | <code python> | ||
| + | x = input(" | ||
| + | if x < 0: | ||
| + | print(" | ||
| + | </ | ||
| + | |||
| + | (3) Programmiere den Roboter nun so, dass er sich wie ein Rasenmäh-Roboter verhält: Er läuft solange vorwärts, bis er sich nahe genug vor einer " | ||
| + | |||
| + | <hidden **Bonusaufgabe** (bitte ausklappen)> | ||
| + | Mit den Befehlen '' | ||
| + | Schreibe dein Programm so um, dass die LEDs beim Rückwärtsfahren aufleuchten und sonst nicht. | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | ===== Fragebox - auch zum Besprechen von Programmen während der Lektion (NICHT für Hausaufgaben) ===== | ||
| + | |||
| + | Bitte einfach am Anfang des Programms oder der eingereichten Datei die Frage aufschreiben (mit oder ohne Hashtag ''#'' | ||
| + | |||
| + | [[https:// | ||
| + | |||
| + | |||
| + | |||
| + | ===== Lösungsvorschläge ===== | ||
| + | |||
| + | Lösungen zu den Aufgaben 4 und 6 sind auf der Seite der nächsten Doppellektion unten. | ||
| + | |||
| + | <hidden Aufgabe 1: Flussdiagramm zur Spirale> | ||
| + | Tafelaufschrieb Klasse 1a: | ||
| + | |||
| + | {{: | ||
| + | |||
| + | Tafelaufschrieb Klasse 1c: | ||
| + | |||
| + | {{: | ||
| + | </ | ||
| + | |||
| + | <hidden Aufgabe 2: Turtle-Spirale> | ||
| + | <code python> | ||
| + | from gturtle import * | ||
| + | makeTurtle() | ||
| + | |||
| + | n = 16 # Anzahl der Bewegungen, darf gerne verändert werden | ||
| + | |||
| + | s = 10 | ||
| + | g = 0 # speichert die bis zum aktuellen Zeitpunkt zurückgelegte Strecke | ||
| + | |||
| + | repeat n: | ||
| + | forward(s) | ||
| + | right(90) | ||
| + | g = g + s | ||
| + | s = s + 10 | ||
| + | print(" | ||
| + | print(g) | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | <hidden Aufgabe 3: Quadrate mit demselben linken unteren Eckpunkt> | ||
| + | <code python> | ||
| + | from gturtle import * | ||
| + | makeTurtle() | ||
| + | # hideTurtle() | ||
| + | |||
| + | n = input(" | ||
| + | s = 70 | ||
| + | d = 10 | ||
| + | |||
| + | repeat n: | ||
| + | repeat 4: | ||
| + | forward(s) | ||
| + | right(90) | ||
| + | s = s + d | ||
| + | </ | ||
| + | </ | ||
| + | | ||
| + | <hidden Aufgabe 5: Quadrat mit Roboter> | ||
| + | <code python> | ||
| + | from mbrobot import * | ||
| + | |||
| + | zeitVorwaerts = 666 | ||
| + | zeitRechtsdrehung = 450 | ||
| + | # Diese Zeitangaben haben bei meinem Roboter (ungefähr) | ||
| + | # funktioniert. Im Simulationsmodus sind das aber keine | ||
| + | # rechten Winkel beim Abbiegen. | ||
| + | |||
| + | repeat 4: | ||
| + | forward() | ||
| + | delay(zeitVorwaerts) | ||
| + | right() | ||
| + | delay(zeitRechtsdrehung) | ||
| + | stop() | ||
| + | </ | ||
| + | </ | ||
| + | ===== Link zur Kursseite ===== | ||
| + | |||
| + | [[lehrkraefte: | ||
| + | |||