Benutzer-Werkzeuge

Webseiten-Werkzeuge


Seitenleiste

bauteile:farbsensor

Farbsensor

Der Funktionsweise des Farbsensors im Labor ist identisch mit der von TCS230, der hier dargestellt ist (größere Abbildung nach dem Klicken verfügbar). Falls bei eurem Sensor die LEDs nicht automatisch an gehen und ein LED-Pin vorhanden ist, soll dieser Pin an 5V angeschlossen werden.

Der Sensor hat Filter, mit dessen Hilfe man verschiedene Wellenlängen – rot, blau, grün oder alle („clear“) – erfassen kann. Dafür dienen die Pins S2 und S3. Die Pins S0 und S1 dienen dazu, die Skalierung der Werte einzustellen. In der Abbildung oben erfolgt dies nicht über die digitalen Pins von Arduino, sondern dadurch, dass sie mit 5V oder GND mit einem Kabel verbunden sind.
Mehr dazu in der Einleitung

Die Sensor muss kalibriert werden, indem ihr die maximalen und minimalen Werte für jeden Kanal notiert (Variablen R_BLACK, R_WHITE, G_BLACK usw. im Code unten). Dafür richtet den Sensor auf eine weiße und eine schwarze Fläche.

// Farbsensor Pins
#define S2 7
#define S3 8
#define sensorOUT 9
 
// Konstante für die Sensorkalibrierung (ihr muesst sie anpassen):
int R_WHITE = 25;
int R_BLACK = 217;
int G_WHITE = 24;
int G_BLACK = 200;
int B_WHITE = 17;
int B_BLACK = 143;
int C_WHITE = 9;
int C_BLACK = 82;
 
 
void setup() {
  Serial.begin(9600);
  pinMode(S2, OUTPUT);
  pinMode(S3, OUTPUT);
}
 
void loop() {
  // Die map()-Funktion rechnet die Werte in den Bereich [0; 255] um:
  int rValue = map(sensorRead(0), R_BLACK, R_WHITE, 0, 255);
  int gValue = map(sensorRead(1), G_BLACK, G_WHITE, 0, 255);
  int bValue = map(sensorRead(2), B_BLACK, B_WHITE, 0, 255);
  int cValue = map(sensorRead(3), C_BLACK, C_WHITE, 0, 255);
  Serial.print("R: ");
  Serial.print(rValue);
  Serial.print("     G: ");
  Serial.print(gValue);
  Serial.print("     B: ");
  Serial.print(bValue);
  Serial.print("     C: "); // "Clear" = alle Kanäle
  Serial.println(cValue);
  delay(100);
}
 
// Ansteuerung des Farbsensors; Aufruf mit: 0 = "R", 1 = "G", 2 = "B", 3 = "C"
int sensorRead (int channel) {
  if (channel == 0 || channel == 2) {
    digitalWrite(S2, LOW);
  }
  else {
    digitalWrite(S2, HIGH);
  }
 
  if (channel == 0 || channel == 3) {
    digitalWrite(S3, LOW);
  }
  else {
    digitalWrite(S3, HIGH);
  }
 
  int valueSensor = pulseIn(sensorOUT, LOW);
  return valueSensor;
}
bauteile/farbsensor.txt · Zuletzt geändert: 2019/01/08 11:22 von d.golovko