Detector de colores con Blu·i
Enseña a tu robot a detectar diferentes colores con el sensor de luz!
El sensor de luz IR de Blui, no solo tiene como objetivo detectar lineas, el desafío de este robot multipropósito es aprovechar al máximo sus facultades para poder hacer lo que quieras!
Los colores reflejan cierta cantidad de luz, el ejemplo más claro es el color blanco (quien refleja más) y el color negro (que absorbe casi toda la luz). ¿Recuerdas cómo funciona el sensor?
Podemos aprovechar este fenómeno para determinar el color al que el robot se expone
Para conocer el funcionamiento del sensor de luz IR, puedes revisar nuestro antiguo post: Seguidor de linea con blui
Rojo, verde y negro: Los colores a detectar
Materiales extra: 3 hojas de cartulina (verde,rojo y negro), o cualquier material con estos colores
EL CÓDIGO
- Primero haremos la lectura del sensor IR, mediante el puerto analogico A0
Puedes descargar el programa de mblock aqui: https://goo.gl/5hPJQq
Código arduino:
void setup(){
Serial.begin(9600);
}
void loop(){
Serial.println(analogRead(A0));
delay(200);
}
Mediante el monitor serial, ya sea en mblock o arduino IDE, podemos ver los valores que obtenemos al tocar diferentes colores
COLOR VERDE
Sitúa a tu robot blui sobre una superficie verde, y anota los valores que obtienes.
En mi caso los valores obtenidos fueron:
Valores en el rango de 30 a 35
COLOR ROJO
Valores en el rango de 22 a 27
COLOR NEGRO
Valores mayores a 450
CÓDIGO : DETERMINACIÓN DE COLOR
Sabiendo esto, ya podemos hacer el programa para que el robot determine el color de la superficie
Puedes descargar el programa de Determinacion de colores con Mblock aquí: Determinación de colores
Código Arduino:
#include <Arduino.h>
#include <Wire.h>
#include <SoftwareSerial.h>
double angle_rad = PI/180.0;
double angle_deg = 180.0/PI;
double LUZ;
void setup(){
Serial.begin(115200);
pinMode(A0+0,INPUT);
}
void loop(){
LUZ = analogRead(A0+0);
if(((LUZ) > (30)) && ((LUZ) < (35))){
Serial.println("VERDE");
_delay(0.2);
}
if(((LUZ) > (22)) && ((LUZ) < (27))){
Serial.println("ROJO");
_delay(0.2);
}
if((LUZ) > (450)){
Serial.println("NEGRO");
_delay(0.2);
}
_loop();
}
void _delay(float seconds){
long endTime = millis() + seconds * 1000;
while(millis() < endTime)_loop();
}
void _loop(){
}
Y listo!
Si tienes alguna pregunta, por favor no dudes en escribirlo en los comentarios debajo
¿El sensor puede detectar todo el espectro de colores?
La respuesta es no, hay ciertos colores que reflejan casi la misma cantidad de luz. Entonces se complica mucho poder determinarlos con el sensor IR. Sin embargo hay sensores especiales, diseñados específicamente para detectar varios colores.