Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Proceso de manufactura

Prototipo de sensor de color:detecta el nombre del color de los objetos

Componentes y suministros

Arduino UNO
× 1
Ánodo común difuso RGB
Cátodo o ánodo común ... usa lo que tienes
× 1
Foto resistor
× 1
LCD estándar Adafruit - 16x2 blanco sobre azul
Cualquier cosa que pueda usarse con la biblioteca LiquidCrystal Arduino
× 1
Resistencia de 10k ohmios
Para interruptor táctil y celda CdS
× 2
Resistencia 100 ohm
150 ohmios para el pin rojo y 2x 100 ohmios para los pines verde y azul del LED RGB
× 3
Interruptor de botón SparkFun de 12 mm
× 1
Cables de puente (genéricos)
× 1
Breadboard (genérico)
× 1

Aplicaciones y servicios en línea

MLP Topology Workbench
Herramienta utilizada para reentrenar redes neuronales para su uso con la biblioteca Neurona en Arduino.

Acerca de este proyecto

Esta es una versión simplificada del artículo completo, en aras de la simplicidad, para que la reproducción de este proyecto se pueda hacer fácilmente. Consulte también este proyecto en mi blog para obtener más detalles de implementación.

Este artículo está dividido en las secciones enumeradas en el menú del lado derecho. Si desea pasar a los detalles técnicos, consulte la tabla de contenido a la derecha o descargue el código en el repositorio de GitHub. Antes de continuar con su lectura, consulte el video del proyecto para ver de qué se trata realmente este proyecto :)

Descripción general del proyecto

Similar a la visión en color del ojo humano, además de estar basado en la luz, el modelo RGB comprende más de 16 millones de colores , que se organizan en un espacio 3D , donde los valores enteros de los componentes R (Rojo), G (Verde) y B (Azul), que van de 0 a 255, constituyen coordenadas de este espacio. A partir de este modelo, la detección y el reconocimiento del color se realizaron con componentes electrónicos relacionados con la luz y mecanismos de aprendizaje automático .; Es esencialmente la combinación de un LED RGB y una celda CdS (sensor de luz o LDR), ambos aislados de la luz ambiental . Dichos componentes, respectivamente, emiten y detectan la intensidad de cada luz (roja, verde y azul) que se refleja en un objeto de un color particular.

Perceptrón multicapa

El perceptrón multicapa (MLP) es una arquitectura de retroalimentación de redes neuronales artificiales, que tiene una capa de entrada (no neuronal), capas ocultas y una capa de salida. Esta red se entrena mediante un algoritmo de retropropagación, realizando un aprendizaje supervisado (aprendizaje mediante ejemplos).

Para este sensor de color, la red neuronal ilustrada arriba recibe 3 entradas (valores RGB) , que tiene una capa oculta con 6 neuronas y una capa de salida con 10 neuronas - solo recordando:la capa de salida debe tener el mismo número de clases (colores, en este caso), para una salida binarizada. Para este tutorial, la red ya está entrenada y es capaz de reconocer colores :). Para obtener más detalles sobre los pasos de entrenamiento y el conjunto de datos de ejemplo utilizado para ello, consulte la publicación completa en mi blog.

Reconocimiento de color

Esta tarea se puede realizar utilizando nuestra red MLP capacitada. Permite la clasificación y el reconocimiento de patrones espacialmente separables, muy útil en este caso. Durante su paso de entrenamiento, la red asignó regiones en el espacio de color RGB que se ilustra a continuación, de modo que cada región aislada por hiperplanos representa un color . Por lo tanto, cada nuevo patrón de color RGB (representado como un punto 3D) cae en una región particular, y se clasifica como su color respectivo.

Con el fin de obtener la generalización con un MLP para un buen reconocimiento de patrones RGB, se debe presentar a la red un conjunto de entrenamiento (ejemplos de colores con la salida deseada del espacio 3D ilustrado arriba) para el paso de entrenamiento. El conjunto de formación utilizado en este proyecto está disponible en el GitHub del proyecto. repositorio. Si está interesado en las redes neuronales, siga leyendo esta sección y consulte este Patio de juegos que desarrollé, para que pueda usar el conjunto de datos para entrenar la red usted mismo y usarlo en el código :). De lo contrario, pase a los detalles de la implementación .

