DAS PROJEKT
Du kannst den Edison über eine Fernbedienung fernsteuern. Wie du fest eingespeicherte Fahraktionen einer Fernbedienung zuweist, zeigen wir dir im Projekt “Fahren mit Fernbedienung“. In diesem Projekt hier machen wir etwas Besonderes. Wir senden dem Edison über eine Fernbedienung Signale (hier Code-Nummern) zu.
Willst du mehr wissen...Infrarot-Fernbedienungen senden mit einer Infrarot-LED Infrarotlicht aus, das für das menschliche Auge nicht sichtbar ist.
Das Infrarotlicht wird sehr schnell an- und ausgeschaltet und so werden Signale zu einem Infrarotempfänger übertragen. Edison besitzt so einen Empfänger. Jede Taste auf der Fernbedienung erzeugt ein eigenes Signal. Mit einem entsprechenden Programm kann Edison erkennen, welche Taste gedrückt wurde.
Dazu bringen wir dem Edison bei, welche Taste auf der Fernbedienung welcher Code-Nummer entspricht. Durch Drücken eine dieser Tasten auf der Fernbedienung senden wir die Code-Nummer an den Edison und er führt das aus, was wir für die Code-Nummer festgelegt haben. Wir erstellen dazu ein entsprechendes EdScratch-Programm und legen ein paar Fahraktionen fest. Mit dabei wird auch eine “Zufallsfahrt” sein, bei der Edison die Fahraktionen zufällig aus einer Reihe von Möglichkeiten wählt.
DEINE MISSION
Für dieses Projekt benötigst du zusätzlich:
- 1 Fernbedienung, die Edison erkennt (die Betriebsart Sony DVD funktioniert problemlos). Probiere einfach Fernbedienungen aus, die du im Haushalt hast.
- Dokument Edison Fernbedienung & Kodierungen (PDF) oder https://meetedison.com/content/Edison-robot-barcodes.pdf.
- Drucker zum Ausdrucken der Barcodes.
So verknüpfst du Kodierungen (Remote Codes) zwischen Edison und einer Fernbedienung:
- Stell auf der Fernbedienung die Betriebsart DVD ein, z.B. durch Drücken auf Taste DVD. Einfach ausprobieren, du kannst nichts kaputt machen.
- Platziere Edison rechts neben dem Barcode.
- Drück die runde Programmier-Taste 3x. Edison liest den Barcode ein.
- Drück auf der Fernbedienung die Taste, die du mit dem Remote Code verknüpfen möchtest. Nimm zum Beispiel die Taste “1” für den Remote Code 1.
- Ordne jedem Remote Code jeweils eine Taste auf deiner Fernbedienung zu.
Tipp: Siehe auch unser Projekt “FAHREN MIT FERNBEDIENUNG“.
Wir starten, indem wir die Remote Codes 1 bis 3 den entsprechenden Tasten auf der Fernbedienung zuweisen:
- Suche dir drei Tasten auf deiner Fernbedienung aus (z.B. 1, 2 und 3).
- Lass deinen Edison über die Barcodes für Code #1, Code #2 und Code #3 fahren und weise jeweils die von dir ausgesuchten Tasten auf der Fernbedienung zu.
Lege für den Remote Code 1 folgendes Fahrmanöver fest:
- Nach Senden von Remote Code 1 soll Edison die Aktionen nacheinander ausführen.
- Kurve links vorwärts für 180°.
- Drehung links um 180°.
- Kurve rechts vorwärts für 180°.
- Drehung rechts um 180°.
- Teste dein Programm. Du musst dazu das Programm mit der dreieckigen Starttaste starten, bevor du die Fernbedienung benutzt. Edison reagiert sonst nicht richtig auf deine Fernbedienung.
Den Abschnitt für Remote Code 1 haben wir so gestaltet (edison_ferngesteuert1_1.ees):
- Das Programm läuft in einer unendlichen Schleife (Block “forever”). Wir stoppen es manuell mit der viereckigen Stopptaste.
- Wir haben uns für eine If-Else-Klammer entschieden, um die Abfrage “remote code 1 received” (Remote Code 1 wird empfangen) durchzuführen. Die Erklärung findest du weiter unten.
- Wenn ein Remote Code erkannt wurde, müssen wir den entsprechenden Speicher zurücksetzen. Damit verhindern wir, dass “alte” Speicherwerte im weiteren Verlauf zu Programmfehlern führen. Wir setzen den Speicher mit Block “clear remote code sensor data” (Lösche Daten für Remote Code Sensor) aus der Kategorie “Sensing” (Erkennung) zu Beginn der Fahrbefehle zurück.
- Für die Fahraktionen benutzen wir die bekannten Blöcke aus Kategorie “Drive” (Fahren). Wir belassen die Geschwindigkeit auf der Voreinstellung 5 (mittlere Geschwindigkeit), denn es kommt hier nicht auf genaues Fahren an.
In unserem Programm fragen wir ab, ob Remote Code 1, 2 oder 3 gesendet wurde. Für Abfragen mit EdScratch kannst du “If-Blöcke” oder “If-Else-Blöcke” verwenden. Kannst du dir erklären, warum wir uns für “If-Else-Blöcke” entscheiden?
Nehmen wir an, es wird Remote Code 1 gesendet. Bei der Abfrage mit If-Blöcken wird folgendes passieren:
- In der ersten Abfrage wird erkannt, dass Remote Code 1 gesendet wurde. Die Aktion in der Klammer für Remote Code 1 wird ausgeführt.
- Danach wird die Abfrage für Remote Code 2 ausgeführt. Da Remote Code 2 nicht gesendet wurde, wird auch nichts ausgeführt.
- Danach wird die Abfrage für Remote Code 3 ausgeführt. Da Remote Code 3 nicht gesendet wurde, wird wieder nichts ausgeführt.
- Nachdem der richtige Remote Code (hier 1) erkannt wurde, ist es im gleichen Durchgang sinnlos, nach den anderen Remote Codes zu fragen.
Bei der Abfrage mit If-Else-Blöcken sieht es so aus:
- In der ersten Abfrage wird erkannt, dass Remote Code 1 gesendet wurde. Die Aktion in der Klammer für Remote Code 1 wird ausgeführt. Es wird nicht in Else-Zweig mit den anderen Abfragen gesprungen und für diesen Durchgang sind alle Abfragen beendet.
- Beide Möglichkeiten funktionieren, aber wir finden hier den “If-Else-Block” geschickter!
Bei Remote Code 2 wollen wir folgendes machen:
- Der Roboter fährt 15 cm vorwärts und piept dreimal.
- Der Roboter fährt 15 cm rückwärts und piept dreimal.
- Teste dein Programm. Starte zuerst das Programm mit der dreieckigen Starttaste, bevor du die Fernbedienung benutzt.
Hast du eine Idee, wie du das Programm mit dem Abschnitt für Remote Code 2 ergänzen kannst?
Lösungsvorschlag:Wir haben das so gelöst (edison_ferngesteuert2_2.ees):
- Für die Abfrage nach Remote Code 2 verschachteln wir If-Else-Blöcke ineinander. Wenn also Remote Code 1 nicht erkannt wurde, springt das Programm in den Else-Zweig und prüft dort auf Remote Code 2.
- Wenn Remote Code 2 erkannt wird, setzen wir zuerst den Sensorspeicher zurück.
- Dann lassen wir die bekannten Fahraktionen durchführen, denen jeweils ein dreimaliges Piepen folgt.
Lass uns in einem neuen Programm eine “Zufallsfahrt” programmieren, von der wir vorher nicht wissen, wie sie aussieht:
- Dazu legen wir sechs unterschiedliche Fahrmanöver fest:
1 – Vorwärtsfahrt 10 cm
2 – Rückwärtsfahrt 10 cm
3 – Kurvenfahrt links vorne 90°
4 – Kurvenfahrt rechts vorne 90°
5 – Drehung links 45°
6 – Drehung rechts 45° - Es sollen drei Fahrmanöver ausgeführt werden.
- Um die Zufallsfahrt zu testen, schreiben wir diese Fahrt als eigenständiges Programm.
Wenn wir ein Fahrmanöver zwischen 1 und 6 zufällig auswählen wollen, könnten wir einen Würfel nehmen und würfeln. Jede Zahl wird einem Fahrmanöver zugeordnet. Wurde eine Zahl gewürfelt, wird die dazugehörige Fahraktion ausgeführt. In einem EdScratch-Programm “würfelt” für uns der Block “random number between 1 and …” (Zufallszahl zwischen 1 und …) aus der Kategorie “Operators” (mathematische Operatoren).
Wir verwenden die Variable “zufallszahl” und weisen ihr den Zufallswert des Operators “random number” zu. Im Projekt “EDSCRATCH 4 – WENN DANN” zeigen wir, wie man Variablen erstellt. Wir fragen dann einfach den Wert der Variablen ab und lassen das dazugehörige Fahrmanöver ausführen.
Kannst du mit dieser Idee ein Programm für eine Zufallsfahrt entwickeln?
Lösungsvorschlag:Hier unser Programm für die Zufallsfahrt (edison_ferngesteuert3_2.ees):
- Zu Beginn wird die Variable “zufallszahl” mit einem zufälligen Wert zwischen 1 und 6 gesetzt.
- Wir wollen jede Fahraktion dreimal wiederholen. Deshalb setzen wir die Schleife “repeat 3” einmal um alle Fahraktionen. Du könntest diese Wiederholungsschleife auch um jede einzelne Fahraktion setzen. Dann hättest du allerdings 6 repeat-Schleifen statt einer.
- Mit der Verschachtelung von “If-Else-Blöcken” fragen wir den Wert der Zufallszahl ab.
- Wurde die Variable “zufallszahl” auf z.B. den Wert 2 gesetzt, dann werden nacheinander die Abfragen bis “if zufallszahl = 2” durchgeführt und die Rückwärtsfahrt für 10 cm gestartet. Wegen der Schleife “repeat 3” werden Abfrage und Fahraktion insgesamt dreimal durchgeführt.
Wir schließen dieses Projekt ab, indem wir Remote Code 3 mit dem Zufallsprogramm verknüpfen:
- Ergänze das Programm zur Fernsteuerung mit dem Code für die Zufallsfahrt. Wir starten die Zufallsfahrt, wenn wir mit der Fernbedienung Remote Code 3 an den Edison senden.
- Teste dein Programm. Starte zuerst das Programm mit der dreieckigen Starttaste, bevor du die Fernbedienung benutzt.
Schau mal unser Programm edison_ferngesteuert4_1.ees:
- Wir haben jetzt alle drei Abschnitte für die Remote Codes 1 bis 3 zusammengefügt.
- Was in den jeweiligen Abschnitten passiert, kannst du oben und in den Kommentaren zum Programm nachlesen.
So, das war natürlich erst der Start! Was fällt dir noch ein, was der Edison so tun soll?
Was du bei diesem Projekt lernen kannst:
- Mit einer IR-Fernbedienung kannst du Signale (Code-Nummern) an den Edison senden. Mit einem entsprechenden EdScratch-Programm kannst du die Code-Nummern mit bestimmten Aktionen verknüpfen.
- Das EdScratch zur Auswertung der Code-Nummern musst du mit der dreieckigen Starttaste starten, bevor du die Fernbedienung verwendest.
- Remote Code wie z.B. Code-Nummern werden auf dem Edison zwischengespeichert. Wir löschen den Speicher nach jeder Erkennung, damit “alte Werte” im Speicher nicht zu Fehlern führen.
- Für Abfragen kannst du If- oder If-Else-Blöcke verwenden. Gibt es aus einer Liste nur eine mögliche Antwort, dann macht die Verwendung von If-Else-Blöcken Sinn. Diese beenden nach der passenden Antwort alle Abfragen für den aktuellen Durchgang.
- Mit dem Block “random number” (Zufallszahl) unter Kategorie “Operators” hast du ein Werkzeug, mit dem der Roboter während des Programms Zufallszahlen erzeugen kann. Es bietet sich an, die Zufallszahl als Wert für eine Variable zu übernehmen. Die Variable kannst du dann für Abfragen oder weitere Berechnungen einsetzen.