logo

miniskybot_xbee

Ahora que ya tenemos un robot imprimible miniskybot 2 que funciona, lo podemos modificar para que se pueda programar desde S4A (Scratch 4 Arduino)!

Necesitaremos hacer varias modificaciones:

  • En primer lugar vamos a sustituir el cable USB que conecta la placa Arduno con el ordenador por una conexión inalámbrica usando dos módulos RF Xbee: uno en el robot y otro conectado a una salida USB del ordenador.
  • En segundo lugar tendremos que caracterizar los relés (dirección de giro y punto de parada) con las instrucciones S4A.
  • También tendremos que modificar el firmware que cargaremos en la placa Arduino para gestionar el medidor de distancia (el sensor de ultrasonidos).

 

Cuando tengamos estos cambios desarrollaremos en S4A  el código “escoba” (sacar los objetos de una zona limitada por una línea).

Uso de módulos Xbee RF


Conexión al ordenador

Para este caso hemos utilizado una Xbee shield USB como gateway. Esta placa es la usada para configurar los módulos desde el ordenador.

Los módulos Xbee establecen una comunicación serie (usando los pines 0 y 1 de Arduino) igual que lo hace el cable USB por lo que sólo será necesario configurar los dos módulos para que la comunicación se establezca sustituyendo al cable USB.

Como configurar los módulos XBee

Para que dos módulo XBee se comuniquen entre sí, deben tener, al menos, el mismo PAN ID y la misma velocidad.

Para configurar los XBee, tenemos a nuestra disposición unos programas que nos lo van a facilitar tremendamente, así que veamos como hacerlo en los diferentes sistemas operativos.

Configurando XBee en Windows

En windows, lo más sencillo es usa un programa llamado XCTU que podéis descargar desde este enlace.

Una vez lo tenemos descargado e instalado, tendremos que ver algo así.

Waspmote, tutorial, iniciación, Hello World, proyecto, instalación, Xbee, acelerómetro, consumo, Wireless, Zigbee, Mesh, entradas, salidas, serial, multiplexor, rssi, led, gprs, gps, tools, battery, ide, gateway, xctu

Nos encontramos con cuatro pestañas con las siguientes funciones:

  • PC Settings: Nos permite seleecionar el puerto COM al que tenemos conectado el GateWay, así como otros parámetros necesarios para la comunicación con el módulo XBee. En la parte de la derecha, deberemos configurar la velocidad (baud) a la que esté programado nuestro XBee, el resto, como los bit de paridad, si no lo hemos tocado antes, deberíamos dejarlo como está. Para comprobar que está correctamente configurada la comunicación, pulsaremos Test / Query.
  • Range Test: Nos permite realizar pruebas de alcance entre dos módulos.
  • Terminal: Con esto tenemos acceso a los datos que estemos recibiendo a través de módulo XBee, así como enviar alguna trama de datos.
  • Modem Configuration: Esta es la pestaña desde la que configuraremos nuestro módulo XBee, si hemos configurado bien la velocidad del módulo en la primera pestaña, al pulsar en READ debería leernos todos los datos de configuración del módulo.

Con todo esto, lo que debemos hacer es ir a la pestaña de modem configuration, y asegurarnos que el PANID es el mismo en nuestros dos módulos, así como que INTERFACE DATA RATE está a la velocidad que nosotros tenemos asignada en nuestro programa, para S4A 38400bps.

A conitnuación pulsamos en Write y ya tenemos configurados los módulos!

En este enlace tenéis más información acerca de XCTU.

Configurando XBee en Linux


Una solución rápida y sencilla, es utilizar XCTU a través de WINE, así que veamos como instalarlo!

Abrimos un terminal e instalamos WINE

apt-get install wine

A continuación “mapeamos” los puertos detectados en linux (con forma tty) a la forma que windows los entiende (com).

in ($HOME)/.wine/dosdevices, do
ln -s /dev/ttyUSB0 com5
ln -s /dev/ttyUSB1 com6
ln -s /dev/ttyUSB2 com7
ln -s /dev/ttyUSB3 com8

A continuación, descargamos el XCTU y lo hacemos ejecutable

chmod 755 <Nombre del archivo>

Luego abrimos el instalable descargado con el cargador de programas de WINE haciendo click derecho en el propio archivo y seleccionando “open  with Wine program loader” y seguimos las instrucciones de instalación.

Ahora pinchamos el gateway con el XBee a un puerto USB y comprobamos que lo detecta correctamente con una de estas dos instrucciones.

ls -ltr /dev/tty*
grep USB /var/log/syslog

Y ya podemos abrir XCTU desde el menú de Wine!

Configurando Xbee  en MAC

