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

 



#include <Wire.h>     // libreria para bus I2C
#include <Adafruit_GFX.h>   // libreria para pantallas graficas
#include <Adafruit_SSD1306.h>   // libreria para controlador SSD1306
#include "Adafruit_TCS34725.h"
Adafruit_TCS34725 tcs = Adafruit_TCS34725(TCS34725_INTEGRATIONTIME_300MS, TCS34725_GAIN_1X); //614
 
#define ANCHO 128     // reemplaza ocurrencia de ANCHO por 128
#define ALTO 32       // reemplaza ocurrencia de ALTO por 64

#define OLED_RESET 4      // necesario por la libreria pero no usado
Adafruit_SSD1306 oled(ANCHO, ALTO, &Wire, OLED_RESET);  // crea objeto


#include <Servo.h>

Servo servotop;
Servo servorampa;
 
// Para guardar las frecuencias de los fotodiodos


int test = 80; //Posicion en grados del servo superior para hacer test de color (110, 80)
int recoge = 145; //Posicion en grados del servo superior para recoger pelota (160, 145)
int rampa = 35; //Posicion en grados del servo superior para dejar pelota en rampa (67, 30)
int pos1 = 20; //Posicion rampa color 1 (50, 30)
int pos2 = 70; //Posicion rampa color 2 (87, 90)
int pos3 = 130; //Posicion rampa color 3 (130, 150)
int t = 300;
int t1 = 100;
int colorRojo;
int colorVerde;
int colorAzul;
long Temperatura;
long Lux;


void setup(void) {
  Serial.begin(9600);

  if (tcs.begin()) {
    Serial.println("Found sensor");
  } else {
    Serial.println("No TCS34725 found ... check your connections");
    while (1);
  }

  Wire.begin();         // inicializa bus I2C
  oled.begin(SSD1306_SWITCHCAPVCC, 0x3C); // inicializa pantalla con direccion 0x3C
  servotop.attach(9);
  servorampa.attach(10);
  servotop.write(test); //ENTREGA ESFERA A RAMPA = 65 ---- RECOGE ESFERA =155 ----- TEST COLOR = 110
  }


