LBotics.at

Der Ultraschall-Sensor misst Entfernungen mit dem Prinzip der Weg/Zeit-Bestimmung zwischen ausgesandten und reflektierten akustischen Signalen im nicht hörbaren Bereich. Mit dem EV3 Ultraschall-Sensor können Entfernungen zwischen 3 und 150 cm gemessen werden.

Programmbeispiel - Kollisionsvermeidung mit einem Ultraschall-Sensor

An den Eingang 1 ist ein EV3 Ultraschall Sensor angeschlossen. Nach dem Start des Programms fährt der Roboter vorwärts in Richtung einer Wand. Ist die Entfernung zur Wand kleiner als 50 cm, bleibt der Roboter abrupt stehen und das Programm wird beendet.

#include "evclibrary.h"
int main()
{
// 1. Konfiguration der angeschlossenen Sensoren und Motoren
SET_OUT(OUT_A, OUT_MOTOR);
SET_OUT(OUT_B, OUT_MOTOR);
SET_IN(IN_1, IN_EV3_SONAR);
// 2. Initialisierung des EV3 Brick
EVC_INIT();
// 3. Steuerung des Roboters
WRITE_OUT(OUT_A, MOTOR_POWER, 40);
WRITE_OUT(OUT_B, MOTOR_POWER, 40);
while (1==1)
{
if (READ_IN(IN_1)<50)
{
WRITE_OUT(OUT_A, MOTOR_STOP, MOTOR_BRAKE);
WRITE_OUT(OUT_B, MOTOR_STOP, MOTOR_BRAKE);
break;
}
}
// 4. Programmende
EVC_CLOSE();
return 0;
}
Erklärungen zu diesem Programmbeispiel
Zeile 5: SET_OUT(OUT_A, OUT_MOTOR);

Mit der Funktion SET_OUT(port, value) wird festgelegt, an welchem Ausgang ein Motor angeschlossen ist.

Mit dem ersten Parameter port wird der gewünschte Ausgang angegeben: OUT_A, OUT_B, OUT_C oder OUT_D

Der zweite Parameter value gibt an, dass an dem entsprechenden Ausgang ein Motor angeschlossen ist: OUT_MOTOR

Zeile 7: SET_IN(IN_1, IN_EV3_SONAR);

Mit der Funktion SET_IN(port, value) wird festgelegt, welcher Sensor an einem Eingang angeschlossen ist – in diesem Fall ein Ultraschall-Sensor.

Mit dem ersten Parameter wird der Port festgelegt: IN_1, IN_2, IN_3 oder IN_4

Der zweite Parameter beschreibt den Typ des angeschlossenen Sensors: IN_EV3_TOUCH, IN_EV3_LIGHT, IN_EV3_COLOR, IN_EV3_SONAR, IN_EV3_GYRO

Zeile 11: WRITE_OUT(OUT_A, MOTOR_POWER, 40);

Die Funktion WRITE_OUT(port, mode, value) dient zum Ansteuern der Ausgänge.

Mit dem ersten Parameter port wird der gewünschte Ausgang festgelegt, hier OUT_A.

Der zweite Parameter mode gibt an, in welchem Modus der Motor betrieben werden soll: MOTOR_POWER

In diesem Modus dreht sich ein Motor mit einer vorgegebenen Geschwindigkeit. Erfährt der Motor einen Widerstand (z. B. ein Hindernis oder beim Hinauffahren einer schiefen Ebene), so wird dies erkannt und der Motor versucht die Drehgeschwindigkeit konstant zu halten indem er die Leistung je nach Widerstand nachregelt.

Der dritte Parameter value steht für die Geschwindigkeit mit der sich der Motor drehen soll. Die Werte können zwischen -100 und 100 liegen. Das Vorzeigen bestimmt die Drehrichtung, der Wert beschreibt eine der möglichen Geschwindigkeiten zwischen 0% und 100%.

Zeile 13: while (1==1) ...

Hier beginnt eine while-Schleife die grundsätzlich so lange läuft, bis das Programm beendet wird.

Zeile 15: if (READ_IN(IN_1)<50) ...

In der Bedingung dieser if-Abfrage wird mit der Funktion READ_IN(port) der aktuelle Wert des Ultraschall-Sensors ausgelesen und überprüft ob dieser Wert kleiner als 50 ist.

Zeile 17: WRITE_OUT(OUT_A, MOTOR_STOP, MOTOR_BRAKE);

Wird der Funktion WRITE_OUT(port, mode, value) der Wert MOTOR_STOP übergeben, bleibt der entsprechende Motor stehen.

Mit dem dritten Parameter wird festgelegt, ob ein Motor nachläuft (MOTOR_COAST) oder abrupt angehalten werden soll (MOTOR_BRAKE).

Zeile 19: break;

Ist die Bedingung der if-Abfrage erfüllt, werden die beiden Motoren angehalten und auch die while-Schleife verlassen, was in der Folge zum Beenden des Programms führt.