Este sensor de color (tcs300) RGB hecho para Arduino, permite reconocer un objeto en base al color. Es perfecto para hacer clasificadores.
En este caso lo necesitaba para hacer un proyecto en el cual dependiendo el color de objeto que pasara por el sensor me mostrara cual es el color de este objeto y una foto de este producto en una pantalla, sin embargo el Arduino al momento de mostrar los datos es en un puerto serial y que con el IDE de arduino no se puede hacer esto. En ese caso conecte Arduino con Visual Studio versión 2010 (visual basic .NET).
Este proyecto me recuerda en especial a un buen catedrático que tuve en el colegio el cual me hizo escribir todas las funciones de cadena y recalco la importancia de ellas, a lo cual yo respondí que nunca iba a utilizar y que era perdida de tiempo, ahora me causa gracia eso que le dije, saludos y gracias Profesor Marco Nuñez.
Les dejo el link de descarga de los archivos tanto del proyecto en Arduino tanto como en Visual Studio version 2010:
Descargar archivos
En este caso lo necesitaba para hacer un proyecto en el cual dependiendo el color de objeto que pasara por el sensor me mostrara cual es el color de este objeto y una foto de este producto en una pantalla, sin embargo el Arduino al momento de mostrar los datos es en un puerto serial y que con el IDE de arduino no se puede hacer esto. En ese caso conecte Arduino con Visual Studio versión 2010 (visual basic .NET).
Sensor de color tcs300 |
Conexión:
Sensor - Arduino
VCC = 5V
Gnd = gnd
S1 = A4
S0 = A3
S2 = A1
S3 = A2
out = A0
Led= 5V
Código en :
const int s0 = A3;
const int s1 = A4;
const int s2 = A1;
const int s3 = A2;
const int out = A0;
// valores
int red = 0;
int green = 0;
int blue = 0;
void setup(){
Serial.begin(9600);
pinMode(s0, OUTPUT);
pinMode(s1, OUTPUT);
pinMode(s2, OUTPUT);
pinMode(s3, OUTPUT);
pinMode(out, INPUT);
digitalWrite(s0, HIGH);
digitalWrite(s1, HIGH);
}
void loop(){
color();
if (red < blue && green > blue && red < 35 ){
Serial.println("Rojo");
}else if(blue < red && blue < green && green < red){
Serial.println("Azul");
} else if(red > green && blue > green){
Serial.println("Verde");
} else {
Serial.println("nn");
}
delay(5000);
}
void color() {
digitalWrite(s2, LOW);
digitalWrite(s3, LOW);
red = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH);
digitalWrite(s3, HIGH);
blue = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH);
digitalWrite(s2, HIGH);
green = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH);
} // fin de programa
perfecto con este programa les mostrara en el puerto serial si el objeto que lee el sensor es color Rojo, Azul o verde si no es ninguno de estos les mostrara "nn" indicando que es color que nuestro código no lee.
cabe destacar que el sensor lo que lee es el reflejo que emite cada objeto al ser iluminado por los leds que posee nuestro sensor por lo tanto muestra un valor en números de cual es el valor de iluminación del objeto .
Código en Visual Studio 2010:
Primero que nada el código esta desarrollado en visual .NET
Estos tres textbox los tenemos ocultos en la propiedad visible en las propiedades del elemento.
de izquierda a derecha el nombre de los objetos es : "txt_leer" , "txt_result" y "Txt_fin".
En el botón leer ira el siguiente código:
Uno de los inconvenientes de trabajar con Arduino y visual es la forma en como se reciben los datos y poder compáralos. Por la forma en la cual se envían los datos del puerto serial cuyo datos que se reciben en el textbox no se remplazan si no que va todos esa información del puerto serial que se recibe cada tanto tiempo recae en el textbox donde se le indique que vaya la información. Por la tanto decidí hacer de la siguiente manera para poder comparar valores:
Se crean dos variables "S" y "V" como string
En la variable "S" se le asignan los datos que vienen del Arduino.
Al textbox "Txt_leer" le asignamos el valor que cae en la variable "S".
A la Variable "V" le aplico la función Lset(Devuelve una cadena alineada a la izquierda que contiene la cadena especificada y con la longitud determinada.) le indico que al contenido de la variable "S" me devuelva los últimos 4 caracteres que esta contiene.(esto lo hacemos con el fin de eliminar todos los demás datos acumulados del puerto serial que caen sobre" txt_leer")
Ahora a textbox llamdo "txt_result" le asigno el valor de de la variable "V"
ahora creo una variable llamada "valor" en la cual le indico que el valor que se presenta en el textbox llamado "txt_result" le elimine espacios en blanco si esta contiene.
finalmente la variable "valor" se la asignamos al textbox llamado "txt_fin" y al mismo tiempo que me muestre el valor de esa variable en un messagebox.
Listo tenemos ya el dato que lee el sensor del Arduino como queríamos para poder compararlo y que al final me muestre la foto de acuerdo al color leído.
Le indico que si "Txt_fin.text" es igual a tal color me muestre las imágenes que corresponden a ese color si no que oculte las imágenes y me muestre color invalido.
Txt_color.text al final lo que se hace simplemente se le indica que color el sensor esta leyendo. |
Les dejo el link de descarga de los archivos tanto del proyecto en Arduino tanto como en Visual Studio version 2010:
Descargar archivos
Comentarios
Publicar un comentario