Farbsensor-Modul TCS34725

Inhaltsverzeichnis

Für dieses Projekt benötigst du

Aufgabenstellung

Im Seriellen Monitor sollen die mit dem Farbsensor TCS34725 ermittelten Farbwerte angezeigt werden. Wird jeweils ein farbiger Streifen in den Farben rot, grün oder blau über den Farbsensor gehalten, zeigt der Serielle Monitor die entsprechende Farbe an.

Der RGB-Farbraum

Quelle: https://commons.wikimedia.org/wiki/File:Synthese%2B.svg

Der RGB-Farbraum besteht aus den drei Grundfarben rot, grün und blau. Fast alle Farben entstehen durch das Mischen dieser drei Grundfarben. Jede Farbe hat 256 Helligkeitsstufen, eine nichtaktive Farbe hat den Wert 0, die volle Helligkeit wird mit dem Wert 255 dargestellt.
Die Farbmischung wird durch den Wert der Helligkeit der drei Farben dargestellt.

Beispiele:
rot: 255, 0, 0
grün: 0, 255, 0
blau: 0, 0, 255
gelb: 255, 255, 0
schwarz: 0, 0, 0
weiß: 255, 255, 255

https://www.farb-tabelle.de/de/farbtabelle.htm

Die Hardware

Der Farbsensor kann die Farben rot, grün und blau (RGB) unterscheiden. Er wird mit I2C angeschlossen.

Wenn dir kein Grove-Shield zur Verfügung steht, kannst du den Stecker mit Kabeln verbinden und am Mikrocontroller anschließen.

Farbwerte im Seriellen Monitor anzeigen

Der Schaltplan

Hinweise zum Quellcode

Die gemessenen Farbwerte hängen von der Helligkeit der Umgebung ab. Mit Hilfe des Seriellen Monitors kannst du die Messergebnisse beobachten und anschließend in Zeilen 66 bis 68 den Grenzwert anpassen.

Benötigte Bibliothek

Nachdem du die Bibliothek ausgewählt hast, installiere im zweiten Schritte die benötigten Abhängigkeiten.

Der Quellcode

#include „Adafruit_TCS34725.h“

/*

  TCS34725_INTEGRATIONTIME

  längere Zeiten erhöhen die Empfindlichkeit besonders bei schwachem Licht

  mögliche Werte: 2.4MS, 50MS, 101MS, 154MS

  ———-

  TCS34725_GAIN

  Empfindlichkeit einstellen

  4X, 16X, 60X

*/

Adafruit_TCS34725 RGBSensor = Adafruit_TCS34725(TCS34725_INTEGRATIONTIME_50MS, TCS34725_GAIN_4X);

void setup()

{

  Serial.begin(9600);

  // auf serielle Verbindung warten

  while (!Serial);

  delay(1000);

  // Farbsensor starten

  if (RGBSensor.begin())

  {

    Serial.println(„Sensor gefunden!“);

  }

  // wenn der Sensor nicht gefunden wurde

  else

  {

    Serial.println(„Sensor nicht gefunden“);

    // Programm anhalten

    while (1);

  }

}

void loop()

{

  // Variable für die Farben

  float rot, gruen, blau;

  // Sensor einschalten

  RGBSensor.setInterrupt(false);

  delay(60);

  // Daten erfassen

  RGBSensor.getRGB(&rot, &gruen, &blau);

  // Sensor ausschalten

  RGBSensor.setInterrupt(true);

  // Farbwerte anzeigen

  Serial.print(„rot:t“);

  Serial.print(int(rot));

  Serial.print(„tgrün:t“);

  Serial.print(int(gruen));

  Serial.print(„tblau:t“);

  Serial.println(int(blau));

  // Grenzwert, bei dem die entsprechende Farbe erkannt wurde

  // im Beispiel 100

  // mit Hilfe der Anzeige im Seriellen Monitor anpassen

  if (rot > 100) Serial.println(„roter Streifen“);

  if (gruen > 100) Serial.println(„grüner Streifen“);

  if (blau > 100) Serial.println(„blauer Streifen“);

  delay(500);

}

