jueves, 10 de diciembre de 2015

TERCERA ENTREGA


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:


ESQUEMA DE CONEXIÓN:






CÓDIGO: 

//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