Guten Nachmittag,
ich bin gerade dabei eine Sortiermaschine für Smarties zu bauen. So weit, so gut. Nun habe ich den Farbsensor TCS3200 montiert und programmiert. Alles läuft soweit. Leider erkennt er jedoch die Farben nicht. Bei einem roten Smartie erkennt er zum Beispiel Grün oder bei einem Grünen ein Lilanes. Ich habe die Werte auch schon mehrmals konfiguriert, ohne Erfolg. Der Abstand müsste auch stimmen. Kennt sich da jemand besser aus und hatte schonmal das gleiche Problem bzw weiß eine Lösung ?
Ich wäre sehr dankbar!
Für Fragen bin ich jederzeit offen .
Link zum Farbsensor : GY-31 TCS3200 Farbsensor günstig online kaufen | Funduino
Hier noch der Sktech
#include <Servo.h> //Die Servobibliothek wird aufgerufen. Sie wird benötigt, damit die Ansteuerung des Servos vereinfacht wird.
#define EN_PIN 6 //enable (CFG6)
#define DIR_PIN 4 //direction
#define STEP_PIN 5 //step
Servo servoblau; //Erstellt für das Programm ein Servo mit dem Namen „servoblau“
const int s0 = 8; //Verbindung der Farbsensorkontakte mit dem Arduino festlegen
const int s1 = 9;
const int s2 = 12;
const int s3 = 11;
const int out = 10;
int rot = 0; //Variablen für LEDs benennen
int gruen = 0;
int blau = 0;
void setup(){
servoblau.attach(7); //Das Setup enthält die Information, dass das Servo an der Steuerleitung (gelb) mit Pin 8 verbunden wird. Hier ist natürlich auch ein anderer Pin möglich.
pinMode(EN_PIN, OUTPUT);
digitalWrite(EN_PIN, HIGH); //deactivate driver (LOW active)
pinMode(DIR_PIN, OUTPUT);
digitalWrite(DIR_PIN, HIGH); //LOW or HIGH
pinMode(STEP_PIN, OUTPUT);
digitalWrite(STEP_PIN, LOW);
digitalWrite(EN_PIN, LOW); //activate driver
Serial.begin(9600); //Serielle Kommunikation starten
pinMode(s0, OUTPUT); //Die Kontakte des Farbsensors werden als Output oder...
pinMode(s1, OUTPUT); // (Warum als Output? Die Frequenzwerte (s0-s3) sollen im
pinMode(s2, OUTPUT); // seriellen Monitor ausgegeben werden.)
pinMode(s3, OUTPUT);
pinMode(out, INPUT); // ...Input festgelegt
digitalWrite(s0, HIGH); //Die vier weißen LEDs am Farbsensor sollen leuchten
digitalWrite(s1, HIGH);
}
void loop(){
digitalWrite(STEP_PIN, LOW);
delayMicroseconds(800);
digitalWrite(STEP_PIN, HIGH);
delayMicroseconds(800);
color();//Diese Funktion wird am Ende des Codes festgelegt (s.“void color();“)
Serial.print(" Wert Rot: "); //Auf dem seriellen Monitor soll jeweils „Wert“
Serial.print(rot, DEC); //mit der entsprechenden Farbe angezeigt
Serial.print(" Wert Gruen: ");//werden und dahinter der Wert, welcher in der
Serial.print(gruen, DEC); //void color(); Funktion ausgelesen wurde.
Serial.print(" Wert Blau: ");
Serial.print(blau, DEC);
//Hier folgen die Befehle für die LEDs
if (rot == 7 && gruen == 7 && blau == 6 || blau == 5) //Wenn der Filterwert für rot //kleiner ist als alle anderen Werte..
{
Serial.println(" – (Rote Farbe)"); //..soll “Rote Farbe“ am seriellen //Monitor angezeigt werden und..
delay(1000);
servoblau.write(40);//Position 2 ansteuern mit dem Winkel 90
}
else if (blau == 5 && rot == 7 && gruen < 7 ) //Das gleiche bei Blau und Grün
{
Serial.println(" – (blau)");
delay(1000);
servoblau.write(0); //Position 2 ansteuern mit dem Winkel 90
}
else if (gruen == 7 || gruen ==6 && rot == 6 && blau == 5)
{
Serial.println(" – (Lila Farbe)");
delay(1000);
servoblau.write(40); //Position 2 ansteuern mit dem Winkel 90
}
else (gruen == 4 && rot == 4 || rot == 5 && blau == 3 || blau == 4);{ //Wenn keine Werte vorhanden sind..
Serial.println(); //..nichts auf dem seriellen Monitor anzeigen und..
}
delay(300);
}
void color() //Hier werden die Werte vom Farbsensor ausgelesen und unter den
//entsprechenden Variablen gespeichert
{
digitalWrite(s2, LOW);
digitalWrite(s3, LOW);
rot = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH);
digitalWrite(s3, HIGH);
blau = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH);
digitalWrite(s2, HIGH);
gruen = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH);
}