Erweiterung des Programms: Farbwerte mit einer RGB-LED sichtbar machen

Die Schaltung wird mit einer RGB-LED erweitert. Wird ein farbiger Streifen in den Farben rot, grün oder blau über den Sensor gehalten, leuchtet die entsprechende farbige LED.

Das Programm im Film

Der Schaltplan

Der Quellcode

#include „Adafruit_TCS34725.h“

/*

  TCS34725_INTEGRATIONTIME

  längere Zeiten erhöhen die Empfindlichkeit besonders bei schwachem Licht

  mögliche Werte: 2.4MS, 50MS, 101MS, 154MS

  ———-

  TCS34725_GAIN

  Empfindlichkeit einstellen

  4X, 16X, 60X

*/

Adafruit_TCS34725 RGBSensor = Adafruit_TCS34725(TCS34725_INTEGRATIONTIME_50MS, TCS34725_GAIN_4X);

// Pins der RGB-LED

int roteLED = 6;

int grueneLED = 5;

int blaueLED = 4;

void setup()

{

  Serial.begin(9600);

  // auf serielle Verbindung warten

  while (!Serial);

  delay(1000);

  pinMode(roteLED, OUTPUT);

  pinMode(grueneLED, OUTPUT);

  pinMode(blaueLED, OUTPUT);

  // Farbsensor starten

  if (RGBSensor.begin())

  {

    Serial.println(„Sensor gefunden!“);

  }

  // wenn der Sensor nicht gefunden wurde

  else

  {

    Serial.println(„Sensor nicht gefunden“);

    // Programm anhalten

    while (1);

  }

}

void loop()

{

  // Variable für die Farben

  float rot, gruen, blau;

  // Sensor einschalten

  RGBSensor.setInterrupt(false);

  delay(60);

  // Daten erfassen

  RGBSensor.getRGB(&rot, &gruen, &blau);

  // Sensor ausschalten

  RGBSensor.setInterrupt(true);

  // Farbwerte anzeigen

  Serial.print(„rot:t“);

  Serial.print(int(rot));

  Serial.print(„tgrün:t“);

  Serial.print(int(gruen));

  Serial.print(„tblau:t“);

  Serial.println(int(blau));

  // Grenzwerte -> RGB-LED bleibt aus

  // mit Hilfe der Anzeige im Seriellen Monitor anpassen

  if (rot < 100 &#038;&#038; gruen < 100 &#038;&#038; blau < 100)

  {

    digitalWrite(roteLED, LOW);

    digitalWrite(grueneLED, LOW);

    digitalWrite(blaueLED, LOW);  

  }

  // wird der Grenzwert überschritten leuchtet die RGB-LED

  // in der entsprechenden Farbe

  // mit Hilfe der Anzeige im Seriellen Monitor anpassen

  if (rot > 100)

  {

    digitalWrite(roteLED, HIGH);

    Serial.println(„roter Streifen“);

  }

  if (gruen > 100)

  {

    digitalWrite(grueneLED, HIGH);

    Serial.println(„grüner Streifen“);

  }

  if (blau > 100)

  {

   digitalWrite(blaueLED, HIGH);

   Serial.println(„blauer Streifen“);

  }

  delay(500);

}

Funduino - Dein Onlineshop für Mikroelektronik

  • Dauerhaft bis zu 10 % Rabatt für Schüler, Studenten und Lehrkräfte
  • Mehr als 4.000 Artikel sofort verfügbar!
  • Mehr als 10 Jahre Erfahrung mit Arduino, 3D-Druck und co.
SALE

Alle Modelle der hier gezeigten Modelle sind hier zum Download  in einer kompakten Zip Datei verfügbar.