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

Entradas populares de este blog

CLASIFICADOR DE COLORES CON SENSOR TCS3472 (I2C) CON ARDUINO NANO

PROTOTIPO - CONTROL DE ACCESO CON RFID + TECLADO CON ALMACENAMIENTO EN MICRO SD

CONTROL DE ACCESO CON RFID YMODULO RTC DS3231