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.
|