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 Sensor de Cor Arduino – Identifica e Exibe Nomes de Cores de Objetos

Componentes e Materiais

Componente Quantidade Observação
Arduino UNO 1
LED RGB Difuso Ânodo Comum 1 Cátodo comum ou ânodo... use o que tiver
Fotorresistor (LDR / CdS Cell) 1
LCD Padrão Adafruit 16x2 Branco sobre Azul 1 Qualquer compatível com biblioteca LiquidCrystal
Resistor 10k Ω 2 Para chave tátil e célula CdS
Resistor 100 Ω 3 150 Ω para pino vermelho e 2x 100 Ω para verde e azul do LED RGB
Chave Pushbutton 12mm SparkFun 1
Jumpers (genéricos) 1
Protoboard (genérica) 1

Aplicativos e Serviços Online

Sobre o Projeto

Esta é uma versão simplificada do artigo completo, para facilitar reprodução. Confira também no meu blog para mais detalhes de implementação. Assista ao vídeo do projeto para ver do que se trata.

Visão Geral do Projeto

Similar à visão de cores do olho humano, baseada em luz, o modelo RGB compreende mais de 16 milhões de cores, dispostas em um espaço 3D, onde valores inteiros de R, G, B (0 a 255) formam coordenadas. A detecção e reconhecimento de cores foram realizados com componentes eletrônicos relacionados à luz e mecanismos de machine learning; essencialmente a combinação de um LED RGB e uma célula CdS (sensor de luz/LDR), ambos isolados da luz ambiente. O LED emite e o sensor detecta a intensidade de cada luz (vermelho, verde, azul) refletida por um objeto de cor particular.

Perceptron Multicamadas (MLP)

MLP é uma arquitetura feedforward de Redes Neurais Artificiais, com camada de entrada (não neural), camadas ocultas e camada de saída. Treinado por backpropagation, realiza aprendizado supervisionado (por exemplos).

Protótipo Sensor de Cor Arduino – Identifica e Exibe Nomes de Cores de Objetos
Rede neural: 3 entradas (RGB), 1 camada oculta com 6 neurônios, saída com 10 neurônios (classes de cores)

Para este sensor de cor, a rede recebe 3 entradas (valores RGB), tem 1 camada oculta com 6 neurônios e camada de saída com 10 neurônios — o número de classes (cores). A rede já vem treinada e pronta para reconhecer cores. Detalhes de treinamento e dataset no post completo do blog.

Reconhecimento de Cor

Usa nossa MLP treinada. Permite classificação e reconhecimento de padrões espacialmente separáveis. Durante treinamento, a rede mapeou regiões no espaço RGB (abaixo), onde cada região isolada por hiperplanos representa uma cor. Todo novo padrão RGB (ponto 3D) cai em uma região, sendo classificado como sua cor respectiva.

Protótipo Sensor de Cor Arduino – Identifica e Exibe Nomes de Cores de Objetos
Protótipo Sensor de Cor Arduino – Identifica e Exibe Nomes de Cores de Objetos

Para generalização, um conjunto de treino (exemplos de cores com saída desejada do espaço 3D) deve ser apresentado. Dataset disponível no repositório GitHub. Se gosta de redes neurais, continue lendo e confira o Playground que desenvolvi para treinar a rede você mesmo. Caso contrário, pule para Detalhes de Implementação.

A generalização ocorre no domínio do conjunto de treino, então atenção aos valores min e max de cada componente! Não alimente a rede com padrões fora desse domínio.

Protótipo Sensor de Cor Arduino – Identifica e Exibe Nomes de Cores de Objetos

O dataset (75 instâncias) varia de 0 a 1. Inicialmente 0-255, reescalados dividindo por 255. No dataset, apenas um neurônio de saída deve dar 1, os demais 0. Como a rede treinada sai com floats, pós-processamento:

Protótipo Sensor de Cor Arduino – Identifica e Exibe Nomes de Cores de Objetos

Onde yi é saída do i-ésimo neurônio e max(y) o maior valor. Praticamente: neurônio com maior saída = 1, demais = 0.

Circuito Eletrônico

Toda detecção ocorre no circuito, com Atmega328 no Arduino. Confira fiação nos esquemáticos.

Protótipo Sensor de Cor Arduino – Identifica e Exibe Nomes de Cores de Objetos
Protótipo Sensor de Cor Arduino – Identifica e Exibe Nomes de Cores de Objetos

O código usa LED RGB ânodo comum. Verifique se o seu também é ânodo comum, senão inverta a lógica no código.

Usei apenas um resistor no LED RGB. Como uma cor por vez acende, coloquei resistor no ânodo comum com resistência média dos que deveriam estar nos cátodos — é "preguiçoso", peço desculpas! Na loja não tinham tudo. Mas é importante usar resistores corretos nos cátodos para fidelidade nos valores RGB coletados. Meu jeito não é tão ruim: padrões não distorcem, apenas não correspondem às cores de tela de computador (e olho humano).