En Mac, para poder usar XCTU, de nuevo tendremos que emular este software usando wine Bottler, el cual podemos descargar paquetizado en este enlace, una vez instalado, nuestro icono .exe se convertirá en ejecutable.

Necesitaremos instalar también los X-CODE 11 para mac, y además, en caso de que tengamos Moutain Lion, necesitaremos también usar Xquartz dado que los X-Code 11 han desaparecido para esta versión.

Una vez aclarado todo esto, configuremos nuestros XBee!!

Modulo A:        ATID3332,DH0,DL1,MY0,BD4,WR,CN            es decir:

  • ID PAN (debe ser igual en los dos módulos) 3332 que es el valor por defecto no lo cambiamos
  • DH0 DL1 dirección del otro módulo Xbee (Dirección 1)
  • MY0 dirección de este módulo (Dirección 0)
  • BD5 velocidad de comunicación 38400 baudios que es la velocidad utilizada por S4A

 
Módulo B:       ATID3332,DH0,DL0,MY1,BD4,WR,CN                es decir:

  • ID PAN 3332
  • DH0 Dl0 dirección del otro módulo (dirección 0)
  • MY1 dirección de este módulo (dirección 1)
  • BD5 velocidad de comunicación 38400 baudios

Una vez configurados hay que conectar los módulos: uno al robot y otro al ordenador.

Conexión al robot

Para el robot he usado una placa Xbee shield Arduino que se pincha directamente sobre la placa Arduino y ya establece todas las conexiones.

Recordar poner el jumper en posición XBee!

IMAG0543

Próximamente probaremos un módulo Bluetooth para comunicar el robot con el ordenador ( un ordenador que incluye blouetooth), con un módulo bluetooth nos podemos ahorrar la mitad (un módulo BT si el ordenador ya tiene BT y la shield USB).

Cuando esté probado os prepararemos otra entrada sobre cómo configurar el módulo y cómo usar una Breackout Board mucho más barata pero que implica un poco más de cuidado.

Modificación del firmware

El firmare para Arduino hay que modificarlo para que podamos incluir el sensor de ultrasonidos a través de la librería Ultrasonic.h.

Las modificaciones son estas:

Inicialmente hay que incluir la llamad a la librería:

#include <Ultrasonic.h>

Comentar la definción del pin 4 para que no lo utilice S4A(este pin lo usaremos para activar el sensor de ultrasonidos):

// outputs[0] = 'c'; //pin 4

Configurar el pin analógico A0 para utilizarlo como sistema de comunicación entre el sensor de ultrasonidos y S4A:

for (sensorIndex = 1; sensorIndex < 6; sensorIndex++) //el sensor A0 no entra en el ciclo

ScratchBoardSensorReport(0,ultrasonic.Ranging(CM)); //Usamos A0 para transferir el valor de al función ultrasonic.Ranging(CM)

Caracterización de servos

Ahora arrancamos S4A y activamos la alimentación eléctrica al robot, pasados unos segundos se establecerá la comunicación entre los dos módulos y S4A tendrá acceso a la placa  Arduino. Ahora podemos ver directamente el valor que muestran los sensores IR conectados en las entradas analógicas A4 y A5, el valor que muestra el sensor de ultrasonidos a través de la entrada analógica A0, y también podremos activar los motores (pines 8 y 12).

Tendremos que hacer pruebas para encontrar el ángulo para el que se quedan parados los dos servos y qué ángulos son necesarios para que giren en la dirección determinada. En mi caso los datos son:

derechoAdelante=0
derechoAtras= 180
derechoParada=79
izquierdoAdelante=180
izquierdoAtras=0
izquierdoParada=85

Código “escoba”

Como ejemplo de funcionamiento del robot vamos a comentar el código “escoba” con el que el robot buscará objetos que estén a menos de 40 cm y cuando los encuentre los empujará hasta sacarlos de un espacio limitado por una línea negra,  es el código equivalente al mostrado en esta entrada.

Como podemos ver el código es casi idéntico al de Arduino:

Captura de pantalla 2013-05-04 a las 18.27.05

Inicialmente asignamos valores a las variables de control de los motores y después entramos en un bucle infinito en el que se analiza el valor del sensor A0 (donde llega la distancia calculada por el sensor de ultrasonidos) y si es menor de 40 movemos los dos motores hacia delante, en caso contrario paramos el derecho y movemos el izquierdo hacia delante para que el robot gire buscando objetos.

Por último si alguno de los sensores IR obtiene un valor mayor de 30 (es que ese sensor está sobre la línea negra) el robot se desplazará durante un segundo hacia a tras.

Descarga el firmware y código “escoba” AQUÍ

Hasta pronto!

Déjanos un comentario!

*

captcha *