Control de los circuitos de un robot desde Visual Basic.
Por Pablo Pompa
Hoy en día es posible controlar todos los componentes de un robot desde nuestro PC de forma que el robot incluya
los sensores, los controladores y los motores, y el PC pone la "inteligencia" que controla todo el robot
y lo mejor de todo es que podemos hacerlo incluso sin cables, vía radio y con tan solo una conexion USB.
Lo primero que hay que tener claro es que lo que tratamos de hacer es un ejemplo de como controlar diferentes
circuitos y sensores desde nuestro PC, para ello hemos seleccionado algunos de los componentes mas populares en
los robots y hemos realizado un programa modular en que se muestra como se controla todo. Los circuitos que incluye
el robot son:
MD23 Controlador de motores doble de 3 +3 amperios.
SRF02 Sensor de ultrasonidos simple (compatible con el SRF08 y el SRF10)
CMPS03 Sensor brújula digital.
TPA81 Sensor térmico de 8 pixeles.
RLY08 Circuito de control de 8 reles.
LCD03 Display LCD de 4 líneas de 20 caracteres con teclado.
SD21 Circuito de control para 21 servos
La forma y cantidad de circuitos empleados en cada robot depende de cada uno y de sus necesidades, lo que significa
que los elementos son opcionales y solo se incluyen a modo de ejemplo. Por ejemplo es posible hacer un robot que
solo tenga un controlador de motores MD23 y un sensor de ultrasonidos, o bien que tenga 8 sensores de ultrasonidos
y 2 sensores térmicos y nada mas, etc. En nuestro caso hemos puesto los necesario para que nuestro prototipo esté lo
mas completo posible.
Una particularidad de todos los circuitos anteriores es que todos tienen conexión I2C que es una conexion
tipo bus que solo necesita 2 hilos para interconectar todos los circuitos entre si. Todos los circuitos actúan
como esclavos de un circuito principal llamado Master que es el que controlamos desde el PC y que en este caso
se trata del circuito USBI2C. El master es el circuito que siempre inicia la conversación
con el resto de los módulos, los esclavos, que lo que hacen es obedecer y contestar a las peticiones que hace el
modulo master o principal.
De igual forma si lo que queremos es utilizar un solo componente y conectarlo al PC, necesitaremos utilizar el
componente elejido junto con el circuito USBI2C. Por ejemplo si queremos conectar un display LCD03 al pc por USB,
lo que hacemos es conectar el display al circuito USBI2C y luego este al PC mediante un cable USB. Para controlarlo
utilizaremos el programa proporcionado en este ejemplo o directamente extraemos la parte que nos interesa y hacemos
nuestro propio programa según nuestras necesidades ya que se incluye el programa fuente del mismo.
Cableada o Vía Radio
Una posibilidad adicional es que la comunicación se realice vía radio, en este caso lo único que tenemos
que sustituir es el modulo USBI2C por un RF4 transceptor de datos USB en el lado del
PC y un CM02 transceptor de datos I2C en el lado del robot. EL resto de los componentes
así como el programa de control siguen siendo el mismo por lo que pasar de una versión a la otra
es una operación muy sencilla.
Lo único que hay que tener en cuenta entre ambos modos de funcionamiento es que en el caso del modulo USBI2C este
ya incluye las dos resistencias de polarización del bus I2C, mientras que en el caso del transceptor de datos USB
CM02, no las incluye por lo que seria necesario incluir las dos resistencias de 1K8 ohmios entre los pines SDA
y +5V y SCL y +5 v.
Una ventaja adicional del modulo CM02 es que tiene un interruptor de encendido y cuenta con su propio regulador
de 5 Voltios, lo nos permite alimentar el modulo con tensiones entre 6 y 12 voltios y además disponer de 5 voltios
y 200 mA para alimentar los otros circuitos del robot conectados al bus I2C. Este circuito también cuenta con un
registro para medir la tensión de la batería, por lo que es posible saber el estado de la misma remotamente para
un mayor control del robot.
Otro detalle que hay que tener en cuenta es que las conexiones del CM02 son de 4 pines y las del USBI2C son 5
pines por lo que hay que prestar atención a la hora de hacer las conexiones con los diferentes circuitos. Lo mismo
pasa con el circuito de control de motores MD23 que incluye su propia alimentación desde la batería por lo que
solo será necesario conectar los dos hilos del bus I2C SDA y SCL y la tierra común para todos los circuitos.
Al igual que pasa con el modulo CM02, el MD23 incluye su propio regulador de tensión y también proporciona 300
mA adicionales para alimentar circuitos externo. Esto quiere decir que en la practica y con solo una batería de
12 V tenemos la alimentación necesaria para los motores y para el resto de los circuitos, sin necesidad de mas
reguladores ni fuentes de alimentación
Es muy importante consultar las paginas de mas información de cada uno de los circuitos para ver las conexiones
de cada modulo. De igual forma es recomendable conectar un modulo de cada vez y probar con el programa que todo
funciona perfectamente antes de añadir otro elemento, con lo que conseguiremos minimizar los riesgos y facilitaremos
mucho la tarea de descubrir fallos y errores.
En el caso de que utilicemos mas de un circuito del mismo tipo en el montaje, es necesario asignar a cada uno
de ellos una dirección diferente dentro del bus I2C. Por ejemplo en nuestro prototipo hemos empleado 5 sensores
de ultrasonidos SRF02 por lo que lo primero que hemos hecho es asignar a cada uno una nueva dirección con
la ayuda del programa. Lo único que hay que tener encuenta es que a la hora de hacer un cambio de dirección SOLO
PUEDE HABER UN SOLO CIRCUITO CONECTADO al bus I2C, ya que de lo contrario se pueden producir resultados inesperados.
El programa
El programa de control esta escrito utilizando Visual Basic 6, que es uno de los lenguajes mas conocidos y populares
entre los aficionados a la robótica por su facilidad de uso y sencillez de aprendizaje. Se incluye el proyecto
completo tanto en versión compilada y lista para instalar en cualquier ordenador con Windows, como el código
fuente comentado para facilitar su comprensión y entendimiento.
El programa está dividido en módulos por lo que es fácilmente adaptable a otras necesidades, además el
código fuente esta comentado para ayudar a entender cada una de sus partes. Quitando unas cuantas rutina comunes
que son basicamente las que inician el puerto serie y las que mandan y reciben los datos desde el mismo, todas
las demas son independientes para cada uno de los diferentes circuitos. Veamos algunos comentarios.
MD23
El controlador de motores tiene varios modos de funcionamiento, incluyendo la posibilidad de controlar los dos
motores de forma simultanea y que sea el controlador el que se encargue de hacer los giros de forma automática.
También cuenta con varios registros especiales para cambiar la velocidad de aceleración, quitar la
auto velocidad, es decir que aumente o disminuya la potencia del motor hasta que este consiga la velocidad programada,
o activar el seguro de auto stop por poner solo algunos ejemplos. Lo mejor es leer la documentación del
producto para ver todos los registros disponible. Además de las ordenes de control directo, también se ha añadido
la posibilidad de leer los contadores de los encoder de los motores, el consumo eléctrico de los mismos y la tensión
de la batería Para controlar el movimiento del robot se pueden emplear los botones de acceso directo adelante o
atrás y los de giro hacia los lados, o directamente pulsado con el raton sobre el cuadro superior. Cuanto mas lejos
esté del eje central mas rápido irán los motores.
Si se conecta un circuito MD23 con sus correspondientes motores podemos ver fácilmente como afecta cada una de
las opciones seleccionadas y como sacarle el mayor partido a este interesante sistema de tracción para robot.
SRF02
Este es sin duda uno de los sensores de distancia mas populares no solo por sus características eléctricas y su
capacidad de medición, si no por el hecho de utilizar un solo elemento transductor de ultrasonido para hacer la
medición que ahorra espacio y simplifica el montaje. En nuestro prototipo se han empleado 5 de estos sensores con
el fin de tomar controlar tanto el frontal como los dos laterales del robot. Para ello lo primero ha sido cambiar
la dirección a 4 de los 5 sensores, para que fueran diferentes dentro del bus. Esto se ha conseguido conectando
un solo circuito cada vez en el bus I2C y luego empleando el botón de cambiar dirección que aparece en el modulo
General. Una vez que se tienen todos los sensores con su correspondientes direcciones, se realiza la medida simultanea
de los 5 desde el botón "Medir Distancias", mostrandose el resultado en centímetros junto a la
representación gráfica de cada sensor.
CMPS03
La brújula digital es un circuito muy practico y fácil de utilizar que nos devuelve el valor en grados en que
se encuentra el robot con respecto al Norte Magnético. La brújula puede ser una ayuda muy importante cuando se
trata de hacer navegación en interiores ya que permite saber en todo momento hacia donde dirigirse tras
salvar los obstáculos correspondientes.
TPA81
Este sensor de temperatura de 8 pixeles es capaz de medir la distancia de un objeto a distancia lo que resulta
muy útil para un robot pues permite detectar puntos calientes sin necesidad de hacer contacto, además el sensor
tiene 8 pixeles alineados verticamente que le posibilitan una mayor capacidad de discriminación de las diferentes
fuentes de calor.
RLY08
Este circuito incluye 8 reles que se pueden conectar y desconectar a voluntad, por lo que resulta muy útil para
manejar toda clase de aparatos y dispositivos con interfaces mediante contactos. Los reles son de pequeña potencia,
pero suficiente para la mayoría de las aplicaciones. Si es necesaria una mayor capacidad de maniobra, lo mejor
es emplear relés de mayor tamaño cuya bobina sea comandada por los reles del circuito RLY08.
LCD03
Este display lcd tiene doble interfaces serie y I2C, en el caso que nos ocupa, estaremos utilizando este ultimo
protocolo, por lo que se debe prestar atención a la configuración del puente de modo que se encuentra en la parte
trasera y que permite seleccionar un interfaz u otro. Además de poder mandar cualquier texto al display, también
se han implementado botones para limpiar la pantalla, encender y apagar la iluminación de fondo y botón denominado
teclado, que al pulsarlo espera a que se pulse un código de 4 cifras en el teclado del display y despues lo muestra
en la pantalla. Esta ultima opción es solo un ejemplo de como utilizar el teclado opcional que se puede conectar
en el display.
SD21
El circuito controlador de servos SD21 es capaz de controlar hasta un máximo de 21 servos de una forma muy sencilla.
En este caso se han incluido un control deslizante por cada uno de los canales de forma que podemos controlar la
posición de cada uno de los 21 canales. Hay un también un control deslizante común que controla la velocidad de
todos los canales, con lo que se pueden conseguir movimientos mas suaves.
Por ultimo recordar que el proposito del programa es servir de ejemplo y punto de partida para que cada uno pueda
hacer su propio programa especifico para cada robot o aplicación.
Puede descargar el programa RobotI2C completo incluyendo el código
fuente aquí.
|