Funktionstest von Licht- und Farbsensor
EV3-Farbsensor: Color-ID-Modus
Das nachfolgende Programm EV3FarbTestColorIDMode.java
misst wiederholend mit dem Farbsensor die ColorID
und wandelt diese in eine von acht definierten Farben um.
import lejos.hardware.Sound;
import lejos.hardware.port.SensorPort;
import lejos.hardware.sensor.EV3ColorSensor;
import lejos.robotics.Color;
import lejos.utility.Delay;
public class EV3FarbTestColorIDMode {
private static EV3ColorSensor cs = new EV3ColorSensor(SensorPort.S2);
public static float[] sample;
public static void main(String[] args) {
cs.setCurrentMode("ColorID"); //Color-ID-Mode
sample = new float[cs.sampleSize()];//in diesem Modus nur 1 Element
int i = 0;
while(true)
{
Delay.msDelay(500);
Sound.beep();
String farbe = missFarbe();
System.out.println(++i+")Farbe: " + farbe);
}
}
public static String missFarbe()
{
cs.fetchSample(sample, 0);
int farbID = (int)sample[0];
switch(farbID){
case Color.NONE: return "keine";//-1
case Color.BLACK: return "Schwarz";//7
case Color.BLUE: return "Blau";//2
case Color.GREEN: return "Gruen";//1
case Color.YELLOW: return "Gelb";//3
case Color.RED: return "Rot";//0
case Color.WHITE: return "Weiss";//6
case Color.BROWN: return "Braun";//13
default: return "nix";
}
}
}
EV3-Farbsensor: RGB-Modus
Das nachfolgende Programm EV3FarbTestRGBMode.java
misst wiederholend mit dem Farbsensor und zerlegt die Farbe in Werte für die drei Farbkanäle Rot, Grün und Blau. Diese zwischen 0 und 1 normierten Werte werden noch in den Bereich 0-255 umgewandelt.
import lejos.hardware.Sound;
import lejos.hardware.port.SensorPort;
import lejos.hardware.sensor.EV3ColorSensor;
import lejos.robotics.Color;
import lejos.utility.Delay;
public class EV3FarbTestRGBMode {
private static EV3ColorSensor cs = new EV3ColorSensor(SensorPort.S2);
public static float[] sample;
public static void main(String[] args) {
cs.setCurrentMode("RGB"); //RGB-Mode
sample = new float[cs.sampleSize()];//in diesem Modus 3 Elemente mit den normierten Werten [0-1] für Rot, Grün und Blau.
int i = 0;
while(true)
{
Delay.msDelay(500);
Sound.beep();
String farbe = missFarbe();
System.out.println(++i+")Farbe: " + farbe);
}
}
public static String missFarbe()
{
cs.fetchSample(sample, 0);
int rot = (int)(sample[0] * 255);
int gruen = (int)(sample[1] * 255);
int blau = (int)(sample[2] * 255);
return "R:"+rot +" G:"+gruen+" B:"+blau;
}
}
EV3-Farbsensor: Red-Modus
Hier wird der Anteil an reflektiertem Licht des roten Sensor-LEDs gemessen. Das LED muss zuvor angeschaltet sein. Die Messwerte sind in Prozent.
import lejos.hardware.Sound;
import lejos.hardware.port.SensorPort;
import lejos.hardware.sensor.EV3ColorSensor;
import lejos.robotics.Color;
import lejos.utility.Delay;
public class EV3FarbTestRedMode {
private static EV3ColorSensor cs = new EV3ColorSensor(SensorPort.S2);
public static float[] sample;
public static void main(String[] args) {
cs.setCurrentMode("Red"); //Red-Mode
sample = new float[cs.sampleSize()];//in diesem Modus nur 1 Element
cs.setFloodlight(true);//LED anschalten
int i = 0;
while(true)
{
Delay.msDelay(500);
Sound.beep();
String intensitaet = missHelligkeit();
System.out.println(++i+")Helligkeit: " + intensitaet);
}
}
public static String missHelligkeit()
{
cs.fetchSample(sample, 0);
return (int)(sample[0] * 100)+"";
}
}
EV3-Farbsensor: Ambient-Modus
Das nachfolgende Programm EV3FarbTestAmbientMode.java
misst wiederholend den Anteil an ambientem Licht. Die Sensor-LED ist ausgeschaltet und man kann die Intensität von externen Lichtquellen messen, wobei die Messwerte in Prozent angezeigt werden.
import lejos.hardware.Sound;
import lejos.hardware.port.SensorPort;
import lejos.hardware.sensor.EV3ColorSensor;
import lejos.robotics.Color;
import lejos.utility.Delay;
public class EV3FarbTestAmbientMode {
private static EV3ColorSensor cs = new EV3ColorSensor(SensorPort.S2);
public static float[] sample;
public static void main(String[] args) {
cs.setCurrentMode("Ambient"); //Ambient-Mode
sample = new float[cs.sampleSize()];//in diesem Modus nur 1 Element
int i = 0;
while(true)
{
Delay.msDelay(500);
Sound.beep();
String intensitaet = missHelligkeit();
System.out.println(++i+")Helligkeit: " + intensitaet);
}
}
public static String missHelligkeit()
{
cs.fetchSample(sample, 0);
return (int)(sample[0] * 100)+"";
}
}
NXT: Helligkeit messen mit Lichtsensor
Im nachfolgenden Programm LinieFolgen.java
wird der Roboter von zwei Motoren angetrieben, gestartet mit gleicher Geschwindigkeit. Der Lichtsensor misst wiederholend die Helligkeit und unterscheidet beim Messergebnis drei Intervalle. Durch Veränderung der Motorgeschwindigkeit in Abhängigkeit der Messung fährt dreht sich der Roboter minimal nach links, rechts oder fährt ein kleines Stück geradeaus.
import lejos.nxt.Motor;
import lejos.nxt.NXTRegulatedMotor;
import lejos.nxt.LightSensor;
import lejos.nxt.SensorPort;
public class LinieFolgen
{
public static LightSensor ls = new LightSensor(SensorPort.S3);
public static NXTRegulatedMotor reMo = Motor.A;
public static NXTRegulatedMotor liMo = Motor.B;
public static void main (String args[])
{
reMo.setSpeed(800);
liMo.setSpeed(800);
reMo.forward();
liMo.forward();
while(true)
{
int val = ls.readValue();
if(val < 30)
{
reMo.setSpeed(800);
liMo.setSpeed(200);
}
else
{
if(val > 50)
{
reMo.setSpeed(200);
liMo.setSpeed(800);
}
else
{
reMo.setSpeed(800);
liMo.setSpeed(800);
}
}
}
}
}
NXT-Farbsensor: Farbig leuchten und Farben messen
Das nachfolgende Programm FarbTest.java
misst wiederholend mit dem Farbsensor die ColorID
sowie die RGB-Farbwerte. Diese werden fortlaufend aktualisiert auf dem Display des Bricks angezeigt. Das Flutlicht wird in der Farbe der erfassten ColorID
eingefärbt.
import lejos.nxt.ColorSensor;
import lejos.nxt.SensorPort;
import lejos.nxt.LCD;
import lejos.robotics.Color;
public class FarbTest
{
public static void main (String args[])
{
ColorSensor cs = new ColorSensor(SensorPort.S1);
while(true)
{
int val = cs.getColorID();
Color c = cs.getColor();
LCD.clear();
LCD.drawInt(val, 0, 0);
LCD.drawInt(c.getRed(), 0, 1);
LCD.drawInt(c.getGreen(),0, 2);
LCD.drawInt(c.getBlue(), 0, 3);
cs.setFloodlight(cs.getColorID());
}
}
}