i

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());      
    }  
  }
}

Suche

v
13.2.4.3.1
inf-schule.de/informatiksysteme/robotik/messendarstellen/lichtfarbe/funktionstest
inf-schule.de/13.2.4.3.1
inf-schule.de/@/page/MvB8eZgVotIGopTM

Rückmeldung geben