Suche

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 && gruen < 100 && 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 3.500 Artikel sofort verfügbar!
  • Über 8 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.