manual usuario moway v3.1
DESCRIPTION
Manual de Usuario del robot mOway. Incluye una descripción del robot y del software para programarlo.TRANSCRIPT
MANUAL USUARIO
DE MOWAY
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 2 de 170
www.moway-robot.com
Copyright (c) 2013 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".
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 3 de 170
www.moway-robot.com
Í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
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 4 de 170
www.moway-robot.com
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
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 5 de 170
www.moway-robot.com
8.2 MowayCam .................................................................................................... 141 8.3 MowayRC ...................................................................................................... 143 8.3.1 Configuración ............................................................................................ 144
8.3.2 Movimiento................................................................................................ 144 8.3.3 Luces .......................................................................................................... 145 8.3.4 Sonido ........................................................................................................ 145 8.3.5 Estado de sensores ..................................................................................... 145 8.3.6 Cámara ....................................................................................................... 145
8.4 MowayServer ................................................................................................. 145 9. Simulador ............................................................................................................. 148
9.1 Introducción .................................................................................................... 148
9.2 Funcionamiento .............................................................................................. 149 9.3 Ejemplo de simulación ................................................................................... 153
10. mOway Scratch .............................................................................................. 155 10.1 Introducción ............................................................................................... 155
10.2 Funcionamiento ......................................................................................... 155 10.3 Paso a paso ................................................................................................. 156
10.4 Comandos y Sensores ................................................................................ 160 10.5 Prácticas ..................................................................................................... 164 10.5.1 Figuras geométricas ................................................................................... 164
10.5.2 Encerrado ................................................................................................... 166 10.5.3 MowayRC .................................................................................................. 167
10.5.4 Acelerómetro ............................................................................................. 168
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 6 de 170
www.moway-robot.com
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.
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 7 de 170
www.moway-robot.com
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.
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 8 de 170
www.moway-robot.com
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
PIC18f86j50
FRON
T_LED
IR_RX_R
LINE_TX
LINE_RX_R
LIGHT_
SEN
E
X
P
A
N
S
I
Ó
N
IR_RX_L
LINE_RX_L
LED_
GREEN
LED_
RED
PIC16F687
LINE_TXLINE_RX_R
LINE_TXLINE_RX_R
Puente H
M
O
T
O
R
M
O
T
O
R
Engrane
Encoder
Engrane
Encoder
IR_RX_R
IR_RX_L
LED_
BRAKE
LED_
BRAKE
ACELE
SPEAKER
MIC
TEMPMEDIDOR
BATERÍA
FREE
PAD
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 I/O Sensor PORTA
RA0 I Luz
RA1 I Receptor central infrarrojo izquierdo
RA2 I Receptor sensor línea derecho
RA3 I Receptor lateral infrarrojo izquierdo
RA5 I Receptor sensor línea izquierdo
PORTB
RB1 I Interrupción 1 del acelerómetro
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 9 de 170
www.moway-robot.com
RB2 I Interrupción 2 del acelerómetro
RB3 O Altavoz
RB5 O LED superior rojo
RB6 O LED superior verde
PORTC
RC7 O LED frontal
PORTD
RD1 O Transmisor infrarrojo de línea
RD4 I Señal SDO para la comunicación SPI del acelerómetro
RD5 O Señal SDI para la comunicación SPI del acelerómetro
RD6 O Señal de reloj para la comunicación SPI del acelerómetro
RD7 I Chip Select para la comunicación SPI del acelerómetro
PORTE
RE5 O LED de freno
PORTF
RF5 I Receptor lateral infrarrojo derecho
RF6 I Receptor central infrarrojo derecho
PORTH
RH5 I Sensor de temperatura
RH6 I Medidor de batería
RH7 I Micrófono
PORTJ
RJ6 O Transmisor infrarrojo
RJ7 I/O Pad libre
3.2 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.
Sistema Motriz
PIC16F687
LINE_TXLINE_RX_R
LINE_TXLINE_RX_R
PUENTE H
M
O
T
O
R
M
O
T
O
R
Engrane
Encoder
Engrane
Encoder
Imagen 2. Sistema motriz: electrónica y mecánica
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 10 de 170
www.moway-robot.com
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.
Sistema Motriz
Bloque mecánicoBloque electrónica
Puente H
Vcc=2.8V
Moway created by:
Iñigo Sobradillo
Daniel del Rio
Javi Galvez
Juan Gil
Estibaliz Otero
Julen Gutierrez
PIC16F687
M
Vcc=2.8V
Moway created by:
Iñigo Sobradillo
Daniel del Rio
Javi Galvez
Juan Gil
Estibaliz Otero
Julen Gutierrez
PWM
Señal encoder
Encoder
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.
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 11 de 170
www.moway-robot.com
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 Línea Reloj del I2C
RE1 I2C Línea datos del I2C
RE7 I Línea indicadora de fin motor
3.3 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.
PIC18f86j50
FRON
T_LED
IR_RX_R
LINE_TX
LINE_RX_R
LIGHT_
SEN
E
X
P
A
N
S
I
Ó
N
IR_RX_L
LINE_RX_L
LED_
GREEN
LED_
RED
IR_RX_R
IR_RX_L
LED_
BRAKE
LED_
BRAKE
ACELE
SPEAKER
MIC
TEMPMEDIDOR
BATERÍA
FREE
PAD
Imagen 4. Grupo sensores e indicadores
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 12 de 170
www.moway-robot.com
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.
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 13 de 170
www.moway-robot.com
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.
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 14 de 170
www.moway-robot.com
Tabla 3. Conexiones Sensores de línea-PIC
Pin PIC I/O Sensor PORTA
RA2 I Receptor sensor línea derecho
RA5 I Receptor sensor línea izquierdo
PORTD
RD1 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.
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 15 de 170
www.moway-robot.com
Imagen 11. Sensor detector de obstáculos
Tabla 4. Conexiones sensor antichoque-PIC
Pin PIC I/O Sensor PORTA
RA1 I Receptor central infrarrojo derecho
RA3 I Receptor lateral infrarrojo izquierdo
PORTF
RF5 I Receptor lateral infrarrojo derecho
RF6 I Receptor central infrarrojo izquierdo
PORTJ
RJ7 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 I/O Sensor PORTA
RA0 I Luz
3 Es fundamental apagar el LED bicolor en el momento que se desee hacer una lectura de la
intensidad de luz.
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 16 de 170
www.moway-robot.com
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 I/O PIC Pin1 O Vcc 3.3v
Pin2 O GND
Pin3 I/O /PMD3/AN12/P3C
/C2INC
RH4
Pin4 I/O/PMA5/AN7/C2INB RF2
Pin5 I/O /SCK1/SCL1 RC3
Pin6 I/O /SDO1/C2OUT RC5
Pin7 I/O /SDI1/SDA1 RC4
Pin8 I/O/INT RB0
Imagen 14. Robots con módulo de RF en el conector de expansión
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 17 de 170
www.moway-robot.com
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 Sensor PORTH
RH5 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 Sensor PORTB
RB3 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 I/O Sensor PORTH
RH7 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.
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 18 de 170
www.moway-robot.com
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 PIC Pin7 I RD7
Pin8 I RB1
Pin9 I RB2
Pin12 I RD4
Pin13 O RD5
Pin14 O 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 Sensor PORTH
RH6 I Medidor de batería
3.3.10 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 I/O Sensor PORTC
RC7 O LED frontal
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 19 de 170
www.moway-robot.com
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 Sensor PORTA
RA4 O LED superior rojo
PORTB
RB6 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 I/O Sensor PORTE
RE5 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.
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 20 de 170
www.moway-robot.com
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 I/O Sensor PORTJ
RJ7 I/O Pad libre
3.4 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 Sólo para usuarios avanzados
7 Estos LEDs no pueden ser controlados por el usuario.
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 21 de 170
www.moway-robot.com
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
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 22 de 170
www.moway-robot.com
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 Min Max Unidad
Vdd -0.3 3.6 V
Vss 0 V
Tensión de entrada datos -0.3 5.25 V
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 23 de 170
www.moway-robot.com
Tensión de salida datos Vss-Vdd Vss-Vdd V
Potencia disipada 60 mW
Temperatura de operación -40 +85 ºC
Temperatura de almacenaje -40 +125 ºC
Tabla 17. Parámetros principales del módulo BZI-RF2GH4
Parámetro Valor Unidad
Tensión mínima de alimentación 1.9 V
Tensión máxima de alimentación 3.6 V
Potencia máxima de salida 0 dBm
Velocidad máxima de transmisión 2000 Kbps
Corriente en modo transmisión @ 0dbm potencia de salida 11.3 mA
Corriente en modo recepción @ 2000kbps 12.3 mA
Corriente en modo Power Down 900 nA
Frecuencia máxima del bus SPI 8 Mhz
Rango de temperatura -40 a +85 ºC
Tabla 18. Pinout del módulo BZI-RF2GH4
Pines Descripción
Vcc Tensión de alimentación del módulo
Vss GND
CE Chip Enable
CSN Chip Select del SPI (Negado)
SCK Reloj del bus SPI
SDI Entrada de datos al módulo RF del bus SPI (MOSI)
SDO Salida de datos del módulo RF del bus SPI (MISO)
IRQ Salida interrupción (negado)
Imagen 20. Disposición de componentes en la placa
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 24 de 170
www.moway-robot.com
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
Disponible según pack 11
Disponible según pack
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 25 de 170
www.moway-robot.com
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 Valor Unidad
Tensión mínima de alimentación 1.9 V
Tensión máxima de alimentación 3.6 V
Corriente en modo Power Down 1 uA
Frecuencia máxima del bus SPI 10 Mhz
Rango de temperatura -40 a +85 ºC
Tecnología CMOS -
Tabla 20. Parámetros máximos
Parámetro Min Max Unidad
Vdd -0.3 5.5 V
Vss 0 V
Intensidad 125 mA
Potencia disipada 700 mW
Temperatura de operación -40 +85 ºC
Temperatura de almacenaje -40 +125 ºC
Tabla 21. Patillaje del Módulo de Cámara y del conector posterior
Pines Descripción
Vcc Tensión de alimentación del módulo
Vss GND
CE Chip Enable
CS Chip Select del SPI
SCK Reloj del bus SPI
SDI Entrada de datos SPI (MOSI)
SDO Salida de datos SPI (MISO)
IRQ Interrupción SPI
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 26 de 170
www.moway-robot.com
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.
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 27 de 170
www.moway-robot.com
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
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 28 de 170
www.moway-robot.com
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
Disponible según pack 13
Disponible según pack 14
Disponible según pack
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 29 de 170
www.moway-robot.com
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.
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 30 de 170
www.moway-robot.com
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.
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 31 de 170
www.moway-robot.com
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.
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.
15
Disponible según pack
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 32 de 170
www.moway-robot.com
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
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 33 de 170
www.moway-robot.com
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
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 34 de 170
www.moway-robot.com
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
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 35 de 170
www.moway-robot.com
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
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 36 de 170
www.moway-robot.com
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.
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 37 de 170
www.moway-robot.com
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.
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 38 de 170
www.moway-robot.com
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.
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 39 de 170
www.moway-robot.com
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.
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 40 de 170
www.moway-robot.com
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
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 41 de 170
www.moway-robot.com
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 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0
Sin uso Sin uso Sin uso Sin uso Sin uso Sin uso 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 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0
Sin uso Sin uso Sin uso Sin uso Sin uso Sin uso TAP_TAP TAP
- - - - - -
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 42 de 170
www.moway-robot.com
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 Valor
OBS_CENTER_L 0
OBS_SIDE_L 1
OBS_CENTER_R 2
OBS_SIDE_R 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 Valor
ACCE_CHECK_X 0
ACCE_CHECK_Y 1
ACCE_CHECK_Z 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 Valor
LINE_L 0
LINE_R 1
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 43 de 170
www.moway-robot.com
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 Valor
SPEAKER_OFF 0
SPEAKER_ON 1
SPEAKER_TIME 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).
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 44 de 170
www.moway-robot.com
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 Variable salida Descripción
SEN_CONFIG - - Configura para utilizar los
sensores.
SEN_LIGHT - SEN_LIGHT_P Lee el valor del sensor de
luz .
SEN_BATTERY - SEN_BATTERY_P Devuelve el nivel de
batería.
SEN_TEMPERATURE - SEN_TEMPERATURE_C Detecta la temperatura en
ºC.
SEN_MIC_ANALOG - SEN_MIC Detecta la intensidad con la que le llega el sonido
SEN_MIC_DIG - SEN_MIC Detecta si le llega sonido
o no.
SEN_SPEAKER SEN_SPEAKER_FREQ SEN_SPEAKER_TIME
SEN_SPEAKER_ON_OFF
- Emite un tono de una frecuencia comprendida
entre 250 Hz y 65 KHz,
con intervalos de 100 ms
SEN_OBS_DIG SEN_CHECK_OBS SEN_OBS SEN_STATUS
Detecta la presencia de obstáculos.
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 45 de 170
www.moway-robot.com
SEN_OBS_ANALOG SEN_CHECK_OBS SEN_OBS
SEN_STATUS
Detecta la presencia de
obstáculos, y la distancia
a los mismos.
SEN_ACCE_XYZ_READ SEN_CHECK_ACCE SEN_ACCE SEN_STATUS
Indica la aceleración sufrida en los ejes x,y,z
del robot.
SEN_ACCE_CHECK_TAP - SEN_ACCE_TAP SEN_STATUS
Comprueba si el robot se ha golpeado.
SEN_LINE_DIG SEN_CHECK_LINE SEN_LINE
SEN_STATUS
Detecta zona oscura
(línea negra).
SEN_LINE_ANALOG SEN_CHECK_LINE SEN_LINE
SEN_STATUS
Detecta tonalidades en la
superficie.
LED_BRAKE_ON - - Encendido del diodo LED
de freno.
LED_FRONT_ON - - Encendido del diodo LED
frontal.
LED_TOP_RED_ON - - Encendido del diodo LED superior rojo.
LED_TOP_GREEN_ON - - Encendido del diodo LED
superior verde.
LED_BRAKE _OFF - - Apagado del diodo LED de freno.
LED_FRONT_OFF - - Apagado del diodo LED
frontal.
LED_TOP_RED_OFF - - Apagado del diodo LED
superior rojo.
LED_TOP_GREEN_OFF - - Apagado del diodo LED
superior verde.
LED_BRAKE _ON_OFF - - Parpadeo del diodo LED
de freno.
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.
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 I/O Sensor PORTA
RA0 I Luz
RA1 I Receptor central infrarrojo izquierdo
RA2 I Receptor sensor línea derecho
RA3 I Receptor lateral infrarrojo izquierdo
RA5 I Receptor sensor línea izquierdo
PORTB
RB1 I Interrupción 1 del acelerómetro
RB2 I Interrupción 2 del acelerómetro
RB3 O Altavoz
RB5 O LED superior rojo
RB6 O LED superior verde
PORTC
RC7 O LED frontal
PORTD
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 46 de 170
www.moway-robot.com
RD1 O Transmisor infrarrojo de línea
RD4 I Señal SDO para la comunicación SPI del acelerómetro
RD5 O Señal SDI para la comunicación SPI del acelerómetro
RD6 O Señal de reloj para la comunicación SPI del acelerómetro
RD7 I Chip Select para la comunicación SPI del acelerómetro
PORTE
RE5 O LED de freno
PORTF
RF5 I Receptor lateral infrarrojo derecho
RF6 I Receptor central infrarrojo derecho
PORTH
RH5 I Sensor de temperatura
RH6 I Medidor de batería
RH7 I Micrófono
PORTJ
RJ6 O Transmisor infrarrojo
RJ7 I/O 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.
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 47 de 170
www.moway-robot.com
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.
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 48 de 170
www.moway-robot.com
Se copia el valor del receptor digital en la variable de salida SEN_MIC.
SEN_SPEAKER
Variables de entrada SEN_SPEAKER_FREQ Frecuencia generadora del tono.
SEN_SPEAKER_TIME Tiempo que dura el tono.
SEN_SPEAKER_ON_OFF 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 Valor
SPEAKER_OFF 0
SPEAKER_ON 1
SPEAKER_TIME 2
Tabla 29. Equivalencia valor SEN_SPEAKER_FREQ y frecuencia aplicada al zumbador
SEN_SPEAKER_FREQ
Frecuencia aplicada a zumbador Hz
0 0,0000000
10 5681,8181818
20 2976,1904762
30 2016,1290323
40 1524,3902439
50 1225,4901961
60 1024,5901639
70 880,2816901
80 771,6049383
90 686,8131868
100 618,8118812
110 563,0630631
120 516,5289256
130 477,0992366
140 443,2624113
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 49 de 170
www.moway-robot.com
150 413,9072848
160 388,1987578
170 365,4970760
180 345,3038674
190 327,2251309
200 310,9452736
210 296,2085308
220 282,8054299
230 270,5627706
240 259,3360996
250 249,0039841
255 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.
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 50 de 170
www.moway-robot.com
Tabla 30. Valores de la variable de entrada SEN_CHECK_OBS
Define Valor
OBS_CENTER_L 0
OBS_SIDE_L 1
OBS_CENTER_R 2
OBS_SIDE_R 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 Valor
OBS_CENTER_L 0
OBS_SIDE_L 1
OBS_CENTER_R 2
OBS_SIDE_R 3
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 51 de 170
www.moway-robot.com
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 Valor
ACCE_CHECK_X 0
ACCE_CHECK_Y 1
ACCE_CHECK_Z 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.
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 52 de 170
www.moway-robot.com
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.
Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0
Sin uso Sin uso Sin uso Sin uso Sin uso Sin uso 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 Valor
LINE_L 0
LINE_R 1
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 53 de 170
www.moway-robot.com
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 Valor
LINE_L 0
LINE_R 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.
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 54 de 170
www.moway-robot.com
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.
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 55 de 170
www.moway-robot.com
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
MOT_DIRMOT_
COMAND
T
Y
P
E
R
LMOT_VEL
S
E
N
T_DIST_ANG
S
T
O
P
_
W
Imagen 42. Formato de comandos: MOT_STR, MOT_CHA_VEL
S
T
A
R
T
MOT_
COMAND
T
Y
P
E
R
LMOT_VEL
S
E
N
RAD/
CENWHEEL
S
T
O
P
T_DIST_ANGMOT_DIR_
W
Imagen 43. Formato de comandos: MOT_CUR, MOT_ROT
S
T
A
R
T
S
T
O
P
COM_STOP/
RST_COMMOT_DIR
_
W
Imagen 44. Formato de comandos: MOT_STOP, MOT_RST
S
T
A
R
T
S
T
O
P
MOT_STATUS_DATA_
0MOT_DIR R
MOT_STATUS_DATA_
1
Imagen 45. Formato de comando: MOT_FDBCK
5.2.3.2 Variables
MOT_STATUS
Registro que indica el estado del comando.
Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0
Sin uso Sin uso Sin uso Sin uso Sin uso Sin uso DMWRONG COMOK
- - - - - -
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 56 de 170
www.moway-robot.com
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 Bit0
Sin uso Sin uso Sin uso Sin uso Sin uso COMTYPE RL FWDBACK
- - - - -
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.
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.
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 57 de 170
www.moway-robot.com
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 Descripción
MOT_CONFIG - - Configuración para la
comunicación con los
motores
MOT_STR
MOT_VEL MOT_T_DIST
MOT_CON FWDBACK
COMTYPE
MOT_STATUS COMOK
DWRONG
Comando para movimiento en línea recta
MOT_CHA_VEL
MOT_VEL MOT_T_DIT
MOT_CON FWDBACK
COMTYPE
RL
MOT_STATUS COMOK
DWRONG
Comando para cambiar la velocidad de un motor
MOT_ROT
MOT_VEL MOT_CENWHEEL
MOT_T_ANG
MOT_CON
FWDBACK
COMTYPE RL
MOT_STATUS COMOK
DWRONG
Comando para realizar la rotación del robot
MOT_CUR
MOT_VEL
MOT_RAD MOT_T_DIST
MOT_CON FWDBACK
COMTYPE
RL
MOT_STATUS COMOK DWRONG
Comando para realizar una
curva
MOT_CHECK_END - - Función que espera hasta la finalización de comando
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 58 de 170
www.moway-robot.com
MOT_STOP - MOT_STATUS COMOK
DWRONG
Comando para detener el
robot
MOT_RST
MOT_RST_COM MOT_STATUS COMOK
DWRONG
Comando para resetear las variables temporales de
tiempo y distancia
MOT_FDBCK
STATUS_COM MOT_STATUS_ DATA_0
MOT_STATUS_
DATA_1
MOT_STATUS COMOK DWRONG
Comando para ver el estado de los motores
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 I/O Sensor PORTE
RE7 I Indica cuándo el motor termina el comando
RE0 O SCL del protocolo I2C
RE1 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.
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 59 de 170
www.moway-robot.com
MOT_STR
Entrada MOT_VEL Velocidad deseada 0 100
MOT_CON, FWDBACK Sentido de la marcha 1-FWD 0-BACK
MOT_CON, COMTYPE Tipo de comando 1-TIME 0-DIST
MOT_T_DIST El valor de Tiempo
Distancia
0
0
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 Velocidad deseada 0 100
MOT_CON, FWDBACK Sentido de la marcha 1-FWD 0-BACK
MOT_CON, RL Izquierda o derecha 1-RIGHT 0-LEFT
MOT_CON, COMTYPE Tipo de comando 1-TIME 0-DIST
MOT_T_DIST El valor de Tiempo
Distancia
0
0
255
255
Variables de salida FLAGS MOT_STATUS: COMOK y DWRONG
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 60 de 170
www.moway-robot.com
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 Velocidad deseada 0 100
MOT_CON, FWDBACK Sentido de la marcha 1-FWD 0-BACK
MOT_CENWHEEL Sobre centro o rueda 0x01-CE 0x00-WH
MOT_CON, RL Derecha o izquierda 1-RIGHT 0-LEFT
MOT_CON, COMTYPE Tipo de comando 1-TIME 0-ANG
MOT_T_ANG El valor de Tiempo
Ángulo
0
0
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.
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 61 de 170
www.moway-robot.com
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
º12
33.3º__
ÁnguloroundANGTMOT
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 Velocidad deseada 0 100
MOT_CON, FWDBACK Sentido de la marcha 1-FWD 0-BACK
MOT_RAD Radio 0 100
MOT_CON, RL Derecha o izquierda 1-RIGHT 0-LEFT
MOT_CON, COMTYPE Tipo de comando 1-TIME 0-DIST
MOT_T_DIST El valor de Tiempo
Distancia
0
0
255
255
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 62 de 170
www.moway-robot.com
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
100__0 RADMOTVELMOT
Ecuación 3. Condición 2 MOT_RAD
100__0 RADMOTVELMOT
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
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 63 de 170
www.moway-robot.com
bcf MOT_CON,FWDBACK
bcf MOT_CON,COMTYPE
bcf MOT_CON,RL
call 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:
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 64 de 170
www.moway-robot.com
;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 Resolución STATUS_T 100ms/bit STATUS_A 3.6º/bit STATUS_V_R 1%/bit STATUS_V_L 1%/bit STATUS_D_R 1mm/bit STATUS_D_L 1mm/bit STATUS_KM 1mm/bit
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 65 de 170
www.moway-robot.com
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
call MOT_FDBCK
;Ej. Salida:
;MOT_STATUS_DATA_0=0x08
;MOT_STATUS_DATA_1=0x01;
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 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0
Sin uso CONFIGOK OFFOK ONOK RCVNW RCVOK ACK SNDOK
-
byte 1 byte 0
0x01 0x08
0000 0001 0000 0100
264
Distancia:
264*1mm
264mm
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 66 de 170
www.moway-robot.com
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.
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 67 de 170
www.moway-robot.com
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
RF_CONFIG Configura las entradas y salidas del microcontrolador
19 así
como parámetros del módulo de radio.
RF_CONFIG_SPI Configura las entradas y salidas del microcontrolador
20 así
como los parámetros necesarios para utilizar el bus SPI.
RF_ON Activa el módulo de radiofrecuencia en modo escucha.
RF_OFF Desactiva el módulo de radiofrecuencia y lo deja en modo de
bajo consumo.
RF_SEND Envía una trama de datos (8 Bytes) a la dirección indicada.
RF_RECEIVE Comprueba si se ha producido una recepción y de ser así,
recoge la trama.
RF_RECEIVE_INT Realiza la misma función que RF_RECEIVE solo que por
interrupción.
RF_INT_EN Esta rutina habilita en el microcontrolador la interrupción
externa para el módulo de radio.
19
El usuario puede cambiar estos pines modificando la librería donde se define el patillaje 20
Ídem.
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 68 de 170
www.moway-robot.com
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 PIN PIC SCK RC3
SDI RC5
SDO RC4
Tabla 39. Configuración SPI puertos PIC
RF_CONFIG
Variables de entrada RF_DIR Dirección del dispositivo. Debe ser un valor entre 0x01 y 0xFE.
RF_CHN 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 PIN PIC IRQ RB0
CSN RF2
CE 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.
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 69 de 170
www.moway-robot.com
2.4Ghz 2.401Ghz 2.402Ghz 2.403Ghz
……...
2.405Ghz2.404Ghz 2.525Ghz
Canal
0x01
Canal
0x04
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 0x40 ;Canal
movwf RF_CHN
call RF_CONFIG
btfss RF_STATUS,CONFIGOK
nop ;Módulo no configurado
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 70 de 170
www.moway-robot.com
;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 Dirección a la que se quiere enviar los datos (1 byte).
RF_DATA_OUT_0 –
RF_DATA_OUT_7
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 0x02 ;Dirección del receptor
movwf RF_DIR_OUT
;Datos a enviar
clrf RF_DATA_OUT_0
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 71 de 170
www.moway-robot.com
clrf RF_DATA_OUT_1
clrf RF_DATA_OUT_2
clrf RF_DATA_OUT_3
clrf RF_DATA_OUT_4
clrf RF_DATA_OUT_5
clrf RF_DATA_OUT_6
clrf 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 Dirección de quien ha enviado la trama
RF_DATA_IN_0 –
RF_DATA_IN_7
Trama recibida desde la dirección indicada.
RCVOK y RCVNW
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
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 72 de 170
www.moway-robot.com
btfsc RF_STATUS,RCVNW
goto RECIBIR
;-----------------------------------------------------------------------------
RF_RECEIVE_INT
Variables de salida RF_DIR_IN Dirección de quien ha enviado la trama
RF_DATA_IN_0 –
RF_DATA_IN_7
Trama recibida desde la dirección indicada.
RCVOK, RCVNW
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
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 73 de 170
www.moway-robot.com
;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 0x40 ;Canal
movwf RF_CHN
call RF_CONFIG
btfss RF_STATUS,CONFIGOK
nop ;Módulo no configurado
;Activar el módulo RF
call RF_ON
btfss RF_STATUS,ONOK
nop ;Módulo no inicializado
;-------------------------------------------------------------------------
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 74 de 170
www.moway-robot.com
5.2.4.4 Diagrama de flujo para envío y recepción de
datos
SNDOK
RF_SEND
Definir
RF_DIR
Definir
RF_DATA
ACK no recibido
Envio no realizado
ACK
Envio realizado y
AKC recibido
1
1
0
0
Diagrama 1. Envio de datos en
ensablador
RF_RECEIVE
_INT
Interrupción ext
RCVOK
RCVNW
Tratar datos 0
11
Salir interrupción
0
Diagrama 2. Recepción con
interrupción en ensamblador
RF_RECEIVE
RCVOK
IRQ=0
RCVNW
Tratar datos 0
11
Salir recepción
0
IRQ=1
Diagrama 3. Recepción sin
interrupción en ensamblador
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 75 de 170
www.moway-robot.com
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.
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 76 de 170
www.moway-robot.com
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
CAM_CONFIG Configura las entradas y salidas SPI del microcontrolador, así
como el puerto del controlador de la cámara.
CAM_ON Activa la cámara
CAM_OFF Desactiva la cámara
CAM_CHN_SEL Selecciona el canal por el que va a transmitir la cámara al
receptor de vídeo.
CAM_SEND_COM Envía un comando (tipo de comando, registro y datos) al
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 COM_WR para escribir registro
COM_RD para leer registro
ADDRESS_CAM 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
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 77 de 170
www.moway-robot.com
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 COM_WR
ADDRESS_CAM OLAT_ADD
DATA_CAM 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 COM_WR
ADDRESS_CAM OLAT_ADD
DATA_CAM 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 COM_WR
ADDRESS_CAM IODIR_ADD
DATA_CAM Canal 1: 0xD8
Canal 2: 0xD4
Canal 3: 0xCC
Canal 4: 0xDC
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 78 de 170
www.moway-robot.com
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
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 79 de 170
www.moway-robot.com
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
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 80 de 170
www.moway-robot.com
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
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 81 de 170
www.moway-robot.com
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
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 82 de 170
www.moway-robot.com
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
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 83 de 170
www.moway-robot.com
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.
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 84 de 170
www.moway-robot.com
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).
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 85 de 170
www.moway-robot.com
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.
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 86 de 170
www.moway-robot.com
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.
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 87 de 170
www.moway-robot.com
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.
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 88 de 170
www.moway-robot.com
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
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.
Nombre Constantes
entrada
Descripción
void SEN_CONFIGURAR(void) - Configura para utilizar los sensores
unsigned char SEN_LIGHT(void) - Lee el valor del sensor de luz
unsigned char SEN_BATTERY(void) - Lee el porcentaje de la batería
unsigned char SEN_TEMPERATURE (void) - Lee la temperatura del interior del robot
unsigned char SEN_MIC_ANALOG (void) - Lee el valor analógico del micrófono
unsigned char SEN_MIC_DIG (void) - Lee el valor digital del micrófono
unsigned char SEN_SPEAKER(unsigned char,
unsigned char, unsigned char)
SPEAKER_OFF
SPEAKER_ON
SPEAKER_TIME
Controla el speaker.
unsigned char SEN_ACCE_XYZ_READ(unsigned char) ACCE_CHECK_X ACCE_CHECK_Y
ACCE_CHECK_Z
Indica las aceleraciones que sufre el robot
unsigned char SEN_ACCE_CHECK_TAP(void) - Comprueba si ha habido golpe
unsigned char SEN_OBS_DIG(unsigned char) OBS_SIDE_L OBS_CENTER_L
OBS_CENTER_R
OBS_SIDE_R
Detecta la presencia de obstáculos
unsigned char SEN_OBS_ANALOG(unsigned char) OBS_SIDE_L OBS_CENTER_L
OBS_CENTER_R
OBS_SIDE_R
Detecta distancia a obstáculos
unsigned char SEN_LINE_DIG(unsigned char) LINE_R LINE_L
Detecta zona oscura (línea negra)
unsigned char SEN_LINE_ANALOG (unsigned char) LINE_R
LINE_L
Detecta tonalidades en la superficie
void LED_FRONT_ON(void) - Encendido LED frontal
void LED_BRAKE_ON(void) - Encendido LED de freno
void LED_TOP_RED_ON(void) - Encendido LED superior rojo
void LED_TOP_GREEN_ON(void) - Encendido LED superior verde
void LED_FRONT _OFF(void) - Apagado LED frontal
void LED_BRAKE_OFF(void) - Apagado LED de freno
void LED_TOP_RED_OFF(void) - Apagado LED superior rojo
void LED_TOP_GREEN_OFF(void) - Apagado LED superior verde
void LED_FRONT _ON_OFF(void) - Parpadeo LED frontal
void LED_BRAKE_ON_OFF(void) - Parpadeo LED de freno
void LED_TOP_RED_ON_OFF(void) - Parpadeo LED superior rojo
void LED_TOP_GREEN_ON_OFF(void) - Parpadeo LED superior verde
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 89 de 170
www.moway-robot.com
Tabla 44. Conexiones PIC-sensores
Pin PIC I/O Sensor PORTA
RA0 I Luz
RA1 I Receptor central infrarrojo izquierdo
RA2 I Receptor sensor línea derecho
RA3 I Receptor lateral infrarrojo izquierdo
RA5 I Receptor sensor línea izquierdo
PORTB
RB1 I Interrupción 1 del acelerómetro
RB2 I Interrupción 2 del acelerómetro
RB3 O Altavoz
RB5 O LED superior rojo
RB6 O LED superior verde
PORTC
RC7 O LED frontal
PORTD
RD1 O Transmisor infrarrojo de línea
RD4 I Señal SDO para la comunicación SPI del acelerómetro
RD5 O Señal SDI para la comunicación SPI del acelerómetro
RD6 O Señal de reloj para la comunicación SPI del acelerómetro
RD7 I Chip Select para la comunicación SPI del acelerómetro
PORTE
RE5 O LED de freno
PORTF
RF5 I Receptor lateral infrarrojo derecho
RF6 I Receptor central infrarrojo derecho
PORTH
RH5 I Sensor de temperatura
RH6 I Medidor de batería
RH7 I Micrófono
PORTJ
RJ6 O Transmisor infrarrojo
RJ7 I/O 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.
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 90 de 170
www.moway-robot.com
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.
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 91 de 170
www.moway-robot.com
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, unsigned char
SEN_SPEAKER_TIME, unsigned char SEN_SPEAKER_ON_OFF)
Variables de entrada SEN_SPEAKER_FREQ Frecuencia generadora del tono.
SEN_SPEAKER_TIME Tiempo que dura el tono en intervalos de 100ms
SEN_SPEAKER_ON_OFF 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 Valor
SPEAKER_OFF 0
SPEAKER_ON 1
SPEAKER_TIME 2
Tabla 46. Equivalencia valor SEN_SPEAKER_FREQ y frecuencia aplicada a zumbador
SEN_SPEAKER_FREQ
Frecuencia aplicada a zumbador Hz
0 0,0000000
10 5681,8181818
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 92 de 170
www.moway-robot.com
20 2976,1904762
30 2016,1290323
40 1524,3902439
50 1225,4901961
60 1024,5901639
70 880,2816901
80 771,6049383
90 686,8131868
100 618,8118812
110 563,0630631
120 516,5289256
130 477,0992366
140 443,2624113
150 413,9072848
160 388,1987578
170 365,4970760
180 345,3038674
190 327,2251309
200 310,9452736
210 296,2085308
220 282,8054299
230 270,5627706
240 259,3360996
250, 249,0039841
255 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.
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 93 de 170
www.moway-robot.com
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 Valor
OBS_CENTER_L 0
OBS_SIDE_L 1
OBS_CENTER_R 2
OBS_SIDE_R 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 Valor
OBS_CENTER_L 0
OBS_SIDE_L 1
OBS_CENTER_R 2
OBS_SIDE_R 3
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 94 de 170
www.moway-robot.com
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 Valor
ACCE_CHECK_X 0
ACCE_CHECK_Y 1
ACCE_CHECK_Z 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.
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 95 de 170
www.moway-robot.com
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 Valor
LINE_L 0
LINE_R 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.
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 96 de 170
www.moway-robot.com
Tabla 51. Valores de la variable de entrada SEN_CHECK_LINE
Define Valor
LINE_L 0
LINE_R 1
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.
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 97 de 170
www.moway-robot.com
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_DIRMOT_
COMAND
T
Y
P
E
R
LMOT_VEL
S
E
N
T_DIST_ANG
S
T
O
P
_
W
Imagen 60. Formato de comandos: MOT_STR, MOT_CHA_VEL
S
T
A
R
T
MOT_
COMAND
T
Y
P
E
R
LMOT_VEL
S
E
N
RAD/
CENWHEEL
S
T
O
P
T_DIST_ANGMOT_DIR_
W
Imagen 61. Formato de comandos: MOT_CUR, MOT_ROT
S
T
A
R
T
S
T
O
P
COM_STOP/
RST_COMMOT_DIR
_
W
Imagen 62. Formato de comandos: MOT_STOP, MOT_RST
S
T
A
R
T
S
T
O
P
MOT_STATUS_DATA_
0MOT_DIR R
MOT_STATUS_DATA_
1
Imagen 63. Formato de comando: MOT_FDBCK
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 98 de 170
www.moway-robot.com
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 Descripción
void MOT_CONFIG(void) - - Configuración para la
comunicación con los
motores
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
Comando para movimiento en línea recta
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
unsigned char MOT_STOP(void) 0:Envío correcto
1: Envío incorrecto
Comando para detener el
robot
unsigned char MOT_RST(
unsigned char)
RST_COM 0: Envío correcto 1: Envío incorrecto
Comando para resetear las variables temporales de
tiempo y distancia
unsigned char*
MOT_FDBCK(void)
0: Envío correcto
1: Envío incorrecto
Comando para ver el estado
de los motores
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 I/O Sensor PORTE
RE7 I Indica cuándo el motor termina el comando
RE0 O SCL del protocolo I2C
RE1 O SDA del protocolo I2C
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 99 de 170
www.moway-robot.com
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 char
FWDBACK,unsigned char COMTYPE, unsigned char MOT_T_DIST)
Entrada MOT_VEL Velocidad deseada 0 100
FWDBACK Sentido de la marcha 1-FWD 0-BACK
COMTYPE Tipo de comando 1-TIME 0-DIST
MOT_T_DIST El valor de Tiempo
Distancia
0
0
255
255
Salida 0: Envío correcto 1: Envío incorrecto
2: Datos incorrectos
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 Velocidad deseada 0 100
FWDBACK Sentido de la marcha 1-FWD 0-BACK
RL Izquierda o derecha 1-RIGHT 0-LEFT
COMTYPE Tipo de comando 1-TIME 0-DIST
MOT_T_DIST El valor de Tiempo
Distancia
0
0
255
255
Salida 0: Envío correcto 1: Envío incorrecto 2: Datos incorrectos
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 100 de 170
www.moway-robot.com
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 Velocidad deseada 0 100
FWDBACK Sentido de la marcha 1-FWD 0-BACK
MOT_CENWHEEL Sobre centro o rueda 1-CENT 0-WHEEL
RL Derecha o izquierda 1-RIGHT 0-LEFT
COMTYPE Tipo de comando 1-TIME 0-ANG
MOT_T_ANG El valor de Tiempo
Ángulo
0
0
255
100
Salida 0: Envío correcto 1: Envío incorrecto
2: Datos incorrectos
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
º12
33.3º__
ÁnguloroundANGTMOT
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 101 de 170
www.moway-robot.com
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 char
FWDBACK,unsigned char MOT_RAD,unsigned char RL,unsigned char
COMTYPE, unsigned char MOT_T_DIST)
Entrada MOT_VEL Velocidad deseada 0 100
FWDBACK Sentido de la marcha 1-FWD 0-BACK
MOT_RAD Radio 0 100
RL Derecha o izquierda 1-RIGHT 0-LEFT
COMTYPE Tipo de comando 1-TIME 0-DIST
MOT_T_DIST El valor de Tiempo
Distancia
0
0
255
255
Salida 0: Envío correcto 1: Envío incorrecto
2: Datos incorrectos
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
100__0 RADMOTVELMOT
Ecuación 6. Condición 2 MOT_RAD
100__0 RADMOTVELMOT
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
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 102 de 170
www.moway-robot.com
//(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 STATUS_T
STATUS_A
STATUS_V_R
STATUS_V_L
STATUS_D_R
STATUS_D_L
STATUS_KM
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 103 de 170
www.moway-robot.com
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 Resolución STATUS_T 100ms/bit STATUS_A 3.6º/bit STATUS_V_R 1%/bit STATUS_V_L 1%/bit STATUS_D_R 1mm/bit STATUS_D_L 1mm/bit STATUS_KM 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 byte 0
0x01 0x08
0000 0001 0000 0100
264
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 104 de 170
www.moway-robot.com
//Ej. Salida:
// mOway_km[0]=0x08
// mOway_km[1]=0x01;
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 Entrada Retorno Descripción
void RF_CONFIG_SPI(void) - - Configura las entradas y
salidas del microcontrolador
así como parámetros
necesarios para utilizar el bus SPI.
void RF_INT_EN(void) - - Esta rutina habilita en el
microcontrolador la interrupción externa para el
módulo de radio.
unsigned char RF_CONFIG(unsigned
char , unsigned char)
CHANNEL
ADDRESS
1: Configuración
correcta 0: No configurado
Configura las entradas y
salidas del microcontrolador así como parámetros del
módulo de radio.
unsigned char RF_ON(void)
- 0: No conectado
1: Conectado
Activa el módulo de
radiofrecuencia en modo escucha.
unsigned char RF_OFF(void) - 0: No desconectado
1: Desconectado
Desactiva el módulo de
radiofrecuencia y lo deja en modo de bajo consumo
unsigned char RF_SEND(unsigned
char, unsigned char )
RF_DIR_OUT
RF_DATA_OUT[]
0:Envío correcto
1:Ack no recibido
2: No enviado
Envía una trama de datos (8
Bytes) a la dirección
indicada.
unsigned char
RF_RECEIVE(unsigned char*,
unsigned char*)
RF_DIR_IN
RF_DATA_IN[]
0: Recepción correcta
y única
1: Recepción correcta y múltiple
2:No recepción
Comprueba si se ha
producido una recepción y
de ser así, recoge la trama.
Tabla 55. Resumen de las funciones en C18.
Distancia: 264*1mm
264mm
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 105 de 170
www.moway-robot.com
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 PIN PIC SCK RC3
SDI RC5
SDO 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 Canal a utilizar en la comunicación. Debe ser un valor entre 0x00
y 0x7F (128 canales).
ADDRESS 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 PIN PIC IRQ RB0
CSN RF2
CE 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.
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 106 de 170
www.moway-robot.com
2.4Ghz 2.401Ghz 2.402Ghz 2.403Ghz
……...
2.405Ghz2.404Ghz 2.525Ghz
Canal
0x01
Canal
0x04
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
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 107 de 170
www.moway-robot.com
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 Dirección a la que se quiere enviar los datos (1 byte).
RF_DATA_OUT[] 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
}
//------------------------------------------------------------------------------------
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 108 de 170
www.moway-robot.com
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
}
}
//----------------------------------------------------------------------------------------
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 109 de 170
www.moway-robot.com
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
Retorno
RF_SEND()
Definir
RF_DIR
Definir
RF_DATA
0
Envio realizado y
AKC recibido
Envio realizado y
AKC no recibido
Envio no realizado
y AKC no recibido
1
2
Diagrama 4. Envio de datos en C
RF_RECEIVE()
Interrupción ext
Retorno
Tratar datos
1
Salir interrupción
Diagrama 5. Recepción con
interrupción en C
Tratar datos
0
2
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 110 de 170
www.moway-robot.com
Retorno
Tratar datos
1
Salir recepción
Diagrama 6. Recepción sin
interrupción en C
Tratar datos
0
2
RF_RECEIVE()
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 111 de 170
www.moway-robot.com
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 Entrada Retorno Descripción
void CAM_CONFIG(void) - - Configura los parámetros del
módulo SPI y los pines del
PIC, así como el controlador de la cámara.
void CAM_SEND_COM (unsigned
char, unsigned char, unsigned char)
COMMAND
ADDRESS
DATA
- Envía un comando por SPI al
controlador de la cámara. Se
compone de 3 bytes.
void CAM_ON (void) - - Activa la cámara.
void CAM_OFF (void) - - Desactiva la cámara.
void CAM_CHN_SEL (unsigned char) CHANNEL - Envía por SPI el comando de
cambio de canal de transmisión al controlador.
void CAM _SPI_WRITE (unsigned
char)
DATA - 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 PIN PIC SCK RC3
SDI RC5
SDO RC4
IRQ RB0
CSN RF2
CE RH4
Tabla 59. Configuración SPI puertos PIC
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 112 de 170
www.moway-robot.com
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 COM_WR para escribir registro
COM_RD para leer registro
ADDRESS_CAM 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
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 COM_WR
ADDRESS_CAM OLAT_ADD
DATA_CAM 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 COM_WR
ADDRESS_CAM OLAT_ADD
DATA_CAM 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.
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 113 de 170
www.moway-robot.com
Variables de entrada CAM_CHANNEL Canal en el que transmitirá la cámara. Debe ser un valor entre 1 y
4.
BYTES COMMAND_CAM COM_WR
ADDRESS_CAM IODIR_ADD
DATA_CAM 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
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 114 de 170
www.moway-robot.com
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.
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 115 de 170
www.moway-robot.com
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.
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 116 de 170
www.moway-robot.com
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
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 117 de 170
www.moway-robot.com
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).
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 118 de 170
www.moway-robot.com
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 “Language”.
Así mismo, se puede comprobar si el software puede ser actualizado por medio de
la opción “Ayuda – Comprobar actualizaciones”.
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 119 de 170
www.moway-robot.com
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 74. 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.
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 120 de 170
www.moway-robot.com
Imagen 75. 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 76. 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.
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 121 de 170
www.moway-robot.com
Imagen 77. 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.
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 122 de 170
www.moway-robot.com
Imagen 78. Configuración de Movimiento y Rotación
Imagen 79. Final de primer programa en MowayWorld
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 123 de 170
www.moway-robot.com
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 80. Ventana de configuración de Movimiento – Recto
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 124 de 170
www.moway-robot.com
Movimiento – Libre
El movimiento libre es similar al anterior, con la diferencia de que
permite controlar las velocidades individuales de cada motor.
Imagen 81. 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.
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 125 de 170
www.moway-robot.com
Imagen 82. 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 83. 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.
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 126 de 170
www.moway-robot.com
Imagen 84. 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, apagar o hacer parpadear. Se puede actuar sobre todos
los LEDs que el usuario necesite de forma simultánea.
Imagen 85. Ventana de configuración de Luces
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 127 de 170
www.moway-robot.com
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 86. Ventana de configuración de Lectura de sensores – Obstáculos
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 128 de 170
www.moway-robot.com
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 87. 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.
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 129 de 170
www.moway-robot.com
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
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 130 de 170
www.moway-robot.com
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
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 131 de 170
www.moway-robot.com
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.
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 132 de 170
www.moway-robot.com
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 88. Ventana de configuración de Módulo IO – Configurar
Módulo IO – Salida
Este módulo activa (On), desactiva (Off) o conmuta 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.
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 133 de 170
www.moway-robot.com
Imagen 89. 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.
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 134 de 170
www.moway-robot.com
Imagen 90. 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.
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 135 de 170
www.moway-robot.com
Imagen 91. 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.
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 136 de 170
www.moway-robot.com
Imagen 92. Ventana de configuración de Comunicación – Recibir
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 137 de 170
www.moway-robot.com
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 93. Creación de una nueva variable
Imagen 94. Creación de una variable desde un módulo
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 138 de 170
www.moway-robot.com
Las variables pueden ser editadas desde la barra de herramientas, en “Variables –
Variables”.
Imagen 95. 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 96. Creación de una función
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 139 de 170
www.moway-robot.com
El funcionamiento del LED explicado anteriormente se define en esta función de
usuario.
Imagen 97. 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 98. Llamada a función 3 veces desde el diagrama principal
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 140 de 170
www.moway-robot.com
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 99. 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 100. Ventana “Comunicaciones”
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 141 de 170
www.moway-robot.com
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 “Ver -> mOway Cam” o desde el icono indicado:
Imagen 101. Acceso a MowayCam
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 142 de 170
www.moway-robot.com
Una vez pulsado el icono, aparecerá el panel lateral de MowayCam.
Imagen 102. 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.
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 143 de 170
www.moway-robot.com
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).
Moway
RFUsb
MOT_DIRPC R
F
USB
Moway_RC
Center.exe
Moway_RC
_Client .hex
Imagen 103. Diagrama mOway RC
Esta aplicación se lanza desde la pestaña “MowayRC -> Abrir” o desde el icono
indicado:
Imagen 104. 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.
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 144 de 170
www.moway-robot.com
Imagen 105. Aplicación mOway RC
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.
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 145 de 170
www.moway-robot.com
8.3.3 Luces En este apartado se controla el encendido y apagado de los cuatro LEDs de
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
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 146 de 170
www.moway-robot.com
Imagen 106. Acceso a Moway Web Server
Aparece el panel lateral de Moway Server.
Imagen 107. 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
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 147 de 170
www.moway-robot.com
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.
Imagen 108. 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.
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 148 de 170
www.moway-robot.com
9. Simulador
9.1 Introducción El simulador de MowayWorld permite probar el funcionamiento de un programa
antes de grabarlo en el robot mOway. De esta forma se puede detectar los posibles
errores que haya en el programa y solucionarlos rápidamente.
El simulador se abre desde la barra de herramientas:
Imagen 109. Acceso al simulador
Al activar el simulador aparecerá en el panel lateral:
Imagen 110. Panel lateral del simulador
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 149 de 170
www.moway-robot.com
Las acciones disponibles en simulador son las siguientes:
Ejecutar: En el modo “Ejecutar”, el simulador ejecuta el programa en
“tiempo real”, es decir, a la velocidad en la que el programa se ejecutaría en
el robot.
Animar: En el modo “Animar”, el simulador ejecuta el programa paso a
paso, deteniéndose durante un segundo en cada bloque. El bloque que está
ejecutando el simulador en cada momento se indica con una flecha amarilla.
Pausa: Detiene la simulación en el bloque actual.
Reiniciar: Al pulsar el botón de reinicio, la simulación vuelve al estado
inicial, es decir, al principio del programa. También se reinicia el valor de
las variables.
Paso a paso con funciones: En este modo, el simulador avanza por el
programa paso a paso, deteniéndose en cada bloque. Además, avanza
también por los las funciones creadas por el usuario.
Paso a paso sin funciones: En este modo, el simulador avanza por el
programa paso a paso, deteniéndose en cada bloque. A diferencia del modo
anterior, el simulador no avanza por las funciones de usuario.
9.2 Funcionamiento
En el simulador, el usuario puede variar el valor de los sensores del mOway y ver
cómo esto afecta al funcionamiento del robot, en función del programa que esté siendo
simulado.
Los apartados del robot que pueden visualizarse y controlarse en la simulación
son los siguientes:
Movimiento, luces y sonido: muestra el estado de los motores, el estado
de los LEDs y el altavoz de mOway.
o El giro de las ruedas se indica por medio de las flechas rojas.
También se refleja la distancia recorrida por el robot.
o El sonido emitido por el robot se indica por medio del icono en
forma de altavoz. Cuando está verde se simula que mOway emite
un sonido. En rojo simula que el sonido se ha detenido.
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 150 de 170
www.moway-robot.com
Sensores de línea y obstáculos: permite simular la variación del valor de
los sensores de línea y obstáculos. El valor de los sensores del simulador
está definido según el valor analógico de los sensores reales del robot. Por
tanto, los valores de los sensores simulados son los siguientes:
Sensores de línea
Línea a
simular
Valor del
sensor
Blanca De 0 a 20
Gris De 21 a 229
Negra De 230 a 255
Sensores de obstáculos
Obstáculo a
simular
Valor del
sensor
Obstáculo no
detectado
De 0 a 127
Obstáculo
detectado
De 128 a 255
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 151 de 170
www.moway-robot.com
Entorno: permite simular la variación del valor de los sensores de luz,
temperatura y el micrófono.
Acelerómetro: permite simular la variación del valor del acelerómetro, en
sus 3 ejes. El valor del acelerómetro varía entre -2g y +2g, siendo “g” la
aceleración de la gravedad (9,81m/s2). Por ejemplo, si queremos simular
que mOway se encuentra sobre una superficie plana, los valores serían los
siguientes:
Sensor de luz
Entorno a simular Valor del sensor
Oscuridad total 0
Luminosidad intensa 100
Sensor de ruido
Entorno a simular Valor del sensor
Silencio 0
Ruido intenso 100
Acelerómetro
Eje del acelerómetro Valor del
acelerómetro (g)
Eje X 0
Eje Y 0
Eje Z 1.00
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 152 de 170
www.moway-robot.com
Comunicaciones: permite simular el envío de datos por radiofrecuencia al
robot mOway, así como simular la recepción de datos enviados por
mOway. En el apartado “Datos del emisor” se simula el envío de datos al
robot. En el apartado “Datos de mOway” se muestra los datos enviados
por el robot simulado.
Registros: muestra un listado de las variables creadas en el programa con
su valor en cada momento.
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 153 de 170
www.moway-robot.com
9.3 Ejemplo de simulación En el siguiente ejemplo se muestra la simulación de un programa en el que el
robot avanza recto durante 12 cm y después enciende el LED frontal. Pulsando el botón
de “Animar” o “Paso a paso”, una flecha amarilla indica en qué punto del diagrama se
encuentra el simulador.
Mientras el simulador ejecuta el bloque “Recta”, se indica la dirección de giro de
las ruedas y se va incrementando la distancia recorrida.
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 154 de 170
www.moway-robot.com
Una vez que el bloque “Recta” ha terminado (el robot habría recorrido 12 cm), el
simulador ejecuta el bloque “Luces”, en el que se enciende el LED frontal. Una vez
hecho esto, el simulador termina.
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 155 de 170
www.moway-robot.com
10. mOway Scratch
10.1 Introducción
Ahora mOway es también compatible con Scratch. La comunicación entre Scratch
y mOway es bidireccional, de modo que Scratch recibe el valor de los sensores de
mOway y a su vez mOway recibe comandos provenientes de Scratch. Para implementar
esta funcionalidad se hace uso de las conexiones mediante sockets de Scratch para
obtener datos de sensores remotos y de los comandos “enviar a todos” para enviar
órdenes a mOway. La aplicación “mOway Scratch” actúa de pasarela de datos entre
Scratch y mOway.
La conexión entre mOway y Scratch se realiza a través de los módulos de
radiofrecuencia mOway y el módulo RFUSB conectado al ordenador. Es por tanto
necesario tener el módulo de radiofrecuencia colocado en la ranura de expansión
mOway y el módulo RFUSB conectado a un puerto USB del ordenador.
10.2 Funcionamiento La comunicación mOway – Scratch se activa por medio de la aplicación “mOway
Scratch”.
Scratch
mOway Scratch
Robot mOway
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 156 de 170
www.moway-robot.com
El botón “Programar” descarga el firmware necesario en mOway para que la
conexión con Scratch sea correcta. Para ello el robot mOway debe estar conectado a
través del puerto USB. El firmware se grabará para funcionar en el canal seleccionado
en la caja “canal”.
Para iniciar la comunicación se pulsa el botón “Conectar al canal …”. El robot
mOway deberá tener el firmware de Scratch previamente grabado, el módulo RFUSB
deberá estar conectado y Scratch abierto con alguno de los programas de ejemplo de
mOway.
Una vez establecida la conexión desde Scratch es posible obtener los valores de
cualquiera de los sensores de mOway y es posible enviar órdenes a mOway para realizar
acciones de movimiento, encender o apagar LEDs y zumbador. Para configurar estas
acciones se hace uso de algunas variables dentro de Scratch.
10.3 Paso a paso
1. Conectar el módulo RF al conector de expansión del robot mOway.
2. Conectar el RFUSB al ordenador.
3. Conectar el robot mOway al ordenador.
4. Abrir la aplicación “mOwayScratch”:
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 157 de 170
www.moway-robot.com
5. Seleccionar el idioma en el que se van a realizar los programas de Scratch
(en este caso, Español):
6. Pulsar el botón “Programar” (no es necesario si el robot ya ha sido
programado previamente de esta forma).
7. Una vez programado correctamente, desconectar el robot mOway del
ordenador y encender el robot.
8. Abrir uno de los proyectos para mOway en Scratch. Se puede acceder a
estos proyectos a través del menú “Inicio -> Todos los programas ->
mOway Pack v3 -> mOway Scratch projects”. Por ejemplo, abrir el
proyecto “moway_RC.sb”.
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 158 de 170
www.moway-robot.com
9. Pulsar “OK”.
10. Una vez abierto el proyecto en Scratch, pulsar el botón “Conectar al
canal…” en la aplicación. El estado del panel de la aplicación será el
siguiente:
11. Volviendo a la ventana de Scratch se verá cómo varían los valores de los
sensores de mOway. Al pulsar los cursores del teclado (flechas), el robot
mOway se desplazará.
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 159 de 170
www.moway-robot.com
Si se quiere emplear varios robots en diferentes ordenadores, es necesario asignar
un canal diferente a cada robot para que no haya interferencias entre ellos. Para ello,
seguir los siguientes pasos:
1. Si la conexión con Scratch se ha iniciado, pulsar el botón “Desconectar”.
2. Asignar un canal diferente a cada robot (en este caso, se elige el canal 4):
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 160 de 170
www.moway-robot.com
3. Reprogramar el robot pulsando en botón “Programar”.
4. Una vez programado correctamente, desconectar el robot mOway del
ordenador y encender el robot.
5. Pulsar el botón “Conectar al canal…”.
10.4 Comandos y Sensores A continuación se presenta la relación de acciones disponibles para ejecutar desde el
entorno Scratch y las variables que configuran cada acción. El envío de comandos a
mOway se realiza empleando el bloque de control “enviar a todos”. Por ejemplo, el
mensaje “giro(izquierda)” realizaría un giro hacia la izquierda:
Comando Descripción Variables
empleadas
adelante mOway avanaza recto de forma indefinida,
con una velocidad del 50%. -
atras mOway retrocede recto de forma indefinida,
con una velocidad del 50%. -
izquierda mOway realiza un giro de 90º hacia la
izquierda. -
derecha mOway realiza un giro de 90º hacia la
derecha. -
mediavuelta mOway gira media vuelta. -
parar mOway se detiene. -
reset(distancia) Resetea el contador de distancia total de los
motores. -
adelante(recto)
mOway avanza recto a una velocidad
determinada durante la distancia “distancia” o
el tiempo “tiempo”. Si “tiempo” y “distancia”
son iguales a cero, mOway avanzará
indefinidamente.
atras(recto)
mOway retrocede recto. Su comportamiento
es idéntico a “adelante”, pero en sentido
contrario.
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 161 de 170
www.moway-robot.com
adelante(izquierda)
mOway avanza en una curva hacia la
izquierda de un radio determinado a una
velocidad determinada durante la distancia
“distancia” o el tiempo “tiempo”. Si “tiempo”
y “distancia” son iguales a cero, mOway
avanzará indefinidamente.
adelante(derecha)
mOway avanza en una curva hacia la derecha.
Idéntico pero en dirección opuesta a
“adelante(izquierda)”.
atras(izquierda)
mOway retrocede en una curva hacia la
izquierda. Idéntico pero en sentido opuesto a
“adelante(izquierda)”.
atras(derecha)
mOway retrocede en una curva hacia la
derecha. Idéntico pero en sentido opuesto a
“atras(izquierda)”.
giro(izquierda)
mOway realiza una rotación a una velocidad
determinada de un ángulo determinado hacia
la izquierda, sobre su eje o sobre una rueda. Si
el ángulo (“rotación”) es igual a cero, la
rotación se realiza de manera indefinida.
giro(derecha)
mOway realiza una rotación hacia la derecha.
Idéntico a “giro(izquierda)”, pero en dirección
opuesta.
ledfrontal(on) Activa el LED frontal. -
ledfrontal(off) Desactiva el LED frontal. -
ledfrontal(parpadeo) Parpadea el LED frontal. -
ledfreno(on) Activa el LED de freno -
ledfreno(off) Desactiva el LED de freno -
ledfreno(parpadeo) Parpadea el LED de freno. -
ledverde(on) Activa el LED verde superior -
ledverde(off) Desactiva el LED verde inferior -
ledverde(parpadeo) Parpadea el LED verde. -
ledrojo(on) Activa el LED rojo superior -
ledrojo(off) Desactiva el LED rojo superior -
ledrojo(parpadeo) Parpadea el LED rojo superior. -
leds(on) Activa todos los LEDs. -
leds(off) Desactiva todos los LEDs. -
leds(parpadeo) Parpadea todos los LEDs. -
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 162 de 170
www.moway-robot.com
sonido(on) Activa el altavoz con un sonido a una
frecuencia determinada. sonido(off) Desactiva el altavoz. -
encerrado
Subprograma para que mOway se quede
encerrado dentro de un círculo negro. Avanza
cuando está sobre una superficie blanca y
cuando llega a una línea negra, da la vuelta.
-
empujar Subprograma para detectar objetos. mOway
busca los objetos y los empuja. -
defensor
Subprograma para que mOway expulse
objetos dentro de un círculo negro. Combina
los subprogramas “encerrado” y “empujar”.
-
seguirlinea(izquierda) Subprograma para seguir una línea negra por
el lado izquierdo. -
seguirlinea(derecha) Subprograma para seguir una línea negra por
el lado derecho. -
En la siguiente tabla se muestran la relación de variables con los valores que pueden
tomar para la correcta ejecución de los comandos:
Variable Descripción Rango de Valores
distancia Distancia a recorrer en mm 0 – 255 mm ( 0 – 25,5 cm )
frecuencia Frecuencia de la señal del altavoz 0 – 16000 Hz
radio Radio de curvatura 0- 100 (radio + velocidad < 100)
rotacion Ángulo de rotación en grados 0 – 360 º
eje-rotacion Eje de rotación Wheel – Sobre rueda
Cualquier valor – Sobre centro
velocidad Velocidad de movimiento 30 -100 %
tiempo Tiempo de movimiento en
décimas de segundos
0 – 255 (0 - 25,5 segundos)
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 163 de 170
www.moway-robot.com
En la siguiente tabla se muestran las variables de mOway que podemos leer en Scratch
utilizando el bloque “valor del sensor”. Por ejemplo, este bloque indicaría el valor del
sensor de línea derecho del robot:
Variable Descripción Rango de Valores
Obstaculos lateral
izquierdo
Sensor de obstáculos izquierdo lateral 0 (sin obstáculo)
100 (obstáculo muy cerca)
Obstaculos central
izquierdo
Sensor de obstáculos izquierdo
central
0 (sin obstáculo)
100 (obstáculo muy cerca)
Obstaculos central
derecho
Sensor de obstáculos derecho central 0 (sin obstáculo)
100 (obstáculo muy cerca)
Obstaculos lateral
derecho
Sensor de obstáculos derecho lateral 0 (sin obstáculo)
100 (obstáculo muy cerca)
Linea izquierdo Sensor de línea izquierdo 0 (blanco) – 100 (negro)
Linea derecho Sensor de línea derecho 0 (blanco) – 100 (negro)
Luz(R) Sensor de luz ambiente 0 – 100%
Distancia Contador de km en mm -
Microfono Nivel de ruido ambiental 0- 100%
Eje-X g Aceleración en g en el eje X -2.0 – 2.0 g
Eje-Y g Aceleración en g en el eje Y -2.0 – 2.0 g
Eje-Z g Aceleración en g en el eje Z -2.0 – 2.0 g
Motor Fin Sensor que se activa cuando el último
comando enviado al motor ha
finalizado
0 - 1
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 164 de 170
www.moway-robot.com
10.5 Prácticas Para entender mejor la integración con mOway, dentro del instalador
MowayWorld se incluyen cinco prácticas de ejemplo. Por defecto se encuentran en la
siguiente carpeta: “Archivos de Programa -> mOwayPack v3 -> mOway Robot ->
mOway Scratch projects”. También puede accederse desde el menú “Inicio -> Todos
los programas -> mOway Pack v3 -> mOway Scratch projects”.
10.5.1 Figuras geométricas El siguiente programa de Scratch reproduce formas geométricas. Los ejemplos
pueden encontrarse en la carpeta de los proyectos Scratch de mOway Pack, con el
nombre “moway_cuadrado.sb” y “moway_triangulo.sb”.
La figura geométrica se determina variando el número de iteraciones (lados del
polígono), “rotacion” (ángulos de rotación de mOway) y “distancia” (longitud del lado).
La misma figura geométrica que se reproduce en Scratch la reproducirá mOway en el
mundo real.
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 165 de 170
www.moway-robot.com
El resultado que se obtiene es que el robot traza un cuadrado. Se observa que el
cuentakilómetros de mOway marca aproximadamente (con un cierto margen de error)
los 200 mm x 4 lados recorridos por mOway.
Si se modifican la variable de rotación a 120º y el número de iteraciones del
bloque “repetir” a 3, el resultado obtenido será un triángulo equilátero.
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 166 de 170
www.moway-robot.com
10.5.2 Encerrado El objetivo de esta práctica es que mOway avance hasta que se encuentre con una
línea negra. El programa de la práctica está en la carpeta de los proyectos Scratch de
mOway Pack, con el nombre “moway_encerrado.sb”.
Cuando en alguno de los dos sensores de línea detecta una línea negra, mOway
retrocederá un poco, dará la vuelta y continuará avanzando. De este modo mOway
quedará encerrado dentro de un contorno negro sobre un fondo blanco.
A su vez la detección también tendrá su reflejo en Scratch. Cada vez que mOway
detecte una línea negra, el objeto rotará y avisará de que ha detectado una línea.
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 167 de 170
www.moway-robot.com
10.5.3 MowayRC
La siguiente práctica actúa como un radiocontrol de mOway empleando Scratch.
El programa puede encontrarse en la carpeta de los proyectos Scratch de mOway Pack,
con el nombre “moway_RC_ES.sb”.
Con las teclas de dirección controlamos el movimiento de mOway y con algunas
teclas adicionales activamos el LED frontal o el zumbador.
En el escenario observaremos los valores de los sensores de mOway en tiempo real.
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 168 de 170
www.moway-robot.com
10.5.4 Acelerómetro En este práctica mOway actuará como si fuera un mando de una consola de
videojuegos, empleando el acelerómetro. El programa puede encontrarse en la carpeta
de los proyectos Scratch de mOway Pack, con el nombre “moway_acel.sb”.
El objetivo es mantener a mOway dentro del cuadrado de la pantalla de Scratch.
Inclinando el mOway, el objeto de Scratch se desplazará por la pantalla. En el caso de
que el objeto toque el borde, el robot mOway activará el zumbador y el LED frontal.
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 169 de 170
www.moway-robot.com
Podemos modificar la práctica añadiendo más obstáculos y más dificultad.
Título: Manual Usuario Rev: v3.1.0 – Febrero 2013 Página: 170 de 170
www.moway-robot.com