Unser Farbsensor TCS230 (ohne Bibliothek)

Den heutigen Blogbeitrag wollen wir nutzen um unser TCS Farb-Sensor Modul vorzustellen. Die Funktionsweise ist schnell erklärt, in der Mitte der Platine befindet sich ein Fotosensor mit 64 Dioden bzw. Pixel, davon 16 ohne Filter und jeweils 16 mit roten, blauen oder grünen Farbfiltern. Die 4 5mm Leds dienen dazu, das zu scannende Objekt möglichst gleichmäßig und neutral zu beleuchten. Praxistipp: zur Messung sollten Sie Umgebungslicht bzw. Streulicht vermeiden da dies die Ergebnisse verfälschen kann. Je nach Einsatzbereich ist es manchmal hilfreich den Fotosensor mithilfe eines kleinen Röhrchens abzuschirmen um konstante Werte zu erhalten.

Die Ausgabe des ICs ist ein Rechtecksignal proportional zur jeweiligen Wellenlänge. S0 und S1 skalieren die Frequenz des Ausgangssignals, S2 und S3 dient zur Abfrage der R- / B- / G- und W-Werte.OE schaltet das Modul ein bzw. aus (enable active low)

Die Verkabelung:

Der Code: 

const int s0 = 8; //Pins
const int s1 = 9;
const int s2 = 12;
const int s3 = 11;
const int out = 10;

int red = 0; // Var
int green = 0;
int blue = 0;


void setup()

{

Serial.begin(115200);

pinMode(s0, OUTPUT); 

pinMode(s1, OUTPUT);

pinMode(s2, OUTPUT);

pinMode(s3, OUTPUT);

pinMode(out, INPUT);

digitalWrite(s0, HIGH); //set mode

digitalWrite(s1, HIGH);

}


void loop()

{

color();

Serial.print("red = ");

Serial.print(red, DEC);

Serial.print("  green = ");

Serial.print(green, DEC);

Serial.print("  blue = ");

Serial.print(blue, DEC);

if (red < blue && red < green && red < 20) //red filter
{
Serial.println(" – (red color detected)");
}
else if (blue < red && blue < green) //blue filter
{
Serial.println(" – (blue color detected)");
}
else if (green < red && green < blue) //green filter
{
Serial.println(" – (green color detected)");
}
else
{
Serial.println();
}
delay(400);
}


void color()

{

digitalWrite(s2, LOW);

digitalWrite(s3, LOW);

red = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH);

digitalWrite(s3, HIGH);

blue = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH);

digitalWrite(s2, HIGH);

green = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH);

}

Je nachdem wo das Modul verbaut wird ist es u.U. nötig den Farbfilter anzupassen.

Somit steht Ihrer M&Ms-Sortier-Maschine nichts mehr im Weg :-)
Übrigens haben wir auch Servos & Schrittmotortreiber

Letzter Artikel Mehrere I²C Module an einem Mikrocontroller
Neuer Artikel STM32 mit USB Bootloader

Kommentar

AndreasK - August 4, 2018

Hallo, ich arbeite im Druckgewerbe. Dort ist der Einsatz von so genannten Spektralphotometern an der Tagesordnung. Nachteil: Die Finger sind richtig teuer und verschleißen mit der Zeit. Gibt der verwendete Chip eine exakte Messung her? Oder wie konstant misst er?
Ich denke, daraus kann man was machen.

RalfK - Juli 31, 2018

Also so eine M&M Sortiermaschine wäre schon ein Cooles Projekt :)

Hinterlasse einen Kommentar

Kommentare müssen vor der Veröffentlichung überprüft werden

Erforderliche Angabe