Construa um Separador de Cores com Arduino: Guia Simples com TCS3200 e Servos
Neste artigo, mostrarei como construir um Separador de Cores com Arduino. Você pode assistir ao vídeo a seguir ou ler o tutorial escrito abaixo.
Design
Para este projeto com Arduino, precisamos apenas de um sensor de cor (TCS3200) e dois servomotores de hobby, o que torna este projeto bastante simples, mas muito divertido de construir. Primeiramente, usando o software de modelagem 3D Solidworks, criei o design do separador de cores e aqui está o seu princípio de funcionamento:

- Inicialmente, os skittles coloridos que estão no alimentador caem na plataforma conectada ao servomotor superior.
- Em seguida, o servomotor gira e leva o skittle até o sensor de cor, que detecta a sua cor.
- Depois disso, o servomotor inferior gira para a posição correspondente e, então, o servomotor superior gira novamente até que o skittle caia no trilho guia.
Aqui você pode baixar o modelo 3D, bem como os desenhos com todas as dimensões necessárias para construir este projeto com Arduino.
Você pode encontrar e baixar este modelo 3D, bem como explorá-lo no navegador no Thangs.

Baixe o modelo 3D de montagem no Thangs.
Os seguintes desenhos podem ser usados para corte a laser de todas as peças do gabinete:
Construindo o Separador de Cores com Arduino
O material que usei para este projeto é uma fibra de 3 mm de espessura. Redesenhei as peças na fibra de acordo com os desenhos e, usando uma serra manual pequena, cortei todas as peças no tamanho certo.

Uma vez que todas as peças estavam prontas, comecei a montá-las. Primeiro, montei as partes externas usando uma pistola de cola quente.

Então, usando cola multiuso, colei os dois servomotores em suas plataformas e os fixei à montagem.
Depois disso, novamente usando cola, fixei o trilho guia no servomotor inferior, bem como o suporte e a plataforma necessários para o servomotor superior.

Em seguida, inseri um interruptor e um conector de alimentação para alimentar o Arduino com um adaptador de 5V e, na terceira plataforma, inseri o sensor de cor.

Conectei os componentes de acordo com o seguinte esquema de circuito.

