Braitenberg Lösung: Unterschied zwischen den Versionen

Aus microbit - Das Schulbuch
Wechseln zu: Navigation, Suche
 
Zeile 10: Zeile 10:
 
: Denke immer daran: Sicherheit geht vor - alle Variablen initialisieren, d.h. auf einen vernünftigen Startwert setzen und  - vor allem bei Robotern - einmal alle Motoren ausschalten. <spoiler>Wichtig ist es zur Sicherheit einmal die Motoren auszuschalten. Dann sollten wir auch die Variable mit der wir Start/Stopp regeln wollen auf den Stopp-Wert setzen und auch die Geschwindigkeiten einmal für den Anfang auf 0.</spoiler>
 
: Denke immer daran: Sicherheit geht vor - alle Variablen initialisieren, d.h. auf einen vernünftigen Startwert setzen und  - vor allem bei Robotern - einmal alle Motoren ausschalten. <spoiler>Wichtig ist es zur Sicherheit einmal die Motoren auszuschalten. Dann sollten wir auch die Variable mit der wir Start/Stopp regeln wollen auf den Stopp-Wert setzen und auch die Geschwindigkeiten einmal für den Anfang auf 0.</spoiler>
 
; Wie können wir nun das Starten und Stoppen des Roboters mit den Tasten A und B bewerkstelligen?
 
; Wie können wir nun das Starten und Stoppen des Roboters mit den Tasten A und B bewerkstelligen?
: Wenn wir in der Hauptschleife "Dauerhaft" immer prüfen ob eine bestimmte Variable gesetzt ist, bevor wir echte Geschwindigkeiten an die Motoren ausgeben, müssen wir nur beim Drücken von A oder B diese Variable auf die richtigen Werte setzen.
+
: Wenn wir in der Hauptschleife "Dauerhaft" immer prüfen, ob eine bestimmte Variable gesetzt ist, bevor wir echte Geschwindigkeiten an die Motoren ausgeben, müssen wir nur beim Drücken von A oder B diese Variable auf die richtigen Werte setzen.
 
; Wenn das Programm läuft, muss nur noch die Lichtstärke dauerhaft abgefragt, umgerechnet und an die Motoren ausgegeben werden.
 
; Wenn das Programm läuft, muss nur noch die Lichtstärke dauerhaft abgefragt, umgerechnet und an die Motoren ausgegeben werden.
 
: Das ist etwas trickreich und kann nacheinander oder in einer einzigen Anweisung gemacht werden. Nacheinander heißt das zB
 
: Das ist etwas trickreich und kann nacheinander oder in einer einzigen Anweisung gemacht werden. Nacheinander heißt das zB
* Speichere den Wert des rechten Sensoren, den du von Pin 1 einliest (oder wo auch immer der Sensor verbunden ist!) in die Variable für den rechten Sensor
+
* Speichere den Wert des rechten Sensors, den du von Pin 1 einliest (oder wo auch immer der Sensor verbunden ist!) in die Variable für den rechten Sensor
 
* Rechne den Wert auf den prinzipiell richtigen Bereich um. <spoiler>Damit ist gemeint, wenn der Sensor zB Werte von 0 bis 1023 zurückgibt, den Motor aber nur Werte von 0 bis 100 erlaubt, dann dividieren wir den Sensorwert einmal durch 10.</spoiler>
 
* Rechne den Wert auf den prinzipiell richtigen Bereich um. <spoiler>Damit ist gemeint, wenn der Sensor zB Werte von 0 bis 1023 zurückgibt, den Motor aber nur Werte von 0 bis 100 erlaubt, dann dividieren wir den Sensorwert einmal durch 10.</spoiler>
* Prüfe ob der Wert in einem gültigen Bereich ist um damit den Motor anzusteuern. <spoiler>Da gibt es einen coolen Befehl, der alles auf einmal macht: Mathematik -> Minimal (damit nimmt der micro:bit den kleineren der beiden Werte)</spoiler>
+
* Prüfe ob der Wert in einem gültigen Bereich ist, um damit den Motor anzusteuern. <spoiler>Da gibt es einen coolen Befehl, der alles auf einmal macht: Mathematik -> Minimal (damit nimmt der micro:bit den kleineren der beiden Werte)</spoiler>
 
* Setze die Motorgeschwindigkeit des richtigen (je nach gewünschtem Verhalten) Motors auf diesen Wert, wenn er fahren soll.
 
* Setze die Motorgeschwindigkeit des richtigen (je nach gewünschtem Verhalten) Motors auf diesen Wert, wenn er fahren soll.
 
: Das sieht dann alles nacheinander zB so aus: <spoiler text="Lösung"><pre id="pre4">
 
: Das sieht dann alles nacheinander zB so aus: <spoiler text="Lösung"><pre id="pre4">
Zeile 42: Zeile 42:
 
</pre></spoiler>
 
</pre></spoiler>
 
; Wie können wir nun das Starten und Stoppen des Roboters mit den Tasten A und B bewerkstelligen?
 
; Wie können wir nun das Starten und Stoppen des Roboters mit den Tasten A und B bewerkstelligen?
: Eigenlich muss ja nur die entsprechende Variable gesetzt werden ... <spoiler text="Lösung"><pre id="pre4">
+
: Eigentlich muss ja nur die entsprechende Variable gesetzt werden ... <spoiler text="Lösung"><pre id="pre4">
 
