Descripción
Modelo GY-31. Utiliza chip TCS3200
El sensor de color permite conocer el color de una superfície. Al contar con 4 LEDs para iluminación, no es necesario que el sistema cuente con iluminación externa. El sensor lee la cantidad de color rojo, verde y azul de manera separada y proporciona un pulso digital cuya duración depende de la cantidad de color detectado. Además, este modelo cuenta con un capuchón que rodea al sensor y reduce la influencia de reflejos exteriores sobre la lectura obtenida.
- Alimentación: 3 – 5V
- Se puede conectar directamente a microcontrolador
- Incluye 4 LEDs blancos para iluminar el objeto a analizar
- Tamaño: 3,3 x 3,3 x 2,5 cm
Atención: Como todos los sensores de luz, este sensor es muy sensible a condiciones cambiantes de iluminación o reflectancia de las superfícies, por lo que es de gran importancia que se aseguren condiciones similares entre los distintos ensayos del sensor. Se recomienda ensayar distintas distancias de detección para encontrar aquella a la que el sensor se comporta de manera óptima.
¿Lo quieres ver en acción? Revisa nuestro proyecto: NiñosEnCasa: Una lámpara muy especial
Código de ejemplo:
/* EJEMPLO TCS230 TCS300 Sensor de color * Código proporcionado bajo licencia CC-BY * Puedes distribuir, mezclar, adapatar y hacer tuyo este código. * Sólo te pedimos que hagas referencia a nosotros como fuente original de la información. * * Si tienes dudas sobre el uso de este ejemplo no dudes en contactarnos, estamos para echarte una mano. * ---------------------------------- * www.electronperdido.com * contacto@electronperdido.com * ---------------------------------- */ // Definimos los pines donde conectaremos las señales del sensor #define S0 4 #define S1 5 #define S2 6 #define S3 7 #define sensorOut 8 // Variable para el cálculo del color int pulso = 0; int red, green, blue; // Valores máximos que toma "frequency" para cada color. // Desde aquí se hará la calibración // Se aconseja empezar ccon todos los "min" a cero y los "max" a 9999 // Los valors que proporciona el sensor se llaman "RojoSensor", "VerdeSensor" y "AzulSensor" // Despues, se ensaya con color negro: los valores leídos en el monitor serie corresponden a los "max" en cada color // Despues, se ensaya con color blanco: los valores leídos en el monitor serie corresponden a los "min" en cada color #define minR 336 #define maxR 727 #define minG 695 #define maxG 730 #define minB=30; #define maxB=195; // El código dentro de SETUP se ejecuta una única vez, al inicio del programa void setup() { pinMode(S0, OUTPUT); pinMode(S1, OUTPUT); pinMode(S2, OUTPUT); pinMode(S3, OUTPUT); pinMode(sensorOut, INPUT); // Ajuste del sensor (escalado en frecuencia al 20%) digitalWrite(S0,HIGH); digitalWrite(S1,LOW); Serial.begin(9600); // Inicializa el puerto serie a 9600bps (para comunicar con el PC) } // El código dentro de LOOP se ejecuta de manera repetida hasta el fin de los tiempos... void loop() { // El sensor de color tiene unos filtro que se deben activar/desactivar en función del color que deseamos leer // Eso se hace mediante S2-S3 // La salida del sensor es un pulso, más corto cuanto más componente exista de ese color // Filtro rojo digitalWrite(S2,LOW); digitalWrite(S3,LOW); pulso = pulseIn(sensorOut, LOW); // Medición del pulso proporcionado por el sensor Serial.print("RojoSensor= "); //Se muestra el valor leído en el monitor serie Serial.print(pulso); Serial.print(" "); // Si el valor leído supera los máximos se satura la lectura en ese valor máximo if(pulso<minR) pulso = minR; if(pulso>maxR) pulso = maxR; // El valor obtenido se escala al rango 0-255 red = map(pulso, minR,maxR,255,0); delay(100); // Esperamos un tiempo hasta la siguiente lectura // Filtro verde digitalWrite(S2,HIGH); digitalWrite(S3,HIGH); pulso = pulseIn(sensorOut, LOW); // Medición del pulso proporcionado por el sensor Serial.print("VerdeSensor= "); //Se muestra el valor leído en el monitor serie Serial.print(pulso); Serial.print(" "); // Si el valor leído supera los máximos se satura la lectura en ese valor máximo if(pulso<minG) pulso = minG; if(pulso>maxG) pulso = maxG; // El valor obtenido se escala al rango 0-255 green = map(pulso, minG,maxG,255,0); delay(100); // Esperamos un tiempo hasta la siguiente lectura // Filtro azul digitalWrite(S2,LOW); digitalWrite(S3,HIGH); pulso = pulseIn(sensorOut, LOW); // Medición del pulso proporcionado por el sensor Serial.print("AzulSensor= "); //Se muestra el valor leído en el monitor serie Serial.print(pulso); Serial.print(" "); // Si el valor leído supera los máximos se satura la lectura en ese valor máximo if(pulso<minB) pulso = minB; if(pulso>maxB) pulso = maxB; // El valor obtenido se escala al rango 0-255 blue = map(pulso, minB,maxB,255,0); delay(100); // Esperamos un tiempo hasta la siguiente lectura // Se imprimen por pantalla las componentes RGB leídas Serial.println("Componentes RGB: "); Serial.print("R="); Serial.print(red); Serial.print(" "); Serial.print("G="); Serial.print(green); Serial.print(" "); Serial.print("B="); Serial.print(blue); Serial.println(" "); // El sensor es muy sensible a la cantidad de luz, por lo que las condiciones de iluminación y relfecitividad // de la superfície cuyo color queremos conocer deben ser similares a las usadas en el proceso de calibración. delay(500);//Espera para repetir el proceso }
Valoraciones
No hay valoraciones aún.