Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Manufacturing Technology >> Processo de manufatura

Protótipo do sensor de cor:detecta o nome da cor dos objetos

Componentes e suprimentos

Arduino UNO
× 1
RGB Diffused Common Anode
Cátodo comum ou ânodo ... use o que você tem
× 1
Resistor de foto
× 1
Adafruit LCD padrão - 16x2 branco em azul
Qualquer coisa que possa ser usada com a biblioteca LiquidCrystal Arduino
× 1
Resistor 10k ohm
Para interruptor tátil e célula CdS
× 2
Resistor 100 ohm
150 ohm para pino vermelho e 2x 100 ohm para pinos verdes e azuis do LED RGB
× 3
SparkFun Botão de pressão 12 mm
× 1
Fios de jumpers (genérico)
× 1
Breadboard (genérico)
× 1

Aplicativos e serviços online

MLP Topology Workbench
Ferramenta usada para treinar redes neurais para uso com a biblioteca Neurona no Arduino.

Sobre este projeto




Esta é uma versão simplificada do artigo completo, por uma questão de simplicidade, para que a reprodução deste projeto possa ser feita facilmente. Verifique também este projeto em meu blog para mais detalhes de implementação.

Este artigo está dividido nas seções listadas no menu do lado direito. Se você quiser pular para os detalhes técnicos, verifique o índice à direita ou baixe o código no repositório GitHub. Antes de continuar sua leitura, verifique o vídeo do projeto para ver do que é realmente este projeto :)





Visão geral do projeto


Semelhante à visão de cores do olho humano, bem como baseado na luz, o modelo RGB compreende mais de 16 milhões de cores , que são organizados em um espaço 3D , onde valores inteiros dos componentes R (Vermelho), G (Verde) e B (Azul), variando de 0 a 255, constituem as coordenadas deste espaço. A partir desse modelo, a detecção e o reconhecimento de cores foram realizados com componentes eletrônicos relacionados à luz e mecanismos de aprendizado de máquina ; é essencialmente a combinação de um LED RGB e uma célula CdS (sensor de luz ou LDR), ambos isolados da luz ambiente . Esses componentes, respectivamente, emitem e sentem a intensidade de cada luz (vermelha, verde e azul) que foi refletida de um objeto de uma determinada cor.





Perceptron multicamadas


Multi-Layer Perceptron (MLP) é uma arquitetura feedforward de Redes Neurais Artificiais, tendo uma camada de entrada (não neural), camadas ocultas e uma camada de saída. Esta rede é treinada por algoritmo de retropropagação, realizando aprendizado supervisionado (aprendizado por exemplos).

Para este sensor de cor, a rede neural ilustrada acima recebe 3 entradas (valores RGB) , tendo uma camada oculta com 6 neurônios e uma camada de saída com 10 neurônios - relembrando:a camada de saída deve ter o mesmo número de classes (cores, neste caso), para uma saída binarizada. Para este tutorial, a rede já está treinada e capaz de reconhecer cores :). Mais detalhes sobre as etapas do treinamento e o conjunto de dados de exemplo usado para ele, verifique a postagem completa em meu blog.





Reconhecimento de cor


Essa tarefa pode ser realizada usando nossa rede MLP treinada. Ele permite a classificação e o reconhecimento de padrões separáveis ​​espacialmente - muito útil neste caso. Durante a etapa de treinamento, a rede mapeou regiões no espaço de cores RGB ilustrado abaixo, de modo que cada região isolada por hiperplanos represente uma cor . Portanto, todo novo padrão de cor RGB (representado como um ponto 3D) cai em uma determinada região, sendo classificado com sua respectiva cor.

Com o objetivo de obter generalização com um MLP para um bom reconhecimento dos padrões RGB, um conjunto de treinamento (exemplos de cores com a saída desejada do espaço 3D ilustrado acima) deve ser apresentado à rede para a etapa de treinamento. O conjunto de treinamento usado neste projeto está disponível no GitHub do projeto repositório. Se você gosta de redes neurais, continue lendo esta seção e confira este Playground que desenvolvi, para que você possa usar o conjunto de dados para treinar a rede sozinho e usá-lo no código :). Caso contrário, pule para os detalhes de implementação .

