Ihre Browserversion ist veraltet. Wir empfehlen, Ihren Browser auf die neueste Version zu aktualisieren.

Farben erkennen

Aufgabe:

Mit dem Farbsensor TCS 230 sollen Farben erkannt werden.

 

Anschluss an den Arduino

Material

  • Arduino
  • Farbsensor TCS 230
  • Leitungen

 

Beschreibung

Der Farbsensor TCS 230 hat 64 Fotodioden, die bei Lichteinfall elektrischen Strom fließen lassen.

Jeweils 16 Dioden haben einen Farbfilter (rot, grün, blau), der nur Licht der entsprechenden Farbe durchlässt. 16 Dioden haben keinen Farbfilter.

Jede Farbe, die unser Auge sehen kann, ist eine Mischung aus den Farben rot, grün und blau. Wer mehr darüber erfahren möchte, mache sich kundig, das Schlagwort ist „RGB-Farben“.

 Der TCS 230 erkennt den Anteil der einzelnen Farben und sendet über seinen Ausgang eine Zahlenfolge, die man mit dem Arduino empfangen kann.

Leider ist dieses Signal kein analoges (also Spannungen von 0V bis 5V), sondern eine Anzahl von kurzen digitalen Signalen, ähnlich einem Morsecode.

ArduBlock hat nun leider keinen Befehl, mit dem man diese „Signale“ in Zahlen umwandeln kann, so dass das Programm zum Erkennen der Farbe nicht vollständig mit ArduBlock erstellt werden kann. Einige Zeilen müssen in der Arduino-IDE nach dem Hochladen eingefügt oder verändert werden.

Dazu muss man jede einzelne Farbe einzeln abfragen und noch vorher einige Grundeinstellungen vornehmen.

 

Der eigentliche Sensor sitzt in der Mitte und ist umrahmt von vier Leuchtdioden, die - unabhängig vom Umgebungslicht - für eine einheitliche Beleuchtung sorgen sollen.  Dazu sind noch verschiedene Bauteile wie Widerstände und Kondensatoren verbaut. Links und rechts befinden sich jeweils vier Anschlüsse.

Von der Seite kann man die Anschlüsse erkennen:

Aufbau der Schaltung:

 

Der TCS 230 hat acht Anschlüsse, die wie folgt mit dem Arduino verbunden werden:

Die Sensor-Pins S0 und S1 werden benötigt um die Frequenz des Ausgangssignal skalieren. Je nachdem, an welchen Pin ein HIGH oder LOW anliegt, ändert sich die Frequenz:

Diese Skalierung muss sein, da verschiedene Mikrokontrollerboards unterschiedliche Eingangssignale verarbeiten können. Für den Arduino sollte die Skalierung 20% betragen, d.h. am Arduino Pin 4 sollte ein HIGH und am Arduino Pin 5 sollte ein LOW ausgegeben werden.

 

Die einzelnen Dioden werden durch die Sensor Pins S2 und S2 ausgewählt:

 

 

Das ArduBlock-Programm

Da ArduBlock keinen Befehl kennt, mit dem man die Frequenz digitaler Impulse messen kann, müssen einige Befehle nach dem Hochladen in die Arduino-IDE abgeändert werden.

 

Bedeutung der einzelnen Blöcke

(Steht unter dem Block keine Erklärung, dann wurde er bereits in einem Tutorial erklärt)

Die Frequenz des Ausgangssignals am Sensor wird auf 20% eingestellt.

 

Die roten Fotodioden werden zur Abfrage ausgewählt.

 

Eine Variable mit dem Namen „ROT“ wird erstellt.

Dieser Block ist eigentlich ohne Bedeutung. Er muss im Arduino-Sketch ersetzt werden durch folgende Zeile:

_ABVAR_x_ROT = pulseIn (8 , LOW) ;

 

Die Buchstaben „Rot“ und der Wert der Variablen „ROT“ wird an den seriellen Monitor gesendet.

Im Arduino-Sketch sollte noch der Befehl serial.println durch den Befehl serial.print ersetzt werden.

 

 

Die grünen Fotodioden werden zur Abfrage ausgewählt.

 

Eine Variable mit dem Namen „GRUN“ wird erstellt.

Dieser Block ist eigentlich ohne Bedeutung. Er muss im Arduino-Sketch ersetzt werden durch folgende Zeile:

_ABVAR_x_GRUN = pulseIn (8 , LOW) ;

 

Die Buchstaben „Grun“ und der Wert der Variablen „GRUN“ wird an den seriellen Monitor gesendet. Im Arduino-Sketch sollte noch der Befehl serial.println durch den Befehl serial.print ersetzt werden.

 

Die blauen Fotodioden werden zur Abfrage ausgewählt.

 

Eine Variable mit dem Namen „BLAU“ wird erstellt.

Dieser Block ist eigentlich ohne Bedeutung. Er muss im Arduino-Sketch ersetzt werden durch folgende Zeile:

_ABVAR_x_BLAU = pulseIn (8 , LOW) ;

 

Die Buchstaben „Blau“ und der Wert der Variablen „BLAU“ wird an den seriellen Monitor gesendet.

 

Der Arduino-Sketch

Zunächst mal der Sketch, wie er nach dem Hochladen in der Arduino-DIE erscheint.

Statt einer Erklärung werden Hinweise zur Veränderung aufgeführt!

Zeilen-nummer

Programmcode

Veränderung

1

