Selbststeuerung

Beispiel eines realen Fahrzeugs

Ein nächster Schritt bei der Steuerung von Fahrzeugen ist, das Gefährt ein Stück weit autonom zu machen. Die Fähigkeit, ein Hindernis zu erkennen und rechtzeitig vor einem Zusammenprall zu stoppen und abzudrehen, soll hier als Beispiel dienen.

Zu den bereits bekannten Teilen hinzu kommt ein Grove Ultraschallsensor, der Hindernisse auf bis zu 35 cm Entfernung erkennen kann.

Der Sensor erzeugt Ultraschall-Signale, die für uns Menschen nicht hörbar sind. Aus der Zeit, die das Signal bis zu einem Gegenstand und zurück zum Sensor benötigt, kann der Calliope mini errechnen, wie weit ein Objekt entfernt ist und entsprechend reagieren.

Aufbau und Programmierung:

Mithilfe eines passenden Kabels werden Sensor und Calliope mini verbunden. Der Anschluss auf dem Calliope mini liegt rechts neben dem USB-Port (vgl. Abb. oben).

Zur Programmierung muss im MakeCode-Editor über „Erweiterungen“ das „Grove“- Paket geladen werden. In der mittleren Menüzeile des Editors erscheint daraufhin der Eintrag „Grove“. Dort findet sich unter „Ultraschall“ folgender Programmblock:

Mit ihm und den „Logik“-Bausteinen „wenn – dann“ und „kleiner als“ …

… lässt sich festlegen, bei welchem Abstand zu einem Hindernis der Sensor ansprechen soll. Im unten näher ausgeführten Beispiel sind das 20 cm.

Zuerst wird die die Klammer „wenn-dann“ in „dauerhaft“ eingebunden.

Danach wird der Baustein „0 = v 0“ bei „wahr“ eingefügt.

Im Block „0 = v 0“ wird in das linke weiße Feld mit der „0“ der Block „Entfernung …“ eingefügt.

Die übrigen Schritte können anhand der nachfolgenden Abbildung nachvollzogen werden.

Motoren- und Pausen-Bausteine können mit einem Rechtsklick dupliziert, die dort benötigten Zahlen mit einem einfachen Klick angewählt und dann überschrieben werden.

Verhalten des Fahrzeugs:

Wenn das Fahrzeug auf ein Hindernis trifft, stoppt es, fährt ein Stück rückwärts, dreht dann auf der Stelle und fährt weiter.

Hier der Code in JavaScript:

input.onButtonEvent(Button.A, input.buttonEventClick(), function () {
    motors.dualMotorPower(Motor.M0_M1, 50)
})
basic.forever(function () {
    if (grove.measureInCentimeters(DigitalPin.C16) < 20) {
        motors.dualMotorPower(Motor.M0_M1, 0)
        basic.pause(1000)
        motors.dualMotorPower(Motor.M0_M1, -50)
        basic.pause(2000)
        motors.dualMotorPower(Motor.M0, 50)
        basic.pause(2000)
        motors.dualMotorPower(Motor.M1, 50)
    }
})

Wer den Code kopiert, um ihn im MakeCode-Editor einzufügen, muss beachten, dass die „Grove“ Erweiterung gelade sein muss, um ihn in Blockcode wandeln zu können.

Ein ähnliches Bastelprojekt unter Verwendung eines eines Arduino-Mikrocontrollers findet sich hier.


Nach oben

Nach oben scrollen