Robots Móviles
Software y documentación para robots móviles
|
Las comunicaciones inalámbricas son interesantes desde todos lo puntos de vista y en todos los ámbitos tecnológicos. El fin principal que persigue la Robótica Móvil es la creación de sistemas completamente autónomos y un grado de autonomía puede ser la comunicación entendida en un sentido amplio, es decir, entre varios robots, entre los robots y un ordenador base, entre los robots y otros elementos del entorno o entre los robots y los propios humanos.
Existen varias tecnologías que nos van a permitir el establecimiento de comunicaciones inalámbricas del tipo de las mencionadas pero en este documento nos vamos a centrar en las comunicaciones mediante infrarrojos que, por ejemplo, van a servir para enviar señales al robot, establecer y detectar balizas en el entorno, comunicar varios elementos entre sí o enviar órdenes al robot utilizando mandos a distancia convencionales.
Las ideas que aquí se comentan también pueden utilizarse para la construcción de sensores de detección de obstáculos sin más que cambiar la disposición y colocación de los elementos emisor y receptor. De hecho, el mayor uso de este tipo de montajes suele ser precisamente el de servir de base a sensores utilizados durante la navegación. Sin embargo, la aparición de dispositivos como por ejemplo los GP2D02 o los GP2D12 de Sharp que también utilizan infrarrojos aunque de una forma ligeramente diferente lo que permite conocer incluso la distancia a la que se encuentran los objetos dentro de un determinado rango, hacen que el uso de infrarrojos para la simple detección de la presencia de obstáculos esté perdiendo interés.
Vamos a comenzar por definir y comentar la parte de la recepción de la señal infrarroja ya que, por un lado, es sumamente sencilla de conectar a un microcontrolador y, por otro, es la que nos va a obligar a diseñar y ajustar los circuitos que necesitamos en la parte de la emisión.
Para la recepción vamos a utilizar un dispositivo que unifica en el mismo encapsulado el receptor de luz infrarroja, una lente y toda la lógica necesaria para distinguir señales moduladas a una determinada frecuencia. Concretamente, en este montaje utilizaremos los receptores IS1U60 de Sharp que se activan cuando reciben una luz infrarroja modulada a una frecuencia de 38 kHz (el haz infrarrojo se apaga y enciende 38000 veces por segundo). Esto los hace compatibles con un gran número de mandos a distancia de electrodomésticos.
En el mercado existen otras alternativas tanto de la misma compañía como otros fabricantes. Sharp también proporciona otros receptores de infrarrojos como por ejemplo los IS1U621, similares a los aquí utilizados pero con más rango de recepción (8 metros frente a los 5 de los IS1U60). De otros fabricantes se destacan los PNA4602 o PNA4612 de Panasonic, los LTM-97DS-38 de LiteOn o los SFH5110 de Siemens. En esta comparativa puede encontrarse información adicional sobre las prestaciones de unos y otros.
Aunque el patillaje es diferente entre los distintos fabricantes y deberá consultarse en el datasheet correspondiente antes de realizar cualquier conexión, en todos los casos nos vamos a encontrar tres patas: una que conectaremos a Vcc, otra que lo haremos a GND y una tercera, Vout, por la que obtendremos diferentes niveles si se recibe o no la señal infrarroja (en el caso de los Sharp, un nivel alto si no se recibe la señal infrarroja modulada o un nivel bajo si se está recibiendo). Tal y como se muestra en la figura, con el IS1U60 visto de frente, las patas de izquierda a derecha corresponden con Vout, GND y Vcc.
Para la conexión, el fabricante recomienda que se utilice un filtro de las conexiones de alimentación mediante una resistencia de 47 ohmios en serie con con Vcc y un condesador de 47 uF entre Vcc y GND tal y como se muestra en la figura. En nuestro caso, también realizamos las conexiones sin estos elementos y los resultados fueron aproximadamente los mismos, si bien es aconsejable si utilización.
Para las pruebas se utilizó una tarjeta CT6811 de Microbótica, conectando la señal Vout del IS1U60 a un pin del puerto E, concretamente al PE1. Las lecturas sobre ese pin se han realizado de forma digital y no de forma analógica (como es sabido, el microcontrolador MC68HC11 dispone de un conversor analógico-digital en el puerto E) ya que la salida que obtendremos del IS1U60 es de esa naturleza. No obstante, realizando conversiones de los valores leídos, se obtuvieron valores de $FF para cuando no se recibe señal infrarroja (nivel alto) y de $11 para cuando se recibe señal (nivel bajo).
El siguiente programa en ensamblador enciende el LED de la placa CT6811 (accionado mediante el bit PA6 del puerto A) cuando se está recibiendo la portadora infrarroja; si dicha señal no se recibe la señal, el LED se apaga.
* ----------------------------------------------------------------------- * ledir.asm * * Enciende el led del PA6 si recibe una señal infrarroja por el PE1 * ----------------------------------------------------------------------- PORTA EQU $00 ; Dirección del puerto A PORTE EQU $0A ; Dirección del puerto E ORG $0000 ; Programa en RAM interna inicio STAA PORTA,X BRCLR PORTE,X $02 ledon ledoff CLRA BRA inicio ledon LDAA #$40 BRA inicio END |
Si se está utilizando el receptor IS1U60 de Sharp, para las pruebas puede utilizarse cualquier mando a distancia que emita infrarrojos y podrá verse que el LED parpadea mientras que se esté pulsando cualquier tecla. Normalmente, los mandos a distancia emiten una portadora a 38 kHz (frecuencia que excitará al receptor) que es modulada por cada fabricante para conseguir los distintos códigos asociados a cada una de las teclas (volumen, cambio de canal, accionamiento del CD, etc.). En las pruebas se han utilizado mandos a distancia de diferentes fabricantes y electrodomésticos (Sony, Grundig, Sanyo, Samsung y Creative).
Una vez resuelto el problema de la recepción, vamos a centrarnos en la otra parte del sistema: la emisión. Ya hemos mencionado que los receptores utilizados son sensibles a la mayor parte de los mandos de infrarrojos de electrodomésticos. Eso nos puede ayudar en la fase de pruebas de la recepción e incluso utilizar el mando para enviar órdenes al robot. Este problema precisa un estudio de los códigos que emiten los mandos de diferentes fabricantes y será objeto de otro documento.
Como se dijo en la introducción, el objetivo es establecer una comunicación entre dos dispositivos de una forma general, ya sean dos robots, un robot y un ordenador o dos dispositivos electrónicos genéricos. Por lo tanto, a continuación vamos a presentar dos montajes basados en un circuito integrado muy conocido y utilizado: el 555.
En el primero utilizaremos la típica configuración en astable con una ligera modificación para conseguir un 50% de ciclo de trabajo que es lo que nos requiere el receptor. Por 50% de ciclo de trabajo entendemos que sólo durante la mitad del tiempo se está enviando la señal, o lo que es lo mismo, el tiempo que está encendido el LED es el mismo que el que está apagado; al tratarse de una frecuencia de 38 kHz (periodo de 26.316 us), dicho tiempo será de 13.158 us.
En el segundo, estaremos cerca de de ese ciclo de trabajo, justo para activar el receptor, con bastantes menos elementos que los que se precisan en el primero de ellos. Este segundo montaje también incorpora algunos componentes nuevos con respecto al primero como son los condensadores de filtro y el transistor que permite aumentar la corriente que circula por el LED infrarrojo.
Utilizando el 555 en modo astable hace que se dispare a sí mismo y pueda funcionar como un multivibrador. En esta configuración son necesarias dos resistencias (Ra y Rb) y un condensador (C). En la siguiente figura se muestra el conexionado típico.
El condensador C se carga a través de las resistencia Ra + Rb y se descarga a través de la resistencia Rb. Variando los valores de estos tres parámetros (C, Ra y Rb) se puede ajustar de forma precisa el ciclo de trabajo. El tiempo t1 que la señal está a valor alto (tiempo de carga) y el tiempo t2 que la señal está a valor bajo (tiempo de descarga) vienen expresados por las siguientes expresiones:
t1 = 0.693 (Ra + Rb) C |
t2 = 0.693 (Rb) C |
Examinando ambas expresiones puede verse claramente que el 50% de ciclo de trabajo (t1 = t2) sólo se alcanzaría si la resistencia Ra fuese nula. Ese caso no es posible ya que debido a las restricciones del 555 la resistencia Ra debe ser mayor que cero. Por tanto, utilizando este esquema de conexiones, podrían elegirse valores para los tres parámetros, y en concreto para Ra, que hiciesen casi iguales los dos tiempos en el mejor de los casos.
En esta página podemos encontrar un ajuste del cicuito anterior mediante un diodo colocado en parelelo con la resistencia Rb (con el cátodo entre Rb y C y el ánodo entre Rb y Ra). De esta forma para el tiempo de carga sólo debemos tener el en cuenta la resistencia Ra y los tiempos de activación y desactivación vendrán determinados por:
t1 = 0.693 (Ra) C |
t2 = 0.693 (Rb) C |
Por lo que para conseguir un ciclo de trabajo del 50% se deberá seleccionar una pareja de resistencias de igual valor. El montaje definitivo podemos verlo en la siguiente figura.
Sólo resta hacer un comentario sobre los valores de las resistencias Ra y Rb y del condensador C (R2, R3 y C1 en el esquemático, respectivamente).
De partida, queríamos conseguir una frecuencia de 38 kHz. Fijando el valor del condesador C = 10 nF y a partir de las últimas dos expresiones de los tiempos t1 y t2, puede definirse un valor para las resistencias de Ra = Rb = 1898 ohmios. Con estos valores de resistencias y condensador, se obtienen unos tiempos de carga y de descarga de t1 = t2 = 13.153 us con lo que la frecuencia es de 38013 Hz, valor muy próximo a los 38 kHz iniciales que va a excitar a los receptores.
Encontrar resistencias de 1898 ohmios puede ser un tanto difícil (por no decir imposible) por lo que pueden también utilizarse potenciómetros en ese rango o mejor aún, resistencias de ajuste multivuelta, algo caras (algo más de 2 €) pero permite ajustar mejor el valor que queremos.
Como emisor se ha utilizado un LED infrarrojo de 5 mm, concretamente un CQY89, que emite en un ángulo de 25 grados una longitud de onda de 930 nm lo que hace que entre en la banda del infrarrojo. Aunque este LED infrarrojo es muy fácil de encontrar en tiendas de electrónica, cualquier otro de características similares puede servir también.
Para las pruebas de funcionamiento puede cambiarse el LED infrarrojo por otro que emita luz dentro de la franja visible. Será imposible ver si el LED se apaga y enciende 38000 veces por segundo pero si se compara con otro que esté permanentemente encendido se verá que luce a la mitad de la intensidad que éste ya que, al fin y al cabo, sólo la mitad del tiempo está encendido.
El LED infrarrojo no podrá verse directamente en ningún caso (afortunadamente, no estamos preparados para ver este tipo de emisión) pero existen algunos papeles especiales sensibles a este tipo de luz que cambian cuando reciben la emisión. También pueden utilizarse los visores de cámaras fotográficas digitales o cámaras de video, cuando el LED esté encendido se verá que toma un color que tiende a morado.
El segundo montaje que aquí presentamos también puede encontrarse en su formato original en el fantástico web sobre robots móviles Robot Room de David Cook. Para una discusión más completa del circuito y las ventajas de utilizar el 555 frente a otro tipo de posibilidades consúltese dicho web.
Como puede verse en el esquemático, este montaje sólo utiliza una resistencia de ajuste (en este caso de 5K) que además nos va a permitir seleccionar una frecuencia de emisión que esté en el rango de los 36 a 40 kHz. De esta forma pueden también utilizarse otros receptores diferentes al que se ha utilizado en la pruebas, el IS1U60 de Sharp, y que trabajen en el mencionado intervalo. Para que el cicuito funcione a una frecuencia de 38 kHz, la suma de las resistencias R1 y R2 (una fija de 15K y otra variable de 5K, respectivamente, situadas a la derecha del 555) debe ser de 18797 ohmios.
A diferencia del otro montaje propuesto, en éste no se utiliza directamente la salida del 555 (pata 3) para alimentar el LED sino que se utiliza el transistor T1 (un transistor NPN 2N2222). La salida del 555 la conectaremos, a través de la resistencia R4, con la base de transistor. La activación o desactivación de la base abrirá o cerrará el circuito entre el colector y emisor.
Este uso de los transistores como meros interruptores electrónicos es muy frecuente y permite ajustar la corriente (aumentar en este caso) que pasa a través del elemento a controlar (el LED infrarrojo). Aumentando la corriente, también aumentaremos la cantidad de luz emitida por el LED y por lo tanto el alcance del emisor.
Con este circuito alimentado con 4 baterias de 1.5 voltios, se ha conseguido un alcance de poco más de dos metros. Bajando el valor de la resistencia R3 puede aumentarse la intensidad en esa rama y el alcance. Para calcular la corriente debe tenerse en cuenta, por un lado, el limite máximo permitido por el LED y, por otro, la caída de tensión en el LED (unos 1.8 voltios) y entre el colector y el emisor del transistor (unos 0.2 voltios).
El interruptor S1 permite activar o desactivar la emisión sin cortar la alimentación. La resistencia R5 actúa de pull-up por lo que cuando S1 esté abierto, el Reset (pata 4) del 555 estará desactivado y se estará emitiendo señal; cuando el interruptor S1 esté cerrado, se activará el Reset a nivel bajo y se dejará de emitir.
Para su utilización como baliza esto no tiene mucho sentido ya que se podría conectar y desconectar directamente la alimentación, pero para utilizarlo con un microcontrolador, esto puede tenerse en cuenta para realizar la conexión y desconexión directamente con una pata de salida del micro.
Hemos presentado los componentes básicos para establecer una comunicación mediante infrarrojos entre dos dispositivos electrónicos, como pueden ser dos robots móviles o un robot móvil y cualquier otro dispositivo (balizas, ordenadores, etc.). Para una comunicación completa se tendría que definir el protocolo usado durante la comunicación, desde la determinación de los valores de los bits a enviar hasta el propio protocolo de alto nivel.
Para la recepción se ha utilizado un circuito receptor de infrarrojos como es el IS1U60 de Sharp, que en el mismo integrado engloba el receptor infrarrojo, lentes para mejorar la recepción y la lógica necesaria. Desde el punto de vista de su utilización, este dispositivo lo podemos ver como una caja negra que una vez alimentada, activa o desactiva una salida cuando recibe una señal infrarroja modulada a 38 kHz.
Para la emisión se han propuesto dos circuitos basados en el integrado 555. El primero de ellos determina un 50% de ciclo de trabajo, es decir, justo la mitad del tiempo está dando un nivel alto y la otra mitad un nivel bajo. El segundo, más completo al incorporar elementos adicionales para controlar la emisión y su propia activación de forma electrónica, utiliza una resistencia de ajuste que permite seleccionar la frecuencia en el rango de los 36 a los 40 kHz.
© Javier de Lope Asiaín 2000-2002
|
||
Última modificación
19-Nov-2001 |
FastCounter by bCentral |