Detecção de cores do Arduino
Componentes e suprimentos
![]() |
| × | 1 | |||
| × | 1 | ||||
![]() |
| × | 1 | |||
![]() |
| × | 1 |
Aplicativos e serviços online
![]() |
|
Sobre este projeto

Projeto
Este é um tutorial simples, onde exploraremos como ler cores usando o Arduino e sensores como o TCS 3200. A ideia será detectar a cor de um objeto e exibi-la em um LCD. Este projeto é um componente de um projeto maior que será um Braço de Robô que seleciona uma ação apropriada com base na cor de um objeto. O diagrama de blocos acima mostra os componentes principais.
O vídeo abaixo mostra o trabalho final do projeto:
Etapa 1:BoM
Os links e preços abaixo são apenas para referência.
- Arduino Nano (US $ 8,00)
- Módulo sensor de cores TCS3200 (US $ 9,00)
- Módulo LCD Serial Blue Backlight IIC / I2C / TWI 1602 (US $ 8,00)
- Breadboard (US $ 2,00)
- cabos
Etapa 2:o sensor de cores TSC 3200

Conforme descrito em sua folha de dados, o TCS3200 é um conversor de luz em freqüência programável em cores que combina fotodiodos de silício configuráveis e um conversor de corrente em freqüência em um único circuito integrado CMOS monolítico.
A saída é uma onda quadrada (ciclo de trabalho de 50%) com frequência diretamente proporcional à intensidade da luz (irradiância). A frequência de saída em escala real pode ser escalonada por um dos três valores predefinidos por meio de dois pinos de entrada de controle (S0 e S1). As entradas e saídas digitais permitem interface direta com um microcontrolador ou outro circuito lógico.

A habilitação de saída (OE) coloca a saída no estado de alta impedância para compartilhamento de várias unidades de uma linha de entrada do microcontrolador. No TCS3200, o conversor de luz em frequência lê uma série de fotodiodos de 8 x 8.
- Dezesseis fotodiodos têm filtros azuis
- 16 fotodiodos têm filtros verdes
- 16 fotodiodos têm filtros vermelhos
- 16 fotodiodos são transparentes, sem filtros.
Os pinos S2 e S3 são usados para selecionar qual grupo de fotodiodos (vermelho, verde, azul, transparente) está ativo. Os fotodiodos têm 110 μm x 110 μm de tamanho e estão em centros de 134 μm.
O OE (Ativar) deve ser conectado ao GND (BAIXO).
O sensor é encapsulado e deve ser alimentado entre 2,7 e 5,5 VCC. Usaremos a saída de 5 V do Arduino para alimentar o sensor. Para o uso adequado do sensor, instalaremos um pequeno anel de borracha para isolar o sensor da luz lateral. Usei cola quente para consertar.

Etapa 3:Conectando o HW

Conecte o Sensor TSC3200 conforme abaixo:
- S0 ==> Nano pino D4
- S1 ==> Nano pino D5
- S2 ==> Nano pino D6
- S3 ==> Nano pino D7
- OUT ==> Nano Pin D8
- EN ==> GND
- VCC ==> + 5V
- GND ==> GND
Conecte o display serial I2C LCD 2/16:
- SDA ==> Nano Pin A4
- SCL ==> Nano Pin A5
Instale o Arduino Nano no BreadBoard. Conecte a saída Nano 5V e GND em ambos os barramentos de alimentação.
Etapa 4:o código do Arduino

