Clasificador de bolas de colores


Este Proyecto ha sido llevado a cabo durante el curso escolar 2017-18 en la asignatura de Tecnología Industrial I de 1º de Bachillerato, en el IES Ramón Giraldo de Villanueva de los Infantes (Ciudad Real).

El objetivo planteado en la realización de este proyecto es conseguir una máquina clasificadora de bolas de colores (blanco, azul y naranja) de manera automática. Para ello contaremos con una placa controladora Arduino UNO y un sensor de color TCS3200.

EL TCS3200 es un sensor óptico que permite detectar el color de un objeto ubicado en frente de él. Internamente, el TCS3200 está formado por una matriz de fotodiodos de silicona junto con un conversor de frecuencia, en un único integrado CMOS. La matriz dispone de 8 x 8 fotodiodos de 110 µm, de los cuales 16 tienen filtros azules, 16 verdes, 16 rojos, y 16 no tienen filtro. Los fotodiodos están distribuidos de forma que minimizan el efecto la incidencia no uniforme de la luz. La salida del TCS3200 es una onda cuadrada del 50% duty, cuya frecuencia es proporcional a la intensidad luminosa. La tensión de alimentación del sensor es de 2.7V a 5.5V.

En nuestro proyecto, realizamos el diseño y construcción de una estructura dividida en tres fases: mecanismo emisor de bolas, canalización de las bolas y recepción-clasificación de bolas. Para ello se sincronizan tres servomotores de 180º.



Materiales


Controladora Arduino UNO Compatible
3 Servos SG - 90 9G 
Placa Board experimental 400 contactos 
Sensor color TCS 3200 
Batería externa recargable y cable USB
     Cableado
     Cartón- cartulina
     Listoncillos de madera
     Tubo de plástico transparente de 24 cm (Ø 20)
     Bolas de colores (blanco, azul, naranja)
     Base contrachapado 50x50 cm2 
Vasos de colores
     Pintura
 
Código deprogramación
/*IES Ramón Giraldo (Villanueva de los Infantes)
-conexiones sensor de color a Arduino-
Sensor        Placa Arduino
    
 VCC               5V
 GND               GND
 s0                8
 s1                9
 s2                12
 s3                11
 OUT               10              
*/
#include <Servo.h> //librería control de servos
const int s0 = 8; 
const int s1 = 9; 
const int s2 = 12; 
const int s3 = 11; 
const int out = 10;   
int rojo = 0; 
int verde = 0; 
int azul = 0; 
Servo myservo; //servo 0
Servo myservo1; //servo 1
Servo myservo2; //servo 2
 
void setup(){ 
  Serial.begin(9600); //comunicación monitor serie
  pinMode(s0, OUTPUT); 
  pinMode(s1, OUTPUT); 
  pinMode(s2, OUTPUT); 
  pinMode(s3, OUTPUT); 
  pinMode(out, INPUT);  
  digitalWrite(s0, HIGH); 
  digitalWrite(s1, HIGH); 
  myservo.attach(6);
  myservo1.attach(4);
  myservo2.attach(3);
}

void loop(){ 
  myservo.write(70); //posición reposo servo 0
  delay(1000);
  myservo.write(0);//cae la bola y la lleva al agujero servo 0
  delay(1000);
  myservo1.write(0); //posición reposo servo 1
  delay(400);
  myservo1.write(150);// abre la trampilla y cae la bola servo 1
  delay(2000);

  color();
  Serial.print("  rojo: "); 
  Serial.print(rojo, DEC); 
  Serial.print("  verde: "); 
  Serial.print(verde, DEC); 
  Serial.print("  azul: "); 
  Serial.print(azul, DEC); 

//Las variables para detectar un color estan en funcion de los otros colores; podemos utilizar valores simplemente.
  if (rojo > 130 & verde > 110 & azul<rojo & azul < 110)
  { 
  Serial.println(" - AZUL");
  myservo2.write(0); //posición primera de la rampa servo 2
  delay(3000);   
  }  
  else if (azul<rojo & azul<verde & rojo < 120) 
  { 
   Serial.println(" - BLANCO"); 
  myservo2.write(50); //posición segunda de la rampa servo 2       
  delay(3000);
  } 
  else
  {  
   Serial.println(" -   NARANJA");      
  myservo2.write(100); // posición tercera de la rampa servo 2
  delay(3000);
  }     
  } 
   
void color() 
{   
  digitalWrite(s2, LOW); 
  digitalWrite(s3, LOW);  
  rojo = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH); 
  digitalWrite(s3, HIGH);  
  azul = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH); 
  digitalWrite(s2, HIGH);   
  verde = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH); 
}

No hay comentarios:

Publicar un comentario