Mål: Att kunna använda TCS3200 sensorn för färgigenkänning.
Teorin: Sensorn består av en del fotoresistorer som är känsliga för olika våglängder (färger) . Om t.ex. rött ljus träffar sensorn kommer motsvarande resistorer att reagera. Frekvensen för röd färg omvandlas till fyrkantsvåg (PWM – pulse width modulation) som Arduinon kan avläsa med pulseIn funktionen. Samma gäller grön, blå och vit färg.
Sensorn verkar vara väldigt känslig till bakgrundsbelysningen så därför har vi valt att använda en bit av wc-pappersrulle för att isolera sensorn.
Arduino koden
/* Color detection by Wilbur Smith. Sensor Arduino VCC --- 5V GND --- GND S0 --- pin4 S1 --- pin5 OE --- GND S2 --- pin6 S3 --- pin7 OUT --- pin9 */ #define S0 4 #define S1 5 #define S2 6 #define S3 7 #define sensorOut 8 int Rfrequency = 0; int Gfrequency = 0; int Bfrequency = 0; int frequency = 0; int readings = 0; void setup() { pinMode(S0, OUTPUT); pinMode(S1, OUTPUT); pinMode(S2, OUTPUT); pinMode(S3, OUTPUT); pinMode(sensorOut, INPUT); digitalWrite(S0,LOW); digitalWrite(S1,LOW); delay(1000); // Set frequency scaling to 20% digitalWrite(S0,HIGH); digitalWrite(S1,LOW); Serial.begin(9600); } void loop() { // ..... RED reading ................................. digitalWrite(S2,LOW); digitalWrite(S3,LOW); for (int i = 0; i < 10; i++) // for smoothing { frequency = pulseIn(sensorOut, LOW); readings = readings + frequency; delay(10); } Rfrequency = readings / 8; readings = 0; // reset readings variable // Serial.print("R= "); // Serial.print(Rfrequency); // Serial.print(" "); // ..... GREEN reading ................................ digitalWrite(S2,HIGH); digitalWrite(S3,HIGH); for (int i = 0; i < 10; i++) // for smoothing { frequency = pulseIn(sensorOut, LOW); readings = readings + frequency; delay(10); } Gfrequency = readings / 8; readings = 0; // reset readings variable // Serial.print("G= "); // Serial.print(Gfrequency); // Serial.print(" "); // ..... BLUE reading .................................. digitalWrite(S2,LOW); digitalWrite(S3,HIGH); for (int i = 0; i < 10; i++) // for smoothing { frequency = pulseIn(sensorOut, LOW); readings = readings + frequency; delay(10); } Bfrequency = readings / 8; readings = 0; // reset readings variable // Serial.print("B= "); // Serial.print(Bfrequency); // Serial.println(" "); // ..... Check for conditions............................ if(Rfrequency > 25 && Rfrequency < 60 && Gfrequency >90 && Gfrequency< 130 && Bfrequency >80 && Bfrequency< 120 ) { Serial.println("RED"); delay(1000); } else if(Rfrequency > 55 && Rfrequency < 100 && Gfrequency >55 && Gfrequency< 105 && Bfrequency >80 && Bfrequency< 130 ) { Serial.println("GREEN"); delay(1000); } else if(Rfrequency > 40 && Rfrequency < 80 && Gfrequency >40 && Gfrequency< 90 && Bfrequency >35 && Bfrequency< 80 ) { Serial.println("BLUE"); delay(1000); } else{} }