Observe a proximidade entre LED RGB e célula CdS no esquemático. Devem ser isolados da luz ambiente (tubo de filme preto velho é perfeito), para calibração e reconhecimento funcionarem. Veja o vídeo do projeto para ver o isolamento.

Teoria das Cores

Percepção de cor pelo circuito baseia-se em teoria das cores. Sem lentes, apenas objetos opacos (e foscos) devem ser considerados, evitando reflexão especular do LED. Reflexão difusa é chave para detecção com luz. Da luz incidente, reflete em superfícies irregulares, sem efeito brilhante que atrapalha a célula CdS.

Quando luz (de certa cor) atinge objeto, reflete segundo propriedades da cor do objeto. Ex: luz vermelha em objeto amarelo reflete segundo quanto vermelho há na composição desse amarelo (luzes!) — espera-se muita reflexão vermelha, faz sentido pela composição RGB do amarelo (vermelho + verde). Luz azul em amarelo: pouca reflexão, pois azul quase ausente.

Protótipo Sensor de Cor Arduino – Identifica e Exibe Nomes de Cores de Objetos

Em sistema aditivo (branco = presença de todas cores, preto = ausência), mede-se reflexão máxima e mínima de cada luz do LED RGB em objetos coloridos. Isso permite calibração dos componentes eletrônicos. Dica de ouro: após calibrar, tente (muito!) não mover nem tocar componentes (especialmente em protoboard) nem a peça de isolamento da luz ambiente.

US_plugins_acrobat_en_motion_education_colorTheory.pdf

Programação

Para calibração e reconhecimento, o sensor executa 3 iterações ao expor objeto colorido ao LED RGB e célula CdS. 1ª iteração: luz vermelha atinge objeto, programa espera CdS estabilizar, lê entrada analógica, armazena reflexão vermelha. Repete para verde e azul. Figura da Teoria das Cores ilustra bem.

Calibração: processo iterativo feito 2x: para preto e branco. Detecta reflexão máxima e mínima (inicialmente ~0 a ~1024, pela resolução ADC), obtendo faixa real para reescalar a [0, 255] (informativo) e [0, 1] (entrada real da rede neural).

O tempo de espera para estabilizar leitura do sensor de luz pode variar por componente. Dê bom delay para leitura estável. Usei 500 ms, mas comece com valor maior e diminua até limite de instabilidade.

Na detecção, valores RGB coletados (0 a 1) alimentam MLP, fazendo reconhecimento. Para MLP no Arduino, uso Neurona — biblioteca que escrevi para usar ANNs no Arduino, instalável pelo Library Manager da IDE. Veja este post para detalhes.

A rede já vem treinada e pronta no código. Treinei no Playground que desenvolvi, embutindo pesos ajustados no código, para Neurona tornar a rede operacional.

Testes

Para fins informativos, algumas cores do dataset foram testadas:

Protótipo Sensor de Cor Arduino – Identifica e Exibe Nomes de Cores de Objetos

Números fora da figura identificam; dentro indicam erros de classificação, referenciando quais cores foram classificadas em vez. Cores impressas em papel sulfite com jato de tinta — objetos de material opaco, adequados para detecção.

Código

Protótipo sensor de cor

Código para Arduino está na pasta colorSensor. Certifique-se que circuito está conforme esquemáticos e biblioteca Neurona instalada (Library Manager da IDE Arduino).

https://github.com/moretticb/ColorSensor/

Esquemáticos

Use o pushbutton conforme instruções no display LCD.

Protótipo Sensor de Cor Arduino – Identifica e Exibe Nomes de Cores de Objetos

Processo de manufatura

  1. Códigos de Cores de Resistores – Guia Completo para Decodificar Valor, Tolerância e Padrões E-Series
  2. Alerta Inteligente de Sede para Plantas – Sensor DIY para Hidratação Ideal
  3. Relógio de Palavras em Italiano com Arduino Nano, NeoPixel, LCD e RTC
  4. Construa um Sensor de Obstáculos Simples com Arduino – Tutorial Fácil com LED IR e Fotodiodo
  5. Medidor kWh Confiável com Sigfox e Arduino MKR Fox 1200
  6. Monitor de Temperatura com Bluetooth usando Arduino Nano
  7. Fechadura por Gestos Sem Toque: Acesso Seguro com APDS-9960 e Arduino
  8. Companion IC: Relógio, Ohmímetro, Capacímetro e Testador de Diodos com Arduino Nano
  9. Circuito de Entrada Analógica Isolada para Arduino
  10. Teste de Tempo de Reação Preciso com Arduino UNO