| 
            
         COMO ENVIAR Y RECIBIR DATOS ENTRE EL PC Y EL ROBOT   
        Por Pablo Pompa  
        Una de las tareas mas comunes dentro del mundo de la robótica es el envío de datos entre diferentes robots o bien
          entre el robot y el PC que actúa a modo de estación de control central. La transmisión de datos vía radio se diferencia
          del clásico control teledirigido a radio control básicamente en dos cosas, en el primer caso la comunicación suele
          ser bidireccional, es decir que tanto el robot, como el ordenador transmiten y reciben datos. En el caso de los
          modelos radio controlados la información siempre viaja desde el mando de control únicamente. Otra gran diferencia
          es el tipo de dato o información que se envía. En el caso de los robots, la información consiste en bytes de datos
          que contienen información de comandos, textos, valores numéricos, datos de sensores, etc en definitiva información
          de formato y valor variable que se puede ajustar a las necesidades de cada proyecto. En el caso de los sistemas
          de radio control, la información prácticamente se limita a enviar la señal PWM correspondientes
          a cada uno de los canales y que no suele ser mas de 10 en el mejor de los casos. Esta información es muy útil
          y suficiente cuando se están controlando servos y circuitos sencillos, pero no sirve para enviar datos e información
          variable. 
        Para transmitir datos desde un robot a un ordenador, lo mejor con diferencia, es emplear un radio módem que se
          encargue de todo el proceso de la comunicación vía aérea y que consigue que el proceso resulte muy sencillo de
          implementar en cualquier robot que sea capaz de enviar datos por un puerto serie. Otra posibilidad es emplear módulos
          de radio híbridos que se encargan de la trasmisión y recepción de los datos, pero que no incluyen ningún sistema
          para el control de errores y la gestión de los datos, por lo que todo el proceso es necesario hacerlo entonces
          en el procesador, lo que no resulta nada práctico en la mayoría de los casos.  
        Entre los diferentes radio módem del mercado, hay varios módulos muy populares que destacan por su facilidad
          de uso, bajo consumo y alta velocidad de transferencia. Estos módulos suelen ir acompañados de otro
          modulo similar que es el que se conecta al PC. Estos módulos se pueden encontrar en la sección de transmisores
          de nuestro catalogo y presentan la siguientes características comunes:  
         
          - Los módulos que se montan en los robots, tienen una alimentación de 5V (ojo 5V estabilizados, ver esquema mas
            adelante).
  
          - El tipo de comunicación es serie, con niveles de tensión TTL (entre 0 y 5V), por lo que no se pueden conectar
            directamente a un interfaz serie RS232 que tiene niveles de tensión de ±12V.
  
          - La señal de los datos esta invertida, por lo que es necesario utilizar algún tipo de inversor para restaurar
            la señal correctamente, además los inversores protegen los pines de entrada y salida de los radiomódem
            y evitan averías.
  
          - El protocolo de comunicación es transparente para el usuario, limitándose en todos los casos a hacer una pequeña
            pausa después de mandar los datos desde el microcontrolador.
  
          - El radio módem se encarga de garantizar que los datos recibidos son validos y correctos. En caso contrario
            los datos son descartados y sencillamente se pierden.
  
          
            
        TRANSMITIR DATOS VIA RADIO  
        La transmisión de datos vía radio es muy similar a la transmisión de datos vía cable, aunque hay algunas importantes
          diferencias y particularidades que hay que tener en cuenta. Estas particularidades son:  
         
          - Tanto la transmisión como la recepción son semi dúplex, es decir que se puede transmitir o recibir, pero no
            hacer las dos cosas a la vez.
  
          - El máximo número de bytes que se pueden enviar en cada paquete es limitado. Si se sobrepasa este
            número, los bytes excedentes se perderán y no serán transmitidos.
  
          - Los datos que han sido recibidos y descodificados, son enviados desde el transceptor de radio al microcontrolador
            tan pronto se reciben. Si el microcontrolador no recepciona los datos del módulo de radio, estos se perderán.
  
          - Antes de enviar datos desde el microcontrolador al módulo de radio, es necesario recibir todos los datos que
            tenga el módulo de radio en su bufer de recepción, de lo contrario, los datos transmitidos se perderán y no se
            enviarán vía radio.
  
          - Los datos transmitidos se comprueban en el receptor mediante técnicas de crc. Si los datos recibidos no son
            correctos, se descarta completamente el paquete recibido, perdiéndose la transmisión de los datos.
  
          - Es necesario hacer una pausa cuya duración tiene que ser al menos el doble de la duración de un byte. A 19200
            baudios esta pausa tiene que ser superior a 1,04 ms.
  
          - La velocidad de comunicación entre el microcontrolador del robot y el radio módem es o puede ser diferente
            a la que emplean los radiomodem para comunicarse entre si vía radio.
  
          
        Además de estas diferencia, hay que tener en cuenta que a diferencia de lo que pasa cuando se utiliza un
          cable, la fiabilidad de la comunicación esta completamente ligada a la distancia que hay entre el transmisor y
          el receptor. Así en el caso de los cables, la transmisión llega correctamente hasta el receptor en un 99,9% de
          los casos. En el caso de la radio, este porcentaje puede ser parecido cuando el transmisor y el receptor están
          muy cercas y va empeorando hasta el 100 % de fallos cuando se encuentran fuera de cobertura. Además otro factor
          son las interferencias producidas por otros dispositivos, o bien cuando hay muchos robots transmitiendo a la vez.
          Para resolver este tipo de incidencias, es necesario implementar en el software algún tipo de control que limite
          el tiempo que se esta esperando una orden o una respuesta.   
           
        ¿QUE ES UN RADIO MODEM?  
        Un radiomódem o módem radio como lo llaman algunos, es un módulo electrónico que incluye por un lado un microcontrolador
          de control y por otro un transmisor y un receptor de radio que son controlados por el procesador. EL microcontrolador
          se comunica con el mundo exterior mediante una conexión serie cuya velocidad varia dependiendo del modelo, aunque
          la mayoría pueden comunicar a 9600 y 19200 baudios. El microcontrolador empleado suele ser un Atmel o bien un PIC
          y normalmente se conecta directamente con los pines de conexión del radio módem, por lo que es muy recomendable
          usar algún tipo de circuito bufer para proteger el micro y evitar averías. Como normalmente la señal
          entregada por el radio módem está invertida, basta con añadir algún tipo de puerta inversora que
          también actúe como bufer.  
        La velocidad a la que se comunica el radiomodem por el aire es independiente de la velocidad de conexión local
          y varia de un modelo a otro, aunque la mayoría se comunica con velocidades superiores a los 19200 baudios, por
          lo que no presentan grandes retardos en las comunicaciones. Lo que si hay que tener en cuenta es que el tiempo
          total de la transmisión es la suma del tiempo que se tarda en enviar los datos desde el robot al radio módem, mas
          el tiempo que tardan en viajar los datos por el aire desde un radiomódem al otro, mas el tiempo que se tarda en
          recibir los datos por el PC. Además hay que añadir unos cuantos milisegundos mas necesarios para
          las operaciones de control de errores y de protocolo de los radiomodems.  
           
        EL PROGRAMA DE CONTROL  
        El programa de control, en realidad son dos, uno en el lado del ordenador y otro en el lado del robot. Para ver
          como se realiza el proceso, se ha preparado dos programas diferentes que tienen la particularidad de funcionar
          con todos los radiomodems de nuestro catálogo. Consulte la siguiente sección para ver el esquema de conexión y
          las particularidades de cada caso.  
        Comenzando por el programa del robot, se ha realizado una rutina muy básica en Basixc pensada para cargarla en
          un Microcontrolador BasicX24 S310205. El programa es muy simple y lo que hace es recibir
          vía radio una serie de comandos, que son identificados. Luego devuelve vía radio una confirmación de que ha recibido
          el mensaje. Como puede verse en el programa, es muy sencillo y muestra de una forma practica como recibir una orden
          desde el ordenador central. El tamaño de los comandos puede cambiarse, pero resulta muy practico utilizar
          ordenes de longitud fija, ya que facilita la programación considerablemente. Si se tienen que pasar parámetros,
          es recomendable igualmente utilizar siempre la misma longitud en las ordenes , tanto si hay, como si no hay parametros que pasar. Lo que se hace es rellenar
          los bytes con datos ficticios cuando el comando no tenga parámetros, de forma que se mantenga siempre el mismo tamaño de ordenes.
          Esto obviamente es solo una sugerencia y cada cual puede emplear el método que mas le convenga.  
        Un detalle que hay que tener en cuenta es que la instrucción Debug.Print del microcontrolador BasicX24 no funciona
          correctamente con los radio módem, ya que introduce pausas entre los caracteres que se envían por el puerto serie
          lo que provoca que se pierdan bytes. En lugar de emplear esta instrucción, lo que hay que hacer es abrir el puerto
          Comm1 del BasicX24 y escribir los bytes a enviar en el bufer de salida. Un ejemplo de como se hace es el siguiente:  
            
         
        Como puede verse lo que se hace es crear dos bufer y luego abrir el puerto a 19200 baudios que es la velocidad
          de trabajo por defecto del BasicX24. Ahora lo que se hace es utilizar la expresión:   
        Call PutQueueStr (OutBuff, "Datos" & chr(13) & chr(10))  
        La expresión 'Datos' es la que se sustituye por los caracteres a enviar. Los dos últimos caracteres son opcionales,
          pero equivalen a un retorno de carro y un avance de línea, que provoca que el cursor salte al siguiente renglón
          depués de mostrar los datos en la pantalla del PC, para mayor claridad.  
        Puede descargar el programa para el BasicX24 Aquí  
        En el lado del PC se utiliza un programa realizado en Visual Basic y que puede descargarse
            aquí incluyendo el código fuente. El programa es muy sencillo y lo único destacable es la utilización
            de un timer que incrementa una variable una vez por segundo. Entonces cada vez que se va a recibir la respuesta
            del robot a un comando enviado desde el PC, lo que se hace es poner la variable a cero y luego vigilar que se
            recibe la respuesta del robot antes de que pasen 3 segundos. Si no se recibe nada, es que el robot no ha recibido
            la orden, o bien si la ha recibido, pero la respuesta no llega por que esta fuera del alcance o por cualquier
            otro motivo.  
        El programa es solo un ejemplo muy sencillo de que como enviar ordenes al robot, pero puede modificarse para incluir
          comandos complejos y recibir datos de longitud variable. Tal y como está, funciona bien con todos los radiomodem
        de nuestro catalogo.   
           
        EJEMPLOS PRACTICOS DE RADIO MODEM   
        En esta sección se muestra de forma practica como utilizar los diferentes radio módem conectándolos a un microcontrolador
          BasicX24 y a un PC. Para las pruebas se emplean los dos programas descritos anteriormente.   
        Antes de comenzar, una aclaración importante acerca del tema de la alimentación Cuando en un circuito electrónico
          se habla de alimentación a 5V, esto significa que debe ser una alimentación estabilizada y filtrada y no vale utilizar
          pilas directamente, o alimentadores no estabilizados. La mayoría de los circuitos que funcionan a 5V, dejan de
          funcionar por debajo de los 4,8V y SE ESTROPEAN IRREMEDIABLEMENTE por encima de los 5,5V. De ahí la importancia
          de utilizar una buena fuente de alimentación Esto es importante resaltarlo pues aunque a mucha gente le parezca
          obvio, sigue siendo la causa de muchas averías en circuitos y sensores. En los esquemas propuestos, se ha sacado
          la alimentación de 5V de la propia placa del sistema de desarrollo que se ha utilizado para hacer las pruebas.
          Quien no disponga de este circuito y no tenga una fuente de alimentación, puede construir una fácilmente con el
          siguiente esquema, que resulta suficiente para las pruebas que se van a realizar.  
           
        Caso 1: Radiomodem con conexión USB en el PC y conexión serie en el robot.  
        Caso 2: Radiomodem con conexión serie en ambos extremos a 433 Mhz.  
        Caso 3: Radiomodem con conexión serie en ambos extremos a 903 Mhz.   
          
       |