Detección de color específica, ¿es posible de forma económica, sin utilizar cámara/reconocimiento de imagen?

Si bien entiendo que la detección de color con la cámara y un procesador suficientemente potente que ejecuta la lógica del histograma de la imagen (u otros algoritmos similares) puede determinar la presencia de ciertos colores de manera bastante confiable.

Sin embargo, ¿existen otros mecanismos significativamente más rentables para determinar la presencia/ausencia de cierto color (o sus sombras cercanas), a corta distancia, utilizando sensores más simples/más baratos y requisitos computacionales más bajos?

Supongo que cosas como sensores de pH u otros sensores químicos podrían usar tales métodos. En mi caso, la aplicación es tal que necesito detectar presencia/ausencia de un color específico (un tono de azul claro), en un área pequeña, a corta distancia.

Editado: por 'rango cercano' me refiero a algo entre 1 y 5 cm, aunque este no es un requisito muy estricto. Estaba pensando en "cerrar" relativamente, es decir, no hay irradiación directa desde la fuente de luz al sensor, una especie de barril doble, de modo que solo la luz reflejada golpea el sensor. Entonces, la cercanía es una función de la ubicación del sensor físico, y estoy abierto a sugerencias (incluidos enfoques completamente alternativos / ortogonales).

¿Considerarías el infrarrojo? Es barato y no es fácilmente susceptible al ruido como la luz visible.
@JeeShenLee - ¿Quieres detectar azul con IR? Y también hay ruido IR. ¿Alguna vez miró la salida de un módulo receptor IR sin señal de entrada?
@stevenvh, estaba proponiendo otra opción en lugar de la luz azul. Según mi entendimiento, la dinámica de la luz visible es demasiado grande para ser detectada de manera confiable (debido a la intensidad, el tono y sin olvidar que la luz del entorno también contiene rayos azules).
@JeeShenLee: según tengo entendido, la sustancia es azul, entonces otros colores no funcionarán. Puedo estar equivocado.
@stevenvh, de hecho, el objeto es azul. En el futuro podría necesitar detectar otros colores, pero eso es para más adelante y preferiría mantener las cosas simples por ahora.
Cada una de las respuestas fue muy útil y proporcionó información útil, pero elijo la de Oli como "la respuesta", porque parece ser la más simple y económica, desde el punto de vista de la implementación, dado mi requisito principal de detectar objetos de un solo (pre -definido) color.

Respuestas (4)

Dado que los LED utilizados como fotodiodos son más sensibles al color que emiten durante el funcionamiento normal, se puede fabricar un sensor de color básico utilizando el LED a la inversa y un opamp:

sensor de color

El circuito de arriba vino de esta página . También se puede hacer al revés: aquí hay disponible una visión mucho más detallada de la detección de color usando LED y sensores de luz . Esta página detalla el uso de un sensor de luz normal y LED de diferentes colores.

No pude encontrar la nota de la aplicación mencionada en los comentarios, pero esta página parece ser un tratamiento bastante completo del tema de los amplificadores de transimpedancia. Puede modificar el sesgo en el LED para cambiar el tiempo de respuesta/sensibilidad.

