MANUAL USUARIO DE MOWAY
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 2 de 148
Copyright (c) 2011 Bizintek Innova, S.L. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 2.0 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License".
www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 3 de 148
Índice Índice ................................................................................................................................ 3 1. Introducción .............................................................................................................. 6 2. ¿Qué es mOway? ...................................................................................................... 7 3. Robot mOway ........................................................................................................... 8 3.1 Procesador .......................................................................................................... 8 3.2 Sistema motriz .................................................................................................... 9 3.3 Grupo de sensores e indicadores ...................................................................... 11 3.3.1 Sensor de línea ............................................................................................. 12 3.3.2 Sensores detectores de obstáculos ............................................................... 14 3.3.3 Sensor de luz ................................................................................................ 15 3.3.4 Conector de expansión ................................................................................. 16 3.3.5 Sensor de temperatura.................................................................................. 17 3.3.6 Speaker ........................................................................................................ 17 3.3.7 Micrófono .................................................................................................... 17 3.3.8 Acelerómetro ............................................................................................... 18 3.3.9 Nivel de batería ............................................................................................ 18 3.3.10 LED frontal .................................................................................................. 18 3.3.11 LED superior bicolor ................................................................................... 19 3.3.12 LED de freno ............................................................................................... 19 3.3.13 Pad libre ....................................................................................................... 20 3.4 Sistema de alimentación ................................................................................... 20 3.5 Módulo RF y RFUsb ........................................................................................ 21 3.5.1 Especificaciones técnicas............................................................................. 22 3.6 Módulo de cámara ............................................................................................ 24 3.6.1 Especificaciones técnicas............................................................................. 25 3.7 mOway Camera Board ..................................................................................... 26 3.7.1 Especificaciones técnicas............................................................................. 27 4. Primeros pasos ........................................................................................................ 28 4.1 Instalación pack ................................................................................................ 28 4.2 Grabación del robot .......................................................................................... 29 4.3 Instalación RFUsb ............................................................................................ 29 4.4 Instalación drivers mOway Camera Board ...................................................... 31 5. Programación ensamblador .................................................................................... 32 Creación de un proyecto ............................................................................................. 32 5.1 Primer programa en ensamblador..................................................................... 36 5.2 Librerías............................................................................................................ 40 5.2.2 Librería sensores mOway ensamblador ....................................................... 40 5.2.2.1 Descripción .................................................................................................. 41 5.2.2.2 Variables ...................................................................................................... 41 5.2.2.3 Funciones ..................................................................................................... 44 5.2.3 Librería motores mOway ensamblador ....................................................... 54 5.2.3.1 Descripción .................................................................................................. 55 5.2.3.2 Variables ...................................................................................................... 55
www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 4 de 148
5.2.3.3 Funciones ..................................................................................................... 57 5.2.4 Librería para el módulo BZI-RF2GH4 en ensamblador .............................. 65 5.2.4.1 Descripción .................................................................................................. 65 5.2.4.2 Variables ...................................................................................................... 65 5.2.4.3 Funciones ..................................................................................................... 67 5.2.4.4 Diagrama de flujo para envío y recepción de datos ..................................... 74 5.2.5 Librería para el módulo Moway Camera Board en ensamblador ................ 75 5.2.5.1 Descripción .................................................................................................. 75 5.2.5.2 Variables ...................................................................................................... 75 5.2.5.3 Funciones ..................................................................................................... 76 6. Programación C ...................................................................................................... 79 6.1 Creación de un proyecto ................................................................................... 79 6.2 Primer programa en C18 .................................................................................. 83 6.3 Librerías............................................................................................................ 87 6.3.2 Librería sensores mOway en C para C18 .................................................... 87 6.3.2.1 Descripción .................................................................................................. 87 6.3.2.2 Funciones ..................................................................................................... 88 6.4 Librería motores mOway C18 .......................................................................... 97 6.4.2.1 Descripción .................................................................................................. 97 6.4.2.2 Funciones ..................................................................................................... 98 6.4.3 Librería para el módulo BZI-RF2GH4 en C18.......................................... 104 6.4.3.1 Descripción ................................................................................................ 104 6.4.3.2 Funciones ................................................................................................... 104 6.4.3.3 Diagrama de flujo para envío y recepción de datos ................................... 109 6.4.4 Librería para el módulo de cámara en C18 ................................................ 111 6.4.4.1 Descripción ................................................................................................ 111 6.4.4.2 Funciones ................................................................................................... 111 7. Programación MowayWorld ................................................................................ 114 7.1 Espacio de trabajo de MowayWorld .............................................................. 114 7.1.1 Barra de herramientas ................................................................................ 114 7.1.2 Editor de diagramas de flujo ...................................................................... 114 7.1.3 Acciones .................................................................................................... 115 7.1.4 Propiedades ................................................................................................ 116 7.1.5 Lista de errores .......................................................................................... 116 7.1.6 Flechas ....................................................................................................... 117 7.1.7 Cambio de idioma y actualizaciones ......................................................... 118 7.2 Primer programa en MowayWorld ................................................................. 119 7.3 Módulos .......................................................................................................... 123 7.3.1 Acciones de Moway .................................................................................. 123 7.3.2 Lectura de sensores .................................................................................... 127 7.3.3 Datos .......................................................................................................... 129 7.3.4 Control de flujo .......................................................................................... 131 7.3.5 Expansión .................................................................................................. 132 7.4 Variables ......................................................................................................... 137 7.5 Funciones / Subrutinas ................................................................................... 138 8. Aplicaciones ......................................................................................................... 140 8.1 Ventana de comunicaciones ........................................................................... 140 www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 5 de 148
8.2 MowayCam .................................................................................................... 141 8.3 MowayRC ...................................................................................................... 143 8.3.1 Configuración ............................................................................................ 144 8.3.2 Movimiento................................................................................................ 144 8.3.3 Luces .......................................................................................................... 144 8.3.4 Sonido ........................................................................................................ 145 8.3.5 Estado de sensores ..................................................................................... 145 8.3.6 Cámara ....................................................................................................... 145 8.4 MowayServer ................................................................................................. 145
www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 6 de 148
1. Introducción Comienza una nueva era, la de los minirobots. Cada vez son más las aplicaciones de la robótica móvil en nuestra vida cotidiana. Actualmente podemos ver robots que nos ayudan en tareas sencillas como limpiar el suelo de casa, segar el césped o mantener limpia la piscina. A medida que avanza la tecnología estos pequeños artilugios, mezcla de mecánica, electrónica y software, van asumiendo tareas más complejas. Poco a poco se van abriendo camino hacia nosotros siéndonos cada vez más útiles y descargándonos de los trabajos menos gratificantes. No es ningún disparate pensar que la revolución que se dio en la informática o en las telecomunicaciones se va a repetir en la robótica durante la próxima década. Actualmente disponemos de la tecnología suficiente para fabricar estos dispositivos y la sociedad está cada vez más preparada para recibirlos en el mercado. Hasta ahora los procesadores no se movían. Las cosas han cambiado. Uno de los elementos fundamentales en el mundo de la robótica móvil es el software. La principal diferencia a la hora de desarrollar programas para estos robots con respecto a hacerlo para ejecutarlos en un ordenador personal estriba en la interacción con el entorno. En las aplicaciones para PC el entorno no cambia aleatoriamente, con la que la toma de decisiones se simplifica y con ello los programas. Por otro lado, en la ejecución de comandos dentro de una aplicación para un minirobot lo habitual es que se desconozca de antemano cuál va a ser el resultado, por lo que los algoritmos deben contemplar situaciones con un abanico mucho más amplio de posibilidades, algunas incluso inesperadas. Los mOways son herramientas diseñadas específicamente para la docencia e investigación. Su objetivo es acercar el mundo de la robótica autónoma a los centros docentes. El objetivo principal de mOway es ser una herramienta útil tanto para quienes se introducen por primera vez en el mundo de la robótica como para quienes ya tienen experiencia y desean realizar aplicaciones complejas de robótica colaborativa.
www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 7 de 148
2. ¿Qué es mOway? mOway es un pequeño robot autónomo programable diseñado principalmente para realizar aplicaciones prácticas de robótica móvil. Con él se ha conseguido una plataforma hardware perfecta tanto para quien quiere dar sus primeros pasos en el mundo de los robots móviles como para quien ya ha trabajado con robots y desea realizar aplicaciones más complejas. El robot mOway está dotado de una serie de sensores que le ayudarán a desenvolverse en un entorno real. A su vez cuenta con un grupo motor que le permitirá desplazarse sobre el terreno. Todos estos periféricos están conectados a un microcontrolador que será el encargado de gobernar el robot. Este pequeño robot cuenta además con opciones de ampliación a través de un bus de expansión. En él se puede conectar, por ejemplo, un módulo de comunicaciones inalámbricas, una cámara de video, una tarjeta de prototipos o cualquier otro dispositivo que se considere interesante para el desempeño de una tarea. En la página web del producto encontrará prácticas para realizar en el bus de expansión. El diseño exterior de mOway es muy compacto, diseñado para que pueda moverse con agilidad y elegancia sin opción a quedarse enganchado en ninguna esquina. Tan pequeño como un móvil se ha ganado la denominación de “robot de bolsillo”. mOway es una herramienta perfecta para quien quiere aprender y para quien quiere enseñar qué es la robótica. El usuario se verá sorprendido con la rapidez que comienza a cosechar logros incluso si éste es su primer contacto con los robots móviles.
www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 8 de 148
3. Robot mOway En el interior de un mOway tenemos los siguientes elementos:
Procesador Sistema motriz Grupo de sensores e indicadores Sistema de alimentación Engrane Encoder IR_
LINE_RX_R
RX _R
MEDIDOR BATERÍA
TEMP MIC
IR_R
LED_ BRAKE
PIC16F687
X_ R LINE_RX_R
FRON T_LED
LINE_TX LINE_RX_L
IR_R
IR_
PIC18f86j50
LED_ GREEN LIGHT_ SEN LED_ RED
X_ L
RX
LINE_TX
ACELE
M O T O R
FREE PAD
E X P A N S I Ó N
Puente H
LED_ BRAKE
_L SPEAKER
LINE_RX_R
LINE_TX
M O T O R
Encoder Engrane
Imagen 1. Representación de las partes de mOway
3.1
Procesador
Los mOways están gobernados por un microcontrolador PIC18F86J50 PIC18F86J50 (versión 2.0.1) o PIC18F87J50 (versión 2.0.2) del fabricante Microchip Technology que trabaja a 4Mhz. En este microcontrolador es donde descargaremos el programa desarrollado en el PC. De sus puertos de entrada/salida cuelgan todos los periféricos distribuidos por el robot. Algunos de ellos necesitan de una entrada o salida digital, otros de una analógica y otros en cambio se controlan a través de uno de los buses de comunicación I2C/SPI. Tabla 1. Conexiones PIC-sensores
Pin PIC PORTA RA0 RA1 RA2 RA3 RA5 PORTB RB1
I/O
Sensor
I I I I I
Luz Receptor central infrarrojo izquierdo Receptor sensor línea derecho Receptor lateral infrarrojo izquierdo Receptor sensor línea izquierdo
I
Interrupción 1 del acelerómetro
www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 9 de 148
RB2 RB3 RB5 RB6 PORTC RC7 PORTD RD1 RD4 RD5 RD6 RD7 PORTE RE5 PORTF RF5 RF6 PORTH RH5 RH6 RH7 PORTJ RJ6 RJ7
3.2
I O O O
Interrupción 2 del acelerómetro Altavoz LED superior rojo LED superior verde
O
LED frontal
O I O O I
Transmisor infrarrojo de línea Señal SDO para la comunicación SPI del acelerómetro Señal SDI para la comunicación SPI del acelerómetro Señal de reloj para la comunicación SPI del acelerómetro Chip Select para la comunicación SPI del acelerómetro
O
LED de freno
I I
Receptor lateral infrarrojo derecho Receptor central infrarrojo derecho
I I I
Sensor de temperatura Medidor de batería Micrófono
O I/O
Transmisor infrarrojo Pad libre
Sistema motriz
Los mOways disponen de un grupo servo-motor doble para poder desplazarse. Consta de una parte electrónica y otra mecánica. La parte electrónica se encarga principalmente de controlar la velocidad de los motores y la parte mecánica permite el desplazamiento con una potencia suficiente para que mOway se mueva en diferentes entornos. Engrane Encoder Sistema Motriz
LINE_RX_R
LINE_TX
M O T O R
PIC16F687
PUENTE H
LINE_RX_R
LINE_TX
M O T O R
Encoder Engrane
Imagen 2. Sistema motriz: electrónica y mecánica
www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 10 de 148
El grupo servo-motor tiene diversas funcionalidades: 1. Control de velocidad: Controla la velocidad de cada motor por separado. 2. Control de tiempo: Controla el tiempo en cada comando con una precisión de 100ms. 3. Control de distancia recorrida: Controla la distancia recorrida en cada comando con una precisión de 1mm. 4. Cuentakilómetros general: Cuenta la distancia recorrida desde el comienzo de los comandos. 5. Control de ángulo: Control de ángulo cuando se produce la rotación de mOway. El microcontrolador manda el comando I2C al sistema motriz que controla los motores y por lo tanto el microcontrolador principal queda libre para poder llevar a cabo otras tareas. El control de velocidad se realiza mediante control en lazo cerrado gracias a la señal de los encoders (sensores para medir la velocidad y recorrido de los motores). La rotación de la rueda es monitorizada por medio de un encoder sobre uno de los engranajes del sistema y un sensor infrarrojo. El microcontrolador analiza esta señal y actúa sobre los motores. De esta manera, mOway puede controlar su velocidad y distancia recorrida.
Vcc=2.8V Moway created by: Iñigo Sobradillo Daniel del Rio Javi Galvez Juan Gil Estibaliz Otero Julen Gutierrez
PIC16F687
M
PWM
Puente H
Señal encoder Vcc=2.8V Moway created by: Iñigo Sobradillo Daniel del Rio Javi Galvez Juan Gil Estibaliz Otero Julen Gutierrez
Encoder
Bloque electrónica
Bloque mecánico
Sistema Motriz Imagen 3. Control de motores
Cuando desde el microcontrolador principal se quiere que el robot realice un desplazamiento sólo tenemos que mandar un comando de movimiento con sus parámetros mediante I2C. Para ello se han diseñado unas librerías en ensamblador y en C con las que esta comunicación queda simplificada por unas funciones que se encargan de la comunicación. El formato de las tramas se explica en el apartado de la librería de motores.
www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 11 de 148
En la siguiente tabla podemos ver la conexión entre el microcontrolador principal y el encargado de controlar los movimientos del robot. Tabla 2. Conexiones Procesador-motores
Pin PIC
I/O
Sensor
PORTE RE0 I2C RE1 I2C RE7 I
3.3
Línea Reloj del I2C Línea datos del I2C Línea indicadora de fin motor
Grupo de sensores e indicadores
Este grupo consta de diferentes sensores e indicadores conectados al microprocesador de mOway con los que el robot interactúa con el mundo exterior:
Dos sensores de línea. Cuatro sensores detectores de obstáculos. Sensor de luz. Un conector de expansión. Cuatro tipos de LEDs. Sensor de temperatura. Speaker. Micrófono. Acelerómetro. Nivel de batería.
IR_
RX _R
MEDIDOR BATERÍA
TEMP MIC
IR_R
LINE_RX_R
FRON T_LED
LINE_TX LINE_RX_L
IR_R
IR_
PIC18f86j50
X_ R LED_ GREEN LIGHT_ SEN LED_ RED
X_ L
RX
ACELE LED_ BRAKE FREE PAD
E X P A N S I Ó N
LED_ BRAKE
_L SPEAKER
Imagen 4. Grupo sensores e indicadores
www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 12 de 148
Imagen 5. Vista superior placa electrónica mOway
Imagen 6. Vista inferior placa electrónica mOway
3.3.1 Sensor de línea Los sensores de línea son dos optoacopladores de reflexión montados en la parte inferior delantera del robot. Utilizan la reflexión de luz infrarroja para detectar el tono del suelo en el punto en que se encuentra el robot. Estos dos sensores están conectados a dos de los puertos analógicos del microcontrolador de manera que no sólo podemos detectar contrastes fuertes en el suelo, como líneas blancas sobre fondo negro, sino que es posible discernir entre diferentes tonos. El sensor CNY70 de Vishay, está compuesto por una estructura compacta donde la fuente emisora de luz y el detector están dispuestos en la misma dirección para poder detectar mediante el uso de los rayos infrarrojos la luz reflejada en el suelo. En las siguientes imágenes podemos ver los tres casos que se pueden dar:
Superficie clara: La superficie blanca hace que toda la luz infrarroja se refleje y por lo tanto a la salida del transistor en modo común obtenemos un voltaje bajo.
www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 13 de 148
Imagen 7. Sensor de línea en superficie clara.
Superficie de color: La superficie de color hace que parte de la luz emitida se refleje obteniendo un voltaje intermedio en la entrada del canal analógico del microcontrolador. De esta manera es fácil identificar colores1.
Imagen 8. Sensor de línea en superficie de color.
Superficie oscura: La superficie oscura hace que se refleje muy poca luz teniendo un voltaje alto a la salida del sensor.
Imagen 9. Sensor de línea en superficie oscura.
1
Hay que tener en cuenta que debido a la tolerancia de los sensores CNY70, puede que en la misma superficie los dos sensores den diferente valor para un mismo color. www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 14 de 148
Tabla 3. Conexiones Sensores de línea-PIC
Pin PIC PORTA RA2 RA5 PORTD RD1
I/O
Sensor I I
Receptor sensor línea derecho Receptor sensor línea izquierdo
O
Trasmisor sensores de línea izquierdo y derecho
Imagen 10. Ubicación sensores de línea
3.3.2 Sensores detectores de obstáculos Al igual que los sensores de línea, los sensores detectores de obstáculos utilizan también la luz infrarroja para detectar objetos situados en la parte delantera de mOway. El sensor está compuesto por dos fuentes de luz infrarroja (KPA3010-F3C de Kingbright) y cuatro receptores colocados en ambos extremos delanteros de mOway. La salida de los receptores PT100F0MP de Sharp está conectada a las entradas analógicas del microcontrolador después de ser filtrada y acondicionada, por lo que no sólo se detecta la presencia de algún objeto (modo digital) sino que también podemos medir la distancia al mismo (modo analógico)2. El funcionamiento del sensor es similar al sensor de línea. El emisor de luz genera un pulso de una duración de 70 microsegundos que, en caso de existir un obstáculo, se refleja contra él y es captado por el receptor utilizando una etapa de filtrado y amplificación. Una vez procesada la señal electrónicamente, el microcontrolador puede medirla como entrada digital o analógica.
2
Debido a tolerancias en el montaje de los componentes electrónicos, habrá diferencias entre los sensores en la detección de objetos a una misma distancia. www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 15 de 148
Imagen 11. Sensor detector de obstáculos Tabla 4. Conexiones sensor antichoque-PIC
Pin PIC
I/O
PORTA RA1 RA3 PORTF RF5 RF6 PORTJ RJ7
Sensor I I
Receptor central infrarrojo derecho Receptor lateral infrarrojo izquierdo
I I
Receptor lateral infrarrojo derecho Receptor central infrarrojo izquierdo
O
Transmisor infrarrojo
Imagen 12. Posición de los sensores de obstáculo
3.3.3 Sensor de luz Este sensor permite a mOway conocer la intensidad de luz que entra por una pequeña abertura con forma de media luna en la parte superior del chasis. Al estar orientada hacia delante permite conocer dónde está situada la fuente de luz y actuar en consecuencia. La salida del sensor APDS-9002 de Avago Technologies está conectada a un puerto analógico del microcontrolador de manera que con una simple lectura del sensor podemos saber el nivel de intensidad de luz y si éste ha aumentado o disminuido con respecto a la última lectura. Este sensor funciona de una manera similar a los sensores basados en LDR (Light Dependant Resistors)3. Tabla 5. Conexión PIC-sensor de luz
Pin PIC PORTA RA0
I/O
Sensor I
Luz
3
Es fundamental apagar el LED bicolor en el momento que se desee hacer una lectura de la intensidad de luz. www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 16 de 148
Imagen 13. Apertura sensor de luz
3.3.4 Conector de expansión Este conector permite la conexión de mOway con módulos comerciales o con circuitos electrónicos que el usuario desee. La primera expansión disponible es el módulo de RF mOway que permite la comunicación de mOway con otros de su especie y con el PC. Este módulo permite hacer aplicaciones colaborativas complejas sin tener que preocuparse de la gestión de la comunicación inalámbrica.
Tabla 6. Conexiones PIC-Conector de expansión
Pin Expa Pin1 Pin2 Pin3 Pin4 Pin5 Pin6 Pin7 Pin8
I/O
PIC
O O I/O /PMD3/AN12/P3C /C2INC I/O/PMA5/AN7/C2INB I/O /SCK1/SCL1 I/O /SDO1/C2OUT I/O /SDI1/SDA1 I/O/INT
Vcc 3.3v GND RH4 RF2 RC3 RC5 RC4 RB0
Imagen 14. Robots con módulo de RF en el conector de expansión
www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 17 de 148
3.3.5 Sensor de temperatura mOway lleva instalado en la parte delantera (cerca de los sensores de obstáculo) como medidor de temperatura un termistor NTC de Murata, que es un semiconductor cuya resistencia eléctrica variable decrece a medida que la temperatura aumenta. El termistor está conectado a una entrada analógica del microcontrolador de forma que con una simple lectura del ADC podemos conocer la temperatura que hay y si ha aumentado o disminuido con respecto a la última lectura4. Tabla 7. Conexión PIC-sensor de temperatura
Pin PIC
I/O
PORTH RH5
Sensor I
Sensor de temperatura
3.3.6 Speaker El altavoz CMT-1102 de CUI INC conectado al microcontrolador del robot, es capaz de reproducir tonos desde 250 Hz hasta 5,6 kHz en intervalos pares de 100 ms. Se trata de un altavoz piezoeléctrico. En estos altavoces el motor es un material piezoeléctrico, que al recibir una diferencia de tensión entre sus superficies metalizadas experimenta alargamientos y compresiones. Tabla 8. Conexión PIC-speaker
Pin PIC
I/O
PORTB RB3
Sensor O
Altavoz
3.3.7 Micrófono El micrófono CMC-5042PF-AC de CUI INC permite al robot detectar sonidos desde 100 Hz hasta 20 KHZ. La salida del micrófono está conectado a una entrada analógica del microcontrolador de forma que no sólo es capaz de detectar si hay sonido o no (modo digital), sino que con una simple lectura del ADC, es capaz de detectar la intensidad con la que está llegando ese sonido (modo analógico). Tabla 9. Conexión PIC-Micrófono
Pin PIC PORTH RH7
I/O
Sensor I
Micrófono
4
La temperatura indicada por este sensor se corresponde al interior del robot que puede diferir en unos 5ºC con la temperatura exterior. www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 18 de 148
3.3.8 Acelerómetro Un acelerómetro es un dispositivo que mide la aceleración y las fuerzas inducidas por la gravedad: el movimiento y el giro. Midiendo las coordenadas X, Y, Z, el acelerómetro MMA7455L de Freescale Semiconductor permite conocer si mOway está en posición correcta, invertido o ladeado. Además, permite conocer si el robot se ha golpeado o caído.
Tabla 10. Conexiones PIC-Acelerómetro
Pin Acce
I/O
Pin7 Pin8 Pin9 Pin12 Pin13 Pin14
PIC I I I I O O
RD7 RB1 RB2 RD4 RD5 RD6
3.3.9 Nivel de batería Para la alimentación del robot, se dispone de una célula de LiPo recargable. Para un correcto funcionamiento del microcontrolador, la batería va conectada a una de sus entradas analógicas a través de un adaptador de señal. De esa forma, con una lectura del ADC podemos determinar el nivel de batería restante.
Tabla 11. Conexión PIC-Medidor de batería
Pin PIC
I/O
PORTH RH6
3.3.10
Sensor I
Medidor de batería
LED frontal
El led frontal es un LED blanco que está situado en la parte delantera del robot. El LED LW A6SG de OSRAM está conectado a una salida digital del microcontrolador.
Tabla 12. Conexión PIC- Led frontal
Pin PIC PORTC RC7
I/O
Sensor O
LED frontal
www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 19 de 148
3.3.11
LED superior bicolor
Este indicador doble comparte la misma apertura en la parte superior del robot que el sensor de luz. Están conectados a dos salidas digitales del microcontrolador. Cabe destacar que al compartir la misma apertura que el sensor de luz5. Tabla 13. Conexión PIC-Led superior
Pin PIC
I/O
PORTA RA4 PORTB RB6
Sensor O
LED superior rojo
O
LED superior verde
Imagen 15. Robot con LED frontal blanco y superior rojo encendidos
3.3.12
LED de freno
El LED de freno es un indicador que está conectado a una salida digital del microcontrolador y está situado en la parte trasera del robot tras el filtro rojo.
Tabla 14. Conexión PIC- Led de freno
Pin PIC PORTE RE5
I/O
Sensor O
LED de freno
5
Es fundamental apagar el LED bicolor en el momento que se desee hacer una lectura de la intensidad de luz. www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 20 de 148
Imagen 16. Posición LED de freno en rojo. LED verde de encendido no controlable
3.3.13
Pad libre
El PCB de mOway tiene un Pad, accesible sólo abriendo el robot, situado en la parte trasera del PCB al lado de los LED de freno para que el usuario pueda conectar sus circuitos electrónicos6. Tabla 15. Conexión PIC-pad libre
Pin PIC PORTJ RJ7
3.4
I/O
Sensor
I/O
Pad libre
Sistema de alimentación
La batería empleada en el robot mOway es de Litio Polímero recargable y se encuentra en su interior. La recarga de la batería se realiza por el puerto USB de cualquier ordenador conectado directamente al puerto MINI-USB-B del propio robot. No es necesario esperar a que la batería esté completamente descargada para poder enchufarla, puede hacerse en cualquier momento puesto que este tipo de baterías no tienen efecto memoria. Su pequeño tamaño, ligereza y flexibilidad hacen de estas baterías una perfecta fuente de energía para mOway. La duración media de la batería es de 1h y 30 minutos aunque depende en gran medida de los sensores activos y del tiempo de utilización de los motores. De todas formas, gracias a la función nivel de batería, se puede saber la cantidad de carga que tiene el robot en cada momento. El tiempo de carga aproximado es de 2h. El porcentaje de carga está claramente indicado en la aplicación MowayWorld. El sistema de alimentación controla dos indicadores luminosos situados en la parte trasera del robot7. El LED verde indica que el robot está encendido y el LED rojo indica que el robot está cargando las baterías al encontrarse conectado al PC. 6 7
Sólo para usuarios avanzados Estos LEDs no pueden ser controlados por el usuario. www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 21 de 148
Cada vez que se conecte el robot al PC se encenderá el indicador de encendido (para que la opción de grabación quede habilitada) y el LED rojo si la batería no está completamente cargada. Cuando esto se produzca el LED rojo se apagará8.
Imagen 17. Indicadores encendido (verde) y cargando (rojo)
3.5 Módulo RF y RFUsb Estos módulos de radiofrecuencia permiten comunicar al robot con otro mOway o con el PC a través del RFUsb9.
Imagen 18. Módulo RF
Estos módulos se conectan a través del conector de expansión y son fácilmente manejables mediante MowayWorld.
8
En el proceso de carga puede que el LED rojo se apague cuando la batería esté completamente cargada y al de un tiempo se encienda otra vez. Esto es debido a que el robot sigue encendido y la batería pierde carga al estar el cargador apagado. 9 Disponible según pack www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 22 de 148
Imagen 19. RFUsb
El módulo de comunicación por radiofrecuencia BZI-RF2GH4 está basado en el transceptor nRF24L01 fabricado por “Nordic Semiconductors”. En este circuito integrado se ha incorporado toda la lógica necesaria para establecer una comunicación inalámbrica bidireccional con acuse de recibo. La comunicación con el microcontrolador se realiza a través de un bus SPI. Las principales características del módulo BZI-RF2GH4 son:
Bajo consumo. Frecuencia de trabajo de 2.4GHz, Potencia de emisión entre -18 y 0 dBm, Velocidad de transmisión entre 1 y 2 Mbps, 128 canales de transmisión seleccionables por el bus SPI,
El módulo BZI-RF2GH4 incorpora, además del CI nRF24L01, toda la electrónica anexa para su correcto funcionamiento y una antena microstrip en la misma placa con la red de adaptación de impedancias. De esta manera el usuario se despreocupa por completo del hardware necesario para implementar la parte de radio de su aplicación. Como interfaz dispone de cuatro pines accesibles para el bus SPI, dos pines más para el control del módulo y otros dos para la alimentación. Con el objetivo de facilitar el manejo del módulo se han desarrollado unas librerías que simplifican y acortan el tiempo de desarrollo de cualquier aplicación inalámbrica con estos módulos.
3.5.1 Especificaciones técnicas Tabla 16. Parámetros máximos
Parámetro Vdd Vss Tensión de entrada datos
Min -0.3 -0.3
www.moway-robot.com
Max 3.6 0 5.25
Unidad V V V
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 23 de 148
Tensión de salida datos Potencia disipada Temperatura de operación Temperatura de almacenaje
Vss-Vdd Vss-Vdd 60 -40 +85 -40 +125
V mW ºC ºC
Tabla 17. Parámetros principales del módulo BZI-RF2GH4
Parámetro Tensión mínima de alimentación Tensión máxima de alimentación Potencia máxima de salida Velocidad máxima de transmisión Corriente en modo transmisión @ 0dbm potencia de salida Corriente en modo recepción @ 2000kbps Corriente en modo Power Down Frecuencia máxima del bus SPI Rango de temperatura
Valor 1.9 3.6 0 2000 11.3 12.3 900 8 -40 a +85
Tabla 18. Pinout del módulo BZI-RF2GH4
Pines Vcc Vss CE CSN SCK SDI SDO IRQ
Descripción Tensión de alimentación del módulo GND Chip Enable Chip Select del SPI (Negado) Reloj del bus SPI Entrada de datos al módulo RF del bus SPI (MOSI) Salida de datos del módulo RF del bus SPI (MISO) Salida interrupción (negado)
Imagen 20. Disposición de componentes en la placa
www.moway-robot.com
Unidad V V dBm Kbps mA mA nA Mhz ºC
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 24 de 148
3.6 Módulo de cámara El Módulo de Cámara de mOway10 permite mostrar en el ordenador lo que el robot está “viendo” en cada momento. La cámara envía las imágenes por radiofrecuencia al receptor de vídeo mOway Camera Board11.
Imagen 21. Módulo de cámara
El Módulo de Cámara se inserta en el conector de expansión de mOway. Su funcionamiento se controla mediante la programación del robot. Incorpora un conector en la parte posterior del módulo para conectar otros dispositivos, como el módulo RF o circuitería diseñada por el usuario en el Kit de Expansión. El conector posterior tiene el mismo patillaje que el conector de expansión de mOway. El control de la cámara se realiza por medio del dispositivo MCP23S08 de Microchip. Consiste en un puerto de entradas y salidas configurables, manejado vía SPI. Las funciones básicas implementadas son las siguientes:
Encendido: cuando la cámara esté encendida, el LED del Módulo de Cámara se encenderá. En este estado, la cámara transmitirá las imágenes por radiofrecuencia al receptor de vídeo.
Apagado: cuando la cámara esté apagada, el LED del Módulo de Cámara permanecerá apagado. En este estado, la transmisión por radiofrecuencia se desactivará
Cambio de canal: Cada vez que se realiza un cambio de canal de la cámara, el LED del Módulo de Cámara parpadeará brevemente.
Si existen otras transmisiones por radiofrecuencia (redes wifi, por ejemplo), la imagen recibida en el ordenador podría aparecer con interferencias. En estos casos, el cambio de canal podría mejorar la calidad de la imagen. Para poder mostrar las imágenes de la cámara en el ordenador, el canal seleccionado en el programa debe ser el mismo que el canal seleccionado en el receptor de vídeo a través del conmutador. 10 11
Disponible según pack Disponible según pack www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 25 de 148
Dichos canales van del 1 al 4. Como interfaz dispone de cuatro pines accesibles para el bus SPI, dos pines más para el control del módulo y otros dos para la alimentación. Con el objetivo de facilitar el manejo del módulo se han desarrollado una librería para el uso del sistema de visión. NOTA: Debido a que tanto el módulo de RF como la cámara emiten en el mismo rango de frecuencias, si se utiliza ambos módulos simultáneamente, el alcance de RF puede verse reducido.
3.6.1 Especificaciones técnicas Tabla 19. Parámetros principales del Módulo de Cámara.
Parámetro Tensión mínima de alimentación Tensión máxima de alimentación Corriente en modo Power Down Frecuencia máxima del bus SPI Rango de temperatura Tecnología
Valor 1.9 3.6 1 10 -40 a +85 CMOS
Unidad V V uA Mhz ºC -
Max 5.5 0 125 700 +85 +125
Unidad V V mA mW ºC ºC
Tabla 20. Parámetros máximos
Parámetro Vdd Vss Intensidad Potencia disipada Temperatura de operación Temperatura de almacenaje
Min -0.3
-40 -40
Tabla 21. Patillaje del Módulo de Cámara y del conector posterior
Pines Vcc Vss CE CS SCK SDI SDO IRQ
Descripción Tensión de alimentación del módulo GND Chip Enable Chip Select del SPI Reloj del bus SPI Entrada de datos SPI (MOSI) Salida de datos SPI (MISO) Interrupción SPI
www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 26 de 148
Imagen 22. Módulo de cámara
3.7 mOway Camera Board mOway Camera Board es el receptor de vídeo, encargado de mostrar en el ordenador las imágenes de la cámara de mOway. Este dispositivo recibe las imágenes enviadas por la cámara a través de radiofrecuencia y las envía al ordenador por USB.
Imagen 23. mOway Camera Board
Consta de un selector para elegir los diferentes canales de comunicación RF entre la cámara y el receptor (canales de 1 a 4). El canal del receptor mOway Camera Board debe ser el mismo que el definido en el programa grabado en el mOway al activar la cámara.
www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 27 de 148
Imagen 24. Selector de canales
El receptor de vídeo se conecta al ordenador a través de una conexión USB, por medio del cable incluido en el pack. La primera vez que se conecta el receptor mOway Camera Board al ordenador, es posible que aparezca un mensaje para instalar los drivers de la misma. En ese caso, indicaremos que instale el software automáticamente. NOTA: Durante el funcionamiento del receptor de vídeo, su receptor RF se calienta, por lo que la carcasa puede calentarse también. Este comportamiento es normal.
3.7.1 Especificaciones técnicas
Interfaz USB 2.0
Decodificador multiestándar o PAL o NTSC o SECAM o Filtro anti-aliasing
www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 28 de 148
4. Primeros pasos 4.1 Instalación pack Bien en el CD de instalación del producto o en la página web de mOway: (http://www.moway-robot.com), se podrá encontrar el pack de instalación que contiene el software para mOway, las librerías para manejar el robot, los programas de prueba y la documentación. Basta con seguir los pasos del instalador para tener todos los recursos de mOway:
El manual de principiantes y usuario. o En el manual de principiante aparece lo necesario para que el usuario pueda empezar a utilizar el robot. o El manual de usuario contiene una explicación más detallada del robot.
El software MowayWorld. o Es el software donde se puede controlar todos los aspectos del robot: programación, control de carga, control por radio control, control de RFUsb12 y grabación proyectos escritos en C o en ensamblador.
Proyectos de ejemplo en ensamblador, C y MowayWorld. o Proyectos ejemplo para que el usuario puede empezar rápidamente el aprendizaje.
Driver para RFUsb o Driver para instalar el RFUsb para comunicación RF entre robot y PC.
Driver para el receptor de vídeo mOway Camera Board13 o Driver para visualizar en el PC las imágenes de la cámara14.
NOTA: Si durante la instalación aparece un mensaje advertencia de seguridad, instalar el driver de todos modos. El software de MowayWorld es seguro.
12 13 14
Disponible según pack Disponible según pack Disponible según pack www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 29 de 148
Imagen 25. Menú del CD
4.2 Grabación del robot La grabación del robot se ejecuta siempre desde el programa MowayWorld. Esta aplicación puede grabar en el robot los proyectos de MowayWorld basados en diagramas de flujo, proyectos en ensamblador (compilador MPLAB o gputils) y en C (compilador C18). Estos son los pasos para grabar el robot desde MowayWorld:
Conectar robot mediante cable USB. No hace falta instalar ningún driver. Abrir MowayWorld. Apertura o creación de proyecto en MowayWorld o importar un archivo “.hex” de alguno de los proyectos en C o ensamblador. Clicar en el botón “Programar mOway”. Si el proyecto es correcto el robot será programado. Desconectar y encender el robot.
4.3 Instalación RFUsb RFUsb es una llave USB para realizar la comunicación entre PC y robot. Requiere de la instalación de un driver que se proporciona con el pack.
La primera vez que se conecta el RFUsb, el PC lo detectará como un nuevo dispositivo y aparecerá el “Asistente para hardware nuevo encontrado”. Elegiremos la opción No por el momento. En la siguiente ventana elegimos la opción recomendada: Instalar automáticamente el software. www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 30 de 148
Imagen 26. Asistente instalación driver Windows XP
Comenzará la instalación.
Imagen 27. Instalación driver Windows XP
Finalmente el asistente indicará que el hardware está instalado.
Imagen 28. Driver instalador Windows XP
Una vez finalizada la instalación la gestión de este dispositivo se realiza desde la ventana RF de MowayWorld.
www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 31 de 148
4.4 Instalación drivers mOway Camera Board Para visualizar las imágenes de la cámara de mOway es necesario conectar el receptor de vídeo mOway Camera Board15 a una conexión USB del ordenador. Del mismo modo que el dispositivo RFUsb, el receptor de vídeo requiere de la instalación de un driver que se proporciona con el pack.
15
La primera vez que se conecta el receptor de vídeo, el PC lo detectará como un nuevo dispositivo y aparecerá el “Asistente para hardware nuevo encontrado”. Elegiremos la opción No por el momento.
En la siguiente ventana elegimos la opción recomendada: Instalar automáticamente el software.
Comenzará la instalación.
Finalmente el asistente indicará que el hardware está instalado.
Disponible según pack www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 32 de 148
5. Programación ensamblador El MPLAB IDE de Microchip es el entorno de programación más utilizado para los microcontroladores PIC (ya que Microchip también es el fabricante de dichos microcontroladores). En principio el lenguaje que utiliza es el ensamblador, aunque se le pueden añadir otros lenguajes. Gracias a él se puede compilar el código fuente y generar los ficheros hexadecimales (.HEX). Este compilador se puede descargar gratuitamente desde la página web de Microchip. En el pack de mOway encontrará librerías para el manejo de los sensores, motores y módulo RF escritas para ensamblador MPLAB. En resumen: Muy interesante para aprender a programar en ensamblador (lenguaje de bajo nivel). Recomendable si el programa a realizar va a ser largo (en cuanto a código se refiere). Imprescindible si el tiempo de respuesta es crítico.
Creación de un proyecto Para crear el primer proyecto utilizaremos el Project Wizard de MPLAB IDE que permite crear proyectos rápidamente.
Imagen 29. Project Wizard
www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 33 de 148
1. El primer paso consiste en elegir el PIC instalado en mOway: PIC18F86J50 o PIC18F87J50.
Imagen 30. Selección del PIC
2. A continuación se elige la herramienta de ensamblado: MPASM.
Imagen 31. Selección de herramienta
www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 34 de 148
3. En el paso tres se debe indicar la ubicación del proyecto a crear.
Imagen 32. Elección de carpeta
4. En el siguiente paso se añaden al proyecto las librerías de mOway que controlan diferentes aspectos del robot. Esas librerías deben ser copiadas (manualmente o indicándolo en el Wizard) en la carpeta del proyecto sino MPLAB utilizará las librerías elegidas en la ubicación elegida.
Imagen 33. Elección de librerías mOway
www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 35 de 148
5. Siguiendo estos pasos el proyecto se creará, pero faltará todavía la creación del fichero .ASM donde se inserta el código fuente.
Imagen 34. Finalización Wizard
6. El siguiente paso es abrir el proyecto y crear un nuevo archivo (New File) guardándolo en la misma carpeta del proyecto como Main.asm. Éste será nuestro fichero fuente.
Imagen 35. Creación de .ASM
www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 36 de 148
7. Por último se añade el fichero fuente al proyecto accediendo a Project/Add Files to Project…
Imagen 36. Proyecto con .ASM
5.1 Primer programa en ensamblador Para hacer el primer programa es necesario haber creado un proyecto (capítulo anterior). Este primer programa básico hará que mOway evite los obstáculos. El código utilizado será el absoluto. 1. En primer lugar hay que añadir en el archivo Main.ASM del pic que tiene mOway instalado: list p=18F86J50. 2. También es necesario añadir la librería de este microcontrolador en la carpeta del proyecto que encontrará en el directorio de instalación de MPLAB o en los programas de prueba del pack de mOway. Una vez copiada la librería en la carpeta se debe incluir en el Main: #include "P18F86J50.INC". 3. El próximo paso es añadir los vectores de inicio (0x102A) y reset (0x1000), incluir las librerías de mOway y añadir el END de fin de programa. 4. Se añade a continuación una etiqueta INIT donde se inicia el programa y donde se configurará el microcontrolador y una etiqueta MAIN que es un bucle infinito donde se ejecutara el algoritmo principal. 5. A continuación se llama a la función SEN_CONFIG encargada de configurar las entradas y salidas del microcontrolador. 6. Se añade el parpadeo de uno de los leds. 7. Compilar el programa en código absoluto y grabarlo en mOway a través de MowayWorld (Grabar fichero .hex) y comprobar que el LED verde parpadea.
www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 37 de 148
Imagen 37. Primer programa: configuración y led
8. Para detectar obstáculos se llama a la función SEN_OBS_DIG en el bucle infinito que devolverá en la variable SEN_OBS si tenemos obstáculo o no en el sensor indicado por la variable SEN_CHECK_OBS. 9. Si encuentra obstáculo enciende el LED delanteros. 10. Probar el programa en mOway y comprobar que los LED se encienden cuando se acerca un objeto a la parte delantera.
www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 38 de 148
Imagen 38. Primer programa: detección de obstáculo
11. Añadimos movimiento al robot: comando recto indefinidamente hasta que encuentra un obstáculo. 12. Se añade la librería de motores en el main.asm. 13. Se llama a la función de configurar motores MOT_CONFIG. 14. Se llama a ir recto la primera vez.
www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 39 de 148
Imagen 39. Configuración y primer comando recto
15. Cuando encuentra obstáculo se manda un comando para que realice una rotación de 180º y enciende el LED frontal. El robot esperará hasta que el comando termine y continuará en un movimiento recto.
www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 40 de 148
Imagen 40. Primer programa: movimiento con detección
Este programa está incluido en el pack de mOway como mOway_first_project_ASM.
5.2 Librerías 5.2.2 Librería sensores mOway ensamblador Existen dos librerías en ensamblador que pueden ser incluidas en cualquier proyecto de mOway que permiten al usuario controlar los sensores con gran facilidad. Ambas son idénticas salvo el hecho de que una de ellas tiene la posibilidad de reubicar
www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 41 de 148
tanto el código como las variables (utilizando proyectos del MPLAB IDE). Es importante saber que cada llamada a cualquier función de la librería utiliza un nivel adicional de la pila de llamadas. Esto es, antes de llamar a una de estas funciones debe de haber al menos tres niveles libres de la pila de llamadas para que no haya errores.
5.2.2.1 Descripción La librería contiene una serie de funciones encargadas de leer los datos que proporcionan los sensores del robot. Ellas son las encargadas de configurar los puertos de entrada y salida adecuadamente, el ADC del microcontrolador y los indicadores luminosos.
5.2.2.2 Variables SEN_STATUS Esta variable de sólo lectura informa de la validez de los datos obtenidos por la lectura de los sensores. Bit7 Sin uso -
Bit6 Sin uso -
Bit5 Sin uso -
Bit4 Sin uso -
Bit3 Sin uso -
Bit2 Sin uso -
Bit1 Bit0 DWRONG SENOK
Bit 7-2:
Sin uso
Bit 1:
DWRONG: Muestra si los datos de entrada son correcto. 1 = Datos incorrectos. 0 = Datos correctos.
Bit 0:
SENOK: Muestra si el sensor se ha leído correctamente. 1 = Lectura correcta. Datos de salida válidos. 0 = Lectura incorrecta. Datos de salida inválidos.
SEN_ACCE_TAP Esta variable de lectura que indica si la función SEN_CHECK_ACCE_TAP ha detectado toque o doble toque. Bit7 Sin uso -
Bit6 Sin uso -
Bit5 Sin uso -
Bit4 Sin uso -
Bit3 Sin uso -
Bit2 Sin uso -
www.moway-robot.com
Bit1 Bit0 TAP_TAP TAP
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 42 de 148
Bit 7-2:
Sin uso
Bit 1:
TAP_TAP: Muestra si se han detectado dos toque. 1 = Doble Toque detectado. 0 = Doble Toque no detectado.
Bit 0:
TAP: Muestra si se ha detectado un toque. 1 = Toque detectado. 0 = Toque no detectado. SEN_CHECK_OBS
Esta variable de escritura que indica que sensor deben de leer las funciones que controlan el sensor de obstáculos. En la siguiente tabla se muestra los valores que puede coger esta variable. Tabla 22. Valores admitidos para SEN_CHECK_OBS
Define OBS_CENTER_L OBS_SIDE_L OBS_CENTER_R OBS_SIDE_R
Valor 0 1 2 3
SEN_CHECK_ACCE Esta variable de escritura que indica que eje debe de leer la funciones SEN_ACCE_XYZ_READ. En la siguiente tabla se muestra los valores que puede coger esta variable. Tabla 23. Valores admitidos para SEN_CHECK_ACCE
Define ACCE_CHECK_X ACCE_CHECK_Y ACCE_CHECK_Z
Valor 0 1 2
SEN_CHECK_LINE Esta variable de escritura que indica que sensor deben de leer las funciones que controlan el sensor de línea. En la siguiente tabla se muestra los valores que puede coger esta variable. Tabla 24. Valores admitidos para SEN_CHECK_LINE
Define LINE_L LINE_R
Valor 0 1
www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 43 de 148
SEN_SPEAKER_ON_OFF Esta variable de escritura que indica que si el usuario quiere encender, apagar o mantener durante un tiempo el speaker. Tabla 25. Valores admitidos para SEN_SPEAKER_ON_OFF
Define SPEAKER_OFF SPEAKER_ON SPEAKER_TIME
Valor 0 1 2
SEN_LIGHT_P En esta variable de lectura se guarda el porcentaje de la luz incidente en el sensor de luz. Se actualiza cada vez que se llama a la función SEN_LIGHT. SEN_BATTERY_P En esta variable se guarda el porcentaje del nivel de batería que queda en el robot. Se actualiza cada vez que se llama a la función SEN_BATTERY. SEN_TEMPERATURE_C En esta variable se guarda el valor en ºC de la temperatura que se ha captado. Se actualiza cada vez que se llama a la función SEN_TEMPERATURE. SEN_MIC En esta variable se guarda el valor captado por el micrófono, siendo este dato digital o analógico dependiendo de la función que se encarga de actualizarla: SEN_MIC_DIG y SEN_MIC_ANALOG. SEN_SPEAKER_FREQ En esta variable se guarda el valor de la frecuencia, comprendida entre 250 Hz y 65KHz, con la que queremos crear el tono.
SEN_SPEAKER_TIME En esta variable se guarda el tiempo que queremos que el altavoz emita el tono. Este valor sólo tiene validez si la variable SEN_SPEAKER_ON_OFF tiene valor de SPEAKER_TIME (valor decimal: 2).
www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 44 de 148
SEN_OBS En esta variable se guarda el valor del sensor indicado por SEN_CHECK_OBS, siendo este dato digital o analógico dependiendo de la función que se encarga de actualizarla: SEN_OBS_DIG y SEN_OBS_ANALOG. SEN_ACCE En esta variable se guarda la posición del eje indicado por SEN_CHECK_ACCE del robot. Se actualiza cada vez que se llama a la función SEN_ACCE_XYZ_READ. SEN_ACCE_TAP En esta variable se guarda si el robot se ha chocado o le han dado uno o dos toques. Se actualiza cada vez que se llama a la función SEN_ACCE_CHECK_TAP. SEN_LINE En esta variable se guarda el valor del sensor de línea indicado en SEN_CHECK_LINE, siendo este dato digital o analógico dependiendo de la función que se encarga de actualizarla: SEN_LINE_DIG y SEN_LINE_ANALOG.
5.2.2.3 Funciones En las librerías lib_sen_moway y lib_re_sen_moway existen una serie de funciones que están orientadas al control de los sensores y de los diodos LED de mOway. A continuación se dará una breve descripción de cada una de ellas: Tabla 26. Resumen de funciones en ensamblador Nombre Variable entrada SEN_CONFIG
Variable salida -
SEN_LIGHT
-
SEN_LIGHT_P
SEN_BATTERY
-
SEN_BATTERY_P
SEN_TEMPERATURE
-
SEN_TEMPERATURE_C
SEN_MIC_ANALOG
-
SEN_MIC
SEN_MIC_DIG
-
SEN_MIC
SEN_SPEAKER
SEN_SPEAKER_FREQ SEN_SPEAKER_TIME SEN_SPEAKER_ON_OFF
SEN_OBS_DIG
SEN_CHECK_OBS
-
SEN_OBS SEN_STATUS
www.moway-robot.com
Descripción Configura para utilizar los sensores. Lee el valor del sensor de luz . Devuelve el nivel de batería. Detecta la temperatura en ºC. Detecta la intensidad con la que le llega el sonido Detecta si le llega sonido o no. Emite un tono de una frecuencia comprendida entre 250 Hz y 65 KHz, con intervalos de 100 ms Detecta la presencia de obstáculos.
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 45 de 148
SEN_OBS_ANALOG
SEN_CHECK_OBS
SEN_OBS SEN_STATUS
SEN_ACCE_XYZ_READ
SEN_CHECK_ACCE
SEN_ACCE SEN_STATUS
-
LED_BRAKE_ON
-
SEN_ACCE_TAP SEN_STATUS SEN_LINE SEN_STATUS SEN_LINE SEN_STATUS -
LED_FRONT_ON
-
-
LED_TOP_RED_ON
-
-
LED_TOP_GREEN_ON
-
-
LED_BRAKE _OFF
-
-
LED_FRONT_OFF
-
-
LED_TOP_RED_OFF
-
-
LED_TOP_GREEN_OFF
-
-
LED_BRAKE _ON_OFF
-
-
LED_FRONT_ON_OFF
-
-
LED_TOP_RED_ON_OFF
-
-
LED_TOP_GREEN_ON_OFF
-
-
SEN_ACCE_CHECK_TAP SEN_LINE_DIG
SEN_CHECK_LINE
SEN_LINE_ANALOG
SEN_CHECK_LINE
Detecta la presencia de obstáculos, y la distancia a los mismos. Indica la aceleración sufrida en los ejes x,y,z del robot. Comprueba si el robot se ha golpeado. Detecta zona oscura (línea negra). Detecta tonalidades en la superficie. Encendido del diodo LED de freno. Encendido del diodo LED frontal. Encendido del diodo LED superior rojo. Encendido del diodo LED superior verde. Apagado del diodo LED de freno. Apagado del diodo LED frontal. Apagado del diodo LED superior rojo. Apagado del diodo LED superior verde. Parpadeo del diodo LED de freno. Parpadeo del diodo LED frontal. Parpadeo del diodo LED superior rojo. Parpadeo del diodo LED superior verde.
SEN_CONFIG Esta función configura las entradas y salidas para poder manejar los sensores e inicializa las variables. Tabla 27. Conexiones PIC-sensores
Pin PIC PORTA RA0 RA1 RA2 RA3 RA5 PORTB RB1 RB2 RB3 RB5 RB6 PORTC RC7 PORTD
I/O
Sensor
I I I I I
Luz Receptor central infrarrojo izquierdo Receptor sensor línea derecho Receptor lateral infrarrojo izquierdo Receptor sensor línea izquierdo
I I O O O
Interrupción 1 del acelerómetro Interrupción 2 del acelerómetro Altavoz LED superior rojo LED superior verde
O
LED frontal
www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 46 de 148
RD1 RD4 RD5 RD6 RD7 PORTE RE5 PORTF RF5 RF6 PORTH RH5 RH6 RH7 PORTJ RJ6 RJ7
O I O O I
Transmisor infrarrojo de línea Señal SDO para la comunicación SPI del acelerómetro Señal SDI para la comunicación SPI del acelerómetro Señal de reloj para la comunicación SPI del acelerómetro Chip Select para la comunicación SPI del acelerómetro
O
LED de freno
I I
Receptor lateral infrarrojo derecho Receptor central infrarrojo derecho
I I I
Sensor de temperatura Medidor de batería Micrófono
O I/O
Transmisor infrarrojo Pad libre
SEN_LIGHT Variables de salida SEN_LIGHT_P
Porcentaje de la luz incidente.
La función SEN_LIGHT captura el valor analógico dependiente de la luz incidente en el fototransistor. Para ello se deben seguir los siguientes pasos:
Activar el ADC. Esperar el tiempo de adquisición de datos (100us). Leer el valor analógico. Con el voltaje analógico medido se calcula el porcentaje de la luz incidente. Se copia el dato en la variable SEN_LIGHT_P.
SEN_BATTERY Variables de salida SEN_BATTERY_P
Porcentaje del nivel de batería
La función SEN_BATTERY captura el valor analógico que proviene de la batería16. Para ello se deben seguir los siguientes pasos:
Activar el ADC. Esperar el tiempo de adquisición de datos (100us). Leer el valor analógico. Con el voltaje analógico medido se calcula el porcentaje del nivel de batería. 16
El porcentaje puede diferir del dato proporcionado por MowayWorld puesto que hay diferencias en la lectura cuando la batería se está cargando o se está utilizando. www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 47 de 148
Se copia el dato en la variable SEN_BATTERY_P.
SEN_TEMPERATURE Variables de salida SEN_TEMPERATURE_C
Temperatura en ºC
La función SEN_TEMPERATURE captura el valor analógico dependiente de la temperatura que recoge el termistor17. Para ello se deben seguir los siguientes pasos:
Activar el ADC. Esperar el tiempo de adquisición de datos (100us). Leer el valor analógico. Con el voltaje analógico medido se calcula la temperatura en ºC. Se copia el dato en la variable SEN_TEMPERATURE_C.
SEN_MIC_ANALOG Variables de salida SEN_MIC
Intensidad con la que llega el sonido
La función SEN_MIC_ANALOG captura el valor analógico dependiente de la intensidad del sonido procedente del micrófono. Para ello se deben seguir los siguientes pasos:
Activar el ADC. Esperar el tiempo de adquisición de datos (100us). Leer el valor analógico. Con el voltaje analógico medido se calcula la intensidad de la señal de audio. Se copia el dato en la variable SEN_MIC.
SEN_MIC_DIG Variables de salida SEN_MIC
Indica si existe o no sonido
La función SEN_MIC indica si hay sonido o no. Para ello se deben seguir los siguientes pasos:
Se comprueba si se presenta alguna señal en el micrófono. 17
La temperatura indicada por este sensor difiere de la de fuera en unos 5ºC porque recoge la temperatura interna del robot. www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 48 de 148
Se copia el valor del receptor digital en la variable de salida SEN_MIC.
SEN_SPEAKER Variables de entrada SEN_SPEAKER_FREQ SEN_SPEAKER_TIME SEN_SPEAKER_ON_OFF
Frecuencia generadora del tono. Tiempo que dura el tono. Encender, apagar o encender un tiempo determinado
La función SEN_SPEAKER genera un tono de una frecuencia comprendida entre 250 Hz y 65 KHz. Dependiendo del valor de SEN_SPEAKER_ON_OFF esta función puede encender el speaker con una frecuencia determinada, apagarlo o encenderlo durante un intervalo de tiempo definido por SEN_SPEAKER_TIME (intervalos de 100ms). Para ello se deben seguir los siguientes pasos:
Activar el generador de PWM con un duty cycle de 50% y frecuencia indicada. Si la función es de tiempo, esperar el tiempo indicado por SEN_SPEAKER_TIME. Si la función es de tiempo apagar el módulo de PWM del microcontrolador. Tabla 28. Valores admitidos para SEN_SPEAKER_ON_OFF
Define SPEAKER_OFF SPEAKER_ON SPEAKER_TIME
Valor 0 1 2
Tabla 29. Equivalencia valor SEN_SPEAKER_FREQ y frecuencia aplicada al zumbador SEN_SPEAKER_FREQ
0 10 20 30 40 50 60 70 80 90 100 110 120 130 140
Frecuencia aplicada a zumbador Hz 0,0000000 5681,8181818 2976,1904762 2016,1290323 1524,3902439 1225,4901961 1024,5901639 880,2816901 771,6049383 686,8131868 618,8118812 563,0630631 516,5289256 477,0992366 443,2624113
www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 49 de 148
150 160 170 180 190 200 210 220 230 240 250 255
413,9072848 388,1987578 365,4970760 345,3038674 327,2251309 310,9452736 296,2085308 282,8054299 270,5627706 259,3360996 249,0039841 244,1406250
SEN_OBS_DIG Variables de entrada SEN_CHECK_OBS
Indica que sensor se quiere leer
Variables de salida SEN_OBS
Indica si existe o no objeto en el sensor deseado
Salida SEN_STATUS: SENOK DWRONG
Esta función indica si un obstáculo en la parte del sensor que se le indique a través de la variable SEN_CHECK_OBS. Para ello se han de seguir los siguientes pasos:
Se comprueba que sensor hay que mirar. Si no se corresponde con ningún valor válido de la variable se activa el flag DWRONG y la función termina. Antes de mandar el pulso de luz infrarroja asegurarse de que no exista ninguna fuente de ruido que interfiera. Se manda pulso de luz infrarroja para la detección del obstáculo. Si hay algún obstáculo la luz rebotará y esta señal será captada por el receptor infrarrojo. Se comprueba si se presenta alguna señal en los cuatro receptores IR en modo digital. Se copia el valor del receptor digital en la variable de salida. Se desactiva el LED infrarrojo. Se comprueba que no haya ninguna señal interferente. Si no se presenta ninguna señal interferente y el proceso se ejecuta sin problemas el flag SENOK es activado.
www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 50 de 148
Tabla 30. Valores de la variable de entrada SEN_CHECK_OBS
Define OBS_CENTER_L OBS_SIDE_L OBS_CENTER_R OBS_SIDE_R
Valor 0 1 2 3
SEN_OBS_ANALOG Variables de entrada SEN_CHECK_OBS
Indica que sensor se quiere leer
Variables de salida SEN_OBS
Indica el valor analógico del sensor
Salida SEN_STATUS: SENOK DWRONG
Esta función indica si un obstáculo en la parte del sensor que se le indique a través de la variable SEN_CHECK_OBS. Para ello se han de seguir los siguientes pasos:
Se comprueba que sensor hay que mirar. Si no se corresponde con ningún valor válido de la variable se activa el flag DWRONG y la función termina. Antes de mandar el pulso de luz infrarroja asegurarse de que no exista ninguna fuente de ruido que interfiera. Se manda pulso de luz infrarroja para la detección del obstáculo. Se activa el ADC. Se comprueba si se presenta alguna señal en los cuatro receptores IR. Se copia el valor del receptor analógico en las variables de salida. Cuanto mayor sea este valor más cerca se encontrará el obstáculo. Se desactiva LED infrarrojo. Se comprueba que no haya ninguna señal interferente. Si no se presenta señal interferente y el proceso se ejecuta sin problemas el flag SENOK es activado. Tabla 31. Valores de la variable de entrada SEN_CHECK_OBS
Define OBS_CENTER_L OBS_SIDE_L OBS_CENTER_R OBS_SIDE_R
Valor 0 1 2 3
www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 51 de 148
SEN_ACCE_XYZ_READ Variables de entrada SEN_CHECK_ACCE
Indica que eje se quiere leer
Variables de salida SEN_ACCE
Aceleración que sufre el robot en el eje indicado
Salida SEN_STATUS: SENOK DWRONG
La función SEN_ACCE_XYZ_READ devuelve la aceleración sufrida por el robot en los 3 ejes. El sensor presenta una resolución de ±0.0156G/bit. Esto es, 0 se corresponde a un valor de -2G y 255 a un valor de 2G.
Imagen 41. Posición de los ejes del robot
El microcontrolador se comunica con el sensor a través de la interface SPI. Se manda el comando para poner el sensor en modo “medida”. Se espera a que el sensor realice la medida Le pregunta el valor del eje requerido por el usuario El acelerómetro se pasa a modo “detección de golpes”.
Tabla 32. Valores de la variable de entrada SEN_CHECK_ACCE
Define ACCE_CHECK_X ACCE_CHECK_Y ACCE_CHECK_Z
Valor 0 1 2
SEN_ACCE_CHECK_TAP Variables de salida SEN_ACCE_TAP
Indica si se ha detectado uno o dos toques
Salida SEN_STATUS: SENOK DWRONG
El acelerómetro tiene la opción de detectar golpes o doble golpes.
www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 52 de 148
Bit7 Sin uso -
El microcontrolador se comunica con el sensor a través de la interface SPI. Le pregunta si ha habido interrupción por golpe. Se modifica el valor de SEN_ACCE_TAP. Bit6 Sin uso -
Bit5 Sin uso -
Bit4 Sin uso -
Bit3 Sin uso -
Bit2 Sin uso -
Bit1 Bit0 TAP_TAP TAP
Bit 7-2: Sin uso Bit 1: TAP_TAP: Muestra si se han detectado dos toque. 1 = Doble Toque detectado. 0 = Doble Toque no detectado. Bit 0: TAP: Muestra si se ha detectado un toque. 1 = Toque detectado. 0 = Toque no detectado.
SEN_LINE_DIG Variables de entrada SEN_CHECK_LINE
Indica que sensor se quiere leer
Variables de salida SEN_LINE
Indica el valor digital del sensor
Salida SEN_STATUS: SENOK DWRONG
La función SEN_LINE_DIG indica si los sensores están sobre una superficie oscura o no. Para ello se deben seguir los siguientes pasos:
Se comprueba que sensor hay que mirar. Si no se corresponde con ningún valor válido de la variable se activa el flag DWRONG y la función termina. Se manda pulso de luz infrarroja para la detección de la línea. Si se detecta, la luz rebotará y esta señal será captada por el receptor infrarrojo. Esperar el tiempo de adquisición de datos (900us). Se lee el sensor requerido. Se mueve el dato a la variable SEN_LINE. Si la superficie es oscura (la luz no se refleja) obtendremos un ‘1’ en la variable.
Tabla 33. Valores de la variable de entrada SEN_CHECK_LINE
Define LINE_L LINE_R
www.moway-robot.com
Valor 0 1
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 53 de 148
SEN_LINE_ANALOG Variables de entrada SEN_CHECK_LINE
Indica que sensor se quiere leer
Variables de salida SEN_LINE
Indica el valor analógico del sensor
Salida SEN_STATUS: SENOK DWRONG
La función SEN_LINE_ANALOG indica la luz que se ha reflejado en los optoacopladores18. Para ello se deben seguir los siguientes pasos:
Se comprueba que sensor hay que mirar. Si no se corresponde con ningún valor válido de la variable se activa el flag DWRONG y la función termina. Se manda pulso de luz infrarroja para la detección de la línea. Si se detecta, la luz rebotará y esta señal será captada por el receptor infrarrojo. Esperar el tiempo de adquisición de datos (900us). Se activa el ADC. Se lee el sensor requerido. Mover ese dato a la variable SEN_LINE. Cuanto más alto sea este valor más oscura será la superficie.
Tabla 34. Valores de la variable de entrada SEN_CHECK_LINE
Define LINE_L LINE_R
Valor 0 1
LED_BRAKE_ON Enciende el diodo LED de freno. LED_FRONT_ON Enciende el diodo LED frontal. LED_TOP_RED_ON Enciende el diodo LED superior rojo. LED_TOP_GREEN_ON Enciende el diodo LED superior verde. 18
El valor del sensor analógico variará de un sensor a otro debido a la tolerancia del componente electrónico. www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 54 de 148
LED_BRAKE _OFF Apaga el diodo LED de freno. LED_FRONT_OFF Apaga el diodo LED frontal. LED_TOP_RED_OFF Apaga el diodo LED superior rojo. LED_TOP_GREEN_OFF Apaga el diodo LED superior verde. LED_BRAKE_ON_OFF Parpadeo del diodo LED de ruptura. LED_FRONT_ON_OFF Parpadeo del diodo LED frontal. LED_TOP_RED_ON_OFF Parpadeo del diodo LED superior rojo. LED_TOP_GREEN_ON_OFF Parpadeo del diodo LED superior verde.
5.2.3 Librería motores mOway ensamblador Existen dos librerías en ensamblador que pueden ser incluidas en cualquier proyecto de mOway que permiten al usuario controlar el sistema motriz con gran facilidad. Ambas son idénticas salvo el hecho de que una de ellas tiene la posibilidad de reubicar tanto el código como las variables (utilizando proyectos del MPLAB IDE). Es importante saber que cada llamada a cualquier función de la librería utiliza tres niveles adicionales de la pila de llamadas. Esto es, antes de llamar a una de estas funciones debe de haber al menos cuatro niveles libres de la pila de llamadas para que no haya errores.
www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 55 de 148
5.2.3.1 Descripción La librería contiene una serie de funciones encargadas de mandar comandos por I2C al Sistema Motriz, que será el encargado de controlar los motores dejando libre de carga de trabajo al microcontrolador principal, pudiendo éste realizar otras tareas. La comunicación con el módulo motor se realiza mediante el protocolo I2C. El formato de las tramas I2C del Sistema Motriz se puede observar en las siguientes figuras. Cada una de estas tramas tiene una duración de 350us. S T A R T
_ W
MOT_DIR
MOT_ COMAND
T Y P E
R L
MOT_VEL
S E N
T_DIST_ANG
S T O P
Imagen 42. Formato de comandos: MOT_STR, MOT_CHA_VEL
S T A R T
_ W
MOT_DIR
MOT_ COMAND
T Y P E
R L
MOT_VEL
S E N
RAD/ CENWHEEL
T_DIST_ANG
Imagen 43. Formato de comandos: MOT_CUR, MOT_ROT
S T A R T
MOT_DIR
_ W
S T O P
COM_STOP/ RST_COM
Imagen 44. Formato de comandos: MOT_STOP, MOT_RST
S T A R T
MOT_DIR
R
MOT_STATUS_DATA_ 0
MOT_STATUS_DATA_ 1
S T O P
Imagen 45. Formato de comando: MOT_FDBCK
5.2.3.2 Variables MOT_STATUS Registro que indica el estado del comando. Bit7 Sin uso -
Bit6 Sin uso -
Bit5 Sin uso -
Bit4 Sin uso -
Bit3 Sin uso -
Bit2 Sin uso -
www.moway-robot.com
Bit1 Bit0 DMWRONG COMOK
S T O P
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 56 de 148
Bit 7-2:
Sin uso
Bit 1:
DMWRONG: Muestra si los datos son incorrectos. 1 = Datos incorrectos. 0 = Datos correctos.
Bit 0:
COMOK: Muestra si el comando ha sido enviado correctamente por I2C. 1 = Envío correcto. 0 = Envío incorrecto. MOT_CON Registro de control. En este registro se definen parámetros de los comandos.
Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Sin uso Sin uso Sin uso Sin uso Sin uso COMTYPE RL Bit 7-3:
Sin uso
Bit 2:
COMTYPE: Tipo de comando. 1 = Tiempo. 0 = Distancia o ángulo (en MOT_ROT).
Bit 1:
RL: Derecha o Izquierda 1 = Derecha. 0 = Izquierda.
Bit 0:
FWDBACK: Adelante o hacia atrás. 1 = Adelante. 0 = Atrás.
Bit0 FWDBACK
MOT_VEL Velocidad deseada en el comando. MOT_T_DIST_ANG Según el valor de COMTYPE y del comando, esta variable será el tiempo, distancia o el ángulo. MOT_CENWHEEL Rotación sobre el centro o sobre una de las ruedas del robot. MOT_RAD Radio para el comando MOT_CUR.
www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 57 de 148
MOT_RST_COM Tipo de reset que se desea. MOT_STATUS_COM Tipo de dato que se quiere leer del motor. MOT_STATUS_DATA_0-1 En estas dos variables se almacena el valor del dato requerido por la función MOT_FDBCK.
5.2.3.3 Funciones En la librería lib_mot_moway y lib_re_mot_moway existen una serie de funciones que están orientadas al control del sistema de motores de mOway. A continuación se dará una breve descripción de cada una de ellas. Tabla 35. Resumen de funciones en ensamblador de lib_mot_moway Nombre Entrada Retorno MOT_CONFIG MOT_STR
MOT_CHA_VEL
MOT_ROT
MOT_CUR
MOT_CHECK_END
MOT_VEL MOT_T_DIST MOT_CON FWDBACK COMTYPE MOT_VEL MOT_T_DIT
MOT_STATUS COMOK DWRONG
Descripción Configuración para la comunicación con los motores Comando para movimiento en línea recta
MOT_STATUS COMOK DWRONG
Comando para cambiar la velocidad de un motor
MOT_CON FWDBACK COMTYPE RL MOT_VEL MOT_CENWHEEL MOT_T_ANG
MOT_STATUS COMOK DWRONG
Comando para realizar la rotación del robot
MOT_CON FWDBACK COMTYPE RL MOT_VEL MOT_RAD MOT_T_DIST
MOT_STATUS COMOK DWRONG
Comando para realizar una curva
MOT_CON FWDBACK COMTYPE RL -
-
Función que espera hasta la finalización de comando
www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 58 de 148
-
MOT_STOP MOT_RST
MOT_RST_COM
MOT_FDBCK
STATUS_COM
MOT_STATUS COMOK DWRONG MOT_STATUS COMOK DWRONG MOT_STATUS_ DATA_0 MOT_STATUS_ DATA_1
Comando para detener el robot Comando para resetear las variables temporales de tiempo y distancia Comando para ver el estado de los motores
MOT_STATUS COMOK DWRONG
MOT_CONFIG Esta función configura las entradas y salidas para que el microcontrolador pueda comunicarse con el Sistema Motriz. Tabla 36. Conexiones PIC-motores
Pin PIC PORTE RE7 RE0 RE1
I/O
Sensor I Indica cuándo el motor termina el comando O SCL del protocolo I2C O SDA del protocolo I2C
El puerto RE7 nos indica la finalización de un comando. Este puerto tiene la etiqueta MOT_END en la librería. Ejemplo: ;Recto adelante al 100% de velocidad 10 segundos (100ms x 100) movlw .100 movwf MOT_VEL movlw .100 movwf MOT_T_DIST_ANG bsf MOT_CON,FWDBACK bsf MOT_CON,COMTYPE call MOT_STR ;Hasta que el comando no termine no se hace nada CHEQUEAR_FIN_DE_COMANDO btfss MOT_END goto CHEQUEAR_FIN_DE_COMANDO Para éste mismo propósito se puede utilizar la función MOT_CHECK_END.
www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 59 de 148
MOT_STR Entrada MOT_VEL MOT_CON, FWDBACK MOT_CON, COMTYPE MOT_T_DIST
Velocidad deseada Sentido de la marcha Tipo de comando El valor de Tiempo Distancia
0 1-FWD 1-TIME 0 0
100 0-BACK 0-DIST 255 255
Variables de salida FLAGS MOT_STATUS: COMOK y DWRONG
Comando para desplazamiento en línea recta. Es necesario especificar velocidad, sentido, tipo de comando y el tiempo o la distancia a recorrer. El tiempo tiene una resolución de 100ms y la distancia 1mm, y con un valor de 0 en MOT_T_DIST el comando se mantendrá hasta que no se especifique otra orden. Ejemplo: ;Recto adelante al 100% de velocidad 10 segundos (100ms x 100) movlw .100 movwf MOT_VEL movlw .100 movwf MOT_T_DIST_ANG bsf MOT_CON,FWDBACK bsf MOT_CON,COMTYPE call MOT_STR ;Recto hacia atrás al 15% de velocidad 100mm (1mm x 100) movlw .15 movwf MOT_VEL movlw .100 movwf MOT_T_DIST_ANG bcf MOT_CON,FWDBACK bcf MOT_CON,COMTYPE call MOT_STR
MOT_CHA_VEL Entrada MOT_VEL MOT_CON, FWDBACK MOT_CON, RL MOT_CON, COMTYPE MOT_T_DIST
Velocidad deseada Sentido de la marcha Izquierda o derecha Tipo de comando El valor de Tiempo Distancia
Variables de salida FLAGS MOT_STATUS: COMOK y DWRONG
www.moway-robot.com
0 1-FWD 1-RIGHT 1-TIME 0 0
100 0-BACK 0-LEFT 0-DIST 255 255
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 60 de 148
Comando para cambiar la velocidad a uno de los dos motores. Es necesario especificar velocidad, sentido, el motor, tipo de comando y el tiempo o la distancia a recorrer. El tiempo tiene una resolución de 100ms y la distancia 1mm, y con un valor de 0 en MOT_T_DIST el comando se mantendrá hasta que no se especifique otra orden.
Ejemplo: ;Cambiar velocidad (80% adelante) al motor derecho durante 10 segundos ;(100ms x 100) movlw .80 movwf MOT_VEL movlw .100 movwf MOT_T_DIST_ANG bsf MOT_CON,FWDBACK bsf MOT_CON,COMTYPE bsf MOT_CON,RL call MOT_CHA_VEL ;Cambiar velocidad (20% atrás) al motor izquierdo y hacer una distancia de 100 ;mm (1mm x 100) movlw .20 movwf MOT_VEL movlw .100 movwf MOT_T_DIST_ANG bcf MOT_CON,FWDBACK bcf MOT_CON,COMTYPE bcf MOT_CON,RL call MOT_CHA_VEL
MOT_ROT Entrada MOT_VEL MOT_CON, FWDBACK MOT_CENWHEEL MOT_CON, RL MOT_CON, COMTYPE MOT_T_ANG
Velocidad deseada Sentido de la marcha Sobre centro o rueda Derecha o izquierda Tipo de comando El valor de Tiempo Ángulo
0 1-FWD 0x01-CE 1-RIGHT 1-TIME 0 0
100 0-BACK 0x00-WH 0-LEFT 0-ANG 255 100
Variables de salida FLAGS MOT_STATUS: COMOK y DWRONG
Comando para hacer rotar a mOway. Es necesario especificar velocidad, sentido, tipo de rotación, el motor, tipo de comando y el tiempo o el ángulo a rotar. El tiempo tiene una resolución de 100ms, y con un valor de 0 en MOT_T_ANG el comando se mantendrá hasta que no se especifique otra orden. www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 61 de 148
En cuanto al ángulo, las siguientes ecuaciones muestran como calcular el valor de MOT_T_ANG teniendo en cuenta el ángulo de rotación deseado. Si la rotación se produce sobre una de las ruedas se obtiene más resolución. Por otro lado, hay que tener en cuenta la inercia mecánica por lo que se aconseja reducir la velocidad para conseguir una mayor precisión e iniciar el movimiento con el robot parado. Ecuación 1. MOT_T_ANG en rotación sobre el centro
Ángulo º3.33 MOT _ T _ ANG round 12 º Ejemplo: ;Rotación respecto al centro a la derecha al 80% de velocidad durante 10 segundos ;(100ms x 100) movlw .80 movwf MOT_VEL movlw .100 movwf MOT_T_DIST_ANG movlw 0x01 movwf MOT_CENWHEEL bsf MOT_CON,FWDBACK bsf MOT_CON,COMTYPE bsf MOT_CON,RL call MOT_ROT ;Rotación respecto la rueda izquierda adelante al 20% de velocidad 180º movlw .20 movwf MOT_VEL movlw .50 movwf MOT_T_DIST_ANG movlw 0x00 movwf MOT_CENWHEEL bsf MOT_CON,FWDBACK bcf MOT_CON,COMTYPE bcf MOT_CON,RL call MOT_ROT
MOT_CUR Entrada MOT_VEL MOT_CON, FWDBACK MOT_RAD MOT_CON, RL MOT_CON, COMTYPE MOT_T_DIST
Velocidad deseada Sentido de la marcha Radio Derecha o izquierda Tipo de comando El valor de Tiempo Distancia
www.moway-robot.com
0 1-FWD 0 1-RIGHT 1-TIME 0 0
100 0-BACK 100 0-LEFT 0-DIST 255 255
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 62 de 148
Variables de salida FLAGS MOT_STATUS: COMOK y DWRONG
Comando para dar una curva. Es necesario especificar velocidad, sentido, radio, dirección, tipo de comando y el tiempo o la distancia a recorrer. El radio es la velocidad que se restará o se sumará a la velocidad global del robot. Esto es, si la velocidad especificada es 50 y el radio 10, uno de los motores tendrá 60 de velocidad y el otro 40. Por lo tanto el radio tiene que cumplir la siguiente restricción: Ecuación 2. Condición 1 MOT_RAD
0 MOT _ VEL MOT _ RAD 100
Ecuación 3. Condición 2 MOT_RAD
0 MOT _ VEL MOT _ RAD 100
El tiempo tiene una resolución de 100ms y la distancia 1mm, y con un valor de 0 en MOT_T_ANG el comando se mantendrá hasta que no se especifique otra orden. El motor cuenta la distancia recorrida por el motor que está en el exterior de la curva. Ejemplo: ;Curva hacia delante a la derecha al 50% con un radio de 10 durante 10 segundos ;(100ms x 100) ;VEL_I=60 ;VEL_D=40 movlw .50 movwf MOT_VEL movlw .100 movwf MOT_T_DIST_ANG movlw .10 movwf MOT_RAD bsf MOT_CON,FWDBACK bsf MOT_CON,COMTYPE bsf MOT_CON,RL call MOT_CUR ;Curva hacia atrás a la izquierda al 80% con un radio de 15 durante 100mm ;(1mm x 100) ;VEL_I=95 ;VEL_D=65 movlw .80 movwf MOT_VEL movlw .100 movwf MOT_T_DIST_ANG movlw .15 movwf MOT_RAD www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 63 de 148
bcf bcf bcf call
MOT_CON,FWDBACK MOT_CON,COMTYPE MOT_CON,RL MOT_CUR
MOT_CHECK_END Comando para esperar a la finalización del comando. Una vez mandado el comando el programa continúa con su ejecución. Si al usuario le interesa esperar hasta que el robot termine un comando se puede llamar a esta función donde no finalizará hasta que el comando termine. Ejemplo: ;Esperar fin de comando call MOT_CHECK_END
MOT_STOP Variables de salida FLAGS MOT_STATUS: COMOK
Comando para parar el robot. Ejemplo: ;Parar mOway call MOT_STOP
MOT_RST Entrada MOT_RST_COM
El parámetro que se desea resetear
RST_T RST_DIST RST_KM
Variables de salida FLAGS MOT_STATUS: COMOK
Resetea las variables temporales internas de tiempo, distancia y cuentakilómetros del motor. Ejemplo:
www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 64 de 148
;Reseteo del tiempo transcurrido movlw RST_T movwf MOT_RST_COM call MOT_RST ;Reseteo de la distancia recorrida movlw RST_D movwf MOT_RST_COM call MOT_RST
MOT_FDBCK Entrada STATUS_COM
El parámetro que se desea consultar
STATUS_T STATUS_A STATUS_V_R STATUS_V_L STATUS_D_R STATUS_D_L STATUS_KM
Variables de salida MOT_STATUS_DATA_0
Primer byte de respuesta (tiempo, ángulo, velocidad, distancia y primer byte del cuentakilómetros) MOT_STATUS_DATA_1 Segundo byte de respuesta (segundo byte del cuentakilómetros) FLAGS MOT_STATUS: COMOK y DWRONG
Comando para conocer diversos parámetros del sistema motriz. Podemos consultar el tiempo transcurrido, el ángulo (sólo en el comando MOT_ROT), velocidad de los dos motores, distancia recorrida por cada motor y el cuentakilómetros. Esta función actualiza dos variables donde se guardará la información requerida. Todas las peticiones menos STATUS_KM devuelven un byte (MOT_STATUS_DATA_0) manteniendo MOT_STATUS_DATA_1 al valor 0xFF. Estas dos variables se actualizan cada vez que se manda un comando nuevo (ej. Se puede pedir el tiempo transcurrido desde el último comando). Cuando se utilice STATUS_KM hay que tener en cuenta los dos bytes. Este comando resulta muy útil para calcular la longitud de una línea mientras el robot la sigue. Tabla 37. Resolución de los datos del motor
Parámetro STATUS_T STATUS_A STATUS_V_R STATUS_V_L STATUS_D_R STATUS_D_L STATUS_KM
Resolución 100ms/bit 3.6º/bit 1%/bit 1%/bit 1mm/bit 1mm/bit 1mm/bit
www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 65 de 148
Ejemplo: ;Petición de tiempo transcurrido desde el último comando movlw STATUS_T movwf MOT_STATUS_COM call MOT_FDBCK ;Ej. Salida: ;MOT_STATUS_DATA_0=0x7F => Han transcurrido 12.7 segundos desde el ;último comando ;MOT_STATUS_DATA_1=0xFF; => Dato no válido ;Petición de distancia recorrida por el motor derecho desde el último comando movlw STATUS_KM movwf MOT_STATUS_COM byte 1 byte 0 call MOT_FDBCK 0x01 0x08 ;Ej. Salida: 0000 0001 0000 0100 ;MOT_STATUS_DATA_0=0x08 264 ;MOT_STATUS_DATA_1=0x01; Distancia: 264*1mm 264mm
5.2.4 Librería para el módulo BZI-RF2GH4 en ensamblador 5.2.4.1 Descripción Con esta librería es posible realizar fácilmente una comunicación entre el robot y el módulo BZI-RF2GH4. Dado que todas las funciones utilizan el protocolo SPI, es necesario habilitar el hardware del microcontrolador para este propósito. Para ello basta con añadir unas líneas de código en la configuración inicial del programa.
5.2.4.2 Variables RF_STATUS Esta variable de solo lectura informa de la situación de la comunicación por el módulo de radio. Bit7 Sin uso -
Bit6 Bit5 CONFIGOK OFFOK
Bit4 ONOK
Bit3 Bit2 Bit1 RCVNW RCVOK ACK
www.moway-robot.com
Bit0 SNDOK
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 66 de 148
Bit 7:
Sin uso
Bit 6:
CONFIGOK: Muestra si el módulo se ha configurado correctamente. 1 = El módulo se ha configurado correctamente. 0 = Módulo desconfigurado. Imposibilidad de comunicación con el módulo por ausencia o conexión eléctrica incorrecta.
Bit 5:
OFFOK: Muestra si el módulo se ha apagado correctamente. 1 = El módulo se ha apagado correctamente. 0 = No se ha apagado correctamente. Imposibilidad de comunicación con el módulo por ausencia o conexión eléctrica incorrecta.
Bit 4:
ONOK: Muestra si el módulo se ha encendido correctamente. 1 = El módulo se ha encendido correctamente. 0 = El módulo no está activo. Imposibilidad de comunicación con el módulo por ausencia o conexión eléctrica incorrecta.
Bit 3:
RCVNW: Muestra si todavía quedan datos por leer. 1 = Quedan tramas de datos por leer en la pila del módulo de radio. 0 = Tras la última lectura, la pila de datos del módulo quedó vacía. No hay mensajes en espera.
Bit 2:
RCVOK: Informa que se han recibido datos correctamente y están accesibles para ser tratados. 1 = Recepción correcta. 0 = No se han recibido datos o la información recibida es corrupta.
Bit 1:
ACK: Muestra si se ha recibido el ACK (confirmación) del receptor tras una transmisión. 1 = El receptor ha confirmado que ha recibido los datos correctamente. 0 = No se ha recibido la confirmación del receptor. Puede ser causa de que no haya recibido la señal o de que tenga la pila llena y no pueda almacenar más mensajes.
Bit 0:
SNDOK: Muestra si el último envío de datos se ha realizado. 1 = El módulo de radio ha enviado los datos. Este bit no indica que alguien lo haya escuchado. 0 = No ha sido posible enviar los datos. Puede ser debido a un fallo en la comunicación con el módulo de radio
RF_DATA_OUT_0, RF_DATA_OUT _1,… RF_DATA_OUT _7 Este grupo de variables consta de 8 bytes. En cada transmisión se envía el contenido de los 8 bytes.
www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 67 de 148
RF_DATA_IN_0, RF_DATA_IN _1,… RF_DATA_IN _7 Este grupo de variables consta de 8 bytes. En cada recepción se actualizan estos 8 bytes. RF_DIR_OUT Esta variable es de un solo byte. Indica la dirección del dispositivo que se desea mandar el dato. RF_DIR_IN Esta variable es de un solo byte. Indica la dirección de los datos recibidos. RF_DIR Esta variable es de un solo byte. Indica la dirección propia con la que se configura el módulo.
5.2.4.3 Funciones La librería consta de nueve funciones que facilitarán bastante el trabajo a la hora de desarrollar una aplicación de comunicación con los módulos BZI-RF2GH4. A continuación se dará una breve descripción de cada una de ellas. Tabla 38. Resumen de las funciones en ensamblador.
Funciones para el módulo BZI-RF2GH4 Configura las entradas y salidas del microcontrolador19 así RF_CONFIG como parámetros del módulo de radio. Configura las entradas y salidas del microcontrolador 20 así RF_CONFIG_SPI como los parámetros necesarios para utilizar el bus SPI. Activa el módulo de radiofrecuencia en modo escucha. RF_ON Desactiva el módulo de radiofrecuencia y lo deja en modo de RF_OFF bajo consumo. Envía una trama de datos (8 Bytes) a la dirección indicada. RF_SEND Comprueba si se ha producido una recepción y de ser así, RF_RECEIVE recoge la trama. Realiza la misma función que RF_RECEIVE solo que por RF_RECEIVE_INT interrupción. Esta rutina habilita en el microcontrolador la interrupción RF_INT_EN externa para el módulo de radio.
19 20
El usuario puede cambiar estos pines modificando la librería donde se define el patillaje Ídem. www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 68 de 148
RF_CONFIG_SPI La velocidad del SPI no debe superar los 8 Mhz. En la función se configuran los diferentes parámetros del módulo SPI y los pines del PIC. PIN RF SCK SDI SDO
PIN PIC RC3 RC5 RC4
Tabla 39. Configuración SPI puertos PIC
RF_CONFIG Variables de entrada RF_DIR RF_CHN
Dirección del dispositivo. Debe ser un valor entre 0x01 y 0xFE. Canal a utilizar en la comunicación. Debe ser un valor entre 0x00 y 0x7F (128 canales).
Variables de salida FLAGS: CONFIGOK
Esta función configura el transceptor habilitando su propia dirección de escucha y la dirección de ‘broadcast’. A su vez configura otros parámetros como pines del PIC, el canal, la velocidad de transmisión, la potencia de emisión, la longitud de la dirección, la longitud del código CRC, etc. PIN RF IRQ CSN CE
PIN PIC RB0 RF2 RH4
Tabla 40. Configuración módulo RF puertos PIC
El canal debe ser común a todos los módulos que van a participar en la comunicación. El usuario puede elegir cualquier canal de los 128 disponibles. Sin embargo, si en el entorno existe más de una comunicación entre módulos en diferentes canales, hay que dejar un espaciamiento de 2 entre los canales a utilizar para evitar interferencias dejando así 32 canales útiles. Otra cuestión a tener en cuenta es la existencia de otras tecnologías que utilizan la banda ISM 2.4GHz (Wifi, Bluetooth,etc.) y que también pueden causar interferencias en alguno de los canales.
www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 69 de 148
Canal 0x01
Canal 0x04
……...
2.4Ghz
2.401Ghz
2.402Ghz
2.403Ghz
2.404Ghz
2.405Ghz
2.525Ghz
Imagen 46 Canales RF
La dirección que se asigna a cada dispositivo debe ser unívoca dentro de cada canal. Si la comunicación SPI del PIC está mal configurada, el conexionado se ha realizado incorrectamente o en ausencia del módulo, el bit CONFIGOK de RF_STATUS permanecerá a 0.
RF_ON Variables de salida FLAGS: ONOK
Esta rutina activa el módulo de radio en modo escucha para poder recibir datos y/o realizar envíos de datos. Es importante tener en cuenta que tras la llamada a esta rutina el módulo necesita 2,5ms para estar listo. Si la comunicación SPI del PIC está mal configurada, el conexionado se ha realizado incorrectamente o en ausencia del módulo, el bit ONOK de RF_STATUS permanecerá a 0. Ejemplo: ;--[Rutina de configuración sin interrupción y activación]----;Configurar módulos SPI del PIC call RF_CONFIG_SPI ;Configurar módulo RF (canal y dirección propias) movlw 0x01 ;Dirección propia movwf RF_DIR movlw movwf
0x40 RF_CHN
;Canal
call btfss nop
RF_CONFIG RF_STATUS,CONFIGOK ;Módulo no configurado
www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 70 de 148
;Activar el módulo RF call RF_ON btfss RF_STATUS,ONOK nop ;Módulo no inicializado ;-----------------------------------------------------------------------------
RF_OFF Variables de salida FLAGS: OFFOK
Esta rutina desactiva el módulo de radio dejándolo en modo de bajo consumo. No borra la configuración establecida. Si la comunicación SPI del PIC está mal configurada, el conexionado se ha realizado incorrectamente o en ausencia del módulo, el bit OFFOK de RF_STATUS permanecerá a 0. RF_SEND Variables de entrada RF_DIR_OUT RF_DATA_OUT_0 – RF_DATA_OUT_7
Dirección a la que se quiere enviar los datos (1 byte). Variables que van a ser transmitidas (8 bytes).
Variables de salida FLAGS: SNDOK y ACK
Esta función envía 8 Bytes de datos a la dirección indicada informando de la correcta recepción en el destinatario. Tras su ejecución el dispositivo volverá al modo de escucha. Si un mensaje es enviado a la dirección 0x00, este será recibido por todos los módulos que se encuentren en el mismo canal. Se debe tomar en cuenta que el módulo acepta el primer ACK que recibe, por lo tanto no tendremos la certeza de la llegada del dato a todos los dispositivos. Ejemplo: ;---------------------[Rutina de envío de datos]-----------------------;Preparación de la dirección del receptor ;y de los datos. movlw movwf
0x02 RF_DIR_OUT
;Dirección del receptor
clrf
RF_DATA_OUT_0
;Datos a enviar
www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 71 de 148
clrf clrf clrf clrf clrf clrf clrf
RF_DATA_OUT_1 RF_DATA_OUT_2 RF_DATA_OUT_3 RF_DATA_OUT_4 RF_DATA_OUT_5 RF_DATA_OUT_6 RF_DATA_OUT_7
call RF_SEND ;Enviar trama btfss RF_STATUS,SNDOK nop ;No enviado btfss RF_STATUS,ACK nop ;No ACK ;-----------------------------------------------------------------------------
RF_RECEIVE Variables de salida RF_DIR_IN RF_DATA_IN_0 – RF_DATA_IN_7 RCVOK y RCVNW
Dirección de quien ha enviado la trama Trama recibida desde la dirección indicada.
Esta rutina se encarga de comprobar si se ha producido una recepción y de ser así, devuelve los datos recibidos. Asimismo, informa si quedan datos sin leer en la FIFO de recepción del módulo. Cuando se reciba una trama se debe hacer una comprobación del bit RCVNW de la variable RF_STATUS y si está activo se debe llamar a la función RF_RECEIVE de nuevo tras tratar los datos. El transceptor tiene una pila de tres niveles, por lo que si no se llama a la función recibir antes de que se llene la pila, el dispositivo no podrá recibir más datos. Al no utilizar interrupciones, la probabilidad de pérdida de paquetes, con tráfico elevado, es moderada. Es aconsejable utilizarla sólo en entornos con pocos dispositivos y/o poco tráfico de datos. También se puede solucionar este problema haciendo que los emisores reenvíen la misma trama hasta que la comunicación haya sido correcta, pero en entornos con mucho tráfico las colisiones crecen exponencialmente aumentando considerablemente los tiempos de envío. Ejemplo: ;----- Rutina de recepción de datos sin interrupción]---------------RECIBIR call RF_RECEIVE btfsc RF_STATUS,RCVOK nop ;Tratar datos www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 72 de 148
btfsc RF_STATUS,RCVNW goto RECIBIR ;-----------------------------------------------------------------------------
RF_RECEIVE_INT Variables de salida RF_DIR_IN RF_DATA_IN_0 – RF_DATA_IN_7 RCVOK, RCVNW
Dirección de quien ha enviado la trama Trama recibida desde la dirección indicada.
Es la rutina óptima de recepción. Es una rutina prácticamente igual a RF_RECEIVE con la diferencia que esta funciona por interrupción. Por ello debe ubicarse dentro del código de la interrupción y haber configurado las interrupciones anteriormente (RF_INTER_EN). Se encarga de comprobar si se ha producido una interrupción externa (RB0) y si es así, limpia el flag de interrupción. La probabilidad de pérdida de paquetes es mínima. Aún así conviene que los emisores reenvíen si el flag de envío no se activa. Ejemplo: ;--------- -[Rutina de recepción de datos con interrupción]--------LEER_MAS_DATOS call RF_RECEIVE_INT btfsc RF_STATUS,RCVOK nop ;Tratar datos btfsc RF_STATUS,RCVNW goto LEER_MAS_DATOS goto SALIR_INTERRUPCIONES ;-----------------------------------------------------------------------------
RF_INT_EN Esta rutina se encarga de habilitar la interrupción externa del microcontrolador (RB0) que utiliza el módulo de RF en la recepción de datos. Para ello se configura como entrada el pin RB0. Aunque se puede manejar el módulo sin interrupciones no se garantiza el mínimo tiempo de respuesta. ;--[Rutina de configuración con interrupción y activación]----;Habilitar interrupciones call RF_INT_EN www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 73 de 148
;Configurar módulos SPI del PIC call RF_CONFIG_SPI ;Configurar módulo RF (canal y dirección propias) movlw 0x01 ;Dirección propia movwf RF_DIR movlw movwf
0x40 RF_CHN
;Canal
call btfss nop
RF_CONFIG RF_STATUS,CONFIGOK ;Módulo no configurado
;Activar el módulo RF call RF_ON btfss RF_STATUS,ONOK nop ;Módulo no inicializado ;-------------------------------------------------------------------------
www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 74 de 148
5.2.4.4 Diagrama de flujo para envío y recepción de datos Interrupción ext
Definir RF_DIR
IRQ=1
RF_RECEIVE
RF_RECEIVE _INT Definir RF_DATA
IRQ=0
RCVOK
RCVOK RF_SEND
1
SNDOK
0
Envio no realizado
0
ACK no recibido
1
1
Tratar datos
0
1
Tratar datos
0
1
RCVNW ACK
1
0
Envio realizado y AKC recibido
Salir interrupción
Diagrama 1. Envio de datos en ensablador
Diagrama 2. Recepción con interrupción en ensamblador
www.moway-robot.com
RCVNW
0
Salir recepción
Diagrama 3. Recepción sin interrupción en ensamblador
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 75 de 148
5.2.5 Librería para el módulo Moway Camera Board en ensamblador 5.2.5.1 Descripción Con esta librería es posible activar la cámara de mOway y elegir el canal de transmisión de la misma, a través de comandos SPI. Para poder utilizar el módulo BZI-RF2GH4 y el módulo de cámara a la vez, se ha diseñado la electrónica para que el microcontrolador sólo pueda comunicarse con uno de los módulos, evitando cortocircuitos. El módulo de cámara se habilita con un ‘1’ en el pin CS del módulo, quedando el módulo BZI-RF2GH4 deshabilitado automáticamente. El módulo BZI-RF2GH4 se habilita con un ‘0’ en el pin CSN, quedando el módulo de cámara deshabilitado automáticamente.
5.2.5.2 Variables Las siguientes variables ocupan un byte. COMMAND_CAM Esta variable contiene el tipo de comando que se enviará al controlador de la cámara. COM_WR si el comando es de escritura y COM_RD si es de lectura. Las funciones de esta librería sólo envían comandos de escritura (activar o desactivar cámara y selección de canal). ADDRESS_CAM Esta variable contiene la dirección del registro del controlador de la cámara a leer o escribir. Para configurar los puertos de entrada/salida del controlador de la cámara, se asignará IODIR_ADD. Para cambiar el estado de los puertos de salida, se asignará OLAT_ADD. DATA_CAM Esta variable contiene los datos a enviar al registro del controlador de la cámara especificado en la variable ADDRESS_CAM. CAM_STAT Esta variable indica el estado de la cámara. Si está encendida su valor es ‘1’, si está apagada su valor es ‘0’. CAM_CHANNEL Esta variable define el canal de transmisión de la cámara. www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 76 de 148
5.2.5.3 Funciones La librería incluye las funciones necesarias para manejar el módulo de cámara. A continuación se dará una breve descripción de cada una de ellas. Tabla 41. Resumen de las funciones en ensamblador.
Funciones para el módulo Moway Camera Board Configura las entradas y salidas SPI del microcontrolador, así CAM_CONFIG como el puerto del controlador de la cámara. Activa la cámara CAM_ON Desactiva la cámara CAM_OFF Selecciona el canal por el que va a transmitir la cámara al CAM_CHN_SEL receptor de vídeo. Envía un comando (tipo de comando, registro y datos) al CAM_SEND_COM controlador de la cámara CAM_SPI_WRITE Envía un byte por SPI.
CAM_CONFIG En la función se configuran los diferentes parámetros del módulo SPI y los pines del PIC. También configura el puerto de entradas/salidas del controlador de la cámara. Nota: la velocidad del SPI no debe superar los 8MHz. PIN SPI
PIN PIC
SCK RC3 SDI RC5 SDO RC4 IRQ RB0 CSN RF2 CE RH4 Tabla 42. Configuración SPI puertos PIC
CAM_SEND_COM Esta rutina envía un comando por SPI al controlador de la cámara. El formato del comando consiste en tres bytes que especifican el tipo de comando (lectura o escritura), el registro a leer o escribir, y los datos a escribir en dicho registro. COMANDOS COMMAND_CAM ADDRESS_CAM
COM_WR para escribir registro COM_RD para leer registro IODIR_ADD para configurar entradas/salidas del puerto del controlador de la cámara. OLAT_ADD para cambiar el estado de las salidas del puerto del controlador de la cámara
www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 77 de 148
DATA_CAM
Datos a escribir en el registro especificado en ADDRESS_CAM
CAM_ON Esta rutina envía por SPI el comando de activación de la cámara al controlador. Es un comando de escritura en el registro de las salidas del puerto del controlador. Los tres bytes a enviar son: BYTES COMMAND_CAM ADDRESS_CAM DATA_CAM
COM_WR OLAT_ADD 0x22
CAM_OFF Esta rutina envía por SPI el comando de desactivación de la cámara al controlador. Es un comando de escritura en el registro de las salidas del puerto del controlador. Los tres bytes a enviar son: BYTES COMMAND_CAM ADDRESS_CAM DATA_CAM
COM_WR OLAT_ADD 0x00
CAM_CHN_SEL Esta rutina envía por SPI el comando de cambio de canal de transmisión al controlador. Es un comando de escritura en el registro de configuración de entrada/salida del puerto del controlador. Variables de entrada CAM_CHANNEL
Canal en el que transmitirá la cámara. Debe ser un valor entre 1 y 4.
BYTES COMMAND_CAM ADDRESS_CAM DATA_CAM
COM_WR IODIR_ADD Canal 1: 0xD8 Canal 2: 0xD4 Canal 3: 0xCC Canal 4: 0xDC
www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 78 de 148
Ejemplo de activación de la cámara: ; Configuración de la cámara call CAM_CONFIG ; Se selecciona el canal 1 movlw .1 movwf CAM_CHANNEL call CAM_CHN_SEL ; Encender cámara call CAM_ON
CAM_SPI_WRITE Realiza las operaciones de lectura y escritura del puerto SPI del microcontrolador en una sola función. Primero envía un byte al puerto SPI del microcontrolador. Después lee el buffer SPI del microcontrolador si se ha recibido algún dato. Variables de entrada BYTE_OUT
Byte a enviar por SPI
Variables de salida BYTE_IN
Byte leído por SPI
www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 79 de 148
6. Programación C C18, de MPLAB, es un compilador que se sirve para la familia de microcontrolador PIC18. Existe una evaluación de este compilador que se puede descargar gratuitamente desde la página web de Microchip. En la web de mOway y en el pack de instalación encontrará librerías para el manejo de los sensores, motores y módulo RF escritas para el compilador. La gran ventaja que tiene es que el lenguaje que compila es C. El manejo de variables numéricas (char, int, etc.) y de estructuras de control de flujo (if, for, etc.) es muy sencillo y contienen gran cantidad de funciones pre-compiladas que facilitan enormemente la tarea de programación (I2C, SPI). Sin embargo, los programas generados son más grandes en cuanto a tamaño que en ensamblador. En resumen: Muy interesante para comenzar a trabajar con mOway rápidamente. Muy interesante para realizar tareas sencillas o de complejidad media. No recomendable si el tiempo de respuesta es crítico.
6.1 Creación de un proyecto Para crear el primer proyecto utilizaremos el Project Wizard de MPLAB IDE que permite crear proyectos rápidamente. Antes de empezar con la creación del proyecto, el usuario tiene que tener instalado todos los elementos del compilador C18. Estos elementos se integran a la hora de la instalación con MPLAB. Hay que destacar que el ejemplo ha sido creado con la versión 8.4 de MPLAB.
Imagen 47. Project Wizard
www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 80 de 148
1. El primer paso consiste en elegir el PIC instalado en mOway: PIC18F86J50.
Imagen 48. Selección del PIC
2. A continuación se elige la herramienta MPLAB C18 C Compiler.
Imagen 49. Selección de herramienta
www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 81 de 148
3. En el paso tres se debe indicar la ubicación del proyecto a crear.
Imagen 50. Elección de carpeta
4. En el siguiente paso se añaden al proyecto las librerías de mOway que controlan diferentes aspectos del robot. Esas librerías deben ser copiadas (manualmente o indicándolo en el Wizard) en la carpeta del proyecto sino MPLAB utilizará las librerías elegidas en la ubicación elegida.
Imagen 51. Elección de librerías mOway con copia
www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 82 de 148
5. Siguiendo estos pasos el proyecto se creará, pero faltará todavía la creación del fichero .C donde se inserta el código fuente.
Imagen 52. Finalización Wizard
6. El siguiente paso es abrir el proyecto y crear un nuevo archivo (New File) guardándolo en la misma carpeta del proyecto como Main.c. Éste será nuestro fichero fuente.
Imagen 53. Creación de .c
www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 83 de 148
7. Se añade el fichero fuente al proyecto accediendo a Project/Add Files to Project… Del mismo modo se añade también el script linker de mOway. Este fichero indica al LINKER donde puede meter el programa en la memoria. Este script está disponible en el pack de mOway y en los proyectos ejemplo.
Imagen 54. Proyecto con .C
6.2 Primer programa en C18 Para hacer el primer programa es necesario haber creado un proyecto (capítulo anterior). Este primer programa básico hará que mOway evite los obstáculos. Es necesario para realizar un proyecto redefinir los vectores de reset e interrupción. 1. Añadir redefinición de vectores. Este código es necesario para que los programas se graben correctamente en la memoria de programa del robot.
www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 84 de 148
Imagen 55. Header de proyecto en C18
2. Se añade la función SEN_CONFIG habilitar al PIC en el uso de los sensores. 3. Se añade el parpadeo de uno de los LEDs. 4. Probar el programa y comprobar que se enciende el LED verde. La grabación se realiza mediante MowayWorld (Grabar fichero .hex).
www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 85 de 148
Imagen 56. Primer programa: configuración y parpadeo de led
5. Para detectar obstáculos se llama a la función SEN_OBS_DIG() con el parámetro OBS_CENTER_L para indicarle que chequee el sensor central izquierdo. 6. Si encuentra obstáculo enciende los LED delantero. 7. Probar el programa y comprobar que los LED delantero se encienden cuando detectan un obstáculo.
www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 86 de 148
Imagen 57. Primer programa: detección de obstáculo
8. Añadimos movimiento al robot: comando recto indefinidamente hasta que encuentra un obstáculo. 9. Cuando encuentra obstáculo se manda un comando para que realice una rotación de 180º. El robot esperará hasta que el comando termine y continuará en un movimiento recto.
www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 87 de 148
Imagen 58. Primer programa: movimiento con detección
Este proyecto se suministra en el pack de mOway.
6.3 Librerías 6.3.2 Librería sensores mOway en C para C18 Esta librería en C18 puede ser incluida en cualquier proyecto de mOway que permite al usuario controlar los sensores.
6.3.2.1 Descripción La librería contiene una serie de funciones encargadas de leer los datos que proporcionan los sensores del robot. Ellas son las encargadas de configurar los puertos de entrada y salida adecuadamente, el ADC del microcontrolador y los indicadores luminosos.
www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 88 de 148
6.3.2.2 Funciones En la librería lib_sen_moway existen una serie de funciones que están orientadas al control de los sensores y de los diodos LED de mOway. Tabla 43. Resumen de funciones en C Nombre
Constantes entrada
void SEN_CONFIGURAR(void) unsigned char SEN_LIGHT(void) unsigned char SEN_BATTERY(void) unsigned char SEN_TEMPERATURE (void) unsigned char SEN_MIC_ANALOG (void) unsigned char SEN_MIC_DIG (void) unsigned char SEN_SPEAKER(unsigned unsigned char, unsigned char)
char,
unsigned char SEN_ACCE_XYZ_READ(unsigned char) unsigned char SEN_ACCE_CHECK_TAP(void) unsigned char SEN_OBS_DIG(unsigned char)
unsigned char SEN_OBS_ANALOG(unsigned char)
unsigned char SEN_LINE_DIG(unsigned char) unsigned char SEN_LINE_ANALOG (unsigned char) void LED_FRONT_ON(void) void LED_BRAKE_ON(void) void LED_TOP_RED_ON(void) void LED_TOP_GREEN_ON(void) void LED_FRONT _OFF(void) void LED_BRAKE_OFF(void) void LED_TOP_RED_OFF(void) void LED_TOP_GREEN_OFF(void) void LED_FRONT _ON_OFF(void) void LED_BRAKE_ON_OFF(void) void LED_TOP_RED_ON_OFF(void) void LED_TOP_GREEN_ON_OFF(void)
Descripción
-
Configura para utilizar los sensores
-
Lee el valor del sensor de luz
-
Lee el porcentaje de la batería
-
Lee la temperatura del interior del robot
-
Lee el valor analógico del micrófono
-
Lee el valor digital del micrófono
SPEAKER_OFF SPEAKER_ON SPEAKER_TIME ACCE_CHECK_X ACCE_CHECK_Y ACCE_CHECK_Z -
Controla el speaker.
OBS_SIDE_L OBS_CENTER_L OBS_CENTER_R OBS_SIDE_R OBS_SIDE_L OBS_CENTER_L OBS_CENTER_R OBS_SIDE_R LINE_R LINE_L LINE_R LINE_L -
Detecta la presencia de obstáculos
Indica las aceleraciones que sufre el robot
Comprueba si ha habido golpe
Detecta distancia a obstáculos
Detecta zona oscura (línea negra) Detecta tonalidades en la superficie Encendido LED frontal
-
Encendido LED de freno
-
Encendido LED superior rojo
-
Encendido LED superior verde
-
Apagado LED frontal
-
Apagado LED de freno
-
Apagado LED superior rojo
-
Apagado LED superior verde
-
Parpadeo LED frontal
-
Parpadeo LED de freno
-
Parpadeo LED superior rojo
-
Parpadeo LED superior verde
A continuación se dará una breve descripción de cada una de ellas. void SEN_CONFIG(void)
Esta función configura las entradas y salidas para poder manejar los sensores e inicializa las variables.
www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 89 de 148
Tabla 44. Conexiones PIC-sensores
Pin PIC PORTA RA0 RA1 RA2 RA3 RA5 PORTB RB1 RB2 RB3 RB5 RB6 PORTC RC7 PORTD RD1 RD4 RD5 RD6 RD7 PORTE RE5 PORTF RF5 RF6 PORTH RH5 RH6 RH7 PORTJ RJ6 RJ7
I/O
Sensor
I I I I I
Luz Receptor central infrarrojo izquierdo Receptor sensor línea derecho Receptor lateral infrarrojo izquierdo Receptor sensor línea izquierdo
I I O O O
Interrupción 1 del acelerómetro Interrupción 2 del acelerómetro Altavoz LED superior rojo LED superior verde
O
LED frontal
O I O O I
Transmisor infrarrojo de línea Señal SDO para la comunicación SPI del acelerómetro Señal SDI para la comunicación SPI del acelerómetro Señal de reloj para la comunicación SPI del acelerómetro Chip Select para la comunicación SPI del acelerómetro
O
LED de freno
I I
Receptor lateral infrarrojo derecho Receptor central infrarrojo derecho
I I I
Sensor de temperatura Medidor de batería Micrófono
O I/O
Transmisor infrarrojo Pad libre
unsigned char SEN_LIGHT(void) Salida Porcentaje de la luz incidente.
La función SEN_LIGHT captura el valor analógico dependiente de la luz incidente en el fototransistor. Para ello se deben seguir los siguientes pasos:
Activar el ADC. Esperar el tiempo de adquisición de datos (100us). Leer el valor analógico. Con el voltaje analógico medido se calcula el porcentaje de la luz incidente. Retorna el porcentaje de luz incidente.
www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 90 de 148
unsigned char SEN_BATTERY(void) Salida Porcentaje del nivel de batería
La función SEN_BATTERY captura el valor analógico que proviene de la batería21. Para ello se deben seguir los siguientes pasos:
Activar el ADC. Esperar el tiempo de adquisición de datos (100us). Leer el valor analógico. Con el voltaje analógico medido se calcula el porcentaje del nivel de batería. Retorna el porcentaje de batería.
unsigned char SEN_TEMPERATURE(void) Salida Temperatura en ºC
La función SEN_TEMPERATURE captura el valor analógico dependiente de la temperatura que recoge el termistor22. Para ello se deben seguir los siguientes pasos:
Activar el ADC. Esperar el tiempo de adquisición de datos (100us). Leer el valor analógico. Con el voltaje analógico medido se calcula la temperatura en ºC. Retorna la temperatura en ºC.
unsigned char SEN_MIC_ANALOG(void) Salida Intensidad con la que llega el sonido
La función SEN_MIC_ANALOG captura el valor analógico dependiente de la intensidad del sonido procedente del micrófono. Para ello se deben seguir los siguientes pasos:
Activar el ADC. Esperar el tiempo de adquisición de datos (100us). Leer el valor analógico. 21
El porcentaje puede diferir del dato proporcionado por MowayWorld porque hay diferencias en la lectura cuando la batería se está cargando o se está utilizando. 22 La temperatura indicada por este sensor difiere de la de fuera en unos 5ºC porque recoge la temperatura interna del robot. www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 91 de 148
Con el voltaje analógico medido se calcula la intensidad de la señal de audio. Retorna el valor del micrófono amplificado.
unsigned char SEN_MIC_DIG(void) Salida Indica si existe o no sonido
La función SEN_MIC indica si hay sonido o no. Para ello se deben seguir los siguientes pasos: Se comprueba si se presenta alguna señal en el micrófono. Retorna un 1 si hay sonido y un 0 si no lo hay.
void SEN_SPEAKER(unsigned char SEN_SPEAKER_FREQ, SEN_SPEAKER_TIME, unsigned char SEN_SPEAKER_ON_OFF)
unsigned
char
Variables de entrada SEN_SPEAKER_FREQ SEN_SPEAKER_TIME SEN_SPEAKER_ON_OFF
Frecuencia generadora del tono. Tiempo que dura el tono en intervalos de 100ms Encender, apagar o encender un tiempo determinado
La función SEN_SPEAKER genera un tono de una frecuencia comprendida entre 250 Hz y 65 KHz. Dependiendo del valor de SEN_SPEAKER_ON_OFF esta función puede encender el speaker con una frecuencia determinada, apagarlo o encenderlo durante un intervalo de tiempo definido por SEN_SPEAKER_TIME (intervalos de 100ms). Para ello se deben seguir los siguientes pasos:
Activar el generador de PWM con el duty y frecuencia indicada. Si la función es de tiempo, esperar el tiempo indicado por SEN_SPEAKER_TIME. Si la función es de tiempo apagar el módulo de PWM del microcontrolador. Tabla 45. Valores admitidos para SEN_SPEAKER_ON_OFF
Define SPEAKER_OFF SPEAKER_ON SPEAKER_TIME
Valor 0 1 2
Tabla 46. Equivalencia valor SEN_SPEAKER_FREQ y frecuencia aplicada a zumbador SEN_SPEAKER_FREQ
0 10
Frecuencia aplicada a zumbador Hz 0,0000000 5681,8181818
www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 92 de 148
20 30 40 50 60 70 80 90 100 110 120 130 140 150 160 170 180 190 200 210 220 230 240 250, 255
2976,1904762 2016,1290323 1524,3902439 1225,4901961 1024,5901639 880,2816901 771,6049383 686,8131868 618,8118812 563,0630631 516,5289256 477,0992366 443,2624113 413,9072848 388,1987578 365,4970760 345,3038674 327,2251309 310,9452736 296,2085308 282,8054299 270,5627706 259,3360996 249,0039841 244,1406250
unsigned char SEN_OBS_DIG(unsigned char SEN_CHECK_OBS) Variables de entrada SEN_CHECK_OBS
Indica que sensor se quiere leer
Salida Indica si existe o no objeto en el sensor deseado
Esta función indica si un obstáculo en la parte del sensor que se le indique a través de la variable SEN_CHECK_OBS. Para ello se han de seguir los siguientes pasos:
Se comprueba que sensor hay que mirar. Si no se corresponde con ningún valor válido de la variable la función termina con un 0. Antes de mandar el pulso de luz infrarroja asegurarse de que no exista ninguna fuente de ruido que interfiera. Se manda pulso de luz infrarroja para la detección del obstáculo. Si hay algún obstáculo la luz rebotará y esta señal será captada por el receptor infrarrojo. www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 93 de 148
Se comprueba si se presenta alguna señal en los cuatro receptores IR en modo digital. Se copia el valor del receptor digital en la variable de salida. Se desactiva el LED infrarrojo. Se comprueba que no haya ninguna señal interferente. Tabla 47. Valores de la variable de entrada SEN_CHECK_OBS
Define OBS_CENTER_L OBS_SIDE_L OBS_CENTER_R OBS_SIDE_R
Valor 0 1 2 3
unsigned char SEN_OBS_ANALOG(unsigned char SEN_CHECK_OBS) Variables de entrada SEN_CHECK_OBS
Indica que sensor se quiere leer
Salida Indica el valor analógico del sensor
Esta función indica si un obstáculo en la parte del sensor que se le indique a través de la variable SEN_CHECK_OBS. Para ello se han de seguir los siguientes pasos:
Se comprueba que sensor hay que mirar. Si no se corresponde con ningún valor válido de la variable la función termina con un 0. Antes de mandar el pulso de luz infrarroja asegurarse de que no exista ninguna fuente de ruido que interfiera. Se manda pulso de luz infrarroja para la detección del obstáculo. Se activa el ADC. Se comprueba si se presenta alguna señal en los cuatro receptores IR. Se copia el valor del receptor analógico en las variables de salida. Cuanto mayor sea este valor más cerca se encontrará el obstáculo. Se desactiva LED infrarrojo. Se comprueba que no haya ninguna señal interferente.
Tabla 48. Valores de la variable de entrada SEN_CHECK_OBS
Define OBS_CENTER_L OBS_SIDE_L OBS_CENTER_R OBS_SIDE_R
Valor 0 1 2 3
www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 94 de 148
unsigned char SEN_ACCE_XYZ_READ(unsigned char SEN_CHECK_ACCE) Variables de entrada SEN_CHECK_ACCE
Indica que eje se quiere leer
Salida Aceleración que sufre el robot en el eje indicado
La función SEN_ACCE_XYZ_READ devuelve la aceleración sufrida por el robot en los 3 ejes. El sensor presenta una resolución de ±0.0156G/bit. Esto es, 0 se corresponde a un valor de -2G y 255 a un valor de 2G.
Imagen 59. Posición de los ejes del robot
El microcontrolador se comunica con el sensor a través de la interface SPI. Se manda el comando para poner el sensor en modo “medida”. Se espera a que el sensor realice la medida Le pregunta el valor del eje requerido por el usuario El acelerómetro se pasa a modo “detección de golpes”. Tabla 49. Valores de la variable de entrada SEN_CHECK_ACCE
Define ACCE_CHECK_X ACCE_CHECK_Y ACCE_CHECK_Z
Valor 0 1 2
unsigned char SEN_ACCE_CHECK_TAP(void) Variables de salida SEN_ACCE_TAP
Indica si se ha detectado uno o dos toques
Salida 1: Un toque 2: Dos toques
El acelerómetro tiene la opción de detectar golpes o doble golpes.
El microcontrolador se comunica con el sensor a través de la interface SPI. Le pregunta si ha habido interrupción por golpe. Si no ha habido toque se retorna un 0.
www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 95 de 148
unsigned char SEN_LINE_DIG(unsigned char SEN_CHECK_LINE) Variables de entrada SEN_CHECK_LINE
Indica que sensor se quiere leer
Salida Indica el valor digital del sensor
La función SEN_LINE_DIG indica si los sensores están sobre una superficie oscura o no. Para ello se deben seguir los siguientes pasos: Se comprueba que sensor hay que mirar. Si no se corresponde con ningún valor válido de la variable la función termina con un 0. Se manda pulso de luz infrarroja para la detección de la línea. Si se detecta, la luz rebotará y esta señal será captada por el receptor infrarrojo. Esperar el tiempo de adquisición de datos (900us). Se lee el sensor requerido. .Si la superficie es oscura (la luz no se refleja) obtendremos un ‘1’ en la salida. Tabla 50. Valores de la variable de entrada SEN_CHECK_LINE
Define LINE_L LINE_R
Valor 0 1
unsigned char SEN_LINE_ANALOG(unsigned char SEN_CHECK_LINE) Variables de entrada SEN_CHECK_LINE
Indica que sensor se quiere leer
Salida Indica el valor digital del sensor
La función SEN_LINE_ANALOG indica la luz que se ha reflejado en los optoacopladores23. Para ello se deben seguir los siguientes pasos:
Se comprueba que sensor hay que mirar. Si no se corresponde con ningún valor válido de la variable la función termina con un 0. Se manda pulso de luz infrarroja para la detección de la línea. Si se detecta, la luz rebotará y esta señal será captada por el receptor infrarrojo. Esperar el tiempo de adquisición de datos (900us). Se activa el ADC. Se lee el sensor requerido. Mover ese dato a la variable SEN_LINE. Cuanto más alto sea este valor más oscura será la superficie.
23
El valor del sensor analógico variará de un sensor a otro debido a la tolerancia del componente electrónico. www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 96 de 148
Tabla 51. Valores de la variable de entrada SEN_CHECK_LINE
Define LINE_L LINE_R
void LED_BRAKE_ON(void) Enciende el diodo LED de freno. void LED_FRONT_ON(void) Enciende el diodo LED frontal. void LED_TOP_RED_ON(void) Enciende el diodo LED superior rojo. void LED_TOP_GREEN_ON(void) Enciende el diodo LED superior verde. void LED_BRAKE_OFF(void) Apaga el diodo LED de freno. void LED_FRONT_OFF(void) Apaga el diodo LED frontal. void LED_TOP_RED_OFF(void) Apaga el diodo LED superior rojo. void LED_TOP_GREEN_OFF(void) Apaga el diodo LED superior verde. void LED_BRAKE_ON_OFF(void) Parpadeo del diodo LED de freno. void LED_FRONT_ON_OFF(void) Parpadeo del diodo LED frontal.
www.moway-robot.com
Valor 0 1
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 97 de 148
void LED_TOP_RED_ON_OFF(void) Parpadeo del diodo LED superior rojo. void LED_TOP_GREEN_ON_OFF(void) Parpadeo del diodo LED superior verde.
6.4 Librería motores mOway C18 6.4.2.1 Descripción La librería contiene una serie de funciones encargadas de mandar comandos por I2C al Sistema Motriz, que será el encargado de controlar los motores dejando libre de carga de trabajo al microcontrolador principal, pudiendo éste realizar otras tareas. La comunicación con el módulo motor se realiza mediante el protocolo I2C. El formato de las tramas I2C del Sistema Motriz se puede observar en las siguientes figuras. Cada una de estas tramas tiene una duración de 350us. S T A R T
MOT_DIR
_ W
MOT_ COMAND
T Y P E
R L
MOT_VEL
S E N
T_DIST_ANG
S T O P
Imagen 60. Formato de comandos: MOT_STR, MOT_CHA_VEL
S T A R T
MOT_DIR
_ W
MOT_ COMAND
T Y P E
R L
MOT_VEL
S E N
RAD/ CENWHEEL
Imagen 61. Formato de comandos: MOT_CUR, MOT_ROT
S T A R T
MOT_DIR
_ W
S T O P
COM_STOP/ RST_COM
Imagen 62. Formato de comandos: MOT_STOP, MOT_RST
S T A R T
MOT_DIR
R
MOT_STATUS_DATA_ 0
MOT_STATUS_DATA_ 1
S T O P
Imagen 63. Formato de comando: MOT_FDBCK
www.moway-robot.com
T_DIST_ANG
S T O P
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 98 de 148
6.4.2.2 Funciones En la librería lib_mot_moway existen una serie de funciones que están orientadas al control del sistema de motores de mOway. A continuación se dará una breve descripción de cada una de ellas. Tabla 52. Resumen de funciones en ensamblador de lib_mot_moway Nombre Entrada Retorno void MOT_CONFIG(void)
Descripción Configuración para la comunicación con los motores Comando para movimiento en línea recta
unsigned char MOT_STR( unsigned char, unsigned char, unsigned char, unsigned char)
MOT_VEL FWDBACK COMTYPE MOT_T_DIST
0: Envío correcto 1: Envío incorrecto 2: Datos incorrectos
unsigned char MOT_CHA_VEL( unsigned char, unsigned char, unsigned char, unsigned char, unsigned char)
MOT_VEL FWDBACK RL COMTYPE MOT_T_DIST
0: Envío correcto 1: Envío incorrecto 2: Datos incorrectos
Comando para cambiar la velocidad de un motor
unsigned char MOT_ROT( unsigned char, unsigned char, unsigned char, unsigned char, unsigned char, unsigned char)
MOT_VEL FWDBACK MOT_CENWHEEL RL COMTYPE MOT_T_ANG
0: Envío correcto 1: Envío incorrecto 2: Datos incorrectos
Comando para realizar la rotación del robot
unsigned char MOT_CUR( unsigned char, unsigned char, unsigned char, unsigned char, unsigned char, unsigned char)
MOT_VEL FWDBACK MOT_RAD RL COMTYPE MOT_T_DIST
0: Envío correcto 1: Envío incorrecto 2: Datos incorrectos
Comando para realizar una curva
0:Envío correcto 1: Envío incorrecto 0: Envío correcto 1: Envío incorrecto
Comando para detener el robot Comando para resetear las variables temporales de tiempo y distancia
0: Envío correcto 1: Envío incorrecto
Comando para ver el estado de los motores
unsigned char MOT_STOP(void) RST_COM
unsigned char MOT_RST( unsigned char) unsigned char* MOT_FDBCK(void)
void MOT_CONFIG(void) Esta función configura las entradas y salidas para que el microcontrolador pueda comunicarse con el Sistema Motriz. Tabla 53. Conexiones PIC-motores
Pin PIC PORTE RE7 RE0 RE1
I/O
Sensor I Indica cuándo el motor termina el comando O SCL del protocolo I2C O SDA del protocolo I2C
www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 99 de 148
El puerto RE7 nos indica la finalización de un comando. Este puerto tiene la etiqueta MOT_END en la librería. Ejemplo: //Recto adelante al 100% de velocidad 10 segundos (100ms x 100) MOT_STR(100, FWD, TIME, 100); //Hasta que el comando no termine no se hace nada while(!input(MOT_END)){}
unsigned char MOT_STR(unsigned char MOT_VEL,unsigned FWDBACK,unsigned char COMTYPE, unsigned char MOT_T_DIST)
char
Entrada MOT_VEL FWDBACK COMTYPE MOT_T_DIST
Velocidad deseada Sentido de la marcha Tipo de comando El valor de Tiempo Distancia
0 1-FWD 1-TIME 0 0
100 0-BACK 0-DIST 255 255
Salida 0: Envío correcto 2: Datos incorrectos
1: Envío incorrecto
Comando para desplazamiento en línea recta. Es necesario especificar velocidad, sentido, tipo de comando y el tiempo o la distancia a recorrer. El tiempo tiene una resolución de 100ms y la distancia 1mm, y con un valor de 0 en MOT_T_DIST el comando se mantendrá hasta que no se especifique otra orden. Ejemplo: //Recto adelante al 100% de velocidad 10 segundos (100ms x 100) MOT_STR(100, FWD, TIME, 100); //Recto hacia atrás al 15% de velocidad 100mm (1mm x 100) MOT_STR(15, BACK, DISTANCE, 100); unsigned char MOT_CHA_VEL(unsigned char MOT_VEL,unsigned char FWDBACK,unsigned char RL,unsigned char COMTYPE,unsigned char MOT_T_DIST) Entrada MOT_VEL FWDBACK RL COMTYPE MOT_T_DIST
Velocidad deseada Sentido de la marcha Izquierda o derecha Tipo de comando El valor de Tiempo Distancia
Salida 0: Envío correcto 2: Datos incorrectos
1: Envío incorrecto
www.moway-robot.com
0 1-FWD 1-RIGHT 1-TIME 0 0
100 0-BACK 0-LEFT 0-DIST 255 255
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 100 de 148
Comando para cambiar la velocidad a uno de los dos motores. Es necesario especificar velocidad, sentido, el motor, tipo de comando y el tiempo o la distancia a recorrer. El tiempo tiene una resolución de 100ms y la distancia 1mm, y con un valor de 0 en MOT_T_DIST el comando se mantendrá hasta que no se especifique otra orden. Ejemplo: //Cambiar velocidad (80% adelante) al motor derecho durante 10 segundos //(100ms x 100) MOT_CHA_VEL(80, FWD, RIGHT, TIME, 100) ; //Cambiar velocidad (20% atrás) al motor izquierdo y hacer una distancia de 100 //mm (1mm x 100) MOT_CHA_VEL(20, BACK, LEFT, DISTANCE, 100) ;
unsigned char MOT_ROT(unsigned char MOT_VEL,unsigned char FWDBACK,unsigned char MOT_CENWHEEL,unsigned char RL,unsigned char COMTYPE,unsigned char MOT_T_ANG) Entrada MOT_VEL FWDBACK MOT_CENWHEEL RL COMTYPE MOT_T_ANG
Velocidad deseada Sentido de la marcha Sobre centro o rueda Derecha o izquierda Tipo de comando El valor de Tiempo Ángulo
0 1-FWD 1-CENT 1-RIGHT 1-TIME 0 0
100 0-BACK 0-WHEEL 0-LEFT 0-ANG 255 100
Salida 0: Envío correcto 2: Datos incorrectos
1: Envío incorrecto
Comando para hacer rotar a mOway. Es necesario especificar velocidad, sentido, tipo de rotación, el motor, tipo de comando y el tiempo o el ángulo a rotar. El tiempo tiene una resolución de 100ms, y con un valor de 0 en MOT_T_ANG el comando se mantendrá hasta que no se especifique otra orden. En cuanto al ángulo, las siguientes ecuaciones muestran como calcular el valor de MOT_T_ANG tiendo en cuenta el ángulo de rotación deseado. Si la rotación se produce sobre una de las ruedas se obtiene más resolución. Por otro lado, hay que tener en cuenta la inercia mecánica por lo que se aconseja reducir la velocidad para conseguir una mayor precisión e iniciar el movimiento con el robot parado.
Ecuación 4. MOT_T_ANG en rotación sobre el centro
Ángulo º3.33 MOT _ T _ ANG round 12 º
www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 101 de 148
Ejemplo: //Rotación respecto al centro a la derecha al 80% de velocidad durante 10 // segundos (100ms x 100) MOT_ROT(80, FWD, CENTER, RIGHT, TIME, 100) ; //Rotación respecto la rueda izquierda al 20% de velocidad 180º MOT_ROT(20, BACK, WHEEL, LEFT, ANGLE, 50) ;
unsigned char MOT_CUR(unsigned char MOT_VEL,unsigned FWDBACK,unsigned char MOT_RAD,unsigned char RL,unsigned COMTYPE, unsigned char MOT_T_DIST)
char char
Entrada MOT_VEL FWDBACK MOT_RAD RL COMTYPE MOT_T_DIST
Velocidad deseada Sentido de la marcha Radio Derecha o izquierda Tipo de comando El valor de Tiempo Distancia
0 1-FWD 0 1-RIGHT 1-TIME 0 0
100 0-BACK 100 0-LEFT 0-DIST 255 255
Salida 0: Envío correcto 2: Datos incorrectos
1: Envío incorrecto
Comando para dar una curva. Es necesario especificar velocidad, sentido, radio, dirección, tipo de comando y el tiempo o la distancia a recorrer. El radio es la velocidad que se restará o se sumará a la velocidad global del robot. Esto es, si la velocidad especificada es 50 y el radio 10, uno de los motores tendrá 60 de velocidad y el otro 40. Por lo tanto el radio tiene que cumplir la siguiente restricción: Ecuación 5. Condición 1 MOT_RAD
0 MOT _ VEL MOT _ RAD 100
Ecuación 6. Condición 2 MOT_RAD
0 MOT _ VEL MOT _ RAD 100
El tiempo tiene una resolución de 100ms y la distancia 1mm, y con un valor de 0 en MOT_T_ANG el comando se mantendrá hasta que no se especifique otra orden. El motor cuenta la distancia recorrida por el motor que está en el exterior de la curva. Ejemplo: //Curva a derechas al 50% con un radio de 10 durante 10 segundos //(100ms x 100) //VEL_I=60 //VEL_D=40 MOT_CUR(50, FWD, 10, RIGHT, TIME, 100) ; //Curva a izquierdas al 80% con un radio de 15 durante 100mm
www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 102 de 148
//(1mm x 100) //VEL_I=95 //VEL_D=65 MOT_CUR(80, BACK, 15, LEFT, DISTANCE, 100) ;
unsigned char MOT_STOP(void) Salida 0: Envío correcto
1: Envío incorrecto
Comando para parar el robot. Ejemplo: //Parar mOway MOT_STOP() ;
unsigned char MOT_RST(unsigned char RST_COM) Entrada MOT_RST_COM
El parámetro que se desea resetear
RST_T RST_DIST RST_KM
Salida 0: Envío correcto
1: Envío incorrecto
Resetea las variables temporales internas de tiempo, distancia y cuentakilómetros del motor. Ejemplo: //Reseteo del tiempo transcurrido MOT_RST(RST_T); //Reseteo de la distancia recorrida MOT_RST(RST_D);
unsigned char* MOT_FDBCK(unsigned char STATUS_COM) Entrada STATUS_COM
El parámetro que se desea consultar
www.moway-robot.com
STATUS_T STATUS_A STATUS_V_R STATUS_V_L STATUS_D_R STATUS_D_L STATUS_KM
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 103 de 148
Salida Puntero a vector de dos bytes.
Comando para conocer diversos parámetros del sistema motriz. Podemos consultar el tiempo transcurrido, el ángulo (sólo en el comando MOT_ROT), velocidad de los dos motores, distancia recorrida por cada motor y el cuentakilómetros. Esta función devuelve un puntero que apunta hacia un array de dos bytes. Todas las peticiones menos STATUS_KM devuelven un byte (MOT_FDBCK(STATUS_x)[0]) manteniendo MOT_FDBCK(STATUS_x)[1] al valor 0xFF. Estas dos variables se actualizan cada vez que se manda un comando nuevo (ej. Se puede pedir el tiempo transcurrido desde el último comando). Cuando se utilice STATUS_KM hay que tener en cuenta los dos bytes. Este comando resulta muy útil para calcular la longitud de una línea mientras el robot la sigue. Tabla 54. Resolución de los datos del motor
Parámetro STATUS_T STATUS_A STATUS_V_R STATUS_V_L STATUS_D_R STATUS_D_L STATUS_KM
Resolución 100ms/bit 3.6º/bit 1%/bit 1%/bit 1mm/bit 1mm/bit 1mm/bit
Ejemplo: //Petición de tiempo transcurrido desde el último comando char command_time; command_time =MOT_FDBCK(STATUS_T)[0]; //Ej. Salida: //MOT_FDBCK(STATUS_T)[0]=0x7F => Han transcurrido 12.7 segundos //desde el último comando // MOT_FDBCK(STATUS_T)[1]=0xFF; => Dato no válido
//Petición de distancia recorrida por el motor derecho desde el último comando char mOway_km[2]; mOway_km[0]= MOT_FDBCK(STATUS_KM)[0]; mOway_km[1]= MOT_FDBCK(STATUS_KM)[1]; byte 1 0x01 0000 0001 264
www.moway-robot.com
byte 0 0x08 0000 0100
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 104 de 148
//Ej. Salida: // mOway_km[0]=0x08 // mOway_km[1]=0x01;
Distancia: 264*1mm 264mm
6.4.3 Librería para el módulo BZI-RF2GH4 en C18 6.4.3.1 Descripción Con esta librería es posible realizar fácilmente una comunicación entre el robot y el módulo BZI-RF2GH4.
6.4.3.2 Funciones La librería consta de nueve funciones que facilitarán bastante el trabajo a la hora de desarrollar una aplicación de comunicación con los módulos BZI-RF2GH4. A continuación se dará una breve descripción de cada una de ellas.
Nombre void RF_CONFIG_SPI(void)
void RF_INT_EN(void)
unsigned char RF_CONFIG(unsigned char , unsigned char)
Entrada
Retorno
-
-
-
-
CHANNEL ADDRESS
1: Configuración correcta 0: No configurado
unsigned char RF_ON(void)
-
0: No conectado 1: Conectado
unsigned char RF_OFF(void)
-
0: No desconectado 1: Desconectado
unsigned char RF_SEND(unsigned char, unsigned char ) unsigned char RF_RECEIVE(unsigned char*, unsigned char*)
RF_DIR_OUT RF_DATA_OUT[] RF_DIR_IN RF_DATA_IN[]
0:Envío correcto 1:Ack no recibido 2: No enviado 0: Recepción correcta y única 1: Recepción correcta y múltiple 2:No recepción
Tabla 55. Resumen de las funciones en C18.
www.moway-robot.com
Descripción Configura las entradas y salidas del microcontrolador así como parámetros necesarios para utilizar el bus SPI. Esta rutina habilita en el microcontrolador la interrupción externa para el módulo de radio. Configura las entradas y salidas del microcontrolador así como parámetros del módulo de radio. Activa el módulo de radiofrecuencia en modo escucha. Desactiva el módulo de radiofrecuencia y lo deja en modo de bajo consumo
Envía una trama de datos (8 Bytes) a la dirección indicada. Comprueba si se ha producido una recepción y de ser así, recoge la trama.
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 105 de 148
void RF_CONFIG_SPI(void) La velocidad del SPI no debe superar los 8 Mhz. En la función se configuran los diferentes parámetros del módulo SPI y los pines del PIC. PIN RF SCK SDI SDO
PIN PIC RC3 RC5 RC4
Tabla 56. Configuración SPI puertos PIC
Ejemplo: //Configurar módulos SPI del PIC RF_CONFIG_SPI();
unsigned char RF_CONFIG(unsigned char CHANNEL unsigned char ADDRESS) Variables de entrada CHANNEL ADDRESS
Canal a utilizar en la comunicación. Debe ser un valor entre 0x00 y 0x7F (128 canales). Dirección del dispositivo. Debe ser un valor entre 0x01 y 0xFE.
Salida 0: No configurado 1:Configurado correctamente
Esta función configura el transceptor habilitando su propia dirección de escucha y la dirección de ‘broadcast’. A su vez configura otros parámetros como pines del PIC, el canal, la velocidad de transmisión, la potencia de emisión, la longitud de la dirección, la longitud del código CRC, etc. PIN RF IRQ CSN CE
PIN PIC RB0 RF2 RH4
Tabla 57. Configuración módulo RF puertos PIC
El canal debe ser común a todos los módulos que van a participar en la comunicación. El usuario puede elegir cualquier canal de los 128 disponibles. Sin embargo, si en el entorno existe más de una comunicación entre módulos en diferentes canales, hay que dejar un espaciamiento de 2 entre los canales a utilizar para evitar interferencias dejando así 32 canales útiles. Otra cuestión a tener en cuenta es la existencia de otras tecnologías que utilizan la banda ISM 2.4GHz (Wifi, Bluetooth,etc.) y que también pueden causar interferencias en alguno de los canales.
www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 106 de 148
Canal 0x01
Canal 0x04
……...
2.4Ghz
2.401Ghz
2.402Ghz
2.403Ghz
2.404Ghz
2.405Ghz
2.525Ghz
Imagen 64 Canales RF
La dirección que se asigna a cada dispositivo debe ser unívoca dentro de cada canal. Si la comunicación SPI del PIC está mal configurada, el conexionado se ha realizado incorrectamente o en ausencia del módulo, la salida de la función será 0. Ejemplo: //Configurar módulo RF (canal y dirección) if(RF_CONFIG(0x40,0x01)==0){ //Módulo no configurado } unsigned char RF_ON(void) Salida 0: No configurado 1:Configurado correctamente
Esta rutina activa el módulo de radio en modo escucha para poder recibir datos y/o realizar envíos de datos. Es importante tener en cuenta que tras la llamada a esta rutina el módulo necesita 2,5ms para estar listo. Si la comunicación SPI del PIC está mal configurada, el conexionado se ha realizado incorrectamente o en ausencia del módulo, la salida será 0. Ejemplo: //Activar el módulo RF if(RF_ON()==0){ //Módulo no inicializado }
unsigned char RF_OFF(void) Salida 0: No configurado 1:Configurado correctamente
www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 107 de 148
Esta rutina desactiva el módulo de radio dejándolo en modo de bajo consumo. No borra la configuración establecida. Si la comunicación SPI del PIC está mal configurada, el conexionado se ha realizado incorrectamente o en ausencia del módulo, la salida será 0. unsigned char RF_SEND(unsigned char RF_DIR_OUT, unsigned char RF_DATA_OUT[]) Variables de entrada RF_DIR_OUT RF_DATA_OUT[]
Dirección a la que se quiere enviar los datos (1 byte). Variables que van a ser transmitidas (8 bytes).
Variables de salida 0:Envío correcto 1:Ack no recibido 2: No enviado
Esta función envía 8 Bytes de datos a la dirección indicada informando de la correcta recepción en el destinatario. Tras su ejecución el dispositivo volverá al modo de escucha. Si un mensaje es enviado a la dirección 0x00, este será recibido por todos los módulos que se encuentren en el mismo canal. Se debe tomar en cuenta que el módulo acepta el primer ACK que recibe, por lo tanto no tendremos la certeza de la llegada del dato a todos los dispositivos. Ejemplo: static char data_out[8]; static char dir_out; //-------------------------[Rutina de envio de datos]----------------------------ret=RF_SEND(dir_out,data_out); if(ret==0){ //Envio realizado y ACK recibido } else if(ret==1){ //Envio realizado y ACK no recibido } else{ //Envio no realizado } //------------------------------------------------------------------------------------
www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 108 de 148
unsigned char RF_RECEIVE(unsigned char* RF_DIR_IN, unsigned char* RF_DATA_IN) Variables de salida RF_DIR_IN* Dirección de quien ha enviado la trama RF_DATA_IN* Trama recibida desde la dirección indicada. 0: Recepción correcta y única 1: Recepción correcta y múltiple 2: No recepción
Esta rutina se encarga de comprobar si se ha producido una recepción y de ser así, devuelve los datos recibidos. Asimismo, informa si quedan datos sin leer en la FIFO de recepción del módulo. Si se tiene una recepción múltiple se debe llamar a la función RF_RECEIVE de nuevo tras tratar los datos. El transceptor tiene una pila de tres niveles, por lo que si no se llama a la función recibir antes de que se llene la pila, el dispositivo no podrá recibir más datos. Es recomendable utilizar esta función con interrupción. Para evitar la pérdida de datos el usuario puede hacer que los emisores reenvíen la misma trama hasta que la comunicación haya sido correcta, pero en entornos con mucho tráfico las colisiones crecen exponencialmente aumentando considerablemente los tiempos de envío. Ejemplo: char data_in[8]; char data_in_dir; //--------------[Rutina de recepción con interrupción]-------------------------#pragma interrupt YourHighPriorityISRCode void YourHighPriorityISRCode() { RF_RECEIVE(&data_in_dir,&data_in[0]); } //---------------------------------------------------------------------------------------
//--------------[Rutina de recepción sin interrupción]-------------------------//Interrupción del módulo RF while(1){ while(RF_RECEIVE(&data_in_dir,&data_in[0])!=2){ // Sustituir por código necesario para tratar los datos } } //----------------------------------------------------------------------------------------
www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 109 de 148
void RF_INT_EN(void) Esta rutina se encarga de habilitar la interrupción externa del microcontrolador (RB0) que utiliza el módulo de RF en la recepción de datos. Para ello se configura como entrada el pin RB0. Aunque se puede manejar el módulo sin interrupciones no se garantiza el mínimo tiempo de respuesta. Ejemplo: //-----------[Rutina de configuración y activación con interrupción]---------//Habilitar interrupciones RF_INT_EN();
6.4.3.3 Diagrama de flujo para envío y recepción de datos Interrupción ext
Definir RF_DIR
RF_RECEIVE()
Definir RF_DATA
Retorno
RF_SEND()
2
0
Retorno
2
1
0
Tratar datos
Tratar datos
1 Envio realizado y AKC recibido
Envio realizado y AKC no recibido
Salir interrupción
Envio no realizado y AKC no recibido
Diagrama 4. Envio de datos en C
Diagrama 5. Recepción con interrupción en C
www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 110 de 148
RF_RECEIVE()
Retorno
2
1
0
Tratar datos
Tratar datos
Salir recepción
Diagrama 6. Recepción sin interrupción en C
www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 111 de 148
6.4.4 Librería para el módulo de cámara en C18 6.4.4.1 Descripción Con esta librería es posible realizar el control del módulo de cámara.
6.4.4.2 Funciones La librería incluye las funciones necesarias para manejar el módulo de cámara. A continuación se dará una breve descripción de cada una de ellas. Nombre void CAM_CONFIG(void)
Entrada
Retorno
-
void CAM_SEND_COM (unsigned char, unsigned char, unsigned char) void CAM_ON (void) void CAM_OFF (void) void CAM_CHN_SEL (unsigned char) void CAM _SPI_WRITE (unsigned char)
-
-
COMMAND ADDRESS DATA
Descripción Configura los parámetros del módulo SPI y los pines del PIC, así como el controlador de la cámara. Envía un comando por SPI al controlador de la cámara. Se compone de 3 bytes.
-
-
Activa la cámara.
-
-
Desactiva la cámara.
CHANNEL
-
DATA
-
Envía por SPI el comando de cambio de canal de transmisión al controlador. Envía un byte por el puerto SPI del microcontrolador.
Tabla 58. Resumen de las funciones en C18.
CAM_CONFIG En la función se configuran los diferentes parámetros del módulo SPI y los pines del PIC. También configura el puerto de entradas/salidas del controlador de la cámara. Nota: la velocidad del SPI no debe superar los 8MHz. PIN SPI SCK SDI SDO IRQ CSN CE
PIN PIC RC3 RC5 RC4 RB0 RF2 RH4
Tabla 59. Configuración SPI puertos PIC
www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 112 de 148
CAM_SEND_COM Esta rutina envía un comando por SPI al controlador de la cámara. El formato del comando consiste en tres bytes que especifican el tipo de comando (lectura o escritura), el registro a leer o escribir, y los datos a escribir en dicho registro. COMANDOS COMMAND_CAM ADDRESS_CAM
DATA_CAM
COM_WR para escribir registro COM_RD para leer registro IODIR_ADD para configurar entradas/salidas del puerto del controlador de la cámara. OLAT_ADD para cambiar el estado de las salidas del puerto del controlador de la cámara Datos a escribir en el registro especificado en ADDRESS_CAM
CAM_ON Esta rutina envía por SPI el comando de activación de la cámara al controlador. Es un comando de escritura en el registro de las salidas del puerto del controlador. Los tres bytes a enviar son: BYTES COMMAND_CAM ADDRESS_CAM DATA_CAM
COM_WR OLAT_ADD 0x22
CAM_OFF Esta rutina envía por SPI el comando de desactivación de la cámara al controlador. Es un comando de escritura en el registro de las salidas del puerto del controlador. Los tres bytes a enviar son: BYTES COMMAND_CAM ADDRESS_CAM DATA_CAM
COM_WR OLAT_ADD 0x00
CAM_CHN_SEL Esta rutina envía por SPI el comando de cambio de canal de transmisión al controlador. Es un comando de escritura en el registro de configuración de entrada/salida del puerto del controlador.
www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 113 de 148
Variables de entrada CAM_CHANNEL
Canal en el que transmitirá la cámara. Debe ser un valor entre 1 y 4.
BYTES COMMAND_CAM ADDRESS_CAM DATA_CAM
COM_WR IODIR_ADD Canal 1: 0xD8 Canal 2: 0xD4 Canal 3: 0xCC Canal 4: 0xDC
Ejemplo de activación de la cámara: // Configurar módulo de cámara CAM_CONFIG(); // Seleccionar canal 1 de transmisión CAM_CHN_SEL(1); // Encender cámara CAM_ON();
CAM_SPI_WRITE Envía un byte por SPI desde el microcontrolador. Variables de entrada DATA
Byte a enviar por SPI
www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 114 de 148
7. Programación MowayWorld La aplicación MowayWorld permite diseñar programas por medio de diagramas de flujo, con lo que se consigue programar el robot mOway de forma muy intuitiva. Diferentes bloques o módulos representan las funciones que controlan los sensores y actuadores del robot. Estos módulos son conectados mediante flechas para crear así el programa deseado. La máxima ventaja es que no se necesita ninguna noción de programación para crear una aplicación. En resumen: La mejor manera para comenzar a trabajar con mOway rápidamente. La mejor manera para realizar tareas sencillas o de complejidad media. Código generado optimizado en espacio y rendimiento.
7.1 Espacio de trabajo de MowayWorld A continuación se describe las diferentes zonas que componen el espacio de trabajo del programa MowayWorld.
7.1.1 Barra de herramientas La barra de tareas permite crear un nuevo proyecto, guardar el proyecto actual, editar el diagrama de flujo, crear subrutinas y variables, programar el robot mOway, cambiar el idioma de MowayWorld, etc.
Imagen 65. Barra de herramientas
7.1.2 Editor de diagramas de flujo El editor de diagramas de flujo es el espacio en el que el programador coloca los bloques que forman el programa y las flechas que los unen.
www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 115 de 148
Imagen 66. Editor de diagramas de flujo
7.1.3 Acciones El menú de Acciones permite elegir el módulo para insertar en el diagrama de flujo. Están clasificados por el tipo de función que realizan.
Imagen 67. Menú de Acciones
Para insertar un módulo en el diagrama, simplemente hay que arrastrarlo hasta el editor de diagramas y configurar dicho módulo para que realice la función deseada. Los menús con una flecha en la parte derecha incluyen submenús con más módulos.
www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 116 de 148
7.1.4 Propiedades Cuando se selecciona un bloque del diagrama, aparecerá en la zona derecha del espacio de trabajo una ventana de propiedades, que nos permitirá cambiar la configuración de dicho módulo de forma rápida.
Imagen 68. Propiedades del módulo “Recta”
7.1.5 Lista de errores Muestra los errores encontrados en el diagrama. Describe el error e indica en qué diagrama se encuentra el error (en caso de que haya más de un diagrama). Un diagrama con errores no se programará en el robot.
Imagen 69. Ventana de errores
www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 117 de 148
7.1.6 Flechas El orden de ejecución de los diferentes módulos se define por medio de flechas. Para unir dos bloques mediante una flecha hay que realizar los pasos siguientes:
Se coloca el cursor sobre el primer bloque hasta que aparezcan las marcas rojas. Se pincha sobre una de estas marcas. Después se pincha sobre una de las marcas del bloque siguiente.
Imagen 70. Trazado de flechas
Para mayor facilidad a la hora de colocar las flechas es posible utilizar la herramienta “Conector” de la barra de tareas. NOTA: Con la herramienta “Conector” no es posible seleccionar los elementos del diagrama. Para seleccionarlos, es necesario volver a la herramienta por defecto “Cursor”.
Imagen 71. Iconos de las herramientas Cursor y Conector
Todos los bloques del diagrama tienen que tener al menos una flecha de entrada. Además tienen que tener una flecha de salida (dos flechas de salida si el bloque es condicional). Los bloques condicionales (de forma ovalada) tienen dos flechas de salida: una de ellas es el camino que seguirá el programa si la condición del bloque es verdadera, y la otra será el camino del programa cuando la condición del bloque sea falsa. Al trazar las dos flechas de salida, la primera de ellas será automáticamente el camino de la condición verdadera (marca verde). La flecha restante será el camino de la condición falsa (marca roja).
www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 118 de 148
Si se quisiera crear un bucle, el proceso sería similar al anteriormente descrito, pero pinchando la flecha en una marca del mismo bloque.
Imagen 72. Trazado de flechas para un bucle
El trazado de las flechas puede ser modificado arrastrando los puntos que aparecen al situar el cursor sobre ellas.
Imagen 73. Modificar trazado
7.1.7 Cambio de idioma y actualizaciones El idioma de MowayWorld puede ser cambiado mediante la barra de herramientas, en “Ayuda – Language”. Así mismo, se puede comprobar si el software puede ser actualizado por medio de la opción “Ayuda – Buscar actualizaciones”.
Imagen 74. Menú Ayuda
www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 119 de 148
7.2 Primer programa en MowayWorld Este primer programa básico hará que mOway evite los obstáculos. Lo primero de todo es salvar el proyecto con un nombre, como por ejemplo “primer_proyecto”. 1. Una vez creado el proyecto, se comienza el programa añadiendo un retardo de dos segundos. Basta con arrastrar el módulo de Pausa en el editor de diagramas, seleccionando un valor constante de 2 segundos. 2. Se añade el parpadeo del LED verde, por medio del bloque “Luces”. A continuación se muestra la configuración de los dos bloques:
Imagen 75. Configuración Pausa y Luces
3. Se añade el final de programa (módulo “Fin”). 4. Se graba en el robot por medio del botón de “Programar mOway” de la barra de herramientas, indicado con un círculo rojo en la imagen siguiente. 5. Probar el programa y comprobar que después de esperar 2 segundos se enciende el LED verde.
www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 120 de 148
Imagen 76. Diagrama de flujo y botón “Programar mOway”
6. Para detectar obstáculos se inserta cuatro módulos “Sensores – Obstáculo” y se configuran para que cada uno compruebe uno de los cuatro sensores.
Imagen 77. Configuración Chequear obstáculos
7. Los módulos de condición tienen una salida verdadera y otra falsa. Si se detecta el obstáculo, la condición es verdadera (marca verde) y el LED correspondiente debe encenderse. Si no hay obstáculo, la condición es falsa (marca roja) el LED se apagaría. El encendido y apagado debe realizarse con los módulos “Luces”. 8. Probar el programa y comprobar que los LED delanteros se encienden cuando se detecta un obstáculo.
www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 121 de 148
Imagen 78. Primer programa en MowayWorld: detección de obstáculos
9. Añadimos movimiento al robot con módulos “Acciones de mOway – Movimiento – Recta”, para que el robot avance recto indefinidamente hasta que encuentre un obstáculo. 10. Cuando encuentra obstáculo se manda un comando para que realice una rotación de 180º (“Acciones de mOway – Movimiento – Rotación”). El robot continuará el movimiento recto cuando la rotación termine.
www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 122 de 148
Imagen 79. Configuración de Movimiento y Rotación
Imagen 80. Final de primer programa en MowayWorld
www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 123 de 148
7.3 Módulos Los módulos son las acciones o funciones que puede realizar el robot mOway: moverse, leer los sensores, encender los LEDs, transmitir mensajes por radiofrecuencia, etc. Estos módulos están agrupados dependiendo del tipo de función que realizan y pueden ser configurados de diversas formas. A continuación se describe cada uno de los módulos incluidos en MowayWorld.
7.3.1 Acciones de Moway Este grupo de funciones permite controlar los actuadores de mOway: motores, altavoz y diodos LED. Estos módulos disponen de la opción “Esperar límite de tiempo/distancia para continuar con el diagrama”. Esta opción hace que se esté ejecutando el comando actual (el programa no continúa su ejecución) hasta que la dicho comando termina (bien por tiempo o por distancia). Si esta opción no es seleccionada, el comando seguirá ejecutándose indefinidamente hasta que otra función anule el comando actual. Movimiento – Recto El robot mOway dispone de dos motores, uno en cada rueda, lo que le permite una gran flexibilidad a la hora de realizar movimientos. El comando de movimiento recto hace que el robot pueda avanzar o retroceder en línea recta, pudiendo elegir su velocidad.
Imagen 81. Ventana de configuración de Movimiento – Recto
www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 124 de 148
Movimiento – Libre El movimiento libre es similar al anterior, con la diferencia de que permite controlar las velocidades individuales de cada motor.
Imagen 82. Ventana de configuración de Movimiento – Libre
Movimiento – Curva Con el módulo de giro, el programa calculará la velocidad de los motores para poder describir una curva señalando la velocidad y la curvatura de giro. También podemos hacer uso de las limitaciones en tiempo y distancia.
www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 125 de 148
Imagen 83. Ventana de configuración de Movimiento – Curva
Movimiento – Rotación El módulo de rotación hace que mOway rote bien sobre su centro o sobre alguna de las dos ruedas. Podemos configurar el sentido de giro y la velocidad de rotación.
Imagen 84. Ventana de configuración de Movimiento – Rotación
Movimiento – Parar El módulo de parar movimiento detiene los motores de mOway. Sonido – Empezar Esta función permite a mOway emitir sonidos desde 244 Hz hasta 16 KHz, al activar el altavoz interno del robot. Es posible elegir si estará activo durante un tiempo determinado, o bien indefinido.
www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 126 de 148
Imagen 85. Ventana de configuración de Sonido - Empezar
Sonido – Parar Detiene el sonido del altavoz Luces Este módulo permite controlar los LEDs de mOway, de forma que se puede encender (on), apagar (off) o hacer parpadear (blink). Se puede actuar sobre todos los LEDs que el usuario necesite de forma simultánea.
Imagen 86. Ventana de configuración de Luces
www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 127 de 148
7.3.2 Lectura de sensores Este grupo de funciones permiten obtener el valor de los sensores integrados en el robot mOway. Son bloques condicionales, los cuales tienen dos posibles caminos de salida: si la condición impuesta en el bloque se cumple, el resultado es “verdadero”. Si la condición no se cumple, el resultado es “falso”. En el diagrama de flujo, la salida “verdadera” del bloque condicional se identifica con una marca verde, mientras que la salida “falsa” se identifica con una cruz roja. Obstáculos Este módulo comprueba el valor digital de los sensores de obstáculo. Cada sensor permite cumplir alguna de las tres condiciones siguientes: o detección de un obstáculo o no detección de obstáculo o no lectura de sensor Por otra parte, se puede elegir entre realizar una operación AND u OR con las condiciones anteriores. Si se elige la opción AND se deben cumplir todas las condiciones seleccionadas para que la salida del bloque condicional sea verdadera. Por el contrario, si se elige la opción OR, es suficiente con que una sola condición se cumpla para tener una salida verdadera.
Imagen 87. Ventana de configuración de Lectura de sensores – Obstáculos
www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 128 de 148
Línea Este módulo comprueba el valor digital de los sensores de línea. Esta función se emplea para hacer que mOway siga una línea (negra o blanca) en el suelo, detectar límites de terreno, etc. Cada sensor permite cumplir alguna de las tres condiciones siguientes: o detección de línea negra o detección de línea blanca o no lectura de sensor Del mismo modo que el bloque anterior (Lectura de sensores de obstáculos), permite las opciones AND y OR.
Imagen 88. Ventana de configuración de Lectura de sensores – Línea
Ruido Este módulo tiene un resultado verdadero si detecta un sonido fuerte. No tiene ventana de configuración. Golpe Este módulo tiene un resultado verdadero si detecta un golpe sobre mOway. No tiene ventana de configuración.
www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 129 de 148
7.3.3 Datos Con este grupo de funciones es posible leer, escribir y modificar los datos que proporciona el robot mOway. Estos datos pueden provenir de la lectura de los sensores o de variables creadas por el usuario y almacenadas en la memoria de mOway. Estos datos se almacenan en variables, las cuales son definidas por el usuario. Para crear una nueva variable, se elige el menú “Variables” de la barra de herramientas y se selecciona “Nueva variable”. Se asigna un nombre y un valor inicial para ella. Algunos de los bloques permiten crear estas variables directamente desde su ventana de configuración, para valores que puedan variar a lo largo del programa. NOTA: Cada variable se almacena en un byte de memoria, por lo que su rango de valores es de 0 como mínimo a 255 como máximo. Calcular Se emplea para realizar operaciones aritméticas de sumar (+=) o restar (-=) sobre una variable. El primer parámetro debe ser siempre una variable y en él se almacenará el resultado de la operación. El segundo operando puede ser una constante o una variable. Reiniciar Datos de mOway Este módulo pone a cero los contadores almacenados de tiempo y distancia. Permite seleccionar qué datos en concreto queremos reiniciar. Asignar variable Este grupo de módulos permiten asignar un valor a una variable creada por el usuario. Este valor puede ser constante o bien el valor analógico de alguno de los sensores. o Valor: asigna a la variable un valor constante. o Tiempo: asigna a la variable el tiempo transcurrido. El valor tiene un rango de 0 a 255 décimas de segundo. o Velocidad: asigna a la variable la velocidad de uno de los motores. El valor tiene un rango de 0 (motor parado) a 100 (velocidad máxima). o Distancia: asigna a la variable la distancia recorrida por el robot. El valor tiene un rango de 0 a 255 centímetros. o Ángulo: asigna a la variable el valor del ángulo girado por el robot. El valor tiene un rango de 0 (correspondiente a 0
www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 130 de 148
grados) a 100 (correspondiente a 360 grados). o Luminosidad: asigna a la variable el valor del sensor de luz. El valor tiene un rango de 0 (oscuridad) a 100 (luz). o Línea: asigna a la variable el valor de uno de los sensores de línea. El valor tiene un rango de 0 (correspondiente a blanco) a 100 (correspondiente a negro). o Obstáculo: asigna a la variable el valor de uno de los sensores de obstáculo. El valor tiene un rango de 0 (no detección) a 100 (obstáculo muy cercano). o Acelerómetro: asigna a la variable el valor de uno de los ejes del acelerómetro. El valor tiene un rango de 0 (aceleración límite negativa) a 255 (aceleración límite positiva). Para una aceleración nula, el valor es de 127 (la mitad del rango de valores). o Ruido: asigna a la variable el valor del micrófono del robot. El valor tiene un rango de 0 (silencio) a 255 (ruido). o Temperatura: asigna a la variable el valor de la temperatura del robot. El valor tiene un rango de 0ºC a 255ºC. o Batería: asigna a la variable el valor del nivel de batería del robot. El valor tiene un rango de 0 a 100%. Comparar Este grupo de módulos permiten comparar un valor (bien sea constante o bien la lectura de un sensor), con una constante o a una variable creada por el usuario. Los operadores de comparación son los siguientes: igual (==), diferente (<>), mayor (>), mayor o igual (>=), menor (<), menor o igual (<=). o Dato: compara una variable creada por el usuario. o Tiempo: compara el valor tiempo transcurrido. El rango es de 0.1 a 25.5 segundos. o Velocidad: compara el valor de la velocidad de uno de los motores. El rango es de 0 (motor parado) a 100 (velocidad máxima). o Distancia: compara el valor de la distancia recorrida por el robot. El rango es de 0 a 255 centímetros. o Ángulo: compara el valor del ángulo girado por el robot. El www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 131 de 148
rango es de 0 a 360 grados. o Luminosidad: compara el valor del sensor de luz. El rango es de 0 (oscuridad) a 100 (luz). o Línea: compara el valor de uno de los sensores de línea. El rango es de 0 (correspondiente a blanco) a 100 (correspondiente a negro). o Obstáculo: compara el valor de uno de los sensores de obstáculo. El rango es de 0 (no detección) a 100 (obstáculo muy cercano). o Acelerómetro: asigna a la variable el valor de uno de los ejes del acelerómetro. El valor tiene un rango de -2g (aceleración límite negativa) a 2g (aceleración límite positiva). Para una aceleración nula, el valor es de 0. (NOTA: El valor g equivale a un valor de 9.81m/s2). o Ruido: compara el valor del micrófono del robot. El rango es de 0% (silencio) a 100% (ruido). o Temperatura: compara el valor de la temperatura del robot. El rango es de 0ºC a 255ºC. o Batería: compara el nivel de batería del robot. El rango es de 0 a 100%.
7.3.4 Control de flujo Pausa Permite realizar una pausa en el programa de una duración múltiplo de 0,05 segundos. El parámetro de pausa puede ser una constante o una variable. Llamada a función Este módulo permite usar una función o subrutina creada por el usuario. Ver capítulo “Subrutinas” de este manual. Fin Este módulo determina el final del programa. Los programas que consisten en un bucle que se repite indefinidamente no necesitan emplear este módulo.
www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 132 de 148
7.3.5 Expansión Este grupo de funciones permiten usar el conector de expansión de mOway, bien sea para usar el módulo RF u otros módulos de expansión. ¡ATENCIÓN! Sólo los usuarios avanzados pueden usar la configuración del módulo IO. La incorrecta conexión de elementos electrónicos en el conector de expansión puede causar daños irreversibles en el robot. Módulo IO – Configurar Este módulo configura los terminales del conector de expansión como entradas (“Input”) o salidas (“Output”), y les asigna un valor inicial en caso de que sean salidas.
Imagen 89. Ventana de configuración de Módulo IO – Configurar
Módulo IO – Salida Este módulo activa (on), desactiva (off) o conmuta (toggle) los terminales configurados como salidas del conector de expansión. ¡ATENCIÓN! Sólo se puede asignar un valor a los terminales configurados como salida. Si se asignase un valor a los terminales configurados como entradas, el circuito electrónico podría dañarse.
www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 133 de 148
Imagen 90. Ventana de configuración de Módulo IO – Salida
Módulo IO – Entrada Este módulo comprueba el valor digital de uno de los 6 terminales de entrada del conector de expansión. Compara si el estado de dicho terminal es igual (==) o diferente (<>) a “encendido” (1) o “apagado” (0). Cámara – Activar Este módulo activa la cámara de mOway y permite seleccionar el canal de transmisión. Este canal debe ser el mismo que el del receptor de vídeo. Cámara – Detener Este módulo apaga la cámara. Comunicación – Empezar Este módulo configura el robot para establecer una comunicación por radiofrecuencia (RF). A la hora de activarlo debemos seleccionar qué identificador usará el robot y en qué canal queremos que opere. Para que dos mOways puedan comunicarse entre sí deben estar funcionando en el mismo canal y normalmente, cada uno tendrá un identificador diferente. Si la configuración es correcta, la salida de este módulo es “verdadera”. En la imagen del lateral se muestra cómo colocar las flechas en este módulo en el diagrama.
www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 134 de 148
Imagen 91. Ventana de configuración de Comunicación – Empezar
Comunicación – Parar Este módulo detiene la comunicación por RF. No tiene ventana de configuración. Comunicación – Enviar Con este módulo se puede transmitir una trama a una dirección concreta. En la trama hay que indicar la dirección del receptor y los datos a enviar, que pueden ser constantes o variables. Si el mensaje ha sido recibido por el receptor, la salida es “verdadera”. De otro modo, la salida es “falsa”. Hay que recordar que previamente a este condicional, se tiene que configurar el módulo “Comunicación - Empezar”. Los robots participantes en la comunicación RF tienen que tener el mismo canal y direcciones diferentes.
www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 135 de 148
Imagen 92. Ventana de configuración de Comunicación – Enviar
Comunicación – Recibir Con este módulo se puede recibir una trama desde una dirección concreta. Hay que indicar por lo menos dos variables: una para recoger la dirección de emisor y la otra para el dato. Si el mensaje enviado por el transmisor ha sido recibido correctamente, la salida es “verdadera”. Si el mensaje no ha sido recibido, la salida es “falsa”. Hay que recordar que previamente a este condicional, se tiene que configurar el módulo “Comunicación - Empezar”. Los robots participantes en la comunicación RF tienen que tener el mismo canal y direcciones diferentes.
www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 136 de 148
Imagen 93. Ventana de configuración de Comunicación – Recibir
www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 137 de 148
7.4 Variables Una variable contiene un valor que puede cambiar a lo largo del programa, y es almacenada en la memoria interna de mOway. Las variables permiten manejar datos del programa, lo cual proporciona una mayor flexibilidad a la hora de desarrollar el programa. Estos datos pueden ser los valores de los sensores del robot, mensajes recibidos por radiofrecuencia, etc. Estas variables pueden ser creadas desde ciertos módulos, o también desde la barra de tareas. Para crear una nueva variable, se elige el menú “Variables” de la barra de herramientas y se selecciona “Nueva variable”. Se asigna un nombre y un valor inicial para ella. El nombre debe comenzar por al menos una letra y no debe tener más de 14 caracteres.
Imagen 94. Creación de una nueva variable
Imagen 95. Creación de una variable desde un módulo
www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 138 de 148
Las variables pueden ser editadas desde la barra de herramientas, en “Variables – Variables”.
Imagen 96. Ventana de Variables
7.5 Funciones / Subrutinas Una función o subrutina es un programa, normalmente un diagrama pequeño, que puede ser usado (llamado) por otro programa, por ejemplo, desde el diagrama principal. A continuación se muestra un ejemplo en el que se define un diagrama que encienda el LED frontal, espere un segundo, apague el LED frontal y por último espere otro segundo. Si este programa se define como una Función, puede ser llamado desde el diagrama principal. Para crear una función nueva, se pulsa el icono “+” que se encuentra en la zona superior del editor de diagramas y se le asigna un nombre (por ejemplo, “MyFunction”). Aparecerá una nueva pestaña “MyFunction”.
Imagen 97. Creación de una función
www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 139 de 148
El funcionamiento del LED explicado anteriormente se define en esta función de usuario.
Imagen 98. Diagrama de “MyFunction”
Para regresar al diagrama principal, se pulsa sobre la pestaña “Principal”. Desde este diagrama se puede llamar a la función “MyFunction” con el módulo “Control de Flujo – Llamada a Función”. En este módulo se selecciona la función “MyFunction” En este ejemplo, la función se llama tres veces desde el diagrama principal. Por tanto, el LED frontal parpadeará tres veces.
Imagen 99. Llamada a función 3 veces desde el diagrama principal
www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 140 de 148
8. Aplicaciones 8.1 Ventana de comunicaciones La ventana de comunicaciones permite enviar y recibir comandos RF utilizando el RFUsb conectado al ordenador. Para lanzar esta ventana hay que pulsar el icono “Comunicaciones”.
Imagen 100. Icono “Comunicaciones”
La ventana de Comunicaciones aparecerá en el lado derecho del espacio de trabajo. Para empezar la comunicación RF del dispositivo RFUsb, se configura el RFUsb con dirección y canal (en este ejemplo “2” y “0”), y se pulsa el botón Iniciar.
Imagen 101. Ventana “Comunicaciones”
www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 141 de 148
Para enviar un mensaje desde el ordenador a mOway, se selecciona la dirección del robot (en este ejemplo es “1”), se cambia los datos a enviar (ordenados desde el Dato 7 hasta el Dato 0) y se pulsa en botón Enviar. Si se selecciona “0” en la “Dirección de Moway” el mensaje será recibido por todos los robots al alcance. Cuando el RFUsb recibe un mensaje desde un mOway, muestra la hora en la que se ha recibido el mensaje y los datos del mismo con el siguiente formato: El número entre paréntesis es la dirección del robot que ha enviado el mensaje. El resto de números son los datos enviados por el robot, ordenados desde el Dato 7 hasta el Dato 0.
8.2 MowayCam La aplicación MowayCam permite mostrar en el PC las imágenes enviadas por el módulo de cámara Moway Camera Board y guardar capturas de dichas imágenes en cualquier dispositivo de almacenamiento conectado al PC. Esta aplicación se lanza desde la pestaña “Ventanas”.
Imagen 102. Acceso a MowayCam
Una vez pulsado el icono, aparecerá el panel lateral de MowayCam.
www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 142 de 148
Imagen 103. Panel de MowayCam
En esta ventana se muestra las imágenes de la cámara. También permite habilitar y deshabilitar la capturadora de vídeo y guardar dichas imágenes en el dispositivo de almacenamiento que elija el usuario.
Botón Actualizar: recarga en la lista los dispositivos de vídeo conectados al ordenador. Dependiendo de la versión del driver, el receptor de vídeo de Moway puede identificarse como “Moway Videocap”, “STK1160 Grabber” o “USB2.0 ATV”.
Botón Iniciar: activa el receptor de vídeo Moway Camera Board.
Botón Detener: desactiva el receptor de vídeo Moway Camera Board.
Botón Capturar: guarda la imagen actual de la cámara en la ubicación especificada y con el nombre indicado.
IMPORTANTE: Una vez activada la captura de vídeo, NO DESCONECTAR el receptor de vídeo Moway Camera Board del puerto USB del ordenador. Si se desconectase mientras el receptor está activado, el ordenador podría reiniciarse. Para desconectarlo, pulsar el botón Detener o cerrar el panel MowayCam.
www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 143 de 148
8.3 MowayRC MowayRC es una aplicación que permite controlar a mOway como si fuera un dispositivo de radio control y monitorizar todos los sensores del robot. Es una herramienta que se vale de los módulos de RF BZI-RF2GH4 y del RFUsb muy útil para todos aquellos usuarios que quieran explorar el campo donde se desenvolverá el microbot. El concepto de funcionamiento es el siguiente: la aplicación transmite comandos por USB al RFUsb y ésta los transmite a mOway, que previamente ha sido grabado con un programa que interpreta esos comandos (mOway_RC_Client incluido en mOway Pack).
R F
PC MOT_DIR Moway_RC Center.exe
Moway USB
RFUsb
Imagen 104. Diagrama mOway RC
www.moway-robot.com
Moway_RC _Client .hex
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 144 de 148
Imagen 105. Aplicación mOway RC
Imagen 106. Acceso a Moway RC Center
Una vez iniciado el proceso, se preguntará al usuario si quiere programar el “mOway_RC_Client” en el robot y la aplicación mOwayRC comenzará. A continuación se describen las diferentes partes del programa.
8.3.1 Configuración En esta parte se configura el módulo RFUsb de mOway con la dirección por defecto “2” y el canal de comunicaciones “0” (canal por defecto del programa de RC de mOway). Para evitar interferencias por WIFI, Bluetooth, Microondas, u otros mOways, se puede cambiar el canal con el botón Cambiar canal. Para realizar el cambio de canal el robot tiene que estar encendido y comunicándose con el RFUsb. Cada vez que se desconecta el RFUsb el canal por defecto será el “0”. El procedimiento recomendado a seguir es el siguiente: 1) Encender el robot 2) Conectar el RFUsb. 3) Probar el canal mandado comandos a mOway 4) Si el robot no responde bien cambiar el canal y probar de nuevo En caso de que el robot no haya sido cargado con el “mOway_RC_Client”, se puede reprogramar con el botón Programar mOway.
8.3.2 Movimiento Una vez conectado el RFUsb podemos mandar comandos a mOway. Mediante los botones podemos controlar los movimientos del robot, o desde el teclado (teclas W, S, A, D). También existen dos barras donde definir la velocidad y la curvatura de giro. Se muestra la distancia recorrida por el robot, la cual puede ser reseteada al pulsar el botón Resetear distancia.
8.3.3 Luces En este apartado se controla el encendido y apagado de los cuatro LEDs de
www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 145 de 148
mOway.
8.3.4 Sonido En este apartado se puede encender, apagar el speaker del robot a una determinada frecuencia, así como realizar un pitido. También es posible reproducir notas musicales.
8.3.5 Estado de sensores
Sensores de línea: mayor valor cuanto más oscura es la superficie. Ambiente de mOway: lecturas de luminosidad, temperatura y ruido detectados por mOway. Obstáculos: mayor valor cuanto más cerca está el objeto. Aceleración: lecturas de la aceleración sobre los tres ejes de mOway.
8.3.6 Cámara Permite activar la cámara de mOway en el canal seleccionado durante un máximo de 15 segundos. Durante el tiempo de activación de la cámara se detiene la comunicación con mOway, para evitar interferencias. Una vez finalizado este tiempo, la comunicación se restablece automáticamente. Para ver las imágenes de la cámara es necesario lanzar el panel de “Cámara”.
8.4 MowayServer Gracias a esta aplicación, el robot Moway puede ser controlado desde un teléfono móvil, una tableta o un ordenador, a través de comunicación WiFi. Estos dispositivos pueden conectarse a la red creada por el robot Moway, al que previamente se ha conectado el Módulo Wifi24. Una vez conectados, el robot puede ser controlado desde el explorador web del dispositivo. La aplicación se lanza desde la barra de herramientas.
24
Disponible según pack www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 146 de 148
Imagen 107. Acceso a Moway Web Server
Aparece el panel lateral de Moway Server.
Imagen 108. Panel lateral de Moway Web Server
El procedimiento para poder comunicarse con el servidor web es el siguiente: 1) Seleccionar una IP (sólo es modificable el último campo) y pulsar el botón Programar web server. 2) Después de unos segundos, el robot creará una red Wifi adhoc con nombre MowayNet***, siendo *** el número seleccionado para la IP en el paso anterior. 3) Si se está usando el ordenador para acceder al servidor web, pulsar el botón Moway web server para abrir el explorador web con la IP seleccionada. Si se está usando otro dispositivo, abrir el explorador web e introducir la IP seleccionada. Una vez realizados los pasos anteriores, aparecerá una pantalla como la mostrada en la imagen siguiente, desde la cual se puede controlar el movimiento y luces de mOway, así como leer ciertos sensores.
www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 147 de 148
Imagen 109. Servidor web de mOway
NOTA: Dependiendo de la conexión wifi y del explorador web, tanto la conexión a la red como el mostrado del servidor pueden tardar un tiempo.
www.moway-robot.com
Título: Manual Usuario Rev: v3.0.1 – Marzo 2012 Página: 148 de 148
www.moway-robot.com