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

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:

Construa um Separador de Cores com Arduino: Guia Simples com TCS3200 e Servos
  • 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.

Construa um Separador de Cores com Arduino: Guia Simples com TCS3200 e Servos

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.

Construa um Separador de Cores com Arduino: Guia Simples com TCS3200 e Servos

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

Construa um Separador de Cores com Arduino: Guia Simples com TCS3200 e Servos

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.

Construa um Separador de Cores com Arduino: Guia Simples com TCS3200 e Servos

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.

Construa um Separador de Cores com Arduino: Guia Simples com TCS3200 e Servos

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

Construa um Separador de Cores com Arduino: Guia Simples com TCS3200 e Servos

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.

Construa um Separador de Cores com Arduino: Guia Simples com TCS3200 e Servos

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.

Construa um Separador de Cores com Arduino: Guia Simples com TCS3200 e Servos

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.

Construa um Separador de Cores com Arduino: Guia Simples com TCS3200 e Servos

Sinta-se à vontade para fazer qualquer pergunta na seção de comentários abaixo.

Processo de manufatura

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