void loop(void) {
 
  leerColor ();
 //********************************************************************************************
 //********************************************************************************************
  if((Temperatura >= 1000) && (Temperatura <= 4000) && (Lux >= 50000) && (Lux <= 80000)){
  //if(colorRojo >= 300 && colorRojo <= 1500 && colorVerde >= 95 && colorVerde <= 500 && colorAzul >= 70 && colorAzul <= 400){ //TEM 2250 - LUX 65300
      Serial.println(" - Detectado ROJO");
    oled.clearDisplay();      // limpia pantalla
    oled.setTextColor(WHITE);   // establece color al unico disponible (pantalla monocromo)
    oled.setCursor(0, 0);     // ubica cursor en inicio de coordenadas 0,0
    oled.setTextSize(1);      // establece tamano de texto en 1
    oled.print("DRONACTIVOS");  // escribe en pantalla el texto
    oled.setCursor (5, 15);    // ubica cursor en coordenas 10,30
    oled.setTextSize(2);      // establece tamano de texto en 2
    oled.print("COLOR ROJO");    // escribe valor de millis() dividido por 1000
    oled.display();     // muestra en pantalla todo lo establecido anteriormente
   
    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
    oled.clearDisplay();      // limpia pantalla
    oled.setTextColor(WHITE);   // establece color al unico disponible (pantalla monocromo)
    oled.setCursor(0, 0);     // ubica cursor en inicio de coordenadas 0,0
    oled.setTextSize(1);      // establece tamano de texto en 1
    oled.print("DRONACTIVOS");  // escribe en pantalla el texto
    oled.setCursor (5, 15);    // ubica cursor en coordenas 10,30
    oled.setTextSize(2);      // establece tamano de texto en 2
    oled.print("ANALIZANDO..");    // escribe valor de millis() dividido por 1000
    oled.display();     // muestra en pantalla todo lo establecido anteriormente
    delay (t);
   
  //Lectura_color ();
  }
  //********************************************************************************************
 //********************************************************************************************
  if(Temperatura >= 1000 && Temperatura <= 4000 && Lux >= 800 && Lux <= 2000 ){
  //if(colorRojo >= 700 && colorRojo <= 2500 && colorVerde >= 1000 && colorVerde <= 2500 && colorAzul >= 300 && colorAzul <= 1000){ //TEMP 2900 - LUX 1400
    Serial.println(" - Detectado AMARILLO");
    oled.clearDisplay();      // limpia pantalla
    oled.setTextColor(WHITE);   // establece color al unico disponible (pantalla monocromo)
    oled.setCursor(0, 0);     // ubica cursor en inicio de coordenadas 0,0
    oled.setTextSize(1);      // establece tamano de texto en 1
    oled.print("COLOR");  // escribe en pantalla el texto
    oled.setCursor (5, 15);    // ubica cursor en coordenas 10,30
    oled.setTextSize(2);      // establece tamano de texto en 2
    oled.print("AMARILLO");    // escribe valor de millis() dividido por 1000
    oled.display();     // muestra en pantalla todo lo establecido anteriormente
    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
    oled.clearDisplay();      // limpia pantalla
    oled.setTextColor(WHITE);   // establece color al unico disponible (pantalla monocromo)
    oled.setCursor(0, 0);     // ubica cursor en inicio de coordenadas 0,0
    oled.setTextSize(1);      // establece tamano de texto en 1
    oled.print("DRONACTIVOS");  // escribe en pantalla el texto
    oled.setCursor (5, 15);    // ubica cursor en coordenas 10,30
    oled.setTextSize(2);      // establece tamano de texto en 2
    oled.print("ANALIZANDO..");    // escribe valor de millis() dividido por 1000
    oled.display();     // muestra en pantalla todo lo establecido anteriormente
    delay (t);
   
  //Lectura_color ();  
  }
  //********************************************************************************************
 //********************************************************************************************
 
  if(Temperatura >= 4000 && Temperatura <= 7000 && Lux >= 100 && Lux <= 250 ){
  //if(colorRojo >= 400 && colorRojo <= 1000 && colorVerde >= 500 && colorVerde <= 1000 && colorAzul >= 600 && colorAzul <= 1300 ){ //TEMP 6000 - LUX 181
    Serial.println(" - Detectado VIOLETA");
    oled.clearDisplay();      // limpia pantalla
    oled.setTextColor(WHITE);   // establece color al unico disponible (pantalla monocromo)
    oled.setCursor(0, 0);     // ubica cursor en inicio de coordenadas 0,0
    oled.setTextSize(1);      // establece tamano de texto en 1
    oled.print("COLOR");  // escribe en pantalla el texto
    oled.setCursor (5, 15);    // ubica cursor en coordenas 10,30
    oled.setTextSize(2);      // establece tamano de texto en 2
    oled.print("VIOLETA");    // escribe valor de millis() dividido por 1000
    oled.display();     // muestra en pantalla todo lo establecido anteriormente
    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
    oled.clearDisplay();      // limpia pantalla
    oled.setTextColor(WHITE);   // establece color al unico disponible (pantalla monocromo)
    oled.setCursor(0, 0);     // ubica cursor en inicio de coordenadas 0,0
    oled.setTextSize(1);      // establece tamano de texto en 1
    oled.print("DRONACTIVOS");  // escribe en pantalla el texto
    oled.setCursor (5, 15);    // ubica cursor en coordenas 10,30
    oled.setTextSize(2);      // establece tamano de texto en 2
    oled.print("ANALIZANDO..");    // escribe valor de millis() dividido por 1000
    oled.display();     // muestra en pantalla todo lo establecido anteriormente
    delay (t);

  //Lectura_color ();
  }

  //********************************************************************************************
 //********************************************************************************************
  if(colorRojo >= 60 && colorRojo <= 300 && colorVerde >= 90 && colorVerde <= 400 && colorAzul >= 70 && colorAzul <= 400 ){
    Serial.println(" - Detectado SIN PELOTA");
    oled.clearDisplay();      // limpia pantalla
    oled.setTextColor(WHITE);   // establece color al unico disponible (pantalla monocromo)
    oled.setCursor(0, 0);     // ubica cursor en inicio de coordenadas 0,0
    oled.setTextSize(1);      // establece tamano de texto en 1
    oled.print("COLOR");  // escribe en pantalla el texto
    oled.setCursor (5, 15);    // ubica cursor en coordenas 10,30
    oled.setTextSize(2);      // establece tamano de texto en 2
    oled.print("SIN PELOTA");    // escribe valor de millis() dividido por 1000
    oled.display();     // muestra en pantalla todo lo establecido anteriormente
    delay (t);
    servotop.write(recoge); //RECOGE ESFERA NUEVA
    delay (t);
    servotop.write(test); //TEST COLOR
    oled.clearDisplay();      // limpia pantalla
    oled.setTextColor(WHITE);   // establece color al unico disponible (pantalla monocromo)
    oled.setCursor(0, 0);     // ubica cursor en inicio de coordenadas 0,0
    oled.setTextSize(1);      // establece tamano de texto en 1
    oled.print("DRONACTIVOS");  // escribe en pantalla el texto
    oled.setCursor (5, 15);    // ubica cursor en coordenas 10,30
    oled.setTextSize(2);      // establece tamano de texto en 2
    oled.print("ANALIZANDO..");    // escribe valor de millis() dividido por 1000
    oled.display();     // muestra en pantalla todo lo establecido anteriormente
    delay (t);
  }

  else {
    Serial.println(" ERROR DE LECTURA COLOR ");
    oled.clearDisplay();      // limpia pantalla
    oled.setTextColor(WHITE);   // establece color al unico disponible (pantalla monocromo)
    oled.setCursor(0, 0);     // ubica cursor en inicio de coordenadas 0,0
    oled.setTextSize(1);      // establece tamano de texto en 1
    oled.print("COLOR DESCONOCIDO");  // escribe en pantalla el texto
    oled.setCursor (0, 17);    // ubica cursor en coordenas 10,30
    oled.setTextSize(2);      // establece tamano de texto en 2
    oled.print("ANALIZANDO..");    // escribe valor de millis() dividido por 1000
    oled.display();     // muestra en pantalla todo lo establecido anteriormente
   delay(t);
   //Lectura_color ();
   }
}



  void leerColor () {
  uint16_t r, g, b, c, colorTemp, lux;

  tcs.getRawData(&r, &g, &b, &c);
  // colorTemp = tcs.calculateColorTemperature(r, g, b);
  colorTemp = tcs.calculateColorTemperature_dn40(r, g, b, c);
  lux = tcs.calculateLux(r, g, b);
  colorRojo = r;
  colorVerde = g;
  colorAzul = b;
  Temperatura = colorTemp;
  Lux = lux;
  Serial.print("Color Temp: "); Serial.print(colorTemp); Serial.print(" K - ");
  Serial.print("Lux: "); Serial.print(lux); Serial.print(" - ");
  Serial.print("R: "); Serial.print(r, DEC); Serial.print(" ");
  Serial.print("G: "); Serial.print(g, DEC); Serial.print(" ");
  Serial.print("B: "); Serial.print(b, DEC); Serial.print(" ");
  Serial.print("C: "); Serial.print(c, DEC); Serial.print(" ");
  Serial.println(" ");
}

Comentarios

Publicar un comentario

Entradas populares de este blog

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

CONTROL DE ACCESO CON RFID YMODULO RTC DS3231