Allgemeines über EV3 - Sensoren

Möchte man einen Sensor benutzen, so muss man zunächst ein Objekt der entsprechenden Sensorklasse anlegen. Hierbei muss der entsprechende Sensorport angegeben werden, in dem sich der Sensor im EV3 befindet.

colorSensor = new EV3ColorSensor(SensorPort.S1);

Anschließend wird noch die Betriebsart des Sensors benötigt. So kann man den Farbsensor auch nur als Lichtsensor nutzen.

colorSensor.setCurrentMode("Red");

Die Messwerte des Sensors werden in einem Array gespeichert, auch wenn jeweils nur ein Wert übertragen wird. Die  Größe des Arrays ist vom jeweiligen Sensormodus abhängig und sollte deswegen erst danach angegeben werden.

farbe = new float[colorSensor.sampleSize()];

Abgefragt wird der Sensor dann über den Befehl:

colorSensor.fetchSample(RGB_Sensor.sample, 0);

Beispielprogramm mit zwei Motoren und einem Sensor

Hier wird zusätzlich zu den zwei Motoren ein Sensor angeschlossen. Das folgende zeigt, wie man den Sensor im Programm anmeldet.

im Deklarationsteil der Klasse

  • eine Variable für den Entfernungssensor (EV3UltrasonicSensor entfernungsSensor;)
  • eine Variable für den Abstand (float[] entfernung;)

Konkreter (im Konstruktor): MeinRoboter()

  • Wo ist der Sensor angeschlossen? (entfernungsSensor = new EV3UltrasonicSensor(SensorPort.S4);)
  • In welchem Modus soll er arbeiten? (entfernungsSensor.setCurrentMode("Distance");)
  • Weiche Daten werden erwartet? (entfernung = new float[entfernungsSensor.sampleSize()];)

Im Programm (im main)

  • Messen der Enternung. m.entfernungsSensor.fetchSample(m.entfernung, 0);
  • der Abstand steht in der Variabelen: m.entfernung[0] 

Der Roboter soll, falls ein Hindernis erkannt wird ausweichen.

Beispiel

Motor und Sensor

import lejos.hardware.Button;
import lejos.hardware.motor.EV3LargeRegulatedMotor;
import lejos.hardware.port.MotorPort;
import lejos.hardware.port.SensorPort;
import lejos.hardware.sensor.EV3UltrasonicSensor;
import lejos.utility.Delay;

public class MeinRoboter {
	EV3LargeRegulatedMotor MotorL;
	EV3LargeRegulatedMotor MotorR;

	EV3UltrasonicSensor entfernungsSensor;
	float[] entfernung;

	MeinRoboter() {
		MotorL = new EV3LargeRegulatedMotor(MotorPort.B);
		MotorR = new EV3LargeRegulatedMotor(MotorPort.C);
		entfernungsSensor = new EV3UltrasonicSensor(SensorPort.S4);
		entfernungsSensor.setCurrentMode("Distance");
		entfernung = new float[entfernungsSensor.sampleSize()];
	}

	public static void main(String[] args) {
		// einen konkreten Roboter mit Namen m erzeugen
		MeinRoboter m = new MeinRoboter();

		m.MotorL.setSpeed(720); // in Grad pro Sekunde
		m.MotorR.setSpeed(720); // in Grad pro Sekunde

		while (Button.ESCAPE.isUp()) {
			m.entfernungsSensor.fetchSample(m.entfernung, 0);
			if (m.entfernung[0] < 0.2) {
				m.MotorL.forward();
				m.MotorR.backward();
				Delay.msDelay(200);
			} else {
				m.MotorL.forward();
				m.MotorR.forward();
			}
		} // ende while
		// Motoren sofort stoppen
		m.MotorL.stop(false);
		m.MotorR.stop(false);
	} // ende main
} // ende class MeinRoboter