SENSOR DE COLOR
TCS3200 (JUNTO A LOS
MOTORES DC Y SENSOR DE DISTANCIA)
OBJETIVO
Instalar, determinar el funcionamiento del sensor de color
TCS3200, junto a los motores DC y el sensor de distancia para el
reconocimiento de colores
DESARROLLO:
En esta tercera
entrega les presentaré un nuevo sensor que tal vez algunos ya lo
conocen incluso lo habrán usado, pero también habrá otras personas
como yo que no han oído hablar de este sensor, su nombre es: TCS3200
o Sensor de color es un detector de color completo, que incluye un
chip sensor TAOS TCS3200 RGB y 4 LEDS blancos. Sus aplicaciones son
varias como por ejemplo medir la luz ambiental, clasificación por
color, etc. Internamente el sensor tiene un array de pequeño
phototransistores cada uno con varios filtros de color, lo que le
permite ser bastante preciso y sensible. La salida del sensor
devuelve un pulso de duración proporcional a la intensidad del color
detectado.
En el cual se puede
programar su frecuencia, su escala de colores se maneja mediante dos
pines S0 y S1 (2 % al 100 %) , los pines S2 y S3 en cambio controlan el
filtro de LED RGB, el pin OUT enable en cambio coloca la salida en
estado de alta impedancia para el intercambio de unidades múltiples
de una línea de entrada del microcontrolador, para que así el
usuario del sensor pueda calcular el color de la luz por los valores
del RGB.
Después de compartir
con ustedes una pequeña descripción del sensor les quiero comentar
que nosotros hemos hecho uso del mismo para que nuestro prototipo
pueda reconocer colores y pueda mostrar el color reconocido a través
de un led RGB, y así definir la estructura final del prototipo
agregándole una utilidad, la misma que será, en el aprendizaje de los
niños para que puedan reconocer los colores.
Y existen varias
utilidades que le podemos dar a este sensor, todo dependerá de
nuestra creatividad, de lo que buscamos mejorar o desarrollar ya que todo es posible en la medida que tú creas que es posible.
MATERIALES UTILIZADOS:
Arduino Mega: El
MEGA 2560 está diseñado para los proyectos más complejos. Con 54 E
/ S pines, 16 entradas analógicas y un espacio más grande para su
boceto es la junta recomendado para las impresoras 3D y proyectos de
robótica. Esto le da a sus proyectos con mucho espacio y
oportunidades
Placa L298N: En esta
entrada describo una placa controladora de 4 motores de Corriente
Continua (CC). La cual usa 4 puentes H integrados en dos "chips"
L298N".
Motores DC: El motor
de corriente continua es una máquina que convierte la energía
eléctrica en mecánica,
provocando un movimiento rotatorio, gracias a la acción que se
genera del campo magnético
Sensor HC-sr04: Un sensor de proximidad es un transductor que detecta objetos o señales que se encuentran cerca del elemento sensor.
Sensor TCS3200: Este sensor esta basado en el TCS3200. Es un convertidor de luz a frecuencia programable, puede filtrar los datos RGB de la fuente de luz y convertirlo en una onda cuadrada
Corriente Externa
Pilas:
Protoboard:
Cables:
//PROGRAMA PARA EL RECONOCIMIENTO DE COLORES A TRAVES DEL
//SENSOR DE COLOR TCS3200
///////////////////////////////////////////////////////////////////////////////
//declaramos los pines para el sensor de distancia
int trigger = 21;
int echo = 20;
//Motor Izquierdo
int ENA = 8;
int IN1 = 9;
int IN2 = 10;
//Motor Derecho
int ENB = 13;
int IN3 = 11;
int IN4 = 12;
int estado = 0;
int cont = 4;
int direccion;
int giros;
//////////////////////////////////////////////////////////
//Variables del sensor de color
const int s0 = 19;
const int s1 = 18;
const int s2 = 16;
const int s3 = 17;
const int out = 15;
//////////////////////////////////////////////////////////////
// Variables de los led rojo verde y azul
int redLed = 2;
int greenLed =3;
int blueLed = 4;
// variables
int red = 0;
int green = 0;
int blue = 0;
//Funcion void setup()
////////////////////////////////////////////////////
void setup() {
Serial.begin(9600);
pinMode(trigger, OUTPUT);
pinMode(echo, INPUT);
pinMode(ENA, OUTPUT);
pinMode(ENB, OUTPUT);
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
randomSeed(analogRead(0));
apagar();
delay(3000);
//////////////////////////////////////////////
pinMode(s0, OUTPUT);
pinMode(s1, OUTPUT);
pinMode(s2, OUTPUT);
pinMode(s3, OUTPUT);
pinMode(out, INPUT);
pinMode(redLed, OUTPUT);
pinMode(greenLed, OUTPUT);
pinMode(blueLed, OUTPUT);
digitalWrite(s0, HIGH);
digitalWrite(s1, HIGH);
}
void loop() {
digitalWrite(trigger, LOW);
delayMicroseconds(5);
// Comienzo de la medida
digitalWrite(trigger, HIGH);
delayMicroseconds(10);
digitalWrite(trigger, LOW);
// Adquisición y conversión a centímetros
float distancia = pulseIn(echo, HIGH);
distancia = distancia * 0.01657;
if ((distancia >= 15) && (distancia <= 50)) {
estado = 0;
}
else if (distancia > 15.0) {
estado = 1;
}
else {
estado = 2;
}
switch (estado) {
case 0:
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
analogWrite(ENA, 125);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
analogWrite(ENB, 125);
break;
case 1:
avanzarA();
avanzarB();
break;
case 2:
direccion = random(2);
if (direccion == 0) {
retroDerecha();
}else {
retroIzquierda();
}
break;
}
}
//Metodo avanzarA
////////////////////////////////////////////
void avanzarA() {
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
analogWrite(ENA, 255);}
//Metodo AvanzarB()
//////////////////////////////////////////
void avanzarB() {
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
analogWrite(ENB, 255);}
//Metodo RetrocederDerecha
////////////////////////////////////////
void retroDerecha() {
digitalWrite(IN1,HIGH);
digitalWrite(IN2,LOW);
analogWrite(ENA,255);
digitalWrite(IN3,LOW);
digitalWrite(IN4,HIGH);
analogWrite(ENB,255);
delay(250);
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
analogWrite(ENA, 255);
digitalWrite(IN3, LOW);
digitalWrite(IN4, HIGH);
analogWrite(ENB, 255);
giros=random(5);
Serial.println(giros);
delay(500);
if (cont == giros){
apagarTodo();}}
//Metodo retocederIzquierda
////////////////////////////////////
void retroIzquierda(){
digitalWrite(IN1,HIGH);
digitalWrite(IN2,LOW);
analogWrite(ENA,255);
digitalWrite(IN3,LOW);
digitalWrite(IN4,HIGH);
analogWrite(ENB,255);
delay(250);
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
analogWrite(ENA, 255);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
analogWrite(ENB, 255);
//Funcion random para los giros
////////////////////////////////////////
giros=random(5);
Serial.println(giros);
delay(500);
if (cont == giros){
apagarTodo();}}
//Metodo Apagar
//////////////////////////////////////
void apagar() {
analogWrite(ENA, 0);
analogWrite(ENB, 0);
delay(100);}
//Metodo apagarTodo
/////////////////////////////////////
void apagarTodo() {
analogWrite(ENA, 0);
analogWrite(ENB, 0);
int sensorColor = 0;
while (sensorColor != 1) {
color();
Serial.print("R Intensity:");
Serial.print(red, DEC);
Serial.print(" G Intensity: ");
Serial.print(green, DEC);
Serial.print(" B Intensity : ");
Serial.print(blue, DEC);
Serial.println();
//Calcular la intensidad del color rojo
if (red < blue && red < green && red < 10) {
digitalWrite(redLed, HIGH);
delay(3000);
digitalWrite(greenLed, LOW);
digitalWrite(blueLed, LOW);
Serial.println("Se ha detectado el color rojo");
sensorColor = 1;}
//Calcular la intensidad del color azul
else if (blue < red && blue < green) {
//Serial.println(" - (Blue Color)");
digitalWrite(redLed, LOW);
digitalWrite(greenLed, LOW);
digitalWrite(blueLed, HIGH);
delay(3000);
Serial.println("Se ha detectado el color azul");
sensorColor = 1;}
//Detectar la intensidad del colo verde
else if (green < red && green < blue) {
/Serial.println(" - (Green Color)");
digitalWrite(redLed, LOW);
digitalWrite(greenLed, HIGH);
// Turn GREEN LED ON
delay(3000);
digitalWrite(blueLed, LOW);
Serial.println("Se ha detectado el color verde");
sensorColor = 1;}
else {
Serial.println();}
//Apaga los tres leds
digitalWrite(redLed, LOW);
digitalWrite(greenLed, LOW);
digitalWrite(blueLed, LOW);}
}
//Metodo color
///////////////////////////////////////////
void color() {
digitalWrite(s2, LOW);
digitalWrite(s3, LOW);
//count OUT, pRed, RED
red = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH);
digitalWrite(s3, HIGH);
//count OUT, pBLUE, BLUE
blue = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH);
digitalWrite(s2, HIGH);
//count OUT, pGreen, GREEN
green = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH);
}
IMAGENES
AUDIO-VIDEO
0 comentarios:
Publicar un comentario