LBotics.at

Der Gyro-Sensor ermöglicht es, ausgehend von einem eingebauten Sensor, der Drehbeschleunigungen misst, Drehbewegungen zu ermitteln. Der Sensor liefert die aktuelle Richtung in Grad zurück.

ACHTUNG: Im Gyro-Sensor läuft eine Auto-Kalibrierung ab, sobald der EV3 Brick eingeschaltet wird. In dieser Zeit darf der Gyro-Sensor auf keinen Fall bewegt werden! Wird der Sensor genau während dieser Kalibrierung bewegt, werden die falschen Werte für den Zustand “still“ ermittelt und der Sensor driftet, was man dadurch beobachten kann, dass die vom Sensor gelieferten Werte ohne den Sensor zu bewegen hinauf- oder hinunterzählen.

Programmbeispiel - Umdrehen mit Hilfe eines Gyro-Sensors

Am Eingang 1 ist ein EV3 Gyro-Sensor angeschlossen. Der Roboter fährt zunächst für zwei Sekunden vorwärts, dreht sich um 180 Grad und fährt dann wiederum zwei Sekunden vorwärts bis zum ursprünglichen Ausgangspunkt.

#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_GYRO);
// 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);
SLEEP(2000);
WRITE_OUT(OUT_A, MOTOR_POWER, 20);
WRITE_OUT(OUT_B, MOTOR_POWER, -20);
while (1==1)
{
if (READ_IN(IN_1)>180)
{
WRITE_OUT(OUT_A, MOTOR_POWER, 40);
WRITE_OUT(OUT_B, MOTOR_POWER, 40);
break;
}
}
SLEEP(2000);
// 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_GYRO);

Mit der Funktion SET_IN(port, value) wird festgelegt, welcher Sensor an einem Eingang angeschlossen ist – in diesem Fall ein Gyro-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 wird der gewünschte Ausgang festgelegt, hier OUT_A.

Der zweite Parameter 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 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, derWert bezeichnet eine der möglichen Geschwindigkeiten zwischen 0% und 100%.

Zeile 13: SLEEP(2000);

Die weitere Ausführung des Programmcodes wird für zwei Sekunden angehalten.

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

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

Zeile 18: if (READ_IN(IN_1)>180) ...

In der Bedingung dieser if-Abfrage wird mit der Funktion READ_IN(port) der Wert des Gyro-Sensors ausgelesen und überprüft, ob dieser Wert größer als 180 ist.

Zeile 22: break;

Ist die Bedingung der if-Abfrage erfüllt, wird die while-Schleife verlassen.