int _ABVAR_1_ROT;

Zeile 2 und Zeile 3 vertauschen.

2

int _ABVAR_2_GRUN;

3

Int _ABVAR_3_BLAU;

4

void setup()

 

5

{

 

6

pinMode( 7 , OUTPUT);

Auch hier kann man wegen der Übersichtlichkeit und der Lesbarkeit Zeilen vertauschen.

7

Serial.begin(9600);

8

_ ABVAR_3_BLAU = 0;

9

_ABVAR_1_ROT = 0;

10

pinMode( 5 , OUTPUT);

11

pinMode( 6 , OUTPUT);

12

_ABVAR_2_GRUN = 0;

13

pinMode( 4 , OUTPUT);

14

}

 

15

void loop()

 

16

{

 

17

digitalWrite( 4 , HIGH );

 

18

digitalWrite( 5 , LOW );

 

19

digitalWrite( 6 , LOW );

 

20

digitalWrite( 7 , LOW );

 

21

_ABVAR_1_ROT = analogRead(A8) ;

_ABVAR_1_ROT = pulseIn (8, LOW) ;

22

Serial.print( "Rot" );

 

23

Serial.print( _ABVAR_1_ROT );

 

24

Serial.println("");

Serial.print(“     “);

25

delay( 100 );

 

26

digitalWrite( 6 , HIGH );

 

27

digitalWrite( 7 , HIGH );

 

28

_ABVAR_2_GRUN = analogRead(A8) ;

_ABVAR_1_GRUN = pulseIn (8, LOW) ;

29

Serial.print( "Grun" );

 

30

Serial.print( _ABVAR_2_GRUN );

 

31

Serial.println("");

Serial.print(“     “);

32

delay( 100 );

 

33

digitalWrite( 6 , LOW );

 

34

digitalWrite( 7 , HIGH );

 

35

_ABVAR_3_BLAU = analogRead(A8) ;

_ABVAR_1_BLAU = pulseIn (8, LOW) ;

36

Serial.print( "Blau" );

 

37

Serial.print( _ABVAR_3_BLAU );

 

38

Serial.println("");

Serial.println(“     “);

39

delay( 100 );

 

40

}

 

Nach den Veränderungen zeigt sich der Sketch wie folgt:

 

Der Arduino-Sketch

Zeilen-nummer

Programmcode

ERklärung

1

int _ABVAR_1_ROT;

// Die Variablen werden erstellt.

2

int _ABVAR_2_GRUN;

3

Int _ABVAR_3_BLAU;

4

void setup()

 

5

{

 

6

Serial.begin(9600);

 

7

_ABVAR_1_ROT = 0;

// Die Variablen erhalten zunächst mal den Wert 0

8

_ABVAR_2_GRUN = 0;

9

_ ABVAR_3_BLAU = 0;

10

pinMode( 4 , OUTPUT);

// Die Arduino Pins 4, 5, 6, 7 sind Ausgänge

11

pinMode( 5 , OUTPUT);

12

pinMode( 6 , OUTPUT);

13

pinMode( 7 , OUTPUT);

14

}

 

15

void loop()

 

16

{

 

17

digitalWrite( 4 , HIGH );

// Die Skalierung des Sensor-Signals wird auf 20% eingestellt.

18

digitalWrite( 5 , LOW );

19

digitalWrite( 6 , LOW );

// Die rote Diode wird zur Abfrage ausgewählt.

20

digitalWrite( 7 , LOW );

21

_ABVAR_1_ROT = pulseIn (8, LOW) ;

// Der Wert am Ausgang des Sensors wird vom Arduino ausgelesen und in eine Zahl umgewandelt. Diese Zahl wird als  Variable „ROT“ gespeichert.

22

Serial.print( "Rot" );

 

23

Serial.print( _ABVAR_1_ROT );

 

24

Serial.print("     ");

 

25

delay( 100 );

 

26

digitalWrite( 6 , HIGH );

// Die grüne Diode wird zur Abfrage ausgewählt.

27

digitalWrite( 7 , HIGH );

28

_ABVAR_1_GRUN = pulseIn (8, LOW);

// Der Wert am Ausgang des Sensors wird vom Arduino ausgelesen und in eine Zahl umgewandelt. Diese Zahl wird als  Variable „GRUN“ gespeichert.

29

Serial.print( "Grun" );

 

30

Serial.print( _ABVAR_2_GRUN );

 

31

Serial.print("     ");

 

32

delay( 100 );

 

33

digitalWrite( 6 , LOW );

// Die blaue Diode wird zur Abfrage ausgewählt.

34

digitalWrite( 7 , HIGH );

35

_ABVAR_1_BLAU = pulseIn (8, LOW) ;

// Der Wert am Ausgang des Sensors wird vom Arduino ausgelesen und in eine Zahl umgewandelt. Diese Zahl wird als  Variable „BLAU“ gespeichert.

36

Serial.print( "Blau" );

 

37

Serial.print( _ABVAR_3_BLAU );

 

38

Serial.println("");

 

39

delay( 100 );

 

40

}

 

Im seriellen Monitor erscheinen jetzt Zahlenwerte, die sich je nach der Farbe, die vom Sensor erkannt wird, verändern. Jeder Farbe ist ein Zahlen-Trippel zugeodnet.

Nächste Seite

Cookie-Regelung

Diese Website verwendet Cookies, zum Speichern von Informationen auf Ihrem Computer.

Stimmen Sie dem zu?