CLASIFICADOR DE COLORES CON SENSOR TCS3200 CON ARDUINO NANO
#include <LiquidCrystal.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2); //
#include <Servo.h>
#define S0 4
#define S1 5
#define S2 6
#define S3 7
#define salidaSensor 8
Servo servotop;
Servo servorampa;
// Para guardar las frecuencias de los fotodiodos
int frecuenciaRojo = 0;
int frecuenciaVerde = 0;
int frecuenciaAzul = 0;
int colorRojo;
int colorVerde;
int colorAzul;
int test = 110; //Posicion en grados del servo superior para hacer test de color (110, 80)
int recoge = 160; //Posicion en grados del servo superior para recoger pelota (160, 145)
int rampa = 67; //Posicion en grados del servo superior para dejar pelota en rampa (67, 30)
int pos1 = 50; //Posicion rampa color 1 (50, 30)
int pos2 = 87; //Posicion rampa color 2 (87, 90)
int pos3 = 130; //Posicion rampa color 3 (130, 150)
int t = 300;
int t1 = 100;
void setup() {
// Definiendo las Salidas
pinMode(S0, OUTPUT);
pinMode(S1, OUTPUT);
pinMode(S2, OUTPUT);
pinMode(S3, OUTPUT);
pinMode(salidaSensor, INPUT);
lcd.begin();
lcd.backlight();
lcd.setCursor(2, 0); //columna tres. fila cero
lcd.print("CLASIFICADOR");
lcd.setCursor(3, 1); //columna cuatro. fila 1
lcd.print("DE COLORES");
delay (1000);
servotop.attach(9);
servorampa.attach(10);
servotop.write(test); //ENTREGA ESFERA A RAMPA = 65 ---- RECOGE ESFERA =155 ----- TEST COLOR = 110
lcd.clear();
lcd.setCursor(2, 0); //columna tres. fila cero
lcd.print("ANALIZANDO..");
// Definiendo la escala de frecuencia a 20%
digitalWrite(S0,HIGH);
digitalWrite(S1,LOW);
Serial.begin(9600);
}
void loop() {
Lectura_color ();
//********************************************************************************************
//********************************************************************************************
if(colorRojo >= 45 && colorRojo <= 68 && colorVerde >= 70 && colorVerde <= 110 && colorAzul >= 50 && colorAzul <= 80){
Serial.println(" - Detectado ROJO");
lcd.clear();
lcd.setCursor(1, 0); //columna dos. fila cero
lcd.print("PELOTA ROJA");
servorampa.write(pos1);
delay (t);
servotop.write(rampa); //ENTREGA EN RAMPA
delay (800);
servotop.write(recoge); //RECOGE ESFERA NUEVA
delay (t);
servotop.write(test); //TEST COLOR
lcd.clear();
lcd.setCursor(2, 0); //columna tres. fila cero
lcd.print("ANALIZANDO..");
delay (t);
//Lectura_color ();
}
//********************************************************************************************
//********************************************************************************************
if(colorRojo >= 45 && colorRojo <= 60 && colorVerde >= 55 && colorVerde <= 85 && colorAzul >= 75 && colorAzul <= 105){
Serial.println(" - Detectado AMARILLO");
lcd.clear();
lcd.setCursor(1, 0); //columna dos. fila cero
lcd.print("PELOTA AMARILLA");
servorampa.write(pos2);
delay (t);
servotop.write(rampa); //ENTREGA EN RAMPA
delay (800);
servotop.write(recoge); //RECOGE ESFERA NUEVA
delay (t);
servotop.write(test); //TEST COLOR
lcd.clear();
lcd.setCursor(2, 0); //columna tres. fila cero
lcd.print("ANALIZANDO..");
delay (t);
//Lectura_color ();
}
//********************************************************************************************
//********************************************************************************************
if(colorRojo >= 50 && colorRojo <= 65 && colorVerde >= 55 && colorVerde <= 69 && colorAzul >= 35 && colorAzul <= 47 ){
Serial.println(" - Detectado VIOLETA");
lcd.clear();
lcd.setCursor(1, 0); //columna dos. fila cero
lcd.print("PELOTA VIOLETA");
servorampa.write(pos3);
delay (t);
servotop.write(rampa); //ENTREGA EN RAMPA
delay (800);
servotop.write(recoge); //RECOGE ESFERA NUEVA
delay (t);
servotop.write(test); //TEST COLOR
lcd.clear();
lcd.setCursor(2, 0); //columna tres. fila cero
lcd.print("ANALIZANDO..");
delay (t);
//Lectura_color ();
}
//********************************************************************************************
//********************************************************************************************
if(colorRojo >= 30 && colorRojo <= 50 && colorVerde >= 30 && colorVerde <= 47 && colorAzul >= 20 && colorAzul <= 38 ){
Serial.println(" - Detectado SIN PELOTA");
lcd.clear();
lcd.setCursor(2, 0); //columna tres. fila cero
lcd.print("SIN PELOTA");
delay (t);
servotop.write(recoge); //RECOGE ESFERA NUEVA
delay (t);
servotop.write(test); //TEST COLOR
lcd.clear();
lcd.setCursor(2, 0); //columna tres. fila cero
lcd.print("ANALIZANDO..");
delay (t);
}
else {
Serial.println(" ERROR DE LECTURA COLOR ");
lcd.clear();
lcd.setCursor(2, 0); //columna tres. fila cero
lcd.print("ANALIZANDO EL");
lcd.setCursor(2, 1); //columna cuatro. fila 1
lcd.print("COLOR...");
delay(500);
//Lectura_color ();
}
}
void Lectura_color (){
digitalWrite(S2,LOW);
digitalWrite(S3,LOW);
colorRojo = pulseIn(salidaSensor, LOW);
Serial.print(" R = ");
Serial.print(colorRojo);
delay(t1);
// Definiendo la lectura de los fotodiodos con filtro verde
digitalWrite(S2,HIGH);
digitalWrite(S3,HIGH);
colorVerde = pulseIn(salidaSensor, LOW);
Serial.print(" G = ");
Serial.print(colorVerde);
delay(t1);
// Definiendo la lectura de los fotodiodos con filtro azul
digitalWrite(S2,LOW);
digitalWrite(S3,HIGH);
colorAzul = pulseIn(salidaSensor, LOW);
Serial.print(" B = ");
Serial.println(colorAzul);
delay(t1);
}
Comentarios
Publicar un comentario