input.onButtonPressed(Button.A, function () {
 
input.onButtonPressed(Button.A, function () {
 
     Go = true
 
     Go = true
Zeile 52: Zeile 52:
 
; Wenn das Programm läuft, muss nur noch die Lichtstärke dauerhaft abgefragt, umgerechnet und an die Motoren ausgegeben werden.
 
; Wenn das Programm läuft, muss nur noch die Lichtstärke dauerhaft abgefragt, umgerechnet und an die Motoren ausgegeben werden.
 
=== Lichtfolger ===
 
=== Lichtfolger ===
: Das sieht im einfachsten Fall für einen Roboter der auf das Licht zufährt so aus: <spoiler text="Lösung"><pre id="pre4">
+
: Das sieht im einfachsten Fall für einen Roboter, der auf das Licht zufährt, so aus: <spoiler text="Lösung"><pre id="pre4">
 
basic.forever(function () {
 
basic.forever(function () {
 
     SpeedR = Math.min(pins.analogReadPin(AnalogPin.P1) / 10, 100)
 
     SpeedR = Math.min(pins.analogReadPin(AnalogPin.P1) / 10, 100)
Zeile 66: Zeile 66:
 
</pre></spoiler>
 
</pre></spoiler>
 
=== Lichtflüchter ===
 
=== Lichtflüchter ===
: Und für einen Roboter der vor dem Licht flüchtet so: <spoiler text="Lösung"><pre id="pre4">
+
: Und für einen Roboter, der vor dem Licht flüchtet so: <spoiler text="Lösung"><pre id="pre4">
 
basic.forever(function () {
 
basic.forever(function () {
 
     SpeedL = Math.min(pins.analogReadPin(AnalogPin.P1) / 10, 100)
 
     SpeedL = Math.min(pins.analogReadPin(AnalogPin.P1) / 10, 100)

Aktuelle Version vom 10. März 2022, 15:46 Uhr

Grundsätzliche Überlegungen

Für dieses Beispiel sind folgende Ideen wichtig:

  • Was sind Ereignisse und welche gibt es beim micro:bit?
  • Wie funktionieren Abfragen und wie können damit Vergleiche verwendet werden?
  • Wie lese ich analoge Werte von Sensoren am BBC micro:bit ein? Welche Wertebereiche haben die Sensoren?
  • Wie kann ich Motoren mit dem BBC micro:bit ansteuern? Mit welchen minimalen und maximalen Geschwindigkeiten kann ich die Motoren betreiben?

Tipps und Tricks

Beim Starten des Programms, was müssen wir alles festlegen?
Denke immer daran: Sicherheit geht vor - alle Variablen initialisieren, d.h. auf einen vernünftigen Startwert setzen und - vor allem bei Robotern - einmal alle Motoren ausschalten. Hinweis
Wie können wir nun das Starten und Stoppen des Roboters mit den Tasten A und B bewerkstelligen?
Wenn wir in der Hauptschleife "Dauerhaft" immer prüfen, ob eine bestimmte Variable gesetzt ist, bevor wir echte Geschwindigkeiten an die Motoren ausgeben, müssen wir nur beim Drücken von A oder B diese Variable auf die richtigen Werte setzen.
Wenn das Programm läuft, muss nur noch die Lichtstärke dauerhaft abgefragt, umgerechnet und an die Motoren ausgegeben werden.
Das ist etwas trickreich und kann nacheinander oder in einer einzigen Anweisung gemacht werden. Nacheinander heißt das zB
  • Speichere den Wert des rechten Sensors, den du von Pin 1 einliest (oder wo auch immer der Sensor verbunden ist!) in die Variable für den rechten Sensor
  • Rechne den Wert auf den prinzipiell richtigen Bereich um. Hinweis
  • Prüfe ob der Wert in einem gültigen Bereich ist, um damit den Motor anzusteuern. Hinweis
  • Setze die Motorgeschwindigkeit des richtigen (je nach gewünschtem Verhalten) Motors auf diesen Wert, wenn er fahren soll.
Das sieht dann alles nacheinander zB so aus: Lösung
Mache das gleiche dann für den linken Sensor nochmal!

Komplettlösungen

Beim Starten des Programms, was müssen wir alles festlegen?
Eine mögliche Lösung für den Start? Lösung
Wie können wir nun das Starten und Stoppen des Roboters mit den Tasten A und B bewerkstelligen?
Eigentlich muss ja nur die entsprechende Variable gesetzt werden ... Lösung
Wenn das Programm läuft, muss nur noch die Lichtstärke dauerhaft abgefragt, umgerechnet und an die Motoren ausgegeben werden.

Lichtfolger

Das sieht im einfachsten Fall für einen Roboter, der auf das Licht zufährt, so aus: Lösung

Lichtflüchter

Und für einen Roboter, der vor dem Licht flüchtet so: Lösung
Vielleicht sollte bei dem Lichtflüchter dann auch ein anderes Symbol am Bildschirm ausgegeben werden, damit man die Modelle leichter unterscheiden kann, wie zB Lösung