Si solo tienes 1G Ω resistencias puedes usar tres de ellas en paralelo :-)
No creo que ese circuito funcione. Si la salida es > 0 V, la corriente del LED hará que la entrada inversora sea > no inversora, y la salida simplemente irá a cero. También recuerdo vagamente cosas como "voltaje de compensación" y "corriente de polarización de entrada" :-(
@Steven: es un amplificador de transimpedancia básico (doble riel), destinado a mostrar el concepto. Posiblemente necesitará algunos ajustes finos. Agregaré un par de notas de la aplicación, recuerdo que TI hizo una buena, pero parece que no puedo encontrarla.
En realidad, puede ser un solo riel, ya que el LED, según la orientación anterior, proporciona corriente inversa. Estoy oxidado con estas cosas, pero acabo de probar un LED en mi multímetro (en un rango de 2 V, por lo que efectivamente una resistencia de ~ 1 Mega en paralelo) y al aumentar la luz, leo de ~ 0 V a -1.5 V (cable rojo a cátodo, negro a ánodo)
Agregué el circuito correcto de la OMI a mi respuesta y también expliqué por qué se requiere el voltaje negativo. Hazme saber si no estás de acuerdo. En su prueba, el multímetro pondrá un voltaje en las sondas, el LED no puede crear corriente de la nada.
El LED crea corriente (inversa) cuando la luz brilla sobre él; actúa como un fotodiodo. Solo como una verificación de cordura, acabo de juntar el circuito anterior (usando un MCP6021 y un LED aleatorio) y funciona bien. Usé una resistencia de 10Meg con 100pF en paralelo.
Me gusta la idea de usar LED como fotodiodos selectivos de color, pero 320 MOhm requerirá un diseño cuidadoso, para decirlo de la manera más optimista posible... Los circuitos con tales resistencias tienden a reaccionar de manera extraña cuando un gato salta. una piedra a cinco cuadras al NE de tu laboratorio...
@zebonaut: sospecho que los 320 MOhm son un poco altos y, por ejemplo, 10 MOhm servirán. Siempre puede agregar otra etapa de ganancia si es necesario.
Realmente me gusta la simplicidad general (y creo que, como resultado, el bajo costo) de este circuito.

Si desea detectar un color muy específico, necesitará un filtro de banda estrecha como este filtro de ancho de banda de 11 nm de Edmund Optics. Los productos de EO son realmente material de laboratorio de alta precisión, al igual que el precio: 300 dólares.

Si puede conformarse con menos, le sugiero que use un filtro fotográfico . Utilice un fototransistor con una amplia sensibilidad espectral, especialmente en el rango de 400 nm, y compare la lectura con y sin filtro azul. Si el color del objeto es azul, habrá menos diferencia en la lectura que para un objeto rojo, por ejemplo. Tendrás que tener en cuenta también una compensación, ya que el filtro no pasará el 100 % de la luz, incluso si es azul.

Por ejemplo, si el filtro se atenúa en 3 dB (los fotógrafos hablan de f-stops), una lectura azul sin filtro de 1 V se convertirá en 0,7 V con el filtro. Si el color es rojo, una lectura de 1 V sin filtro probablemente dará 0,4 V más o menos con el filtro.

Puede convertir la corriente del fotodiodo en un voltaje con una resistencia en serie o con un amplificador de transimpedancia opamp:

ingrese la descripción de la imagen aquí

Tenga en cuenta que el ánodo del diodo debe estar conectado a un voltaje más negativo que la entrada no inversora. Encuentro una cantidad sorprendente de circuitos en la red donde el ánodo está conectado a tierra. Pero luego, debido a que el diodo crea una caída de voltaje, el amplificador operacional no puede regular la salida para que las entradas se igualen y la salida se sature.

Gracias @stevenvh. Esto es lo más cercano a lo que estaba pensando, aunque en un nivel muy abstracto. Dos preguntas más: [P1] ¿Se puede reemplazar fácilmente el filtro del fotógrafo + el fotodiodo con fotodiodos únicos (o conjuntos de fotodiodos), con filtro incorporado, como sugiere Russell en su respuesta? [P2] En un circuito alimentado por batería (12 V), creo que podría vincular -5 V al terminal -ve de la batería, GND para el amplificador operacional con 6 V (divisor de voltaje) y +5 V del amplificador operacional para decir el terminal +ve de batería. Correcto ?
@ icarus74: el fotodiodo + filtro es como el TCS3210 de Russell, pero solo con el canal azul y claro. En la hoja de datos del TCS3210, verá que el azul también detecta infrarrojos, tendrá que realizar un procesamiento en los cuatro canales para obtener datos azules reales. El filtro fotográfico puede estar más restringido a las longitudes de onda de interés. [P2]: Sí.

Un enfoque muy simple para determinar el color de una superficie es usar un fotodiodo o fotoresitor y un número (3, por ejemplo, como en RGB) de LED de diferentes colores para iluminar la superficie.

Luego, de forma multiplexada en el tiempo, cada uno de los LED se enciende por sí mismo en secuencia para iluminar la superficie, y se mide la intensidad de la luz reflejada para cada uno de ellos.

Ejemplo: si se usan tres LED, uno rojo, uno verde y uno azul, esto producirá tres valores de intensidad de reflexión, uno para cada componente de color, que juntos, después de una posible normalización, darán una aproximación numérica del color de la superficie de alguna manera. del espacio RGB (que depende de las distribuciones de longitud de onda específicas de los LED, por supuesto).

(Usaré la configuración de ejemplo de tres colores RGB a continuación para simplificar, pero se puede usar cualquier número de 1 a n de fuentes de luz de diferentes colores; cuantos más colores diferentes se usen, más exacto se puede determinar el color de la superficie).

El principio es el mismo que en el chip de una cámara: las intensidades de los componentes rojo, azul y verde de la luz entrante se miden de forma independiente y la combinación de las tres intensidades determina el color. En la cámara, hay un fotodetector para cada uno de esos tres colores básicos para que las tres intensidades se puedan medir al mismo tiempo. Lo que complica esto es que se necesitan tres sensores diferentes o tres filtros diferentes.

Por lo tanto, la propuesta funciona al revés: en lugar de filtrar la luz después de que se refleja en la superficie, también se puede 'filtrar' la luz antes de que llegue a la superficie; básicamente, para su percepción, no importa si se pone las gafas de sol de color azul o si usa una fuente de luz azul y no usa gafas de sol.

La intensidad de la luz reflejada medida para cada componente de color (o LED) producirá un valor (normalizado) en el rango de [0.0, ..., 1.0], donde 0.0 significa que no se refleja luz y 1.0 significa que una cantidad máxima de luz se refleja. Dependiendo del color de la superficie, las intensidades serán diferentes para los diferentes colores de luz (longitudes de onda).

En todos los casos, recibirá tres valores de intensidad, cada uno de los cuales determina la intensidad de una determinada parte del espectro de color. Cada medición completa produce así un triplete (r,g,b) que determina el color medido. Como en los gráficos por computadora, el triplete (0,0,0) representa oscuridad total, negro; (1,1,1) es el blanco más brillante y cualquier combinación (r,g,b) donde r == g == b representa algún tono de gris. Todas las demás combinaciones posibles identifican un punto distintivo en el espacio RGB, definiendo el color medido. (0.5,0,0) es un rojo medio, por ejemplo, y (0.9,0.9,0) es un amarillo relativamente brillante, etc.

Nota:

  1. Por supuesto, el fotodetector debe ser sensible a todos los (3) colores de luz utilizados.
  2. El fotodetector puede necesitar algún tiempo para estabilizarse después de cambiar los LED antes de poder obtener lecturas precisas; los fotorresistores, por ejemplo, suelen ser relativamente lentos. Se pueden necesitar decenas a cientos de milisegundos para una precisión aceptable, minutos para los valores más exactos.
  3. Una vez que se configura el hardware, se puede calibrar fácilmente a los colores de la superficie de interés simplemente midiendo una muestra de cada uno. De esta forma, no es necesario realizar ningún esfuerzo para tratar de determinar las distribuciones de longitud de onda exactas o el brillo relativo de los LED, o la sensibilidad relativa del sensor para esas longitudes de onda.
  4. Puede ser necesaria la normalización de los valores medidos antes del uso real. Por ejemplo, para compensar la luz parásita del exterior, se puede tomar una medición más con todos los LED apagados y el resultado se restará de los valores medidos cuando el LED esté encendido. Generalmente, el valor absoluto medido para cada componente de color tiene menos importancia que la diferencia relativa entre ellos.

Algunas páginas aleatorias con 'manos a la obra' sobre el tema:

http://www.societyofrobots.com/sensors_color.shtml

http://www.instructables.com/id/Color-Detection-Using-RGB-LED/#step1

http://letsmakerobots.com/node/23768

Gracias. Definitivamente vale la pena intentarlo, y especialmente cuando apunto a la detección de un conjunto de colores ligeramente más amplio. Sin embargo, no estoy seguro de entender la física detrás de este principio. Un fotodiodo/fotorresistencia simple solo detectaría la intensidad, y creo que uno puede tener la misma intensidad informada para cada uno de R, B, G. Así que me pregunto cómo funcionará esto.
Por favor, vea mi edición y háganos saber si algo todavía no está claro.

Hay una cantidad sustancial de circuitos integrados que harán este trabajo con varios grados de capacidad. Dividiré el rango en 3 partes, pero hay límites estrictos y rápidos absolutos.

(1) En el extremo inferior están los circuitos integrados con un solo sensor de diodo por color, filtros RGB y salida de 3 canales.
Un ejemplo (no disponible en Digikey) es Avago ADJD-S311-CR999

(2) Por encima de eso hay pequeños arreglos de fotodiodos con filtros RGB y quizás también celdas sin filtrar. Ejemplo a continuación.

(3) En el extremo superior se encuentran los circuitos integrados de cámara a todo color a precios bastante razonables. Ejemplo a continuación.

Simple y económico: salida de onda cuadrada analógica en canales de luminancia RGB.
Por alrededor de $3.50 en stock en 1/s en Digikey - 24 o 64 fotodiodos dispuestos en 4 grupos intercalados - 25% cada uno de los filtros R, G, B y Clear.
El precio es para el IC más grande. Hoja de datos aquí

  • Los convertidores de luz a frecuencia de color programables TCS3200 y TCS3210 que combinan fotodiodos de silicio configurables y un convertidor de corriente a frecuencia en un único circuito integrado CMOS monolítico.
    La salida es una onda cuadrada (ciclo de trabajo del 50 %) con una frecuencia directamente proporcional a la intensidad de la luz (irradiación).
    La frecuencia de salida de escala completa se puede escalar por uno de los tres valores preestablecidos a través de dos pines de entrada de control. Las entradas digitales y la salida digital permiten una interfaz directa con un microcontrolador u otro circuito lógico. La habilitación de salida (OE) coloca la salida en el estado de alta impedancia para compartir varias unidades de una línea de entrada del microcontrolador.
    En el TCS3200, el convertidor de luz a frecuencia lee una matriz de fotodiodos de 8 × 8. Dieciséis fotodiodos tienen filtros azules, 16 fotodiodos tienen filtros verdes, 16 fotodiodos tienen filtros rojos y 16 fotodiodos son transparentes sin filtros.
    En el TCS3210, el convertidor de luz a frecuencia lee una matriz de fotodiodos de 4 × 6. Seis fotodiodos tienen filtros azules, 6 fotodiodos tienen filtros verdes, 6 fotodiodos tienen filtros rojos y 6 fotodiodos son transparentes sin filtros.
    Los cuatro tipos (colores) de fotodiodos están intercalados para minimizar el efecto de la falta de uniformidad de la irradiancia incidente. Todos los fotodiodos del mismo color están conectados en paralelo. Los pines S2 y S3 se utilizan para seleccionar qué grupo de fotodiodos (rojo, verde, azul, transparente) están activos. Los fotodiodos tienen un tamaño de 110 μm × 110 μm y están en centros de 134 μm.

Algo más caro. Mas complejo. Mucho más capaz.
Por $ 18 en stock en Digikey, puede obtener un sensor completo de "cámara a color" RGB de 5 Mp: 2592 x 1944 x 14 fps o VGA a 53 fps. Esto debería satisfacer su necesidad [tm].
Hoja de datos aquí

  • El Aptina® MT9P031 es un sensor de imagen digital de píxeles activos CMOS de 1/2,5 pulgadas con una matriz de píxeles de imágenes activas de 2592H x 1944V. Incorpora funciones de cámara sofisticadas en el chip, como ventana, modo de salto de columna y fila, y modo de instantánea. Es programable a través de una interfaz serial simple de dos hilos.
Gracias Russell. No estoy seguro de si es el formato, pero no puedo distinguir claramente si está hablando de 3 opciones, con 3 conjuntos de detalles o solo 2 opciones. Desde la perspectiva del rango de costos, puedo permitirme el enfoque de matriz de fotodiodos. Sin embargo, me pregunto si tener un solo fotodiodo, versus una matriz de 4x6, versus una de 8x8, realmente ganaría mucha precisión al determinar el color del objeto. Creo que sí, pero me gustaría saber de otros.
@ icarus74 - Respuesta actualizada.