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(" ");
}
Profe, podría enviar los archivos stl?
ResponderEliminar