A detecção de cores é o processo de identificar e distinguir cores em uma imagem, vídeo, cena ou objeto. Muitas aplicações embarcadas e robóticas exigem esse recurso, pois é útil para classificação, seleção, leitura de tiras de teste, determinação de caminho e muito mais.
Dois sensores padrão usados para detecção de cores incluem TCS230 ou TCS3200. O TCS3200 reconhece várias cores com base em seu comprimento de onda e é fácil de interagir com qualquer microcontrolador usando GPIO. O TCS230 é um pouco mais sensível, detectando uma faixa mais estreita de cores com maior precisão.
Neste projeto, faremos a interface do sensor TCS230/TCS3200 (qualquer um pode ser usado) com o Arduino Mega, calibraremos o sensor e derivaremos os valores RGB para cores específicas.
Componentes necessários
- Arduino UNO/Arduino Mega x1
- Sensor de cor TCS230/TCS3200 x1
- Fios de conexão/DuPont
Os sensores de reconhecimento de cores
Os sensores TCS230 e TCS3200 detectam e medem a intensidade da luz em diferentes comprimentos de onda para determinar a cor de um objeto. Eles podem detectar várias cores usando uma matriz de fotodiodos com diferentes filtros.
O TCS230/TCS3200 contém quatro LEDs brancos que iluminam o objeto à sua frente.
Normalmente, os sensores de reconhecimento de cores têm quatro canais: vermelho, verde, azul e transparente (sem filtro). O TCS3200 tem uma matriz de fotodiodos com quatro filtros. No total, ele tem 16 fotodiodos com filtros vermelho, verde e azul que são sensíveis aos comprimentos de onda vermelho, verde e azul; e tem 16 fotodiodos sem filtros.
Esses sensores controlam o tempo de integração durante o qual coletam luz. Isso lhes permite flexibilidade na adaptação a diferentes condições de iluminação para maior precisão de reconhecimento de cores. TCS230/TCS3200 fornecem sinais de saída analógicos proporcionais à intensidade de luz de cada canal de cor. Eles também têm um conversor de frequência para voltagem que converte as informações de cor em um sinal de voltagem, que pode ser facilmente medido.
Além disso, o TCS230/TCS3200 usa uma técnica de modulação e filtragem para eliminar a interferência da luz ambiente, melhorando ainda mais a precisão da detecção de cores. Ao escolher seletivamente as leituras do filtro de fotodiodo, a força das cores pode ser identificada.
Esses sensores operam a uma tensão de 2,7 ~ 5,5 V DC e possuem o diagrama de pinos abaixo.
Descrição da configuração dos pinos TCS230/TCS3200:
Os pinos S2 e S3 são usados para ler a intensidade de luz de uma cor específica. Os fotodiodos são conectados em paralelo, então definir S2 e S3 para LOW e HIGH em diferentes combinações permite que os fotodiodos sejam correspondidos às cores correspondentes.
As cores são selecionadas conforme a tabela a seguir.
Os pinos S0 e Si dimensionam a frequência de saída para 100%, 20% ou 2% dos parâmetros predefinidos. O dimensionamento da saída otimiza as leituras do sensor para diferentes microcontroladores ou contadores de frequência.
Ao usar Arduino, 20% é típico. O dimensionamento usando os pinos S0 e S1 é feito de acordo com a tabela a seguir.
Conexões de circuito
Para este projeto, conectaremos o sensor de cores TCS230/TCS3200 ao Arduino Mega da seguinte forma:
- Conecte os pinos S0, S1, S2, S3 e de saída do TCS230 / TCS3200 com GPIO13, GPIO12, GPIO11, GPIO10 e GPIO9 do Arduino, respectivamente.
- Em seguida, conecte os pinos VCC e GND do TCS230/TCS3200 com os pinos 5Vout e ground do Arduino, respectivamente.
Esboço do Arduino
Como funciona
O Arduino lê a intensidade da luz de cada cor usando o sensor TCS230/TCS3200 escolhendo os canais vermelho, verde e azul, um após o outro. Os valores “lidos” são mapeados para seus valores calibrados apropriados para uma saída colorida RBG. Observe que o valor da cor RGB só é obtido após a calibração.
O sensor é afetado pela luz ambiente. Então, a calibração de detecção de cor só é possível após a calibração da luz ambiente. Esses valores RGB não correspondem aos valores de cor RGB verdadeiros, mas são uma estimativa decente e valiosa para classificar ou selecionar objetos.
Calibração
O sensor TCS230/TCS3200 deve ser calibrado na mesma luz em que será usado. Imprima as cores vermelha (#FF0000), verde (#00FF00) e azul (#0000FF) em uma folha, junto com uma cor para teste, conforme mostrado na imagem abaixo.
Primeiro, coloque o sensor na cor “vermelho verdadeiro” e anote as leituras para os canais vermelho, verde e azul. Repita para as cores “verde verdadeiro” e “azul verdadeiro”.
Quando o sensor está na cor vermelha verdadeira, a saída de frequência do canal vermelho estará no nível mais baixo. Quando estiver em verde verdadeiro ou azul verdadeiro, a saída de frequência estará no máximo para qualquer uma das cores. A frequência mais baixa é mapeada em 255 e a frequência mais alta registrada é mapeada em 0.
Após obter os valores mínimo e máximo de cada cor, mapeie-as no esboço usando a função map . Isso já foi feito no esboço acima. Mas você precisará fazer isso com base na iluminação do seu ambiente. Desta forma, o sensor estará calibrado para as condições de luz ambiente nas condições de operação do seu projeto.
O código
O esboço começa definindo as atribuições dos pinos para o sensor de cores TCS230/TCS3200. A seguir, são declaradas as variáveis para armazenamento dos valores RGB. Na função setup , os pinos conectados a S0, S1, S2 e S3 são definidos como saídas digitais e o pino conectado ao TCS230/TCS3200 é definido como entrada digital. O pino S0 está definido como HIGH e o S1 está definido como LOW – selecionando uma escala de 20%, o que é mais adequado para Arduino. A taxa de transmissão para comunicação serial é definida como 9600 bps.
Na função loop , o Arduino primeiro seleciona o canal vermelho do sensor definindo os pinos S2 e S3 como LOW. Ele lê a frequência da cor vermelha, mapeando seus valores calibrados usando a função de mapa. O valor do filtro vermelho é impresso na porta serial. O Arduino então seleciona o canal verde do sensor definindo os pinos S2 e S3 como HIGH. Ele lê a frequência da cor verde, mapeando seus valores calibrados usando a função de mapa. O valor do filtro verde é impresso na porta serial.
Por fim, o Arduino seleciona o canal azul do sensor configurando o pino S2 para LOW e o pino S3 para HIGH. Ele lê a frequência da cor azul, mapeando para seus valores calibrados usando a função map. O valor para o filtro azul é impresso na porta serial.
Isso fornece um valor de cor RGB aproximado, que é útil na seleção ou classificação de objetos.
Demonstração em vídeo