A generalização acontecerá no domínio que o conjunto de treinamento compreende, então vale a pena prestar atenção aos valores mínimo e máximo de cada componente do espaço! Não alimente a rede com padrões fora deste domínio, caso contrário, a saída não deve funcionar corretamente.

O conjunto de dados (todos os exemplos) contém 75 instâncias de padrões de cores variando de 0 a 1. Inicialmente variando de 0 a 255, essas instâncias foram redimensionadas simplesmente dividindo cada valor por 255, de modo que 0 <=x1, x2, x3 <=1 Como pode ser visto no conjunto de dados, é importante ressaltar que apenas um neurônio na camada de saída deve produzir 1, enquanto os demais devem produzir zero. Devido ao fato de que uma rede treinada emite valores flutuantes, o pós-processamento ocorre da seguinte forma:





onde yi é a saída do i-ésimo neurônio e max (y) é o maior valor de saída. Em termos práticos, o neurônio com a maior saída dá 1 como saída e os restantes dão 0. Simples assim.





Circuito Eletrônico


Saindo dos objetos, todo o procedimento de detecção acontece no circuito eletrônico, englobando a atividade computacional rodando em um Atmega328, que é conectado a placas Arduino. Verifique a fiação nos esquemas abaixo.

O código segue o esquema acima, que usa um ânodo comum LED RGB. Dito isso, verifique se o LED RGB também é um ânodo comum, caso contrário, basta inverter a lógica no código .

Outro detalhe importante é que estou usando apenas um resistor com o LED RGB. Como uma cor de cada vez será acesa, coloquei o resistor no ânodo comum, com uma resistência média dos resistores que deveria ser com os cátodos - é preguiçoso, eu sei e sinto muito! Quando fui comprar peças de projeto, eles não tinham tudo que eu precisava - mas é muito importante usar os resistores corretos com os cátodos para ter fidelidade nos valores RGB coletados em relação aos valores RGB no computador. O jeito que fiz não é tão ruim assim, já que os padrões não estão distorcidos; simplesmente não são as mesmas cores que vemos na tela de um computador (e como o olho humano capta).

Pode-se observar nos esquemas a adjacência entre o LED RGB e a Célula CdS. Isso porque eles devem ser isolados da luz ambiente (um tubo de filme preto antigo é a peça perfeita), para que a calibração (explicada em Programação) e o reconhecimento possam ser executados. Verifique o vídeo do projeto para ver esses componentes sendo isolados da luz ambiente.





Teoria da Cor


A percepção da cor realizada pelo circuito eletrônico é baseada nos conceitos da teoria da cor. Uma vez que não há lentes (ainda) envolvidas, apenas objetos com material opaco (e fosco) devem ser considerados , evitando lidar com a reflexão especular do LED. A reflexão difusa, por outro lado, é a chave para realizar a detecção de cores com luzes. De uma luz incidente, ela é refletida em superfícies irregulares, não criando aquele efeito brilhante que estraga a função da célula CdS.

De volta à teoria da cor real, quando a luz (de uma determinada cor) atinge um objeto, ela é refletida de acordo com as propriedades da cor desse objeto. Por exemplo, uma luz vermelha atingindo um objeto amarelo será refletida de acordo com a quantidade de vermelho existente na composição dessa cor amarela - lembre-se, estamos falando de luzes! - então é esperado que haja muita luz vermelha sendo refletida, o que faz sentido quando pensamos na composição RGB de amarelo (essencialmente vermelho e verde). No entanto, quando uma luz azul atinge o objeto amarelo, nenhuma reflexão forte é esperada devido à baixa presença de azul na composição de cor.