La generalización se producirá en el dominio que comprende el conjunto de entrenamiento, por lo que vale la pena prestar atención a los valores mínimos y máximos de cada componente del espacio! No alimente la red con patrones fuera de este dominio, de lo contrario, no se espera que la salida funcione correctamente.

El conjunto de datos (todos los ejemplos) contiene 75 instancias de patrones de color que van de 0 a 1. Inicialmente van de 0 a 255, estas instancias se reescalaron simplemente dividiendo cada valor por 255, de modo que 0 <=x1, x2, x3 <=1 Como se puede ver en el conjunto de datos, es importante señalar que solo una neurona en la capa de salida debe generar 1, mientras que las restantes deben generar cero. Debido al hecho de que una red entrenada genera valores flotantes, el posprocesamiento se lleva a cabo de la siguiente manera:

donde yi es la salida de la i-ésima neurona y max (y) es el valor de salida más grande. En términos prácticos, la neurona con la salida más grande da 1 como salida y las restantes dan 0. Tan simple como eso.

Circuito electrónico

A partir de objetos, todo el procedimiento de detección ocurre en el circuito electrónico, abarcando la actividad computacional que se ejecuta en un Atmega328, que está conectado a placas Arduino. Verifique el cableado de los esquemas a continuación.

El código sigue el esquema anterior que usa un ánodo común LED RGB. Dicho esto, compruebe si su LED RGB también es un ánodo común; de lo contrario, simplemente invierta la lógica en el código .

Otro detalle importante es que estoy usando solo una resistencia con el LED RGB. Como se iluminará un color a la vez, coloco la resistencia en el ánodo común, con una resistencia promedio de las resistencias que debería haber sido con los cátodos - es perezoso, lo sé y lo siento! Cuando fui a comprar partes del proyecto, no tenían todo lo que necesitaba, pero es muy importante usar las resistencias correctas con los cátodos para tener fidelidad en los valores RGB recopilados con respecto a los valores RGB en la computadora. La forma en que lo hice no es tan mala, ya que los patrones no están distorsionados; simplemente no son los mismos colores que vemos en la pantalla de una computadora (y como captura un ojo humano).

Se puede observar en los esquemas la adyacencia entre el LED RGB y la Celda CdS. Esto se debe a que deben aislarse de la luz ambiental (un tubo de película negro antiguo es la pieza perfecta), por lo que se puede realizar la calibración (explicada en Programación) y el reconocimiento. Consulte el video del proyecto para ver cómo estos componentes están aislados de la luz ambiental.

Teoría del color

La percepción del color realizada por el circuito electrónico se basa en conceptos de la teoría del color. Dado que (todavía) no hay lentes involucrados, solo se deben considerar los objetos con material opaco (y mate) , evitando lidiar con la reflexión especular del LED. La reflexión difusa por otro lado es la clave para realizar la detección de color con luces. De una luz incidente, se refleja en superficies irregulares, no creando ese efecto de brillo que arruina la función de la CdS Cell.

Volviendo a la teoría del color real, cuando la luz (de cierto color) llega a un objeto, se refleja de acuerdo con las propiedades del color de ese objeto. Por ejemplo, una luz roja que llega a un objeto amarillo se reflejará de acuerdo con la cantidad de rojo que exista en la composición de ese color amarillo; recuerde, ¡estamos hablando de luces! - por lo que se espera que se refleje mucha luz roja, lo que tiene sentido cuando pensamos en la composición RGB del amarillo (esencialmente rojo y verde). Sin embargo, cuando una luz azul alcanza el objeto amarillo, no se espera un reflejo fuerte debido a la baja presencia de azul en la composición del color.