A primeira coisa a definir é a escala de frequência conforme definido na tabela mostrada acima. Os pinos S0 e S1 são usados para isso. O escalonamento da frequência de saída é útil para otimizar as leituras do sensor para vários contadores de frequência ou microcontroladores. Vamos definir S0 e S1, ambos em HIGH (100%):
digitalWrite (s0, HIGH); digitalWrite (s1, HIGH);
A próxima coisa a fazer é selecionar a cor a ser lida pelo fotodiodo (vermelho, verde ou azul), usamos os pinos de controle S2 e S3 para isso. Como os fotodiodos estão conectados em paralelo, configurar S2 e S3 LOW e HIGH em diferentes combinações permite selecionar diferentes fotodiodos, conforme mostrado na tabela acima.
digitalWrite (s2, LOW); digitalWrite (s3, LOW); vermelho =pulseIn (outPin, LOW); // Lendo o componente RED da cor digitalWrite (s2, HIGH); digitalWrite (s3, HIGH); grn =pulseIn (outPin, LOW); // Lendo o componente VERDE da cor digitalWrite (s2, LOW); digitalWrite (s3, HIGH); blu =pulseIn (outPin, LOW); // Lendo o componente AZUL da cor
No código final, vamos ler algumas vezes cada um dos componentes RGB e fazer uma média, para que possamos reduzir o erro se uma das leituras for ruim.
Uma vez que temos os 3 componentes (RGB), devemos definir de que cor é essa. A forma de fazer é calibrar previamente o projeto. Você pode usar um papel ou objeto de teste colorido conhecido e ler os 3 componentes gerados.
Você pode começar com o meu, alterando os parâmetros para o seu nível de luz:
void getColor () {readRGB (); if (red> 8 &&red <18 &&grn> 9 &&grn <19 &&blu> 8 &&blu <16) color ="WHITE"; else if (red> 80 &&red <125 &&grn> 90 &&grn <125 &&blu> 80 &&blu <125) color ="BLACK"; else if (red> 12 &&red <30 &&grn> 40 &&grn <70 &&blu> 33 &&blu <70) color ="RED"; else if (red> 50 &&red <95 &&grn> 35 &&grn <70 &&blu> 45 &&blu <85) color ="GREEN"; else if (red> 10 &&red <20 &&grn> 10 &&grn <25 &&blu> 20 &&blu <38) color ="AMARELO"; else if (red> 65 &&red <125 &&grn> 65 &&grn <115 &&blu> 32 &&blu <65) color ="BLUE"; else color ="NO_COLOR";}
Como você pode ver acima, eu tenho 6 cores predefinidas:branco, preto, vermelho, verde, amarelo e azul. À medida que a luz ambiente diminui, os parâmetros tendem a aumentar.
Dentro do loop (), eu defino as leituras do display no LCD a cada 1 segundo.
O código completo pode ser encontrado em meu GitHub.
Etapa 5:Conclusão

Como sempre, espero que este projeto possa ajudar outras pessoas a encontrar seu caminho no emocionante mundo da eletrônica, robótica e IoT!
Visite meu GitHub para arquivos atualizados:Detector de cores
Para mais projetos, visite meu blog:MJRoBot.org
Saludos do sul do mundo!
Vejo vocês no meu próximo tutorial!
Obrigada,
Marcelo
Código
- Snippet de código # 2
- Snippet de código # 3
Snippet de código # 2 Texto simples
digitalWrite (s2, LOW); digitalWrite (s3, LOW); vermelho =pulseIn (outPin, LOW); // Lendo o componente RED da cor digitalWrite (s2, HIGH); digitalWrite (s3, HIGH); grn =pulseIn (outPin, LOW); // Lendo o componente VERDE da cor digitalWrite (s2, LOW); digitalWrite (s3, HIGH); blu =pulseIn (outPin, LOW); // Lendo o componente AZUL da cor
Snippet de código # 3 Texto simples
void getColor () {readRGB (); if (red> 8 &&red <18 &&grn> 9 &&grn <19 &&blu> 8 &&blu <16) color ="WHITE"; else if (red> 80 &&red <125 &&grn> 90 &&grn <125 &&blu> 80 &&blu <125) color ="BLACK"; else if (red> 12 &&red <30 &&grn> 40 &&grn <70 &&blu> 33 &&blu <70) color ="RED"; else if (red> 50 &&red <95 &&grn> 35 &&grn <70 &&blu> 45 &&blu <85) color ="GREEN"; else if (red> 10 &&red <20 &&grn> 10 &&grn <25 &&blu> 20 &&blu <38) color ="AMARELO"; else if (red> 65 &&red <125 &&grn> 65 &&grn <115 &&blu> 32 &&blu <65) color ="BLUE"; else color ="NO_COLOR";}
Github
https://github.com/Mjrovai/Color-Detectorhttps://github.com/Mjrovai/Color-DetectorEsquemas
Hw
https://github.com/Mjrovai/Color-Detector/blob/master/Color%20Detector.fzzProcesso de manufatura
- Faça Monitor Ambilight usando Arduino
- Jogo Arduino Pong - Tela OLED
- Detector de frequência de áudio
- Arduino Tamagotchi Clone - Animal de estimação digital
- Manipulador de interruptor de luz sem fio
- Tech-TicTacToe
- Pistola de água com sensor de movimento
- Cronômetro de contagem regressiva do Arduino
- Arduino RGB Color Mixer
- Arduino Sunflower:An Electronic Sun-Dancer