Considerando um sistema de cores aditivas, em que branco e preto são, respectivamente, presença e ausência de todas as cores (mais detalhes aqui ), podem ser medidos (com a célula CdS) reflexos máximos e mínimos de cada luz do LED RGB que vai atingir os objetos coloridos. Dito isso, é possível realizar a calibração nos componentes eletrônicos envolvidos no circuito. Esta é outra chave para obter fidelidade na detecção, bem como para garantir uma detecção estável de padrões (evitando outliers) - aqui está uma dica de ouro :depois de calibrar, tente (com força!) não mover ou tocar nem os componentes eletrônicos (especialmente quando eles são colocados em uma placa de ensaio), nem a peça que você está usando (você deve usar) para isolar os componentes da luz ambiente.
US_plugins_acrobat_en_motion_education_colorTheory.pdf





Programação


Para calibração e reconhecimento, o sensor de cor executa três iterações, uma vez que um objeto colorido é exposto ao LED RGB e à célula CdS. Na primeira iteração, a luz vermelha atinge o objeto e o programa espera a célula CdS para estabilizar sua detecção; a entrada analógica é então lida e o reflexo da luz vermelha é armazenado. O programa itera mais duas vezes para as cores verde e azul. A figura mostrada na teoria da cor fornece uma boa explicação visual desse processo iterativo.

No que diz respeito à calibração, o processo iterativo citado acima é realizado duas vezes:uma para a cor preta e outra para a cor branca. Conforme explicado na teoria da cor, isso é para a detecção de máximo e mínimo - inicialmente de próximo a zero para perto de 1024 , de acordo com a resolução de leitura - reflexos das luzes vermelha, verde e azul, obtendo uma faixa verdadeira para redimensionar adequadamente para intervalos [0, 255] (para fins informativos) e [0, 1] (a entrada real para alimentar a rede neural )

O tempo de espera para estabelecer a leitura do sensor de luz pode variar de acordo com cada componente eletrônico, por isso é bom dar um bom atraso para garantir uma detecção estável. No meu caso, dei um atraso de 500 milissegundos, mas vale a pena usar inicialmente um valor maior e depois diminuí-lo até a beira de um comportamento não estável.

Na detecção, os valores RGB coletados - variando de 0 a 1 - alimentam um MLP, realizando o reconhecimento da cor real. Para o MLP em execução no Arduino, estou usando Neurona - uma biblioteca que escrevi para usar RNAs facilmente no arduino, que pode ser instalada a partir do IDE do Arduino com o Library Manager. Verifique também esta postagem para mais detalhes.

Conforme mencionado anteriormente, a rede já está treinada e pronta para detecção no código do projeto. Foi treinado utilizando o Playground que desenvolvi, incorporando os pesos ajustados ao código, para que a biblioteca Neurona deixe a rede pronta para operar.





Testes


Para fins informativos, algumas cores foram extraídas do conjunto de dados para realizar alguns testes de reconhecimento:

Os números fora da figura são usados ​​para identificação e os números dentro da figura indicam classificações incorretas, referenciando quais cores foram classificadas. Essas cores foram impressas em papel sulfito com uma impressora jato de tinta - verifique os pequenos quadrados de papel no vídeo no início desta postagem - então os objetos consistem em material opaco, próprio para detecção de cores.

Código

Protótipo do sensor de cores
O código a ser enviado ao arduino está localizado na pasta colorSensor. Certifique-se de que seu circuito eletrônico foi construído de acordo com os esquemas apresentados e que a biblioteca Neurona está instalada corretamente (você pode instalar a partir do Arduino Library Manager) .https://github.com/moretticb/ColorSensor/

Esquemas

Use o botão de pressão de acordo com as instruções no display LCD

Processo de manufatura

  1. Códigos de cores do resistor
  2. Alarme de planta de alerta de sede
  3. Word Clock italiano
  4. Sensor de obstáculo simples com Arduino
  5. Medidor Sigfox kWh
  6. Monitor de temperatura Bluetooth
  7. Bloqueio controlado por gestos
  8. O Companion IC
  9. Uma entrada analógica isolada para Arduino
  10. Meça seu tempo de reação