Você pode obter os componentes necessários para este Projeto Arduino nos links abaixo:
- Sensor de Cor TCS230 TCS3200
- Arduino Nano
- Protoboard e Fios Jumpers
- Servomotor
- Interruptor
- Conector de Alimentação (Power Jack)
Código Fonte do Separador de Cores com Arduino
Neste ponto, primeiro precisamos programar o Arduino e depois finalizar a montagem. Aqui está o Código do Arduino:
/* Projeto Arduino - Máquina de Separação de Cores
* por Dejan Nedelkovski, www.HowToMechatronics.com
*/
#include <Servo.h>
#define S0 2
#define S1 3
#define S2 4
#define S3 5
#define sensorOut 6
Servo topServo;
Servo bottomServo;
int frequency = 0;
int color = 0;
void setup() {
pinMode(S0, OUTPUT);
pinMode(S1, OUTPUT);
pinMode(S2, OUTPUT);
pinMode(S3, OUTPUT);
pinMode(sensorOut, INPUT);
// Configurando escala de frequência para 20%
digitalWrite(S0, HIGH);
digitalWrite(S1, LOW);
topServo.attach(7);
bottomServo.attach(8);
Serial.begin(9600);
}
void loop() {
topServo.write(115);
delay(500);
for(int i = 115; i > 65; i--) {
topServo.write(i);
delay(2);
}
delay(500);
color = readColor();
delay(10);
switch (color) {
case 1: bottomServo.write(50); break;
case 2: bottomServo.write(75); break;
case 3: bottomServo.write(100); break;
case 4: bottomServo.write(125); break;
case 5: bottomServo.write(150); break;
case 6: bottomServo.write(175); break;
case 0: break;
}
delay(300);
for(int i = 65; i > 29; i--) {
topServo.write(i);
delay(2);
}
delay(200);
for(int i = 29; i < 115; i++) {
topServo.write(i);
delay(2);
}
color = 0;
}
// Função Personalizada - readColor()
int readColor() {
// Configurando fotodiodos com filtro vermelho para leitura
digitalWrite(S2, LOW);
digitalWrite(S3, LOW);
// Lendo a frequência de saída
frequency = pulseIn(sensorOut, LOW);
int R = frequency;
// Imprimindo o valor no monitor serial
Serial.print("R= "); // imprimindo nome
Serial.print(frequency); // imprimindo frequência da cor VERMELHA
Serial.print(" ");
delay(50);
// Configurando fotodiodos com filtro verde para leitura
digitalWrite(S2, HIGH);
digitalWrite(S3, HIGH);
// Lendo a frequência de saída
frequency = pulseIn(sensorOut, LOW);
int G = frequency;
// Imprimindo o valor no monitor serial
Serial.print("G= "); // imprimindo nome
Serial.print(frequency); // imprimindo frequência da cor VERDE
Serial.print(" ");
delay(50);
// Configurando fotodiodos com filtro azul para leitura
digitalWrite(S2, LOW);
digitalWrite(S3, HIGH);
// Lendo a frequência de saída
frequency = pulseIn(sensorOut, LOW);
int B = frequency;
// Imprimindo o valor no monitor serial
Serial.print("B= "); // imprimindo nome
Serial.print(frequency); // imprimindo frequência da cor AZUL
Serial.println(" ");
delay(50);
if(R < 45 && R > 32 && G < 65 && G > 55) {
color = 1; // Vermelho
}
if(G < 55 && G > 43 && B < 47 && B > 35) {
color = 2; // Laranja
}
if(R < 53 && R > 40 && G < 53 && G > 40) {
color = 3; // Verde
}
if(R < 38 && R > 24 && G < 44 && G > 30) {
color = 4; // Amarelo
}
if(R < 56 && R > 46 && G < 65 && G > 55) {
color = 5; // Marrom
}
if(G < 58 && G > 45 && B < 40 && B > 26) {
color = 6; // Azul
}
return color;
}
Descrição do código:
Precisamos incluir a biblioteca "Servo.h", definir os pinos aos quais o sensor de cor será conectado, criar os objetos servo e declarar algumas variáveis necessárias para o programa. Na seção setup, precisamos definir os pinos como Saídas e Entradas, configurar a escala de frequência para o sensor de cor, definir os pinos dos servos e iniciar a comunicação serial para imprimir os resultados da leitura de cor no monitor serial.
Na seção loop, nosso programa começa movendo o servomotor superior para a posição do alimentador de skittles. Observe que este valor de 115 serve para as minhas peças e meu servomotor, então você deve ajustar este valor, bem como os valores seguintes para os servomotores, de acordo com a sua construção.
Em seguida, usando o loop "for", giraremos e levaremos o skittle para a posição do sensor de cor. Estamos usando um loop "for" para que possamos controlar a velocidade da rotação alterando o tempo de delay no loop.
Em seguida, após um atraso de meio segundo, usando a função personalizada readColor(), leremos a cor do skittle. Aqui está o código da função personalizada. Usando os quatro pinos de controle e o pino de saída de frequência do sensor de cor, lemos a cor do skittle. O sensor lê 3 valores diferentes para cada skittle: Vermelho, Verde e Azul e, de acordo com esses valores, dizemos qual é a cor real. Para mais detalhes sobre como o sensor de cor TCS3200 funciona, você pode conferir meu tutorial detalhado anterior sobre ele.

Aqui estão os valores RGB que obtive do sensor para cada skittle. Observe que esses valores podem variar porque o sensor nem sempre é preciso. Portanto, usando essas declarações "if", permitimos ao sensor um erro de cerca de +-5 do valor testado para a cor específica. Então, por exemplo, se tivermos um skittle Vermelho, a primeira declaração "if" será verdadeira e a variável "color" obterá o valor 1. É isso que a função personalizada readColor() faz e, depois disso, usando uma declaração "switch-case", giramos o servomotor inferior para a posição particular. No final, giramos ainda mais o servomotor superior até que o skittle caia no trilho guia e o enviamos de volta à posição inicial para que o processo possa ser repetido.
Finalizando o Design
Após fazer o upload do código, fixei a placa Arduino usando uma pistola de cola quente.

Então, usando uma garrafa plástica transparente, fiz o alimentador e, junto com a parte superior, colei-o na montagem e finalizei o projeto.

Sinta-se à vontade para fazer qualquer pergunta na seção de comentários abaixo.
Processo de manufatura
- Crie um Sistema Ambilight Impressionante para Monitor com Arduino
- Construa o Clássico Jogo Pong no Arduino UNO com Display OLED – Tutorial Passo a Passo
- Detector de Frequência de Áudio com Arduino – Meça Picos de Som com Módulo de Alta Sensibilidade
- Construa Seu Próprio Tamagotchi com Arduino: Projeto DIY de Pet Digital
- Controlador Inteligente de Interruptor de Luz Sem Fio: Manipulador Remoto Baseado em Arduino
- Jogo da Velha com Arduino, Matriz LED MAX7219 e Caixa de Papelão
- Pistola de Água Inteligente com Detecção de Movimento usando Arduino Nano
- Construa um Temporizador Regressivo Confiável com Arduino e Display de 7 Segmentos SparkFun
- Misturador de Cores RGB com Arduino – Projeto DIY para Iniciantes
- Girassol Eletrônico com Arduino: Rastreador Solar Autônomo