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
Vasos de colores
Pintura
Código deprogramación
-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