====== [Arduino] Midiendo proximidad ====== * [[https://www.luisllamas.es/arduino-detector-lineas-tcrt5000l/|Detector de líneas con Arduino y sensor TCRT5000L]] * [[https://www.luisllamas.es/que-son-y-como-usar-interrupciones-en-arduino/|Qué son y cómo usar interrupciones en Arduino]] * [[https://www.luisllamas.es/debounce-interrupciones-arduino/|Leer un pulsador con Arduino con interrupciones y Debounce]] * {{ :doc:tec:elo:uc_arduino:arduino_proximidad:tcrt5000.pdf |}} {{ youtube>p88E8GOHzxQ?medium }} ===== ¿Qué es un TCRT5000L? ===== {{ doc:tec:elo:uc_arduino:arduino_proximidad:tcrt5000l.png?nolink |}} Un TCRT5000L es un tipo de sensor óptico reflectivo que detecta la diferencia de color en un objeto mediante la reflexión de la luz en el mismo. El TCRT5000L es un sensor sencillo. Dispone de un LED emisor de luz infrarroja, y de un fototransitor que recibe la luz reflejada por un posible obstáculo. La cantidad de luz recibida depende del color y reflectividad del objeto, por lo que podemos distinguir entre zonas y oscuras de un objeto. Estos sensores suelen proporcionarse con una placa de medición estándar con el comparador LM393, que permite obtener la lectura como un valor digital cuando se supera un cierto umbral, que se regula a través de un potenciómetro ubicado en la placa. Podemos capturar esta señal con las entradas digitales de Arduino. El rango de medición del sensor varía entre 0.2 a 15mm, siendo la distancia óptima 2.5mm. Por tanto es un sensor de muy corta distancia. La cantidad de luz infrarroja tiene una fuerte dependencia con el color, material, forma y posición del obstáculo, por lo que no disponen de precisión suficiente para proporcionar una estimación de la distancia a un objeto, simplemente es capaz de su detección. Los sensores TCRT5000L son ampliamente utilizados para hacer robots seguidores de líneas, aunque también pueden emplearse para detectar cualquier otro tipo de objeto. Por ejemplo, son empleados en impresoras para saber cuando se ha agotado el papel. ===== Esquema de montaje ===== Si usamos una placa comercial, que como hemos dicho en general es recomendable, el montaje de un TCRT5000L a Arduino es realmente sencillo. Alimentamos el módulo a través de Vcc y GND conectándolos, respectivamente, a la salida de 5V y GND en Arduino. {{ doc:tec:elo:uc_arduino:arduino_proximidad:tcrt5000l-esquema.png?nolink |}} Por otro lado conectamos la salida digital del sensor (DO) a una entrada digital para leer el estado del sensor. {{ doc:tec:elo:uc_arduino:arduino_proximidad:tcrt5000l-conexion.png?nolink |}} Si nos decidimos por hacer todo el montaje nosotros mismos el esquema eléctrico tampoco es complicado. Simplemente necesitamos alimentar el módulo correctamente a través de las resistencias adecuadas, respetando el esquema del componente. {{ doc:tec:elo:uc_arduino:arduino_proximidad:tcrt5000l-funcionamiento.png?nolink |}} **Cancelación de ruido** * Dependiendo de la aplicación, este sensor IR se puede utilizar como sensor analógico o digital. Las principales desventajas de este sensor son que se ven fácilmente afectados por las variables ambientales. No solo responderá a la luz infrarroja utilizando el fotodiodo, sino que también responderá a la luz infrarroja de muchas fuentes de luz que generalmente están disponibles, similar al fototransistor. * La cancelación de ruido generalmente se usa dentro de la aplicación para resolver este problema. Entonces, usando un pin del microcontrolador podemos desactivar el fotodiodo y luego verificar cuánto ruido está leyendo el transistor en el sensor antes de activar el fotodiodo para calcular el cambio en los valores al invalidar el ruido presente mientras el fotodiodo estaba desactivado. ===== Ejemplos de código ===== Para detectar cuando el TCRT5000L pasa por encima de una zona oscura simplemente leemos el estado de la entrada digital. Cuando el sensor se dispara tomaremos las acciones oportunas. const int sensorPin = 9; void setup() { Serial.begin(9600); //iniciar puerto serie pinMode(sensorPin, INPUT); //definir pin como entrada } void loop(){ int value = 0; value = digitalRead(sensorPin ); //lectura digital de pin if (value == LOW) { Serial.println("TCRT5000L activado"); //zona oscura } delay(1000); } Otra forma de atender al TCRT5000L es emplear interrupciones, lo que nos simplificará el código. Sin embargo, en un robot seguidor de líneas frecuentemente usaremos de tres a cinco detectores de líneas, mientras que Arduino UNO y Nano solo tenemos dos interrupciones externas. Para el caso que nos ocupa la interrupción la podría generar el detector de tamaño pequeño de caja y tras eso examinar los demás para determinar el tamaño de la caja. Pero es solo una sugerencia. Al final el programador deberá escoger el algoritmo adecuado para tratar y resolver el problema.