Considerando un sistema de color aditivo, en el que el blanco y el negro son respectivamente presencia y ausencia de todos los colores (más detalles aquí ), se pueden medir (con la celda CdS) los reflejos máximos y mínimos de cada luz del LED RGB que llegará a los objetos de color. Dicho esto, es posible realizar la calibración en los componentes electrónicos involucrados en el circuito. Esta es otra clave para obtener fidelidad en la detección, así como para garantizar una detección estable de patrones (evitando valores atípicos). Aquí hay una sugerencia de oro :después de calibrar, intenta (¡duro!) no mover ni tocar ni los componentes electrónicos (especialmente cuando están colocados en un tablero), ni la pieza que estás usando (debes usar) para aislar los componentes de la luz ambiental.

US_plugins_acrobat_en_motion_education_colorTheory.pdf

Programación

Para la calibración y el reconocimiento, el sensor de color ejecuta tres iteraciones, una vez que un objeto de color se expone al LED RGB y la celda CdS. En la primera iteración, la luz roja golpea el objeto y el programa espera que la celda CdS estabilice su detección; A continuación, se lee la entrada analógica y se almacena el reflejo de la luz roja. El programa itera dos veces más para los colores verde y azul. La figura que se muestra en la teoría del color ofrece una buena explicación visual de este proceso iterativo.

En cuanto a la calibración, el proceso iterativo mencionado anteriormente se realiza dos veces:una para el color negro y otra para el color blanco. Como se explica en la teoría del color, esto es para la detección de máximo y mínimo, inicialmente desde cerca de cero a cerca de 1024 , de acuerdo con la resolución de lectura - reflejos de luces rojas, verdes y azules, obteniendo un rango real para reescalar adecuadamente a los intervalos [0, 255] (con fines informativos) y [0, 1] (la entrada real para alimentar la red neuronal ).

El tiempo de espera para establecer la lectura del sensor de luz puede variar de acuerdo con cada componente electrónico, por lo que es bueno dar un buen retraso para asegurar una detección constante. En mi caso, di un retraso de 500 milisegundos, pero vale la pena usar inicialmente un valor mayor y luego disminuirlo hasta el borde de un comportamiento no estable.

En la detección, los valores RGB recopilados, que van de 0 a 1, alimentan un MLP y realizan el reconocimiento de color real. Para el MLP que se ejecuta en Arduino, estoy usando Neurona - una biblioteca que escribí para usar fácilmente ANN en arduino, que se puede instalar desde Arduino IDE con el Administrador de bibliotecas. Consulta también esta publicación para más detalles.

Como se mencionó anteriormente, la red ya está entrenada y lista para ser detectada en el código del proyecto. Se entrenó usando el patio de juegos que desarrollé, incorporando los pesos ajustados al código, de modo que la biblioteca de Neurona hace que la red esté lista para operar.

Pruebas

Con fines informativos, se extrajeron algunos colores del conjunto de datos para realizar algunas pruebas de reconocimiento:

Los números fuera de la figura se utilizan para identificación y los números dentro de la figura indican clasificaciones erróneas, haciendo referencia a los colores que se clasificaron en su lugar. Estos colores se imprimieron en papel de sulfito con una impresora de inyección de tinta; revisa los pequeños cuadrados de papel en el video al comienzo de esta publicación, por lo que los objetos consisten en material opaco, adecuado para la detección de color.

Código

Prototipo de sensor de color
El código para enviar a arduino se encuentra dentro de la carpeta colorSensor. Asegúrese de que su circuito electrónico esté construido de acuerdo con los esquemas presentados y que la biblioteca Neurona esté instalada correctamente (puede instalarla desde Arduino Library Manager) .https://github.com/moretticb/ColorSensor/

Esquemas

Utilice el botón pulsador de acuerdo con las instrucciones de la pantalla LCD.

Proceso de manufactura

  1. Códigos de colores de resistencias
  2. Alerta de sed Alarma de planta
  3. Reloj Word en italiano
  4. Sensor de obstáculos simple con Arduino
  5. Medidor de kWh Sigfox
  6. Monitor de temperatura Bluetooth
  7. Bloqueo controlado por gestos
  8. El IC complementario
  9. Adaptador MIDI USB
  10. Una entrada analógica aislada para Arduino
  11. Mide tu tiempo de reacción