Laboratorio de Sistemas Electrónicos Digitales
ROBOT C CON C CONTROL R REMOTO Y C CÁMARA D DE V VÍDEO IINTEGRADA
AUTORES PABLO RODRÍGUEZ CABELLOS EUGENIO SILLERO HERRERO
Robot con control remoto y cámara de vídeo integrada
ÍNDICE 1. INTRODUCCIÓN INTRODUCCIÓN .............. ........................... ........................... ........................... ........................... ................. ... 7 1.1. 1.2.
OBJETIVOS OBJETIVOS ....................... .................................. ...................... ....................... ....................... ...................... .....................7 ..........7 DESCRIPCIÓN DEL ROBOT ...................... .................................. ....................... ...................... ..................7 .......7
2. PROTOCOLOS PROTOCOLOS DE COMUNICACIONE COMUNICACIONES S ............ .......................... ................... ..... 14 2.1. 2.2. 2.3. 2.3.
EL NIVEL FÍSICO: ENLACE RADIOFRECUE RADIOFRECUENCIA NCIA.......... .................... ..................14 ........14 NIVEL DE ENLACE: LAPR ..................... ................................. ....................... ...................... .....................16 ..........16 PROTOCOLO DE COMANDOS COMANDOS ..................... ................................ ....................... ....................... .............18 ..18
2.3.1. 2.3.2. 2.3.3.
2.4.
ÓRDENES DE MOTORES ...............................................................................19 ÓRDENES DEL SISTEMA ...............................................................................20 ÓRDENES DE IMAGEN ...................................................................................20
PROTOCOLO DE DATOS.......................... DATOS...................................... ....................... ...................... .................21 ......21
2.4.1. 2.4.2.
ESTADO DEL ROBOT .....................................................................................21 RECOMPONIENDO LA IMAGEN.....................................................................21
3. TARJETA TARJETA DE CONTROL CONTROL DE MOTORES MOTORES............. .......................... .................. ..... 24 3.1.
DESCRIPCIÓN DEL HARDWARE HARDWARE ...................... ................................. ...................... ....................24 .........24
3.1.1. 3.1.2. 3.1.3. 3.1.4.
3.2.
ALIMENTACIÓN ...............................................................................................24 SENSORES ................................................................................................... ...................................................................................................... ... 25 DRIVER DE MOTORES ...................................................................................27 PROCESADO ...................................................................................................29
DESCRIPCIÓN DEL SOFTWARE..................... SOFTWARE................................ ...................... ......................32 ...........32
3.2.1. 3.2.2. 3.2.3. 3.2.4. 3.2.5. 3.2.6.
EQUIVALENCIAS Y VECTORES DE INTERRUPCIÓN .................................. 32 RUTINA DE RESET..........................................................................................35 MODO AUTOMÁTICO......................................................................................37 MODO MANUAL...............................................................................................41 INTERRUPCIONES..........................................................................................44 SUBRUTINAS...................................................................................................47
4. TARJETA TARJETA DE CONTROL PRINCIPAL................. PRINCIPAL............................... ................... ..... 54 4.1. 4.1.
DESCRIPCIÓN DEL HARDWARE HARDWARE ...................... ................................. ...................... ....................54 .........54
4.1.1. 4.1.2. 4.1.3. 4.1.4.
4.2.
ALIMENTACIÓN ...............................................................................................55 CONTROL DE ORIENTACIÓN DE LA CÁMARA ............................................55 INTERFAZ DE LA CÁMARA.............................................................................56 PROCESADO ...................................................................................................58
DESCRIPCIÓN DEL SOFTWARE SOFTWARE............ ....................... ...................... ...................... ....................60 .........60
4.2.1. 4.2.2. 4.2.3. 4.2.4. 4.2.5. 4.2.6. 4.2.7.
EQUIVALENCIAS Y VECTORES DE INTERRUPCIÓN .................................. 60 RUTINA DE RESET..........................................................................................62 RUTINAS DE CONFIGURACIÓN DE CÁMARA ..............................................64 EL PROGRAMA PRINCIPAL............................................................................68 ADQUISICIÓN DE DATOS............................................................................... 69 LAS RUTINAS DE ENLACE.............................................................................70 EL NIVEL FÍSICO .............................................................................................78
5. HOST DE CONTROL CONTROL REMOTO REMOTO.............. ........................... .......................... ................... ...... 82 5.1. 5.2. 5.3. 5.4.
PLACA DE CONTROL................ CONTROL............................ ....................... ....................... ....................... .....................82 ..........82 EL SOFTWARE SOFTWARE ....................... .................................. ...................... ....................... ....................... ...................... ..............85 ...85 PAQUETE COM.THEEXBTEAM.COMM............................................86 PAQUETE COM.THEEXBTEAM.ROBOTS........................................88
6. APÉNDICE APÉNDICE A: INSTALACIÓN INSTALACIÓN DEL SOFTWARE................... SOFTWARE................... 92
-2-
Robot con control remoto y cámara de vídeo integrada
6.1. 6.2. 6.3. 6.4.
INSTALACIÓN DEL ENTORNO JAVA............... JAVA.......................... ...................... ......................92 ...........92 INSTALACIÓN DE LAS LIBRERÍAS JAVAX.COMM...........................93 INSTALACIÓN DE LA APLICACIÓN LA APLICACIÓN DE CONTROL CONTROL ..................... ..........................94 .....94 INSTALACIÓN DE JAKARTA-ANT.....................................................94
7. APÉNDICE APÉNDICE B ESQUEMÁT ESQUEMÁTICOS ICOS DE LAS LAS PLACAS PLACAS ........... ............... .... 96 8. APÉNDICE APÉNDICE F: AVISOS LEGALES LEGALES.............. ............................ ............................ .............. 99 8.1. 8.2. 8.3.
PAQUETES COM.THEEXB COM.THEEXBTEAM.* TEAM.* ...................... ................................. ....................... ..................99 ......99 LIBRERÍAS JAVAX.COMM JAVAX.COMM ..................... ................................ ...................... ...................... .....................99 ..........99 TERCERAS PARTES PARTES ...................... .................................. ....................... ...................... ....................... ...............100 ...100
9. BIBLIOGRAFÍA BIBLIOGRAFÍA ............. ........................... ............................ ............................. ............................ ............. 101 9.1. 9.2. 9.3.
REFERENCIAS BIBLIOGRÁFICAS (POR HACER) HACER) .................... .........................101 .....101 HOJAS DE CARACTERÍSTICAS Y RECURSOS EN LA RED..........101 DIRECCIONES DE FABRICANTES Y PROVEEDORES..................102
-3-
Robot con control remoto y cámara de vídeo integrada
ÍNDICE DE ILUSTRACIONES Figura 1 Figura 2 Figura 3 Figura 4 Figura 5 Figura 6 Figura 7 Figura 8 Figura 9 Figura 10 Figura 11 Figura 12 Figura 13 Figura 14 Figura 15 Figura 16 Figura 17 Figura 18 Figura 19 Figura 20 Figura 21 Figura 22 Figura 23 Figura 24 Figura 25 Figura 26 Figura 27 Figura 28 Figura 29 Figura 30 Figura 31
Vista general del prototipo en madera del robot.............................8 Vista lateral lateral del robot............................... robot.......................................... ...................... ....................... ................. .....8 8 Detalle de la batería del robot.........................................................9 Tarjeta de control del robot y radio enlace......................................9 Frontal del robot robot con con los bumpers de colisión .......................... ............ .................. .... 10 Parte inferior inferior del robot. ....................... .................................. ....................... ....................... ...................11 ........11 Detalle del bastidor delantero.......................................................11 Detalle de los sensores CNY70 del robot.....................................12 Tarjeta de control de motores con todos los sensores conectado conectadoss ..................... ................................ ....................... ....................... ...................... ....................... ................. .....12 12 Comunicación serie un bit de arranque, 8 de datos y uno de parada. parada. ...................... .................................. ....................... ....................... ....................... ....................... .....................14 .........14 Módulo Módulo de radio frecuencia frecuencia WIZ-434-SM WIZ-434-SML-IA L-IA de Auriel ............... ...............15 15 Esquema Esquema de las tramas de comandos. comandos. ..................... ................................ ...................17 ........17 Esquema de las tramas de ACK de comando..............................17 Esquema Esquema de las tramas de estado estado ...................... ................................. ...................... .............. ...18 18 Esquema de las tramas de de píxeles píxeles de imágenes. ........................ ............ ............ 18 Detalle de la trama de datos de estado ........................... .............. .......................... ............. 21 Gráfico del proceso de cálculo de la fila y columna de imagen. ....................... .................................. ....................... ....................... ....................... ....................... ....................... .....................22 .........22 Esquema de la tarjeta de control de motores. .......................... ............. ................. .... 24 Sistema de alimentación de la tarjeta de control de motores. motores. ...... 25 Polarizac Polarización ión de los sensores CNY70. CNY70. ...................... ................................. ....................26 .........26 Conexión de los sensores CNY70................................................26 Polarización de los bumpers.........................................................27 Conexión Conexión de los bumpers. bumpers. ..................... ................................. ....................... ...................... ................ .....27 27 Esquema del driver de motores....................................................28 Conexione Conexioness del microcontr microcontrolado olador. r. ..................... ................................ ...................... ................ .....29 29 Interfaz del programación AVR.....................................................30 Circuito Circuito de reset. ..................... ................................. ....................... ...................... ....................... ...................30 .......30 Lógica de adaptación para la interrupción mecánica....................31 Esquema de la tarjeta de control principal....................................54 Sistema Sistema de orientació orientación n de la cámara. ....................... .................................. ...................56 ........56 Cámara Cámara digital digital M64282FP M64282FP............ ....................... ....................... ....................... ....................... .............. ..57 57 -4-
Robot con control remoto y cámara de vídeo integrada
Figura 32 Figura 33 Figura 34 Figura 35 Figura 36 Figura 37 Figura 38 Figura 39 Figura 40 Figura 41 Figura 42 Figura 43 Figura 44 Figura 45 Figura 46
Interfaz de la tarjeta principal principal con con la cámara. ........................... ............. .................. .... 57 Asignación de terminales de de la cámara digital al bus de datos .... 58 Conexione Conexioness del microcontr microcontrolado olador. r. ..................... ................................ ...................... ................ .....58 58 Detalle del registro de estado COMM...........................................69 Esquema de funcionamiento de los codificadores de enlace ....... 72 Placa de control del host .......... host ...................... ....................... ....................... ....................... ................. ......82 82 Detalle del adaptador MAX232.....................................................83 Detalle de la conexión con la tarjeta de radio frecuencia ............. 83 LEDs de la placa de control..........................................................84 Pines de contacto de la tarjeta de radiofrecuencia WIZ-434SML-IA........... SML-IA....................... ....................... ....................... ....................... ....................... ....................... .....................85 ..........85 Diagrama UML del paquete com.theexbteam.comm....................87 Diagrama UML del paquete com.theexbteam.robots ................... ............... .... 89 Aspecto de la interface gráfica de usuario.. usuario............... .......................... ..................... ........ 91 Logotipo del lenguaje de programación Java de Sun Microsystems................................................................................92 Logotipo Logotipo del proyecto proyecto APACHE ANT ...................... ................................. .....................92 ..........92
-5-
Robot con control remoto y cámara de vídeo integrada
ÍNDICE DE TABLAS Tabla 1. Tabla 2. Tabla 3. Tabla 4. Tabla 5.
Pila de protocolos protocolos.. ...................... .................................. ....................... ....................... ....................... ............... ....14 14 Configura Configuración ción de velocidad velocidad de las tarjetas tarjetas WIZ-SML-IA. WIZ-SML-IA. ............. .............15 15 Comandos Comandos de motores motores ..................... ................................. ....................... ...................... .....................19 ..........19 Comandos Comandos del sistema sistema ...................... ................................. ...................... ...................... .....................20 ..........20 Comandos Comandos de imagen ..................... ................................ ....................... ....................... ......................20 ...........20
-6-
Robot con control remoto y cámara de vídeo integrada
1. INTRODUCCIÓN INTRODUCCIÓN 1.1. OBJETIVOS La práctica se compone de un robot motorizado con dos servomotores, manipulados para funcionar como motores de continua con caja reductora, y un sistema de adquisición de vídeo usando una cámara CCD de 128x128 píxeles monocroma. El sistema está controlado remotamente por un PC y una aplicación que recibirá las imágenes capturadas por la cámara del robot y transmitirá las órdenes de desplazamiento al robot. El enlace se realiza mediante una tarjeta de radiofrecuencia halfduplex de 100 kbps de la casa AURºEL. El enlace se controla desde un PC por el puerto serie, estableciendo una comunicación directa con el robot. El robot está gobernado por una tarjeta con un microcontrolador ATMEL AT90S8515 que se comunica con el PC del usuario, adquiere datos desde la cámara y puede controlar otra tarjeta similar que conforma el sistema de control motriz. Esta segunda tarjeta hace funcionar al robot como un seguidor de línea al incorporar los sensores necesarios. Sin embargo, el sistema motriz puede ser controlado por el usuario en un modo de ejecución especial. La microcámara que se emplea es el modelo M64282FP Artificial Retina de Mitsubishi Electric o similares. Se orienta mediante un servomotor a pesar de que el sistema tiene capacidad para controlar dos. El objetivo buscado es la creación de un robot multifunción, fácilmente reprogramable. Para ello se ha querido desarrollar una plataforma multiuso con varios modos de ejecución, así cómo unas librerías software para la comunicación vía radio y control del sistema.
1.2. DESCRIPCIÓN DEL ROBOT ROBOT Como se ha descrito antes el robot consta de distintas placas que se montan sobre una estructura común. Se ha buscado crear un soporte robusto y compacto para albergar los distintos sistemas del robot. -7-
Robot con control remoto y cámara de vídeo integrada
La estructura es de madera por su fácil manejo y poco peso. En la parte superior del robot se colocan la batería, la tarjeta de radio, la tarjeta principal y el sistema de la cámara. En la parte inferior se colocan los motores y soportes necesarios así como la tarjeta de control de motores y un bastidor en el que se hayan los sensores CNY70 encargados de la detección de la línea.
Figura 1 Vista general del prototipo en madera del robot
Figura 2 Vista lateral del robot
-8-
Robot con control remoto y cámara de vídeo integrada
La batería utilizada es una batería típica para aplicaciones de radiocontrol. Es una batería de Ni-Ca con una tensión nominal de 7,2V. Se ha elegido esta batería por su tamaño y por su durabilidad. Proporciona potencia suficiente para alimentar todos los sistemas del robot.
Figura 3 Detalle de de la batería del robot
La tarjeta de radio, la cámara y la tarjeta de control principal forman el cerebro del robot y se describen intensivamente en otros apartados. Ocupan la parte superior del robot para facilitar el acceso a ellas. La tarjeta de control tiene varias interfaces. A parte de los distintos conectores para comunicarse con la tarjeta de radio, la de control de motores y la cámara dispone de una interfaz de programación integrada.
Figura 4 Tarjeta de control del robot y radio enlace
-9-
Robot con control remoto y cámara de vídeo integrada
También dispone de unos LEDs de indicación y un pulsador de reset. Los LEDs se utilizan para notificar que la alimentación está encendida, que la programación del microcontrolador está en curso o que se ha activado una traza de depuración. En la parte superior delantera también se colocan los sensores de detección de colisión frontal.
Figura 5 Frontal del robot con los bumpers de colisión
En la parte inferior se colocan los motores sujetos por abrazaderas. Son dos servomotores manipulados para funcionar como motores de corriente continua con caja reductora. Los dos motores junto con una rótula adherida a un zócalo forman el sistema motriz y de apoyo de robot.
- 10 -
Robot con control remoto y cámara de vídeo integrada
Figura 6 Parte inferior del robot.
En la parte inferior también se colocan los sensores de colisión trasera y los de detección de línea. Los sensores de detección de línea se colocan en un bastidor ajustable en altura mediante unas gomas. Esto se debe a que estos sensores tienen que estar cerca de la superficie a explorar para proporcionar medidas fiables. Además el bastidor impide que una luz ambiente excesiva induzca ruido en las lecturas.
Figura 7 Detalle del bastidor delantero
La colocación de los sensores se hace de forma que haya dos sensores centrales que deben estar al mismo tiempo sobre la línea. Los dos sensores laterales se colocan ligeramente retrasados con respecto a los otros. Con esta colocación se consigue que si el robot se sale en una - 11 -
Robot con control remoto y cámara de vídeo integrada
curva por la inercia los sensores laterales sigan detectando la línea. En este caso el robot deberá intensificar el giro para volver a la situación deseada. Al estar estos dos sensores retrasados se maximiza la probabilidad de que sigan detectando la línea si el robot se sale en una cuerva.
Figura 8 Detalle de los sensores CNY70 del robot.
La tarjeta de control de motores se coloca en el espacio libre bajo el robot. Consta de dos puertos de sensores, uno para los CNY70 (sensores de línea) y otro para los bumpers (sensores de colisión). También dispone de puertos para los motores y para comunicarse con la tarjeta principal. Los otros dos puertos son el de programación y el de expansión. Este último no se usa en esta aplicación y el primero es exactamente igual al de la tarjeta principal.
Figura 9 Tarjeta de control de motores con todos los sensores conectados
En cuanto a la interfaz con el usuario se refiere, a los LEDs de indicación de la otra tarjeta se añade uno más. También incorpora un nuevo pulsador, el de marcha. El nuevo LED indica que el sistema motriz se ha iniciado y está listo para arrancar. Cuando se enciende este LED el - 12 -
Robot con control remoto y cámara de vídeo integrada
robot espera a que el usuario pulse el botón de marcha para arrancar. El sistema aplica un retardo antes de moverse para que el usuario pueda apartar la mano.
- 13 -
Robot con control remoto y cámara de vídeo integrada
2. PROTOCOLOS PROTOCOLOS DE COMUNICACIONES Se han definido dos protocolos de comunicaciones: uno para cada una de las funciones principales del sistema, el control remoto del robot y el envío de los datos al control remoto. La pila de protocolos empleada es la siguiente: Niveles
Protocolos
RESTO
END TO END APPLICATION
ENLACE
LAPR
FÍSICO
RS-232/TTLoRF Tabla 1. Pila de protocolos.
Dado que solamente existe comunicación con una única unidad remota y un único host controlador no hace falta especificar ningún sistema de direccionamiento. El nivel de enlace lleva a cabo las tareas de entramado, separación de los distintos protocolos de comunicaciones y en el caso del protocolo de comandos, asegurar que todos los datos enviados llegan a su destino, tal como se detalla seguidamente.
2.1. EL NIVEL FÍSICO: ENLACE RADIOFRECUENCIA RADIOFRECUENCIA La comunicación se lleva a cabo mediante una interface serie con ocho bits de datos, uno de inicio y otro de parada a través de un enlace de radiofrecuencia.
Figura 10 Comunicación serie un bit de arranque, 8 de datos y uno de parada.
Este enlace lo realizan las tarjetas Auriel WIZ-434-SML-IA y exige una fragmentación de datos de 96 bytes por paquete, brindando un canal de comunicaciones half-duplex de de cadencia 100 kbps. Emplea la banda - 14 -
Robot con control remoto y cámara de vídeo integrada
libre de los 433 MHz para mandar los datos mediante una modulación 2FSK.
Figura 11 Módulo de radio frecuencia WIZ-434-SML-IA de Auriel
La interface entre la tarjeta de radiofrecuencia y el host destinatario se realiza a una tasa binaria configurable entre los 9600 bps y los 115200 bps, siendo esta última cifra la empleada en nuestro sistema dada la alta tasa de datos que se envían desde la unidad remota hacia el host de control. La tasa binaria se configura mediante los switches 1 switches 1 y 2 según la tabla siguiente: DS1 Abierto Abierto Cerrado Cerrado
DS2 Abierto Cerrado Abierto Cerrado
VELOCIDAD (bps) 9600 19200 57600 115200
Tabla 2. Configuración Configuración de velocidad velocidad de las tarjetas tarjetas WIZ-SML-IA. WIZ-SML-IA.
La tarjeta de radiofrecuencia se pone automáticamente a modular la información a transmitir transcurrido un tiempo igual a 1,5 veces el período de byte, T: T out
=
3
3 2+8 ·T = · 2 2 vb
Para nuestro caso, dado que transmitimos a una cadencia de 115200 bps, resulta: T out
- 15 -
≈
130 s
Robot con control remoto y cámara de vídeo integrada
Sin embargo, según indican las hojas de características del fabricante, el mínimo tiempo de guarda es de 500µs, que es el T out que se usará. Finalmente, la tarjeta de radiofrecuencia tarda un tiempo T mod en modular un paquete de N bytes igual a: T mod
=
3.6ms + ( N + 2)·0.156ms,
durante el cual no se puede mandar ningún dato a la tarjeta, pues ésta los descarga automáticamente. El fabricante recomienda guardar como precaución unos pocos milisegundos más antes de mandar el siguiente paquete de datos, por lo que se ha tomado un valor de tiempo de seguridad adicional de 2ms. El módulo WIZ-SML-IA proporciona además capacidad de detección de errores, activando el switch 3, switch 3, entrega únicamente los datos si éstos han pasado satisfactoriamente el checksum al checksum al que son sometidos. Para nuestro caso, hemos usado esta característica para evitar sobrecargar el microprocesador principal.
2.2. NIVEL DE ENLACE: LAPR La información que se debe transferir a través del enlace radiofrecuencia puede ser de dos tipos: órdenes o comandos y datos de estado o imágenes. Dado que sólo se dispone de un único canal se precisa de una multiplexación en el tiempo para poder transmitir toda esta información y no tener problemas de mala interpretación. Por ello se define el protocolo de enlace LAPR (Link Access Protocol for Robots.) Este protocolo ofrece dos tipos de servicio, cada uno orientado a cubrir las necesidades de envío de comandos o de datos. Las tramas de bits se transmiten con un separador de trama, que es el byte 01111110 (126 en decimal) seguido de la cabecera identificadora de servicio, la cabecera de control y los datos a enviar. Cada servicio se identifica a través de un único bit LSAPID (Link Service Access Point Identifider.) Así:
- 16 -
Robot con control remoto y cámara de vídeo integrada
•
LSAPID 0 Servicio de Comandos. Este servicio es un servicio
orientado a conexión fiable y confirmado. Se emplea para transmitir desde el host de control a la unidad remota las órdenes, y por ello cada orden es confirmada por el robot enviando una trama de ACK de Comando: Envío de Comando: 01111110 7
LSAPID 0 0
7
C FR ID
6 5 Byte 1
Byte 0
0
COMANDO 7
0 Byte 2
Figura 12 Esquema de las tramas de comandos.
Para enviar un comando, la cabecera de control deberá incluir su bit más significativo puesto a cero, seguido de cinco bits que indican el identificador de trama (C FR ID.) El siguiente byte es el comando a transmitir. Los dos últimos bytes, al ser ‘datos’, son codificados para evitar que cadenas de la forma 01111110 se confundan con separadores de trama, pudiendo llegar a ocupar, a nivel físico 4 bytes el envío (sin contar con los bits de arranque y parada.) Así, la ventana de transmisión de comandos queda con un tamaño de 64 comandos, permitiendo ráfagas de hasta 64 órdenes. En la implementación del software de control, la ventana no se desplaza hasta haber recibido los ACKs de todos los comandos recibidos. Este servicio reenvía automáticamente los comandos no confirmados hasta que sean confirmados, o bien se envíe el comando
reservado
0xFF
de
sincronización
(función
de
inicio/sincronización de la conexión.) Envío de ACK de Comando: 01111110 7
LSAPID 1 0
Byte 0
7
C FR ID
6 5 Byte 1
4
Figura 13 Esquema de las tramas de de ACK de comando.
Para confirmar un comando, el servicio 0 de enlace manda automáticamente una trama compuesta por el separador de trama, el LSAPID 0 y en la cabecera de control, el bit más significativo (ACK)
- 17 -
Robot con control remoto y cámara de vídeo integrada
activo, seguido de los cinco bits del ID de trama. Los ACKs se envían siempre que, o bien se haya recibido un comando con FRAME ID igual al esperado o bien se haya recibido un comando ya recibido anteriormente, y que por tanto, el hueco de la ventana de recepción correspondiente a su FRAME ID contenga dicho comando. •
LSAPID 1 Servicio de Datos. Este servicio es un servicio no
orientado a conexión fiable y no confirmado. Independientemente de que el host remoto esté escuchando, el robot transmite continuamente el estado de la unidad y, salvo orden expresa del host de control, los datos de la cámara. Como se puede transmitir tanto el estado como píxeles de la cámara se sigue el siguiente criterio: Envío de Estado: 01111110
LSAPID 0 IHB
7
0
7
6
5
Byte 0
GL 4 3 Byte 1
2
1
0
Figura 14 Esquema de las tramas de estado
Donde se disponen de seis bits para los datos de estado. En el apartado “Protocolo de datos” se explica detalladamente el uso de cada uno de ellos. Envío de Píxeles de Imágenes: 01111110 7
LSAPID 1 0
Byte 0
7
I ROW#
6 5 Byte 1
0
PIXELES(…) 7
0 Byte 2,3…
Figura 15 Esquema de las tramas de píxeles de imágenes.
La cabecera de control incluye en sus seis bits menos significativos los seis menos significativos de la fila a la que pertenecen los píxeles que se reciben. La recomposición de la imagen se detalla en el apartado “Protocolo de datos.”
2.3. PROTOCOLO DE COMANDOS COMANDOS La implementación del protocolo de comandos destina un byte para el envío de comandos, permitiendo el uso de hasta 256 órdenes distintas. Las órdenes se dividen en tres tipos: mecánicas o de motores, de sistema o de imagen.
- 18 -
Robot con control remoto y cámara de vídeo integrada
2.3.1. ÓRDENES DE MOTORES Las órdenes de motores se enmascaran con los dos bit más significativos puestos a cero (00xxxxxx.) Se han definido catorce órdenes de movimiento distintas que recogen todas las posibilidades que se pueden realizar con los dos motores principales del robot. Estas órdenes, con la máscara 0000xxxx se envían directamente desde la tarjeta de control principal del robot hacia la tarjeta de control de motores, que automáticamente pasa al modo manual. Asimismo, la orden 1410 = 0x0E, de ‘MODO_AUTOMÁTICO’ no se envía a la tarjeta de control de motores. En vez de ello, lo que se hace es poner el bit “MODE” (PC5) a 0 (automático.) El conjunto de comandos de motores es el siguiente: Nombre Recto Giro Derecha Giro Izquierda Marcha Atrás Desvío Derecha
HEX 0x00 0x01 0x02 0x03 0x04
Desvío Izquierda
0x05
Gira Derecha Trasero
0x06
Gira Izquierda Trasero
0x07
Acelerar Reducir Busca Línea Y Para Rota Derecha
0x08 0x09 0x0a 0x0b
Rota Izquierda
0x0c
No Definido Modo Automático
0x0d 0x0e
Paro Total
0x0f
Descripción Desplazamiento Desplazamiento hacia delante. Gira a la derecha. Gira a la izquierda. Desplazamiento Desplazamiento hacia atrás. Desplazamiento Desplazamient o hacia delante y la derecha. Desplazamiento Desplazamient o hacia delante y la izquierda. Desplazamiento Desplazamient o hacia atrás y la derecha. Desplazamiento Desplazamient o hacia atrás y la izquierda. Aumentar la velocidad velocidad global. global. Decrementar la velocidad global. Busca la línea y para los motores. Rotación (mueve dos motores) a la derecha Rotación (mueve dos motores) a la izquierda No definido Pasa a modo automático de seguimiento de líneas. Paro completo de los motores
Tabla 3. Comandos de motores
Todas las órdenes con máscara 00XXyyyy, con XX distinto de 00 e ‘y’ 0 ó 1 indistintamente no son procesadas actualmente, pero se pueden implementar nuevos movimientos del robot.
- 19 -
Robot con control remoto y cámara de vídeo integrada
2.3.2. ÓRDENES DEL SISTEMA Actualmente existen únicamente dos comandos de sistema a parte del comando reservado 0xff: Nombre Ping
HEX 0xC1
Descripción Petición de respuesta, para comprobar si la unidad remota responde. 0xCF Reset completo de la tarjeta de control del robot. 0xFF Conexión Conexión interna, no permitido su envío.
System Reset RESERVADO
Tabla 4. Comandos del sistema
Las órdenes de sistema se enmascaran con los dos bits más significativos puestos a uno.
2.3.3. ÓRDENES DE IMAGEN Las órdenes de imagen se emplean para controlar la cámara digital basada en el chip M64282FP de Mitsubishi. Con estos comandos se puede iniciar o detener la captura de imágenes, cambiar los modos de captura o alterar el tiempo de exposición. También gestiona los movimientos los servos de la cámara para orientar la vista del robot. Se emplea la máscara 01xxxxxx para diferenciarlos del resto de comandos. Nombre Mira Al Frente Mira a la derecha Mira a la izquierda Mira arriba Mira abajo Inicia captura Reset cámara Carga Registros Fija Registro Registro xxx Fija Dato Bajo xxxx Fija Dato Alto xxxx
HEX 0x40 0x41 0x42 0x43 0x44
Descripción Centra la vista al frente Gira el servo horizontal a la derecha Gira el servo horizontal a la izquierda Gira el servo vertical hacia arriba Gira el servo vertical hacia abajo Activa la señal START de inicio de captura. Reinicia la cámara con los valores por defecto de la misma. 0x59 Carga los ocho registros de configuración configuración de la cámara. 0x50-57 0x50-57 Fija como registro registro activo activo el contenid contenido o en los tres bits menos significativos. 0x70-7f Fija los cuatro bits menos significativos significativos del registro activo como los cuatro bits menos significativos del comando 0x60-6f Fija los cuatro bits más significativos del registro activo como los cuatro bits menos significativos del comando.
Tabla 5. Comandos de imagen
- 20 -
Robot con control remoto y cámara de vídeo integrada
Las primeras cinco órdenes se envían directamente al microcontrolador de servos basado en un PIC16F84. Se envían a través de cuatro pines, soportando el PIC16F84 ampliaciones de funciones con el puerto de expansión de cuatro contactos. Para cargar un registro de la cámara con un byte dado, primeramente se deberá fijar el registro activo mediante ‘Fija Registro xxx.’ Seguidamente, Seguidamente, se cargan, en orden indistinto la parte baja y la parte alta del byte a cargar mediante ‘Fija Dato Bajo xxxx’ y y ‘Fija Dato Alto xxxx .’ Finalmente se manda el comando ‘Carga ‘ Carga Registros’ para para que se actualicen todos los registros de la cámara.
2.4. PROTOCOLO DE DATOS DATOS 2.4.1. ESTADO DEL ROBOT Los seis bits menos significativos del segundo byte de la trama de datos de estado contienen distintos parámetros que monitorizan el estado del robot: 01111110 7
LSAPID 0 IHB 0 7 6 5
Byte 0
4 3 Byte 1
2
1
GL 0
Figura 16 Detalle de la trama de datos de estado •
IHB: bit 6, se pone a uno cuando el robot está transmitiendo las filas mayores o iguales a 64 (64-127) de la imagen. Se emplea en el gestor de imágenes para determinar la fila en la que almacenar los datos de píxeles recibidos.
•
5-1: No usados en la implementación actual
•
GL: bit 0, indica cuando está a uno que los sensores CNY70 de la tarjeta controladora de motores han detectado la presencia de la línea guía.
2.4.2. RECOMPONIENDO LA IMAGEN El software de gestión de imagen deberá encargarse de la tarea de recomposición de la imagen a partir de los píxeles que reciba del robot.
- 21 -
Robot con control remoto y cámara de vídeo integrada
Las tramas de datos de imagen son de longitud variable de como mucho 96 bytes, y la cabecera contiene los seis bits menos significativos de la fila a la que pertenecen los píxeles recibidos. La cámara digital tiene una resolución de 128x128 píxeles y cada uno de ellos se lee con una resolución de 256 niveles de gris. Al recibir los datos, el software de gestión de cámara deberá ir alojando consecutivamente los píxeles que reciba a partir de la posición de columna cero y hasta alcanzar la posición de columna 127. La fila en la que deberá guardar los datos se calcula tomando el bit de estado IHB como bit más significativo y sumándole los seis bits menos significativos contenidos en la cabecera de la trama de imagen: n fila
=
IHB·2 6
+
CABECERA[5..0]
Para evitar problemas de desincronización entre el píxel mandado por la unidad remota y el software de control se envía siempre que se inicia la trama la información necesaria para poder determinar si se ha pasado a enviar la información de l a siguiente fila. FILA
COLUMNA FILA
COLUMNA
LSAPID 1 7
Aplicación de control
I ROW#
6 5 Byte 1
0
*2 LSAPID 0 IHB 7
6
5
GL 4 3 Byte 1
2
1
0
Figura 17 Gráfico del proceso de cálculo de la fila y columna de imagen.
Finalmente, aunque la aplicación de control reciba más datos, si alcanza la columna 127, pasará automáticamente a la siguiente línea, descartando todos los datos que reciba hasta que vuelva a
- 22 -
Robot con control remoto y cámara de vídeo integrada
encontrar un inicio de trama de imagen con un valor de línea de imagen válido. Todas estas tareas las realiza de forma automática la clase
ImageCore del paquete com.theexbteam.robots que se describe en la parte de la aplicación de control remoto.
- 23 -
Robot con control remoto y cámara de vídeo integrada
3. TARJETA DE CONTROL DE MOTORES 3.1. DESCRIPCIÓN DEL HARDWARE HARDWARE Esta tarjeta fue creada con la idea de independizar los sistemas motrices y de detección de línea del control de la cámara y de la tarjeta de radio. Esta tarjeta es como la de cualquier microrobot seguidor. Se pueden diferenciar cuatro bloques en la tarjeta, alimentación, sensores, driver de motores y procesado. El esquema de la tarjeta es el que muestra la figura. U1
L7805/T L78 05/TO220 O220
+7,2V
+5V 1
VIN 3
1
+
J5 PWR_IN
C3 220uF
C1 100nF
GND
U2
2
VOUT
C4 100uF
+
1
C2 100nF
J4 PWR_OUT
2
2
MOT1_DIR0 2 MOT1_DIR1 7 MOT2_DIR0 10 MOT2_DIR1 15
D1 PWR_ON
R3 470
EN_MOT1 EN_MOT2
1 9
+5V +7,2V
16 8
Y1 U3
MOT1_DIR0 MOT1_DIR1 MOT2_DIR0 MOT2_DIR1
D11 D11 READY REA DY
R18 470
D14 DEP
MOSI MISO SCK
39 38 37 36 35 34 33 32 1 2 3 4 5 6 7 8
RESET
31 9 40
PC0/A8 PC1/A9 PC2/A10 PC3/A11 PC4/A12 PC5/A13 PC6/A14 PC7/A15
PB0/T0 PB1/T1 PB2/AIN0 PB3/AIN1 PB4/SS PB5/MOSI PB6/MISO PB7/SCK
19 18 XTAL1 XTAL2
+5V
ICP RST
PD0/RXD PD1/TXD PD2/INT0 PD3/INT1 PD4 PD5/OC1A PD6/WR PD7/RD ALE OC1B
21 22 23 24 25 26 27 28
CNY1 CNY2 CNY3 CNY4 BUMPER1 BUMPER2 BUMPER3 BUMPER4
10 11 12 13 14 15 16 17
EXP1 EXP2 MODE INT_MEC BUMP_TRAS EN_MOT1 EXP3 EXP4
30 29
R 21
470
1/2EN 3/4EN
D6
VCC1 VCC2
J7 MOT2
R23 1K
J16
R 22
BUMP_TRAS 11
1 3 5 7 9
RST SCK MISO
10K
EN_MOT2
2 4 6 8 10
R14 10K
U4A 1
7432
U4B 4 5
J12 BUMPER1 R10 R10 10K +5V
+5V R12 J8 220 CNY2
+5V
CNY3 47K +5V
BUMPER3
+5V
4 3 2 1
J15 4 3 2 1
BUMPER4 R 20 10K +5V
CNY2
BUMPER4
R8 J11 220 CNY4
4 3 2 1
4 3 2 1
+5V
J13 BUMPER2 R 11 11 10K
+5V R6 J10 220
R7
J14 BUMPER3 R 19 10K
BUMPER1
4 3 2 1
47K
CNY1
BUMPER3
4 3 2 1
R13 J9 220
+5V
13 BUMPER4
R17 1K
6
+5V
R5
SW2 MARCHA
C11 100nF
R15 1K
2 10
4 3 2 1
SW1 RESET
C12 100nF
3
7432 7
47K
R16 10K MARCHA
PROGRAMADOR
+5V
1 2 3 4
+5V
RESET
INT_MEC 8
7432
D8
+5V
D13 DIODO_RST
+5V U4D 2 1
+7,2V
+5V
MOSI
CNY1
TARJ_PPAL TAR J_PPAL
+7,2V C10 100nF
+7,2V
D12 PROG
RESET
R4
D5
1N4001 1N4001
C8 15pF
4 1U4C 9
EXPAN
D10
1N4001
1
D7
J1 EXP1 EXP2 EXP3 EXP4
D9 1N4001
2
7432 J3 8 7 6 5 4 3 2 1
C6 100nF +7,2V
1N4001 1N4001
D N G
VCC
8MHz
D4 1N4001
J6 MOT1
1
XTAL2
C7 15pF
D3 1N4001
2
+5V
0 2
GOT_LI NE GOT_LINE MOTAC3 MOTAC2 MOTAC1 MOTAC0 MODE
3 6 11 14
AT90S8515
PA0/AD0 PA1/AD1 PA2/AD2 PA3/AD3 PA4/AD4 PA5/AD5 PA6/AD6 PA7/AD7
XTAL1 XTAL2
R1 470
1Y 2Y 3Y 4Y
C9 + 100uF
XTAL1 GOT_LINE MOTAC3 MOTAC2 MOTAC1 MOTAC0 MODE MARCHA
L293
1A 2A 3A 4A
R9
47K +5V
4 3 2 1
BUMPER2
Title Tarjeta de control de motores para Robot LSED Size A4
CNY3
D oc um ent N um ber 1
Re v 4. 0
CNY4 D at e:
Monday, June 23, 2003
Sheet
1
of
1
Figura 18 Esquema de la tarjeta de control de motores.
Para un mayor detalle, véase la figura 2 del apéndice B.
3.1.1. ALIMENTACIÓN Este es un bloque fundamental pues la alimentación tiene que estar muy estabilizada porque los motores son una fuente de ruido impulsivo en las líneas de alimentación. La estabilización se consigue separando la alimentación de los motores de la del resto de la tarjeta.
- 24 -
Robot con control remoto y cámara de vídeo integrada
Los motores se alimentan directamente desde la batería de 7,2V. El resto de la tarjeta necesita una tensión de alimentación de 5V, lo que se consigue mediante el regulador L7805. La estabilización se realiza filtrando la alimentación con unos condensadores de capacidad elevada. Los filtrados críticos se han de realizar antes y después del regulador y en la entrada de potencia de los drivers de motores. Con este montaje el ruido impulsivo no afecta al correcto funcionamiento del sistema. Los motores toman la carga almacenada en los condensadores en los picos de tensión y no de la batería por lo que se evitan caídas de tensión en la alimentación de a lógica de control. U1
L780 L7 805/T 5/TO2 O220 20
+7,2V
+5V 1
1 J5 PWR_IN
VIN 3
+
C3 220uF
C1 100nF
VOUT GND
2 C4 100uF
+
C2 100nF
2
1 J4 PWR_OUT
2
D1 PWR_ON
R3 470
Figura 19 Sistema de alimentación de la tarjeta de control de motores.
3.1.2. SENSORES El robot ha de ser capaz de orientarse automáticamente. Para la orientación deberá seguir una línea negra sobre un fondo blanco. Adicionalmente se han de poder detectar posibles colisiones con obstáculos. Para poder seguir la línea se utilizan unos sensores de infrarrojos tipo CNY70. Estos sensores integran un fotodiodo que emite radiación infrarroja y un fototransistor que se polariza en función de la radiación recibida. Si el sensor está sobre una superficie negra la radiación emitida por el fotodiodo no se refleja y el fototransistor está en situación de corte. Por el contrario, si el sensor se posiciona sobre una superficie blanca el fototransistor capta la radiación emitida por el fotodiodo. La red para poder usar estos transistores es muy simple. Se ha de polarizar el fotodiodo para que emita siempre con una - 25 -
Robot con control remoto y cámara de vídeo integrada
potencia lo suficientemente alta para que la radiación pueda ser detectada. El fototransistor también se ha de polarizar para que este en la zona activa o en corte dependiendo de la luz incidente en la base. Los niveles entregados por el transistor han de ser compatibles con la lógica empleada. El esquema de polarización es el que se muestra en la siguiente figura. +5V R2 220
R1 47K
4 1
CNY70
2
3 +5V
Figura 20 Polarización Polarización de los sensores CNY70. CNY70.
Con esta red se satisfacen los requisitos mencionados. Hay que tener cuidado al conectar los sensores a la placa. El usuario se ha de cerciorar de que la conexión al molex verifica el esquema de la siguiente. +5V R2 220
J1
OUT
R1
47K +5V
4 1
4 3 2 1
CNY70
CNYx
2
3
Figura 21 Conexión de los sensores CNY70.
La lectura del valor del CNY por el microcontrolador se realiza por la línea out. Un valor 0 indica que el sensor está sobre la línea negra, un valor 1 indica todo lo contrario. Como medida de seguridad, para evitar dañar el sensor o lecturas erróneas, las conexiones se han de aislar bien. En nuestro caso se usó un aislante termoretráctil para aislar cada una de las patas del sensor de las demás. También hay que destacar que los
- 26 -
Robot con control remoto y cámara de vídeo integrada
sensores se colocan en una pieza de madera que no deja pasar la luz. Esto es importante porque contribuye a eliminar la luz ambiental haciendo las lecturas más fiables. Para poder detectar obstáculos en el camino se usaron unos sensores tipo bumper. Estos elementos no son en realidad sensores sino pulsadores en un encapsulado especial. La red de polarización será por lo tanto muy simple y se corresponde a la mostrada en la siguiente figura. +5V +5V R1 10K
BUMPER
NO NC
Figura 22 Polarización Polarizaci ón de los bumpers.
La conexión con los molex ha de ajustarse el esquema que se muestra a continuación para que las lecturas sean correctas. J1 OUT +5V
R1
10K
4 3 2 1
BUMPER
NO NC
BUMPERx
Figura 23 Conexión de los bumpers.
3.1.3. DRIVER DE MOTORES La tarjeta de control incluye el circuito de potencia necesario para atacar el sistema motriz del robot. Los dos motores que conforman este sistema se excitan a través de un circuito denominado puente en H. Este tipo de circuitos permiten que los niveles lógicos de la tarjeta controlen las grandes corrientes que circulan por los devanados de los motores. Se ha optado por un puente en H integrado que permite la rotación en ambos sentidos de los dos motores, el L293. La configuración elegida hace que cada motor se controla con tres bits, dos para seleccionar el sentido de giro y otro para arrancarlo. Los
- 27 -
Robot con control remoto y cámara de vídeo integrada
bits para seleccionar el sentido de giro pueden parar el motor si toman el mismo valor. Si toman distintos valores estos bits los motores girarán en distintos sentidos. Para la misma combinación cada uno de los motores gira en sentidos contrarios debido a su orientación. El tercer bit se conecta a uno de los canales PWM del microcontrolador para poder controlar la velocidad de giro. Este control se realiza variando el ciclo de trabajo del PWM. El esquema de este bloque es el de la figura siguiente. U2 MOT1_DIR0 MOT1_DIR1 MOT2_DIR0 MOT2_DIR1
2 7 10 15
EN_MOT1 EN_MOT2
1 9
+5V +7,2V
16 8
C9 + 100uF
1A 2A 3A 4A
L293 1Y 2Y 3Y 4Y
3 6 11 14
D3 1N4001
2 J6 MOT1
C6 100nF
1
+7,2V
1/2EN 3/4EN VCC1 VCC2
D4 1N4001
D6
2 J7 MOT2
D9 1N4001
1N4001 1N4001 +7,2V
1N4001
1
D7
D10
D5
+7,2V
C10 100nF
D8
1N4001 1N4001 +7,2V
Figura 24 Esquema del driver de de motores.
En el esquema se puede observar que la lógica se alimenta a 5 voltios mientras que los devanados de los motores se alimentan directamente de las baterías. Se ha comentado ya que los motores producen un ruido impulsivo por lo que hay que tener en cuenta esto. Para este fin hay que filtrar la alimentación de la línea de potencia del puente en H (condensador 9 en el esquema) y las conexiones de los motores (condensadores 6 y 10 en el esquema). Este ruido impulsivo puede además dañar los motores puesto que la tensión de trabajo está ligeramente por encima de la nominal de los motores. Esta situación provoca que los devanados de los motores se puedan fundir si el ruido es demasiado fuerte. Para evitar esto es necesario conectar unos diodos de protección que eviten las oscilaciones de la tensión de alimentación y absorban los excesos de corriente que dañarían los motores.
- 28 -
Robot con control remoto y cámara de vídeo integrada
3.1.4. PROCESADO Este bloque de la tarjeta tiene como finalidad coordinar el funcionamiento de los bloques de sensores y driver de motores además de realizar las órdenes recibidas de la tarjeta principal. El núcleo de este bloque es el microcontrolador, como era de esperar. Este se encarga de todo el procesado. En la figura 2.7 se puede ver la disposición de los puertos. U3 GOT_LINE MOTAC3 MOTAC2 MOTAC1 MOTAC0 MODE MARCHA MOT1_DIR0 MOT1_DIR1 MOT2_DIR0 MOT2_DIR1
D11 READY
R18 470
D14 DEP
R1 470
MOSI MISO SCK
39 38 37 36 35 34 33 32 1 2 3 4 5 6 7 8
PA0/AD0 PA1/AD1 PA2/AD2 PA3/AD3 PA4/AD4 PA5/AD5 PA6/AD6 PA7/AD7 PB0/T0 PB1/T1 PB2/AIN0 PB3/AIN1 PB4/SS PB5/MOSI PB6/MISO PB7/SCK
XTAL1 XTAL2
19 18 XTAL1 XTAL2
RESET
31 9
+5V
40
AT90S8515 PC0/A8 PC1/A9 PC2/A10 PC3/A11 PC4/A12 PC5/A13 PC6/A14 PC7/A15 PD0/RXD PD1/TXD PD2/INT0 PD3/INT1 PD4 PD5/OC1A PD6/WR PD7/RD ALE OC1B
21 22 23 24 25 26 27 28
CNY1 CNY2 CNY3 CNY4 BUMPER1 BUMPER2 BUMPER3 BUMPER4
10 11 12 13 14 15 16 17
EXP1 EXP2 MODE INT_MEC BUMP_TRAS BUMP_TRA S EN_MOT1 EXP3 EXP4
30 29
EN_MOT2
ICP RST
0 VCC 2 D N G
Figura 25 Conexiones Conex iones del microcontrolador. microcontr olador.
Los sensores se conectan al puerto C. Este puerto no tiene ninguna funcionalidad adicional por lo que no se sacrifican recursos en la lectura de los sensores. El control de la dirección de los motores se hace con los cuatro bits menos significativos del puerto B. El bit 5 se usa como traza de depuración, se le conecta un LED que el usuario puede encender por software para controlar la ejecución del programa. El resto de los bits de este puerto se utilizan para el programador serie. La interfaz de este programador es la que especifica el fabricante para este modelo. Su esquema se puede ver en la figura.
- 29 -
Robot con control remoto y cámara de vídeo integrada
+5V R21
470 D12 PROG
J16 MOSI
R22
1 3 5 7 9
RST SCK MISO
10K
+5V 2 4 6 8 10
D13 DIODO_RST PROGRAMADOR RESET
Figura 26 Interfaz del programación AVR.
El LED PROG se ilumina mientras se esté programando el microcontrolador. El otro diodo sirve para que el programador pueda forzar un reset si pone RST a cero. Sin embargo en condiciones normales el reset estará a nivel alto. El circuito completo que se conecta a la pata de reset del microcontrolador es el que muestra la siguiente figura. RST +5V R 22
10K
+5V
D13 DIODO_RST
R14 10K
RESET
C12 100nF
SW1 RESET
R15 1K
Figura 27 Circuito de reset. reset.
Como se puede observar, mientras que el pulsador no se presione o no se fuerce externamente RST a 0V, la señal de reset estará a nivel alto. Sin embargo, en el momento en el que se pulse el botón de reset hardware o se fuerce RST a 0V, la línea RESET tomará un voltaje que el microcontrolador interpretará como nivel bajo, ejecutándose la rutina de reset. El puerto A se destina a la interacción con agentes exteriores. Por agentes exteriores nos referimos al usuario o a la tarjeta principal. Los dos bits más significativos se destinan a interactuar con el usuario. - 30 -
Robot con control remoto y cámara de vídeo integrada
Una vez se ha ejecutado la rutina de reset el robot queda en espera hasta que la línea MARCHA (bit 6 del puerto A) toma un 0 lógico. Esta situación de espera se indica encendiendo el LED READY (bit 7 del puerto A). Cuando el usuario presione el pulsador MARCHA (ver figura 2.1) el robot empezará la ejecución del programa de modo automático tras aplicar un retardo. Los otros seis bits se utilizan para la comunicación entre tarjetas. El bit cinco indica el modo en el que se tiene que ejecutar el programa de motores. Si está a nivel alto el modo será el automático, sino, será manual. El bit menos significativo lo activa el microprocesador cuando se coloca sobre la línea al ejecutar la orden de buscar y parar. El resto de los bits determinan el código de la orden que debe ejecutar el robot en modo manual. Al puerto D se conectan otras señales de control. Los bits 0, 1, 6 y 7 son bits de expansión y no se usan en esta aplicación. Los bits 2 y 3 son las interrupciones externas. La interrupción 0 es la de modo, cuando MODE conmuta a cero se dispara la interrupción y se pasa a ejecutar el modo manual. La interrupción 1 se dispara cuando alguno de los dos bumpers delanteros detecta un choque o el robot se separa de la línea. Sin embargo, en esta aplicación en la tarjeta se a cortado la pista que detecta que se ha separado de la línea. Para que la interrupción 1 funcione como se ha descrito es necesario añadir la siguiente lógica de adaptación. U4A 1
+5V
4 1U4C 9
3
0 1
INT_MEC 8 7432 7
2 7432
6
U4B 4
5
BUMPER1 BUMPER2
CNY1 CNY2
7432
Figura 28 Lógica de adaptación para la interrupción mecánica.
- 31 -
Robot con control remoto y cámara de vídeo integrada
El bit 4 le indica al microprocesador si ha habido una colisión por detrás. Los otros dos bits que faltan por comentar son las salidas de los canales PWM que son OC1A y OC1B.
3.2. DESCRIPCIÓN DEL SOFTWARE. SOFTWARE. El microcontrolador se ha programado íntegramente en lenguaje ensamblador. El ensamblador elegido es el suministrado por ATMEL para su familia de controladores AVR. En los siguientes apartados se describen los distintos módulos del software de la tarjeta de control.
3.2.1. EQUIVALENCIAS Y VECTORES DE INTERRUPCIÓN Para poder variar los parámetros del programa cómodamente sin producir errores se definen unas variables globales. Para esto se definen distintos grupos de equivalencias. El primer grupo de equivalencias se usa para poder trabajar con
los
registros
de
entrada
salida
y
configuración
del
microcontrolador usando sus nombres y no sus direcciones. El código es el sigue a continuación. ; Registros de entrada y salida .EQU
SREG
= 0x3f
.EQU
SPH
= 0x3e
.EQU
SPL
= 0x3d
.EQU
GIMSK
= 0x3b
.EQU
GIFR
= 0x3a
.EQU
TIMSK
= 0x39
.EQU
TIFR
= 0x38
.EQU
MCUCR
= 0x35
.EQU
TCCR0
= 0x33
.EQU
TCNT0
= 0x32
.EQU
TCCR1A
= 0x2f
.EQU
TCCR1B
= 0x2e
.EQU
TCNT1H
= 0x2d
.EQU
TCNT1L
= 0x2c
.EQU
OCR1AH
= 0x2b
.EQU
OCR1AL
= 0x2a
.EQU
OCR1BH
= 0x29
.EQU
OCR1BL
= 0x28
- 32 -
Robot con control remoto y cámara de vídeo integrada .EQU
ICR1H
= 0x25
.EQU
ICR1L
= 0x24
.EQU
WDTCR
= 0x21
.EQU
PORTA
= 0x1b
.EQU
DDRA
= 0x1a
.EQU
PINA
= 0x19
.EQU
PORTB
= 0x18
.EQU
DDRB
= 0x17
.EQU
PINB
= 0x16
.EQU
PORTC
= 0x15
.EQU
DDRC
= 0x14
.EQU
PINC
= 0x13
.EQU
PORTD
= 0x12
.EQU
DDRD
= 0x11
.EQU
PIND
= 0x10
Los parámetros principales con los que trabaja la tarjeta son los ciclos de trabajo de los PWM y los bits de dirección de los motores. Para poder ajustar fácilmente los valores de estos parámetros se usa otro grupo de equivalencias. ;Constantes de velocidad y dirección para los motores ;Duty cycle = 80% .EQU
VEL_MAX
= 0x0332
;Duty cycle = 40% .EQU
VEL_MED
= 0x0199
;Duty cycle = 60% .EQU
VEL_MAX2
= 0x0266
;Duty cycle = 20% .EQU
VEL_MED2
= 0x0133
;Parada rápida .EQU
STOP
= 0x00
;Marcha directa .EQU
GO
= 0x06
;Giro a la izquierda .EQU
LEFT
= 0x02
;Giro a la derecha .EQU
RIGHT
= 0x04
;Marcha inversa .EQU
BACK
= 0x09
;Rotación a la izquierda
- 33 -
Robot con control remoto y cámara de vídeo integrada .EQU
RLEFT
= 0x0a
;Rotación a la derecha .EQU
RRIGHT
= 0x05
Los últimos parámetros que conviene poder ajustar son los de la rutina de retardo. Esto es necesario para controlar la distancia que recorre el robot durante la interrupción de choque tal y como se verá más adelante. Las equivalencias mencionadas se listan a continuación. ;Constantes para la rutina de retardo ;Retardo por vuelta .EQU
RET_V
= 0xff
;Número de vueltas .EQU
VUELTAS
= 0xff
En el mismo archivo se incluye la tabla de vectores de interrupción. Esta tarjeta solo debe procesar tres fuentes de interrupción, que son la de reset y las dos externas. Si se dispara cualquier otra interrupción se debe a un error por lo que el microprocesador ha de ejecutar la rutina de reset para que el usuario se percate de ello y depure el programa. La tabla se describe a continuación. .ORG 0x000 ;Salto a rutina de reset rjmp
RESET
;Salto a rutina de cambio de modo rjmp
INT_MODE
;Salto a rutina de desvío o colisión rjmp
INT_MEC
;Si saltan estas interrupciones se debe a un error rjmp
RESET
rjmp
RESET
rjmp
RESET
rjmp
RESET
rjmp
RESET
rjmp
RESET
rjmp
RESET
rjmp
RESET
rjmp
RESET
- 34 -
Robot con control remoto y cámara de vídeo integrada rjmp
RESET
3.2.2. RUTINA DE RESET Esta rutina debe configurar el timer 1 para funcionar como un PWM de dos canales, los sentidos (entrada o salida) de los puertos, las fuentes de interrupción y el puntero de pila. Para esto el código a ejecutar se puede consultar en las hojas del fabricante. El código que se le ha cargado al robot es el aquí listado. ;Código de la rutina de reset RESET: clr
r16
;Interrup. deshabilitadas deshabilitadas out
SREG,r16
;Interrup. de los contadores deshabilitadas out
TIMSK,r16
ldi
r16,0xc0
;Interrup. externas permitidas out
GIMSK,r16
ldi
r16,0x0f
;Sin RAM externa ni modo SLEEP e interrup. por flanco positivo out
MCUCR,r16
ldi
r16,0xa3
;Timer1 como PWM 10-bit no invertido out
TCCR1A,r16
ldi
r16,0x02
;Frecuencia del timer1 es CLK/8 out
TCCR1B,r16
clr
r16
out
OCR1AH,r16
out
OCR1AL,r16
out
OCR1BH,r16
;Ambos canales parados) out
del
PWM
OCR1BL,r16
;Timer0 parado out
TCCR0,r16
ldi
r16,0x02
out
SPH,r16
ldi
r16,0x5f
- 35 -
siempre
a
cero
(Motores
Robot con control remoto y cámara de vídeo integrada ;SP al final de la RAM out
SPL,r16
ldi
r16,0x81
ldi
r17,0x5f
clr
r18
ldi
r19,0x20
;Configuración ;Configuración del puerto A out
DDRA,r16
;Configuración ;Configuración del puerto B out
DDRB,r17
;Configuración ;Configuración del puerto C out
DDRC,r18
;Configuración ;Configuración del puerto D out
DDRD,r19
Después de haber haber configurado el microcontrolador microcontrolador de acuerdo acuerdo con nuestras necesidades hay que notificárselo al usuario. Para esto la tarjeta debe encender el LED de READY y quedarse en espera hasta que se pulse el botón de MARCHA. Una vez pulsado se aplica un retardo y comienza la ejecución del modo automático. ;Encendemos el LED de READY sbi
PORTA,7
ESP: ;Si MARCHA no está pulsado esperamos sbic
PINA,6
rjmp
ESP
;Apagamos el LED de READY cbi
PORTA,7
;Aplicamos un retardo antes de arrancar rcall RETARDO rcall RETARDO rcall RETARDO ;El robot siempre empieza en modo automático rjmp
AUTOMAT
En el momento en el que el robot se queda en espera activa ejecuta dos instrucciones. La segunda de ellas, la que cierra el bucle, se salta cuando la pista de marcha se pone a cero.
- 36 -
Robot con control remoto y cámara de vídeo integrada
3.2.3. MODO AUTOMÁTICO El modo automático es el modo de ejecución por defecto. Cuando la tarjeta de control se haya en este modo el robot se comporta como un microrobot seguidor normal. Esto quiere decir que sigue un camino definido por una línea negra sobre un fondo blanco. Como se ha visto en los apartados anteriores el robot dispone de cuatro sensores capaces de distinguir un fondo negro de otro blanco. Estos sensores se disponen de tal forma que dos de ellos, los centrales, deben estar siempre sobre la línea negra. Cuando se produce alguna desviación se debe modificar la marcha de los motores para recuperar la situación ideal. Adicionalmente, si se detecta alguna colisión se ejecuta una interrupción que hace que el robot rodee el obstáculo que la provocó. Sin embargo el código de esta instrucción se explica en un apartado posterior. El software correspondiente correspondiente a este modo se divide en varios sectores. El primero de ellos es el que se encarga de cargar lo registros de velocidades con los valores que se van a utilizar, habilitar las interrupciones y arrancar los motores. Los registros 20 y 21 tienen el valor de configuración del PWM para velocidad media y los 22 y 23 para la rápida. AUTOMAT: ldi
r20,HIGH(VEL_MED)
ldi
r21,LOW(VEL_MED)
ldi
r22,HIGH(VEL_MAX2)
ldi
r23,LOW(VEL_MAX2)
;Habilitamos ;Habilitamos las interrupciones interrupciones sei ;Los registros 20 y 21 tienen el valor VEL_MED ;Los registros 22 y 23 tienen el valor VEL_MAX ;Arrancamos ambos PWM a velocidad media out
OCR1AH,r20
out
OCR1AL,r21
out
OCR1BH,r20
out
OCR1BL,r21
- 37 -
Robot con control remoto y cámara de vídeo integrada
Después de haber hecho estos ajustes iniciales comienza el bucle central del programa que lo único que hace es comprobar una y otra vez lo que leen los sensores y actúa en consecuencia. Primero se miran los dos sensores centrales. BAUT: ;Leemos el puerto C in
r18,PINC
;Operaremos sobre el registro 24 mov
r24,r18
;Ponemos a cero todos los bits menos el bit0 y el bit1 andi
r24,0x03
;Si no estamos sobre la línea hay que girar brne
GIR1
ldi
r17,GO
;Si estamos sobre la línea seguimos recto out
PORTB,r17
out
OCR1AH,r22
out
OCR1AL,r23
out
OCR1BH,r22
;Fijamos la velocidad al máximo out
OCR1BL,r23
rjmp
BAUT
GIR1: ;Ponemos a cero todos los bits menos el bit1 andi
r24,0x02
;Si el bit1 no es cero hay que mirar el bit0 brne
GIR2
;Si el bit1 es cero es que el bit 0 es 1 ldi
r17,GO
;Seguimos hacia delante out
PORTB,r17
out
OCR1AH,r20
out
OCR1AL,r21
;El lado de la derecha se ha quedado fuera de la línea out
OCR1BH,r22
;por lo que el motor izquierdo tiene que reducir out
OCR1BL,r23
;Ponemos el flag T a uno (desviados por la derecha)
- 38 -
Robot con control remoto y cámara de vídeo integrada set rjmp
BAUT
GIR2: mov
r24,r18
;Ponemos a cero todos los bits menos el bit0 andi
r24,0x01
;Si los bits 0 y 1 estaban a uno hemos perdido la línea brne
GIR3
;Si estamos aquí es que el bit0 era 0 y el bit1 era 1 ldi
r17,GO
;Esto quiere decir que nos hemos desviado por la izquierda out
PORTB,r17
out
OCR1AH,r22
out
OCR1AL,r23
out
OCR1BH,r20
;El motor derecho tiene que reducir out
OCR1BL,r21
;Ponemos el flag T a cero (desviados por la izquierda) clt rjmp
BAUT
Se puede ver que si alguno de los dos sensores centrales veía a la línea no se hacen más comprobaciones y se vuelve al bucle. En el caso de que los sensores centrales hayan perdido la línea se consultan los laterales. GIR3: ;Tenemos que comprobar los CNY secundarios mov
r24,r18
;Comprobamos el valor del CNY4 andi
r24,0x08
;Si este CNY comprobando brne
no
está
sobre
la
línea
seguimos
GIR4
;Si tenemos la línea bajo el CNY4 hay que girar a la izquierda ldi
r17,RIGHT
out
PORTB,r17
out
OCR1AH,r20
out
OCR1AL,r21
out
OCR1BH,r20
- 39 -
Robot con control remoto y cámara de vídeo integrada ;Ambos motores reducen la marcha out
OCR1BL,r21
;Ponemos el flag T a uno (desviados por la derecha) set rjmp
BAUT
GIR4: mov
r24,r18
;Comprobamos el valor del CNY3 andi
r24,0x04
;Si no tenemos línea en ningún CNY hay que buscarla brne
ROT
;Si tenemos la línea bajo el CNY3 hay que girar a la derecha ldi
r17,LEFT
out
PORTB,r17
out
OCR1AH,r20
out
OCR1AL,r21
out
OCR1BH,r20
;Ambos motores reducen la marcha out
OCR1BL,r21
;Ponemos el flag T a cero (desviados por la izquierda) clt rjmp
BAUT
Puede parecer cuando se quiere girar a la derecha se use la variable LEFT es una incongruencia. Sin embargo, la variable LEFT indica que el motor derecho se para y el izquierdo sigue avanzando. Finalmente si se ha perdido la línea por completo se debe parar el robot y girar sobre sí mismo hasta encontrarla. Es posible que el lector se haya percatado que en las comprobaciones anteriores se almacena en el bit T del registro de estado el flanco bajo el cual fue vista la línea por última vez. El robot rotará en el sentido que indique este bit. ROT: ;Antes de invertir los motores hay que pararlos ldi
r17,STOP
;(1 useg aprox.) out
PORTB,r17
brtc
ROT2
- 40 -
Robot con control remoto y cámara de vídeo integrada ;Si estamos desviados por la derecha hay que rotar hacia la izquierda ldi
r17,RRIGHT
rjmp
RT
ROT2: ;Si no hay que rotar hacia la derecha ldi
r17,RLEFT
RT: out
PORTB,r17
;Ambos motores reducen la marcha out
OCR1AH,r20
out
OCR1AL,r21
out
OCR1BH,r20
out
OCR1BL,r21
rjmp
BAUT
Algo que es muy importante y que el usuario ha de tener en cuenta es que hay que parar los motores antes de invertirlos. Aunque en el momento de invertir los motores estos sigan girando en la dirección anterior no es problemático. En este caso se produciría un pico de tensión, que es lo que queremos evitar, pero será mucho menos intenso que si invertimos la marcha con los motores alimentados. Por este motivo es de gran importancia pasar por el estado de parada rápida antes de cambiar el sentido de giro de los motores. Otro comentario de utilidad e que al leer de los puertos externos (in rxx,PINX) hay que usar el registro PINX porque si se usara PORTX la lectura sería incorrecta. Este detalle no viene especificado en la descripción del microcontrolador y supuso un fallo en tiempo de ejecución que nos hizo perder mucho tiempo hasta dar con él .
3.2.4. MODO MANUAL La rutina de motores del robot se puede ejecutar en modo manual. El usuario envía órdenes que decodifica la tarjeta principal y se lo notifica a la de control.
- 41 -
Robot con control remoto y cámara de vídeo integrada
La tarjeta de control sabe en qué modo está por el estado de la pista MODE. Si esta pata está a cero el modo ha de ser el automático. Un flanco de subida en esta pata provoca una interrupción de cambio de modo. En la rutina manual el microcontrolador ha de leer constantemente el puerto A para ver la instrucción a ejecutar. Al final del bucle ha de comprobar el estado de MODE para seguir en modo manual o cambiar al modo automático. Antes de ejecutar el bucle central de la rutina no hay que hacer ningún ajuste puesto que todos los cambios los controla el usuario. Primero se ha de leer la orden y calcular la posición de la tabla de órdenes a la que se ha de saltar. Como el microcontrolador no tiene modo indexado hay que sumar el índice, multiplicado por dos, a la base de la tabla antes del salto. ;Código para el modo manual MANUAL: in
r16,PINA
lsr
r16
;Leemos la orden a los motores andi
r16,0x0f
;Multiplicamos ;Multiplicamos por dos lsl
r16
;Utilizamos el registro z para guardar un offset al que sumamos el número de orden multiplicado por dos para calcular la siguiente instrucción a procesar ldi
r30,LOW(OFFST)
ldi
r31,HIGH(OFFST)
add
r30,r16
ijmp
Cada celda de la tabla contiene dos instrucciones, por eso hay que multiplicar el índice por dos. Estas instrucciones son una llamada a la subrutina asociada a cada orden y un salto a las comprobaciones finales. OFFST: ;La orden 0x0 es seguir recto rcall
RECTO
- 42 -
Robot con control remoto y cámara de vídeo integrada rjmp
CMD
;La orden 0x1 es giro derecha rcall
GD1
rjmp
CMD
;La orden 0x2 es giro izquierda rcall
GI1
rjmp
CMD
;La orden 0x3 es dar marcha atrás rcall
ATRAS
rjmp
CMD
;La orden 0x4 es desvio derecha rcall
GD0
rjmp
CMD
;La orden 0x5 es desvio izquierda rcall
GI0
rjmp
CMD
;La orden 0x6 es giro derecha trasero rcall
GD2
rjmp
CMD
;La orden 0x7 es giro izquierda trasero rcall
GI2
rjmp
CMD
;La orden 0x8 es acelerar rcall
ACLR
rjmp
CMD
;La orden 0x9 es reducir rcall
FRNR
rjmp
CMD
;La orden 0xa es buscar línea y parar rcall
BUSCL
rjmp
CMD
;La orden 0xb es rotar hacia la izquierda rcall
ROTI
rjmp
CMD
;La orden 0xc es rotar hacia la derecha rcall
ROTD
rjmp
CMD
;La orden 0xd no está definida rcall
ERR
rjmp
CMD
- 43 -
Robot con control remoto y cámara de vídeo integrada ;La orden 0xe no está definida rcall
ERR
rjmp
CMD
;La orden 0xf es parar el robot rcall
PARA
Al final del bucle se actualiza el bit T tal y como se explica en la rutina automática. Esto se hace para mantener una referencia de la línea. Finalmente, tras comprobar el estado de MODE se vuelve a saltar al programa correspondiente. CMD: in
r16,PINA
;Actualizamos el flag T rcall
FLG
;Comprobamos el flag de MODE (PA5) andi
r16,0x20
;Si seguimos en modo manual volvemos al bucle brne
MANUAL
rjmp
AUTOMAT
3.2.5. INTERRUPCIONES Las dos interrupciones que se han de comentar son las debidas a fuentes externas puesto que la de reset se explica en otro apartado. Estas fuentes pueden indicar un cambio de modo o una colisión. El código de la interrupción de cambio de modo es muy sencillo. Simplemente saca de la pila la dirección de retorno y la cambia por la de la rutina manual. También para el motor para que se ejecute la orden que ha provocado la interrupción. ;Código de la interrupción de cambio de modo INT_MODE: ldi
r17,STOP
;Paramos el robot out
PORTB,r17
pop
r27
pop
r28
;Modificamos la dirección de retorno para que se ejecute el programa manual ldi
r27,HIGH(MANUAL)
- 44 -
Robot con control remoto y cámara de vídeo integrada ldi
r28,LOW(MANUAL)
push
r28
push
r27
reti
La otra interrupción es un poco más complicada. Primero se comprueba que los bumpers siguen presionados, no sea que el obstáculo se ha desplazado y ha liberado a los bumpers. De todas formas esta situación es poco probable puesto que entre la activación de la interrupción y la comprobación pasa un tiempo muy pequeño. Después de esto, el robot da marcha atrás y aplica un retardo suficiente para apartarse del obstáculo. ;Código de la interrupción de colisión INT_MEC: push
r24
push
r18
in
r18,PINC
mov
r24,r18
;Si los bumpers delanteros están sin presionar andi
r24,0x30
;Terminamos con la interrupción breq
FIN
push
r17
ldi
r17,STOP
;Paramos antes de invertir out
PORTB,r17
push
r20
push
r21
ldi
r20,HIGH(VEL_MED)
ldi
r21,LOW(VEL_MED)
;Damos marcha atrás ldi
r17,BACK
out
PORTB,r17
;Ponemos los motores a velocidad alta out
OCR1AH,r22
out
OCR1AL,r23
out
OCR1BH,r22
out
OCR1BL,r23
rcall
RETARDO
rcall
RETARDO
- 45 -
Robot con control remoto y cámara de vídeo integrada rcall
RETARDO
rcall
RETARDO
rcall
RETARDO
rcall
RETARDO
rcall
RETARDO
rcall
RETARDO
rcall
RETARDO
rcall
RETARDO
;Paramos antes de invertir ldi
r17,STOP
out
PORTB,r17
Después de esto comprueba cual de los dos bumpers golpeó el obstáculo y gira en consecuencia. Si fueron ambos bumpers los que golpearon lo que hace es rotar. Después de esto el robot que da parado. La rutina principal, sea la manual o automática, se encargará de determinar el siguiente movimiento del robot. ;Comprobamos el valor del bumper1 andi
r24,0x10
;Si está a cero brne
el bumper2 está pulsado
BP1
;Si hemos derecha
chocado
por
ldi
r17,RIGHT
out
PORTB,r17
rcall
RETARDO
ldi
r17,STOP
la
izquierda
giramos
a
la
giramos
a
la
;Paramos después de esquivar out
PORTB,r17
;Hemos terminado rjmp
TER
BP1: mov
r24,r18
;Comprobamos el valor del bumper 2 andi
r24,0x20
;si está a cero bumper1 está pulsado brne
BP2
;Si hemos izquierda
chocado
ldi
r17,LEFT
out
PORTB,r17
- 46 -
por
la
derecha
Robot con control remoto y cámara de vídeo integrada rcall
RETARDO
ldi
r17,STOP
;Paramos después de esquivar out
PORTB,r17
;Hemos terminado rjmp
TER
BP2: ;Colisión frontal brtc
ESQ2
;Si estamos desviados por la derecha hay que rotar hacia la izquierda ldi
r17,RLEFT
rjmp
ESQ
ESQ2: ;Si no hay que rotar hacia la derecha ldi
r17,RRIGHT
ESQ: out
PORTB,r17
rcall RETARDO ldi
r17,STOP
;Paramos después de esquivar y terminamos out
PORTB,r17
TER: pop
r21
pop
r20
pop
r17
FIN: ;Recuperamos ;Recuperamos registros y terminamos pop
r18
pop
r24
reti
3.2.6. SUBRUTINAS Las subrutinas asociadas a las órdenes del modo manual se agrupan en un archivo. Estas subrutinas son, en su mayoría, para avanzar, parar o girar y su código es el mismo que se utiliza en el resto del programa. Por esta razón no hay mucho que comentar sobre estas subrutinas. Su código se muestra a continuación. RECTO: ldi
r17,GO
- 47 -
Robot con control remoto y cámara de vídeo integrada ;El robot irá recto a toda velocidad out
PORTB,r17
out
OCR1AH,r22
out
OCR1AL,r23
out
OCR1BH,r22
out
OCR1BL,r23
ret GD1: ldi
r17,RIGHT
;El robot girará a la izquierda a velocidad media out
PORTB,r17
out
OCR1AH,r20
out
OCR1AL,r21
out
OCR1BH,r20
out
OCR1BL,r21
ret GI1: ldi
r17,LEFT
;El robot girará a la derecha a velocidad media out
PORTB,r17
out
OCR1AH,r20
out
OCR1AL,r21
out
OCR1BH,r20
out
OCR1BL,r21
ret ATRAS: ;Hay que parar antes de invertir los motores rcall
PARA
ldi
r17,BACK
;El robot irá marcha atrás a velocidad media out
PORTB,r17
out
OCR1AH,r20
out
OCR1AL,r21
out
OCR1BH,r20
out
OCR1BL,r21
ret
- 48 -
Robot con control remoto y cámara de vídeo integrada GD0: ldi
r17,GO
;El robot se desviará a la derecha out
PORTB,r17
out
OCR1AH,r20
out
OCR1AL,r21
out
OCR1BH,r22
out
OCR1BL,r23
ret GI0: ldi
r17,GO
;El robot se desviará a la izquierda out
PORTB,r17
out
OCR1AH,r22
out
OCR1AL,r23
out
OCR1BH,r20
out
OCR1BL,r21
ret GD2: ;Hay que parar antes de invertir los motores rcall
PARA
ldi
r17,BACK
;El robot se desviará a la derecha marcha atrás out
PORTB,r17
out
OCR1AH,r20
out
OCR1AL,r21
out
OCR1BH,r22
out
OCR1BL,r23
ret GI2: ;Hay que parar antes de invertir los motores rcall
PARA
ldi
r17,BACK
;El robot se desviará a la izquierda marcha atrás out
PORTB,r17
out
OCR1AH,r22
out
OCR1AL,r23
- 49 -
Robot con control remoto y cámara de vídeo integrada out
OCR1BH,r20
out
OCR1BL,r21
ret ROTI: ;Hay que parar antes de invertir motores rcall
PARA
;Rotamos hacia la izquierda ldi
r17,RLEFT
out
PORTB,r17
out
OCR1AH,r20
out
OCR1AL,r21
out
OCR1BH,r20
out
OCR1BL,r21
ret ROTD: ;Hay que parar antes de invertir motores rcall PARA ;Rotamos hacia la derecha ldi
r17,RRIGHT
out
PORTB,r17
out
OCR1AH,r20
out
OCR1AL,r21
out
OCR1BH,r20
out
OCR1BL,r21
ret PARA: ldi
r17,STOP
;Paramos los motores out
PORTB,r17
out
OCR1AH,r20
out
OCR1AL,r21
out
OCR1BH,r20
out
OCR1BL,r21
ret
Sin embargo, hay algunas subrutinas especiales. Unas de estas son las de cambio de velocidad global. Lo que hacen es cambiar los valores almacenados en los registros de velocidad de - 50 -
Robot con control remoto y cámara de vídeo integrada
acuerdo con los deseos del usuario. Como es lógico estas subrutinas van asociadas a las ordenes de acelerar y parar. ACLR: cpi
r22,HIGH(VEL_MAX)
;Si la velocidad no es la normal la aumentamos brne
ACB
ret ACB: ldi
r20,HIGH(VEL_MED)
ldi
r21,LOW(VEL_MED)
ldi
r22,HIGH(VEL_MAX)
ldi
r23,LOW(VEL_MAX)
ret FRNR: cpi
r22,HIGH(VEL_MAX2)
;Si la velocidad no es la reducida la reducimos brne
FCB
ret FCB: ldi
r20,HIGH(VEL_MED2)
ldi
r21,LOW(VEL_MED2)
ldi
r22,HIGH(VEL_MAX2)
ldi
r23,LOW(VEL_MAX2)
ret
Otra subrutina especial es la de buscar y parar. Esta subrutina hace que el robot gire sobre sí mismo hasta encontrar la línea. Una vez encontrada se queda parado. Para determinar el sentido de giro hace uso del bit T. BUSCL: ;Comprobamos los CNY 1 y 2 si no están ambos a cero hay que seguir buscando in
r18,PORTC
andi
r18,0x03
brne
NOLN
;Si tenemos la línea paramos y lo indicamos en PA0 rcall
PARA
sbi
PORTA,0
ret
- 51 -
Robot con control remoto y cámara de vídeo integrada NOLN: brtc
CGIR
;Si estamos desviados por la derecha hay que rotar hacia la izquierda ldi
r17,LEFT
rjmp
SGIR
CGIR: ;Si no hay que rotar hacia la derecha ldi
r17,RIGHT
SGIR: out
PORTB,r17
out
OCR1AH,r20
out
OCR1AL,r21
out
OCR1BH,r20
;Ambos motores reducen la marcha out
OCR1BL,r21
ret
La subrutina de error se asocia a instrucciones reservadas y lo que hace es encender el LED de depuración para notificar el error. ERR: ;Encendemos el LED de depuración sbi
PORTB,4
ret
La última subrutina que queda por explicar es la de actualización del bit T. Esta rutina comprueba las lecturas de los CNY70 y asigna un valor al bit T del registro de estado dependiendo de en qué flanco se encuentre la línea. FLG: ;Leemos el puerto C in
r18,PORTC
;Operaremos sobre el registro 24 mov
r24,r18
andi
r24,0x03
brne
FLG1
;Si estamos sobre la línea el flag no cambia ret FLG1: andi
r24,0x01
brne
FLG2
- 52 -
Robot con control remoto y cámara de vídeo integrada ;Si el bit0 es cero el bit1 es uno y T se pone a cero (desviados por la izquierda) clt ret FLG2: mov
r24,r18
andi
r24,0x02
brne
FLG3
;Si el bit1 es cero y el bit1 era 1 T se pone a uno (desviados por la derecha) set ret FLG3: mov
r24,r18
andi
r24,0x04
brne
FLG4
;Si el CNY3 (bit2) está sobre desviados por la izquierda (T=0)
la
línea
estamos
la
línea
estamos
clt ret FLG4: mov
r24,r18
andi
r24,0x08
;Si el CNY4 (bit3) está sobre desviados por la derecha (T=1) brne
SAL
set SAL: ;Si hemos perdido la línea no cambiamos T ret
- 53 -
Robot con control remoto y cámara de vídeo integrada
4. TARJETA DE CONTROL PRINCIPAL La tarjeta principal se tiene que ocupar de coordinar la cámara, la tarjeta de radiofrecuencia y la tarjeta de control de motores. Su función principal es convertir, formatear y agrupar la señal leída por la cámara para su envío por el enlace de radiofrecuencia. Se tiene que ocupar tanto de la señalización del canal como de la adquisición de datos. Eventualmente, recibirá alguna orden que tendrá que decodificar. Estas órdenes pueden ir dirigidas a la tarjeta de control de motores, a la cámara o al sistema de orientación de la cámara. Esta tarjeta incorpora también la circuitería necesaria para orientar la cámara mediante servomotores tipo FUTTABA.
4.1. DESCRIPCIÓN DEL HARDWARE HARDWARE El hardware que se ajusta a las funciones que ha de desempeñar la tarjeta se puede ver en el siguiente esquema. U1 1
1 J1 PWR_IN
L7805/TO220
VIN 2
+
C1 220uF
J3 1
3
VOUT
REGULADOR
GND
C2 100nF
+5V 2 C3 100uF
+
J2 PWR_OUT
2
2
U2 PIX0 PIX1 PIX2 PIX3 PIX4 PIX5 PIX6 PIX7
39 38 37 36 35 34 33 32
CAM1 CAM2 CAM3 CAM4
D14 DEP
R4 470
D1 PWR_ON
1
C4 100nF
1 2 3 4 5 6 7 8
MOSI MISO SCK
19 18 XTAL1 XTAL2
RESET
31 9 40
VCC
R1 470
PD0/RXD PD1/TXD PD2/INT0 PD3/INT1 PD4 PD5/OC1A PD6/WR PD7/RD ALE OC1B
21 22 23 24 25 26 27 28
GOT_LINE MOTAC3 MOTAC2 MOTAC1 MOTAC0 MODE INCAM ADCSTR
10 11 12 13 14 15 16 17
RX TX XRESET SIN LOAD XCLK START READ
+5V
1 2 3
SRV1
SERVO1
J5
Y1 XTA L1
1 2 3
SRV2
XTA L2 SERVO2
C5 15pF
8MH z
C6 15pF
+5V U3 SRV1 SRV2
Y2 OSC2 C8 15pF
OSC1 20MHz
C9 15pF
OSC1 OSC2 RESET +5V
D N G
17 18 1 2 3 16 15 4 14
P IC 16F 84
RA0 RA1 RA2 RA3 RA4/TOCKI
RB0/INT RB1 RB2 RB3 RB4 RB5 OSC1/CLKIN RB6 OSC2/CLKOUT RB7
6 7 8 9 10 11 12 13
CAM1 CAM2 CAM3 CAM4 EXP0 EXP1 EXP2 EXP3
R2 10K J17
RESET
4 3 2 1
SW1 RESET
C7 100nF
R3 1K
MCLR EXPANS VDD 5
GND
+5V R5
1. 2K
U4 VOUT
+5V
2
470 D12 PROG
J16 MOSI
R22 R2 2
J4
+5V
30 29
0 2
R21 R2 1
J10 8 7 6 5 4 3 2 1 TARJ_CTRL
PC0/A8 PC1/A9 PC2/A10 PC3/A11 PC4/A12 PC5/A13 PC6/A14 PC7/A15
PB0/T0 PB1/T1 PB2/AIN0 PB3/AIN1 PB4/SS PB5/MOSI PB6/MISO PB7/SCK
XTAL1 XTAL2
+5V
R7 1K
A T9 0S 85 15
PA0/AD0 PA1/AD1 PA2/AD2 PA3/AD3 PA4/AD4 PA5/AD5 PA6/AD6 PA7/AD7
ICP RST
GOT_LINE MOTAC3 MOTAC2 MOTAC1 MOTAC0 MODE
RST SCK MISO
10K
1 3 5 7 9
+5V
U5 LM385-2.5/TO
1 12 11
+5V
7 8 13
1
2 4 6 8 10
ADCSTR +5V
D13 DI ODO_RST
6 20
J7
VIN
D0 D1 D2 D3 D4 D5 D6 D7
REF+ REFMODE RD CS WR/RDY VCC
INT D OFL N G
2 3 4 5 14 15 16 17
PIX0 PIX1 PIX2 PIX3 PIX4 PIX5 PIX6 PIX7
9 18
INCAM
+5V XRESET SIN LOAD XCLK START READ VOUT
1 2 3 4 5 6 7 8 9 10 11 12
0 ADC0820 1
PROGRAMADOR1 RESET
CAMARA J8 TX RX
1 3 5 7 9
2 4 6 8 10
+5V Title Tarjeta Principal para Robot LSED
AURIEL S ize A4 D at e:
D oc ument N um ber 1 Monday, May 19, 2003
R ev 1. 2 Sheet
Figura 29 Esquema de la tarjeta de control principal.
Para un mayor detalle, véase la figura 1 del apéndice B.
- 54 -
1
of
1
Robot con control remoto y cámara de vídeo integrada
Se puede ver que la tarjeta se puede descomponer en varios sectores. Estos sectores son alimentación, control de orientación de la cámara, interfaz de la cámara y procesado.
4.1.1. ALIMENTACIÓN La tarjeta principal se puede alimentar de dos formas distintas. Las distintas formas se seleccionan abriendo o cerrando un jumper. Una forma que tiene de alimentación de la tarjeta principal es suministrando directamente una tensión tensión estabilizada estabilizada de de 5V a la entrada pertinente. De esta forma se puede hacer que ambas tarjetas compartan fuente de alimentación. La tarjeta de control de motores tiene una salida después del regulador que se puede utilizar para alimentar la tarjeta principal de esta forma. Para seleccionar este modo de alimentación hay que dejar abierto el jumper REGULADOR. Sin embargo, la tarjeta también cuenta con un sistema de alimentación autónomo que se utilizará cuando el jumper REGULADOR esté cerrado. El sistema de alimentación mencionado es idéntico al de la tarjeta de control de motores (ver apartado 2.1.1). Conviene señalar que no es conveniente utilizar la alimentación de la tarjeta de control de motores si el jumper REGULADOR está cerrado. Esto se debe a que no conviene cortocircuitar directamente las salidas de los dos reguladores para no dañarlos.
4.1.2. CONTROL DE ORIENTACIÓN DE LA CÁMARA Como se ha explicado antes, la tarjeta principal puede controlar dos servomotores para orientar la cámara.
- 55 -
Robot con control remoto y cámara de vídeo integrada J4 1 2 3
U3
+5V SRV1 SRV2
SERVO1 J5 1 2 3
OSC1 OSC2
+5V
RESET
17 18 1 2 3 16 15 4
SERVO2 +5V
14
PI C 16F 84
RA0 RA1 RA2 RA3 RA4/TOCKI
RB0/INT RB1 RB2 RB3 RB4 RB5 OSC1/CLKIN RB6 OSC2/CLKOUT RB7
6 7 8 9 10 11 12 13
CAM1 CAM2 CAM3 CAM4 EXP0 EXP1 EXP2 EXP3
J17 4 3 2 1
MCLR EXPANS VDD 5
GND
Figura 30 Sistema de orientación de la cámara.
En la figura se puede ver que el elemento central de este sistema es un microcontrolador PIC. Este microcontrolador se usa exclusivamente para generar las dos señales PWM necesarias para orientar
los
servomotores.
Los
servomotores
se
conectan
directamente a la alimentación porque incorporan una lógica que reduce el ruido impulsivo, por eso no se filtra su alimentación. El microcontrolador PIC lee la orientación que le da el microcontrolador principal por las líneas CAM1:4 y varia los ciclos de trabajo de los servomotores en consecuencia. También consta de un puerto de cuatro bit s de expansión por si se quisiera aprovechar la capacidad de procesamiento sobrante para alguna otra tarea.
4.1.3. INTERFAZ DE LA CÁMARA El chip de la cámara es un MITSUBISHI M64282FP. Este CDC, pese a estar descatalogado actualmente, se puede encontrar fácilmente en el periférico GameBoy Camera para la video consola portátil GameBoy de Nintendo, que se puede adquirir de segunda mano a través de servicios de subasta on-line como e-Bay por menos de 10$ USD. La cámara se conecta directamente al microcontrolador a excepción de la señal de píxel. Esta señal es analógica por lo que es necesario intercalar un conversor analógico digital para que el microcontrolador pueda procesar el píxel.
- 56 -
Robot con control remoto y cámara de vídeo integrada
Figura 31 Cámara digital M64282FP J7 1 2 3 4 5 6 7 8 9 10 11 12
+5V XRESET SIN LOAD XCLK START READ VOUT
CAMARA
+5V
U4 PIX0 PIX1 PIX2 PIX3 PIX4 PIX5 PIX6 PIX7
2 3 4 5 14 15 16 17
I N C AM
9 18
D0 D1 D2 D3 D4 D5 D6 D7
VIN R EF+ REFMODE RD CS
INT OFL
WR/RDY
10
VCC GND
1.2K
R5
1
2
12 11
+5V
7 8 13
U5 LM385-2.5/TO
1
6
AD C STR
20
+5V
ADC0820
Figura 32 Interfaz de la tarjeta principal con la cámara.
Los bits que se conectan desde la cámara directamente al microcontrolador son los bits de configuración y control de ejecución.
- 57 -
Robot con control remoto y cámara de vídeo integrada
La línea de datos de la cámara tiene que sufrir una conversión analógico-digital. Figura 33 Asignación de terminales de la cámara digital al bus de datos
La configuración del conversor ha sido extraída de las hojas del fabricante, Se ha configurado para ser controlado con solo dos líneas, la INCAM y la ADCSTR. El conversor es de ocho bits y el rango de conversión se ajusta de 0V a 2,5V. Este rango es adecuado porque la cámara entrega una señal de 1V pico a pico con un offset configurable.
4.1.4. PROCESADO La configuración de este sector es análoga a la del mismo sector en la otra tarjeta. La disposición de señales en el microcontrolador es la siguiente. U2 PIX0 PIX1 PIX2 PIX3 PIX4 PIX5 PIX6 PIX7 CAM1 CAM2 CAM3 CAM4
D14 DEP
R4 470
MOSI MISO SCK
39 38 37 36 35 34 33 32 1 2 3 4 5 6 7 8
PA0/AD0 PA1/AD1 PA2/AD2 PA3/AD3 PA4/AD4 PA5/AD5 PA6/AD6 PA7/AD7
19 18 XTAL1 XTAL2
RESET
31 9 40
PC0/A8 PC1/A9 PC2/A10 PC3/A11 PC4/A12 PC5/A13 PC6/A14 PC7/A15
PB0/T0 PB1/T1 PB2/AIN0 PB3/AIN1 PB4/SS PB5/MOSI PB6/MISO PB7/SCK
XTAL1 XTAL2
+5V
AT90S8515
PD0/RXD PD1/TXD PD2/INT0 PD3/INT1 PD4 PD5/OC1A PD6/WR PD7/RD ALE OC1B
21 22 23 24 25 26 27 28
GOT_LINE MOTAC3 MOTAC2 MOTAC1 MOTAC0 MODE INCAM ADCSTR
10 11 12 13 14 15 16 17
RX TX XRESET SIN LOAD XCLK START READ
30 29
ICP RST VCC20
GND
Figura 34 Conexiones Conex iones del microcontrolador. microcontr olador.
El puerto A del microcontrolador se destina íntegramente a la adquisición de los datos convertidos convertidos a digital de la cámara. Este puerto no tenía ninguna otra funcionalidad por lo que no se sacrifica ningún recurso en la lectura de los datos de la cámara. El puerto B se divide en dos partes. Los cuatro bits menos significativos
son
los
que - 58 -
se
usan
para
comunicarle
al
Robot con control remoto y cámara de vídeo integrada
microcontrolador PIC la orientación deseada de la cámara. El bit 5, como pasaba en la otra tarjeta, se destina a un LED de depuración que ayude a la detección de errores en el software de la tarjeta. Puede parecer absurdo malgastar una pata para este fin pero nosotros lo hemos encontrado de vital importancia. La ayuda del LED de depuración hace que la detección de errores se pueda realizar de forma empírica, más cómoda, y nos evita tener que desentrañar el código ejecutado por el microcontrolador. Por último, los otros tres bits se destinan al programador AVR. Las conexiones son idénticas a la de la otra tarjeta, así como el circuito de reset. Por lo que para su consulta remitimos al lector al apartado de procesado de la tarjeta de control de motores. Nótese que el microcontrolador PIC carece de programador integrado en la tarjeta principal. Por consiguiente, se hace indispensable el uso de un programador PIC independiente. El puerto C se destina a la comunicación entre tarjetas y al control del conversor analógico digital. Los seis bits menos significativos constituyen el otro extremo del bus que se conecta al puerto A del microcontrolador de la tarjeta de control de motores. Los dos bits más significativos son los que se utilizan para controlar la conversión a digital de los datos de la cámara. Finalmente el puerto D se usa para configurar y controlar la cámara y para la comunicación con la tarjeta de radio. Los dos bits menos significativos son los de transmisión y recepción de la UART. Estos bits se conectan directamente a la tarjeta de radio y no hace falta ninguna pista adicional. El control de la comunicación serie por el enlace radio se hace íntegramente vía software ayudándose de los registros internos de la UART. Los otros seis bits se utilizan para encender la cámara (START), temporizarla (XCLK) y configurarla. Al iniciar la cámara es necesario cargar unos registros internos que tiene para que funcione de la forma deseada. Esto se consigue mediante una transmisión
- 59 -
Robot con control remoto y cámara de vídeo integrada
serie por SIN, temporizada por XCLK y validada por LOAD. La pista READ es la notificación de la cámara de que tiene un píxel nuevo preparado para la conversión.
4.2. DESCRIPCIÓN DEL SOFTWARE SOFTWARE La tarjeta de control principal ha de gobernar todo el robot, recibiendo las órdenes del host remoto, decodificándolas y ejecutándolas. Además, debe recopilar la información del estado del robot y los datos de la cámara y enviarlos a través del enlace de radio frecuencia, implementando las rutinas necesarias para la separación de tramas y la temporización que exige la tarjeta de radio frecuencia. Una vez ejecutada la rutina primera de reset y habilitadas las interrupciones, el programa principal entra en un bucle continuo de espera activa aguardando a que se produzcan las interrupciones programadas: •
Interrupción del Timer0, Timer0, que da lugar lugar a la recopilación de datos y
su envío a través de la radio frecuencia. •
Interrupción por llegada de nuevos nuevos datos desde el enlace radio
frecuencia, que lanza el proceso de descodificación del tipo de dato recibido y el procesado del comando en caso de que se trate de datos del servicio de comandos.
4.2.1. EQUIVALENCIAS Y VECTORES DE INTERRUPCIÓN Al igual que con el otro programa se define un primer archivo en el que se especifican unas equivalencias para facilitar la programación. ;Registros de entrada y salida .EQU
SREG
= 0x3f
.EQU
SPH
= 0x3e
.EQU
SPL
= 0x3d
.EQU
GIMSK
= 0x3b
.EQU
GIFR
= 0x3a
.EQU
TIMSK
= 0x39
.EQU
TIFR
= 0x38
.EQU
MCUCR
= 0x35
- 60 -
Robot con control remoto y cámara de vídeo integrada .EQU
TCCR0
= 0x33
.EQU
TCNT0
= 0x32
.EQU
TCCR1A
= 0x2f
.EQU
TCCR1B
= 0x2e
.EQU
TCNT1H
= 0x2d
.EQU
TCNT1L
= 0x2c
.EQU
OCR1AH
= 0x2b
.EQU
OCR1AL
= 0x2a
.EQU
OCR1BH
= 0x29
.EQU
OCR1BL
= 0x28
.EQU
ICR1H
= 0x25
.EQU
ICR1L
= 0x24
.EQU
WDTCR
= 0x21
.EQU
PORTA
= 0x1b
.EQU
DDRA
= 0x1a
.EQU
PINA
= 0x19
.EQU
PORTB
= 0x18
.EQU
DDRB
= 0x17
.EQU
PINB
= 0x16
.EQU
PORTC
= 0x15
.EQU
DDRC
= 0x14
.EQU
PINC
= 0x13
.EQU
PORTD
= 0x12
.EQU
DDRD
= 0x11
.EQU
PIND
= 0x10
.EQU
UDR
= 0x0C
.EQU
USR
= 0x0B
.EQU
UCR
= 0x0A
.EQU
UBRR
= 0x09
Se han añadido las equivalencias necesarias para manejar la UART y se ha prescindido del resto de equivalencias pues no tenía sentido mantenerlas. Sin embargo, más adelante se definirán nombres simbólicos de registros. La tabla de vectores de interrupción también sufre modificaciones porque las fuentes de interrupción son distintas. En este programa interrumpen los timers y la UART. CSEG
- 61 -
Robot con control remoto y cámara de vídeo integrada .ORG 0x000 ;Salto a rutina de reset rjmp
RESET
;Si saltan estas interrupciónes se debe a un error rjmp
RESET
rjmp
RESET
rjmp
RESET
rjmp
RESET
rjmp
RESET
;TIMER asociado a la RF rjmp
IRQ_TIMER1
;TIMER asociado a rutina de captura de datos rjmp
IRQ_TIMER0
;Si salta esta interrupción se debe a un error rjmp
RESET
;Tenemos datos del control remoto! rjmp
IRQ_RX
;Se puede enviar el siguiente dato rjmp
IRQ_UOBE
;Si saltan estas interrupciónes se debe a un error rjmp
RESET
rjmp
RESET
4.2.2. RUTINA DE RESET Esta rutina se encarga, entre otras cosas, de configurar al microcontrolador como queremos. Hay que configurar las interrupciones de los timer y ajustar sus tiempos. También tiene que fijar los parámetros de la UART y de los puertos de entrada y salida además de las tareas típicas de configuración. ;Rutina de reset RESET: ldi
r16,0x02
out
SPH,r16
ldi
r16,0x5f
;SP al final de la RAM out
SPL,r16
clr
r16
;Interrup. deshabilitadas deshabilitadas out
SREG,r16
- 62 -
Robot con control remoto y cámara de vídeo integrada ;Interrup. externas deshabilitadas out
GIMSK,r16
;Sin RAM externa out
MCUCR,r16
ldi
r16,0x82
;Interrup. por overflow out
TIMSK,r16
ldi
r16,0xb8
;Configuración ;Configuración de la UART out
UCR,r16
ldi
r16,0x03
;Baud rate = 115200 out
UBRR,r16
ldi
r16,0xb7
;Interrup cada 10us out
TCNT0,r16
clr
r16
;Reloj parado out
TCCR0,r16
out
TCCR1A,r16
out
TCCR1B,r16
ldi
r16,0x00
out
TCNT1L,r16
ldi
r16,0xb8
;Máximo retardo de 20us out
TCNT1H,r16
clr
r16
;Configuración ;Configuración del puerto A out
DDRA,r16
ldi
r16,0x5f
;Configuración ;Configuración del puerto B out
DDRB,r16
ldi
r16,0xbe
;Configuración ;Configuración del puerto C out
DDRC,r16
ldi
r16,0x7e
;Configuración ;Configuración del puerto D out
DDRD,r16
Después de haber realizado las tareas de configuración del sistema se procede a inicializar la cámara y otras variables. - 63 -
Robot con control remoto y cámara de vídeo integrada ;Reset de la cámara rcall
RCAM
;Tamaño del buffer ldi
r16,96
ldi
r30,0x02
ldi
r31,0x01
;Guardamos en la dirección 0x0102 st
z,r16
;Capacidad del acumulador inicialmente al maximo ldi
r16,8
mov
enACUav, r16
mov
deACUav, r16
;Empieza el programa rjmp
PROG
4.2.3. RUTINAS DE CONFIGURACIÓN DE CÁMARA En este apartado se incluye la subrutina que carga los registros de la cámara y la rutina de reset de cámara. La rutina de reset de cámara lo que hace es que guarda en las posiciones de memoria asociadas a la cámara unos valores por defecto y llama a la subrutina de carga. RCAM: ;primero reseteamos la camara ;poner a cero reloj cbi
PORTD, XCLK
cbi
PORTD, XRESET
sbi
PORTD, XCLK
sbi
PORTD, XRESET
;Cargamos valores por defecto ldi
mierda1, 0x3f
sts
CAMDATA, mierda1
ldi mierda1, 0x04 sts CAMDATA+1, mierda1 ldi mierda1, 0x0a sts CAMDATA+2, mierda1 ldi mierda1, 0xff
- 64 -
Robot con control remoto y cámara de vídeo integrada sts CAMDATA+3, mierda1 ldi mierda1, 0x01 sts CAMDATA+4, mierda1 ldi mierda1, 0x00 sts CAMDATA+5, mierda1 ldi mierda1, 0x01 sts CAMDATA+6, mierda1 ldi mierda1, 0x02 sts CAMDATA+7, mierda1 rcall CAM_LOAD_REGISTERS CAM_LOAD_REGISTERS ret
Estos valores por defecto ajustan el tiempo de exposición, la ganancia, la luminancia a unos valores típicos. tí picos. También se aseguran de que el rango dinámico de la señal esta de acuerdo con lo que espera el conversor analógico-digital. Es decir, 1V pico a pico más 1V de continua. La rutina de carga lo que hace es ir cogiendo cada uno de los valores asociados a los registros y cargarlos en la cámara. La cámara recibe bit a bit por la pata SIN. El reloj tiene que ir sincronizado con la transmisión. Primero se transmiten tres bits de dirección de registro (hay 8 registros) a cargar y luego el byte de dato. Una vez terminada la transmisión hay que validarla con la señal LOAD. La subrutina primero guarda el contexto y calcula la dirección del dato a cargar. Hecho esto lee el dato de la memoria y lo deja en un registro. CAM_LOAD_REGISTERS: push sucio push ocho push mierda1
- 65 -
Robot con control remoto y cámara de vídeo integrada push r30 push r31 ;contador de 0 a 7 para los registros clr sucio bucleCarga: mov r5,sucio ;Calculamos dirección y leemos dato ldi mierda1, LOW(CAMDATA) add ocho, mierda1 ldi mierda1, HIGH(CAMDATA) HIGH(CAMDATA) adc r5,mierda1 mov r30, ocho mov r31, r5 ld ocho, z
Se han definido nombres simbólicos para algunos registros y pines para hacer el programa más legible. Hecho esto entra en un bucle que manda bit a bit la dirección y el dato. Esto se hace mediante rotaciones. ;mandar primero los tres bits del registro ;bucle contando con mierda1 ldi mierda1, 3 cargaDirReg: ;poner a cero el reloj de la camara cbi PORTD, XCLK sbrs sucio, 2 rjmp manda_cero rcall CAM_SIN_1 decB1: ;poner a uno sbi PORTD, XCLK ;mover a la izq sucio para mandar el siguiente bit lsl sucio dec mierda1 brne cargaDirReg ;xSSSxxxx lsl sucio ;volvemos a colocar sucio en su posicion original xxxxxSSS
- 66 -
Robot con control remoto y cámara de vídeo integrada swap sucio rjmp masDat manda_cero: rcall CAM_SIN_0 rjmp decB1 masDat: ;ahora metemos los ocho bits de datos ldi mierda1, 8 cargaDatReg: ;poner a cero el reloj cbi PORTD, XCLK sbrs ocho, 7 rjmp manda_cero_ rcall CAM_SIN_1 decB2: ;poner a uno sbi PORTD, XCLK ;mover a la izq sucio para mandar el siguiente bit lsl ocho dec mierda1 brne cargaDatReg ;terminado el registro se manda el siguiente inc sucio cpi sucio, 8 breq finCargaS ;mandar la señal de carga sbi PORTD, LOAD ;reloj de camara a cero cbi PORTD, XCLK cbi PORTD, LOAD; rjmp bucleCarga manda_cero_: rcall CAM_SIN_0 rjmp decB2
Se recupera el contexto y se termina con la subrutina. finCargaS: pop r31
- 67 -
Robot con control remoto y cámara de vídeo integrada pop r30 pop mierda1 pop ocho pop sucio ret
Se han utilizado dos subrutinas que lo que hacen es activar o desactivar la pata SIN del microcontrolador. CAM_SIN_1: ;poner un 1 a Serial IN de la Camara sbi PORTD, SIN ret CAM_SIN_0: ;poner a 0 la serial in de la camara cbi PORTD, SIN ret
4.2.4. EL PROGRAMA PRINCIPAL Simplemente realiza la habilitación de contadores, cámara e interrupciones, para acabar en el bucle de espera activa: PROG: ;activar contador TIMER0 clr mierda1 out TCCR0,mierda1 TCCR0,mierda1 ;activar la camara cbi PORTD, XCLK sbi PORTD, START;----------------START;-------------------sbi PORTD, XCLK cbi PORTD, START ;habilitar interrupciones interrupciones sei mainloop: nop rjmp mainloop
- 68 -
Robot con control remoto y cámara de vídeo integrada
4.2.5. ADQUISICIÓN DE DATOS La adquisición de datos la lleva a cabo como se indicó anteriormente la rutina de atención a la interrupción periódica del contador 0, IRQ_TIMER0. Para evitar problemas de desbordamiento del buffer de salida de datos hacia el enlace de radio frecuencia, si el bit de Transmisión Enabled de la UART del Atmel está a cero, la rutina simplemente devolverá el estado a la espera activa. Si por el contrario sí que se pueden transmitir datos, la rutina primeramente determina si debe añadir las cabeceras de datos, tanto de Estado como de Imagen, con los correspondientes seis bits menos significativos de la fila a la que pertenecen los píxeles a enviar. Para ello se han habilitado los bits 4 y 3 del byte del registro COMM que mantiene el estado de las comunicaciones:
regi regist stro ro CO COMM MM
FR
VD
7
6
WC NIF NIF NSF NSF 5
4
3
TE 2
1
0
Byte 1
Figura 35 Detalle del registro de estado COMM
Así el bit 4 estará a uno siempre que se deban incluir las cabeceras de trama de imagen (‘New (‘ New Image Frame’ ) y el 3 indica si se debe mandar el estado o no (‘New (‘ New Status Frame’ ) Estos bits se ponen automáticamente a uno en la rutina de atención a la interrupción del TIMER 1, que se lanza cuando ha transcurrido el tiempo de guarda necesario que impone la tarjeta de radio frecuencia para modular los paquetes de 96 bytes que se le han mandado. Tras incluir, si procede, las cabeceras de trama, la rutina verifica si el bit DATA (PD7) está a uno, en cuyo caso deberá, por un lado mandar un uno a la señal de reloj XCLK (PD5) para que la cámara cargue a la su salida de datos analógica el siguiente píxel y por otro, activar la señal ADCSTR poniendo el bit PC7 a cero para que el conversor A/D inicie la conversión del dato que viene de la
- 69 -
Robot con control remoto y cámara de vídeo integrada
cámara. En la siguiente ejecución de la rutina periódica, la señal INCAM (PC6) estará a cero, indicando que el conversor A/D ha finalizado la conversión y en el puerto A se dispondrá del píxel en formato digital. Tras poner a cero el reloj de la cámara XCLK, el byte se envía por el canal de comunicaciones y se actualizan los registros en los que se almacenan la fila y la columna por la que se va. En caso de alcanzar la columna 127, se pasa a la línea siguiente y en caso de alcanzar la línea 127, los contadores se ponen a cero y se queda en estado de espera hasta, transcurrido el tiempo de exposición, la señal READ vuelva a estar activa indicando que la nueva imagen está lista para ser leía píxel a pixel. Para determinar si se está en la primera fase de conversión A/D o en la segunda se usa el bit T del registro de estado del Atmel, que a su vez controla el reloj XCLK.
4.2.6. LAS RUTINAS DE ENLACE Antes de mandar ningún dato por el canal de comunicaciones es preciso incluir las cabeceras de tramas, los separadores y evitar los datos 01111110 para que no se confundan con los separadores de trama. Las rutinas DEL_ENLACE, AL_ENLACE, METE_FR_SP,
PROCESA_BYTE y SEND_ACK cubren todas las tareas del nivel de enlace. Los decodificadores de datos que vienen desde el canal y los codificadores de datos hacia el canal usan tres registros cada uno para mantener el estado interno de los bits que todavía no se han enviado o decodificado al haberse eliminado bits de cero de redundancia impuestos por los separadores de trama 01111110. Así se han asignado los siguientes registros, tanto inmediatos como no inmediatos: .DEF enACU
=
.DEF enACUav =
r15
.DEF enCount1 =
r20
.DEF deACU
=
- 70 -
r18
r21
Robot con control remoto y cámara de vídeo integrada .DEF deACUav =
r14
.DEF deCount1 =
r23
.DEF ocho
=
r24
;registro de sucio
.DEF sucio
=
r25
;registro de guarreo
.DEF toSend
=
r16
.DEF toRec
=
r17
.DEF mierda1 =
r19
.DEF COMM
=
r26
.DEF enDATA
=
r27
.DEF deDATA
=
r22
También se han definido los siguientes EQU que contienen las direcciones de la memoria de datos del Atmel que almacenan los IDs de tramas esperados, recibidos y la ventana de recepción de comandos de 64 bytes. .EQU expFRID = $00 .EQU curFRID = $01 .EQU buffFR
= $02 ;esto mas 63 es la ventana
Las rutinas codificadoras y decodificadoras del enlace se basan en desplazamientos lógicos con arreo y comprobación bit a bit de si es un cero o un uno. En caso de que sea un uno, los contadores enCount1 o deCount1 se incrementan, y si se trata de un cero, los contadores se resetean. Para el caso del codificador, al recibir cinco unos seguidos, automáticamente introduce un cero para evitar que otro uno más lo confunda por un separador de trama. Para el decodificador, si se recibe un cero y el número de unos es igual a 6, entonces se tiene un separador de trama, activando el bit más significativo del registro de comunicaciones COMM. Si por el contrario son 5 el número de unos recibido, entonces se trata de un cero redundante, que es eliminado automáticamente. Finalmente, si es inferior a cinco el número de unos, el cero es válido. ◄
- 71 -
C
◄
Robot con control remoto y cámara de vídeo integrada
ACUMULADOR
DATO COD/DEC
Figura 36 Esquema de funcionamiento de los codificadores de enlace
Así se tiene el codificador de enlace AL_ENLACE: ldi toSend, 0x08 loop1: lsl enDATA
;BMS del enDATA al C
brcs send1
;si C==1 enviamos 1
ldi enCount1, $06 ;como es 0, se resetea el contador alAcu: rol enACU ;al acu por la derecha el C que es el dato que queremos rjmp chkAcu; send1: dec enCount1 brne alAcu alAcu
;no se han mandado mandado mas de 5 unos
ror enDATA ;volvemos a meter a enDATA el BMS lsl enACU derecha
;metemos al acumulador un 0 por la
inc toSend; chkAcu: dec enACUav ; brne sig1
;
;ENVIO A LA UART DEL BYTE SI PROCEDE (AL_CANAL) del enACU rcall AL_CANAL sig1: clr enACU; ldi ocho, 0x08 mov enACUav, ocho; dec toSend brne loop1; ret
Y el decodificador de enlace
- 72 -
Robot con control remoto y cámara de vídeo integrada ;Decodifica un byte recibido adecuadamente la sobrecarga
de
la
RF,
quitando
;introducida por el uso de los separadores de trama DEL_ENLACE: ldi toRec, 8 in
deDATA,UDR
loop2: lsl deDATA brcc rx0 inc deCount1 alACU2: rol deACU
;se meten los datos por la derecha
del C dec deACUav brne deACUChk sbr COMM, 6 ;x1xxxxxx, dato valido ;SALTO POR HACER AL PROCESADOR DE BYTES rcall PROCESA_BYTE clr deACU ldi ocho, 0x08 mov deACUav, ocho; rjmp deACUChk rx0: cpi deCount1, $05 breq rx02
;esto si tenemos un cero que sobra
brmi rx01
;cero legal, se mete al acu
;eso es una bonita trama ;y se indica en el BMS del byte COMM cbr COMM, 6 ;x0xxxxxx, dato no valido sbr
COMM, 7
clr deACU
;1xxxxxxx, frame separator ;
mov deACUav, ocho; rjmp deACUChk rx01: clr deCount1 clc el rol meta un cero rjmp alACU2
- 73 -
;poner a cero el C para que
Robot con control remoto y cámara de vídeo integrada
rx02: clr deCount1 deACUChk: dec toRec brne loop2
Que también hace uso de la subrutina de envío de confirmaciones de comando y de la subrutina de procesado de bytes: ;procesa el byte recibido ;usa como entrada el deACU .DEF backup = r2 PROCESA_BYTE: mov backup, deACU sbrs COMM, 6 ;x1xxxxxx ¿byte valido? rjmp finpro sbrs COMM, 7 ;1xxxxxxx ¿nueva trama? rjmp sigue5 ;aqui tenemos un inicio de trama ;el dato del acu es el frame ID si es comando andi deACU, $C0 brne finpro sbr
COMM, 5 ;xx1xxxxx, en espera de comando
cbr COMM, 7 ;0xxxxxxx, ya no es inicio de trama sts
curFRID, backup
rjmp finpro sigue5: ;comprobar si estamos en espera de comando sbrs COMM, 5 rjmp finpro cbr COMM, 5 ;ya lo atendemos espera general
y pasamos
a modo de
;comprobar si es el RESERVADO antes de nada, que tiene prioridad cpi deACU, 0xff breq COM_VALID lds ocho, curFRID lds sucio, expFRID
- 74 -
Robot con control remoto y cámara de vídeo integrada cp ocho, sucio brne yaenviado COM_VALID: ;comando valido push ocho rcall SEND_ACK ;almacenamos recepcion
el
comando
valido
en
la
ventana
de
;para mandar ACKs de paquetes ya recibidos ldi mierda1, buffFR add ocho, mierda1;ocho contiene la pos de memoria RAM donde guardar push r30 push r31 mov r30, ocho st z, backup pop r31 pop r30
inc sucio andi sucio, $3F sts expFRID, sucio ;SALTO A PROCESAR COMANDO rcall PROC_COM rjmp finpro yaenviado: mov sucio, ocho ldi mierda1, buffFR add sucio, mierda1; ande mirar
tenemos
la
pos
push r30 push r31 ld sucio, z pop r31 pop r30 cp sucio, deACU brne finpro ;MANDAR ACK DEL FR ID que esta en ocho
- 75 -
de
memoria
Robot con control remoto y cámara de vídeo integrada push ocho;el FR ID esta en la pila rcall SEND_ACK finpro: mov deACU, backup ret
SEND_ACK: ;primerito de todo, meter el FR SP rcall METE_FR_SP ;ahorita meter el ACK push enDATA push sucio push r30; push r31; in r30, SPL in r31, SPH adiw r30, 4 ld sucio, z ;sucio tiene ahora el FR ID a mandar ori sucio, 0x40 ;enmascarar indica ACK de comando
con
01xxxxxx,
que
mov enDATA, sucio rcall AL_ENLACE pop r31; pop r30; pop sucio; pop enDATA ret
La rutina encargada de procesar bytes se fija, primeramente si está activado el bit de trama nueva (FR, 7) de COMM, y en caso contrario, si está activado el bit de dato válido (VD, 6) del registro COMM. En este último caso recoge el byte decodificado y determina si se trata de un inicio de trama de comando, en cuyo caso almacena el ID de la trama en la posición de memoria de currFRID y activa el bit 5 del COMM, indicando que esta a la espera de nuevo comando (WC).
- 76 -
Robot con control remoto y cámara de vídeo integrada
Si PROCESA_BYTE determina que está a la espera de un byte y el byte disponible en deACU es válido (bit 6 de COMM), entonces, cargará el valor almacenado en currFRID y en expFRID y los comparará, si son iguales, el comando es válido. En este caso, se almacena en la posición de memoria (buffFR +
) el valor del comando recibido, se envía un ACK para el comando y se llama a la subrutina PROC_COM que se encarga de procesar el comando. En caso de que el comando recibido no tenga el identificador de trama esperado y el valor del comando sea igual al dato almacenado en la posición de memoria de datos buffRF +
, se trata de un comando reenviado por error, y se manda un ACK del comando. En caso de que no coincida con el valor registrado, no se hace nada y se sigue esperando a recibir una trama con el Identificador de Trama de Comando válido o bien un comando reservado para resincronizar con el host remoto. Finalmente, este módulo de rutinas de enlace dispone de la rutina METE_FR_SP encargada de introducir sin sobrecarga alguna de ceros un separador de trama tr ama 01111110 al canal: ;envia un separador de trama METE_FR_SP: ldi enDATA, 126;
la trama
mov toSend, ocho
;
loop123: lsl enDATA
;BMS del enDATA al C
ror enACU ;al acu por la derecha el el C que que es el dato que queremos dec enACUav ; brne sig123 ; ;ENVIO AL CANAL (AL_CANAL) rcall AL_CANAL sig123: clr enACU; mov enACUav, ocho; dec toSend
- 77 -
Robot con control remoto y cámara de vídeo integrada brne loop123; ret
4.2.7. EL NIVEL FÍSICO Las rutinas del nivel físico comprenden a AL_CANAL, ENVIA_SERIE y actTIMER. Dado que las tarjetas de radio frecuencia exigen un tamaño máximo de ráfagas de 96 bytes y un tiempo de guarda entre ráfagas fijado por la expresión
estas rutinas deberán respetar estas limitaciones. Para ello lo que se hace es almacenar los datos a enviar en un búfer auxliar de 192 bytes de capacidad y se activa el TIMER1 que, al lanzarse su interrupción TIMER1 lo que hace es transmitir de golpe hasta un máximo de 96 bytes almacenados en el búfer y esperar el tiempo de guarda máximo antes de volverse a ejecutar hasta vaciar el búfer de salida. Las posiciones de memoria de datos empleadas son: ;nivel fisico .EQU iniBuffer
= 0x42
.EQU capBuffer
= 0xC0
.DEF puntEnvio
= r28
;registro inmediato
.DEF puntMete
= r29
;registro inmediato
.EQU serieAVA = 0x102 esta la capacidad de las RF
;pos
de memoria
donde
Asimismo se definen los punteros de Envío y Mete que apuntan respectivamente a las posiciones de memoria de datos con el byte a enviar la siguiente vez que se ejecute la rutina de interrupción IRQ_UBOE y el hueco en el búfer para el siguiente byte a enviar. AL_CANAL: cpi puntMete, capBuffer breq fincanal mov ocho, puntMete clr sucio
- 78 -
Robot con control remoto y cámara de vídeo integrada ldi mierda1, LOW(iniBuffer) LOW(iniBuffer) add ocho, mierda1 ldi mierda1, HIGH(iniBuffer) adc sucio,mierda1 sucio,mierda1 push r30 push r31 mov r30, ocho mov r31, sucio st z, enACU pop r31 pop r30 inc puntMete ;ACTIVAR LA TAREA DE ENVIO in sucio, TCCR1B cpi sucio, 0x00 brne fincanal ;la tarea no esta activada, la activamos ldi sucio, 0x01;modo NO PREESCALADO!!! PREESCALADO!!! out TCCR1B, sucio fincanal: ret
ENVIA_SERIE: ;metemos el byte SOLO si ya esta vacio el UDRE sbic USR, 5 rjmp etiqueta rcall actTIMER rjmp finEnvia ;decrementar ;decrementar la capacidad del buffer etiqueta: push r30 push r31 ldi r30, LOW(serieAVA) LOW(serieAVA) ldi r31, HIGH(serieAVA) HIGH(serieAVA) ld sucio, z
- 79 -
Robot con control remoto y cámara de vídeo integrada
;ahora sucio tiene la capacidad del buffer dec sucio brne otro rcall actTIMER otro: st z, sucio mov ocho, puntEnvio clr sucio ldi mierda1, LOW(iniBuffer) LOW(iniBuffer) add ocho, mierda1 ldi mierda1, HIGH(iniBuffer) adc sucio,mierda1 sucio,mierda1 mov r30, ocho mov r31, sucio ld sucio, z pop r31 pop r30 out UDR, sucio inc puntEnvio cpi puntEnvio, capBuffer brne finEnvia clr puntEnvio clr puntMete finEnvia: ret actTIMER: ;activar tempo 1 ldi
ocho,0x00
out
TCNT1L,ocho
ldi
ocho,0xb8
out
TCNT1H,ocho
;Máximo retardo de 20us
ldi ocho,0x02 out TCCR1B,ocho cbi UCR,3
;deshabilitamos ;deshabilit amos la TX de la UART
ret
- 80 -
Robot con control remoto y cámara de vídeo integrada
La rutina actTIMER es la encargada de activar el contador 1, cargándole además el retardo máximo de tiempo de guarda como valor iniciar. Para enviar datos al canal se usa la rutina AL_CANAL, que guarda en el búfer auxiliar el byte contenido en el registro enACU Como el canal es half-duplex, no se envían datos cuando se están recibiendo datos. De este modo, la rutina de atención a la interrupción de recepción de datos desde la UART deshabilita la transmisión poniendo el bit 3 del registro I/O UCR a cero al entrar en la rutina y restaurando su valor a uno tras la ejecución de la misma, justo antes del reti. También mientras está el TIMER1 activado no se permite la transmisión.
- 81 -
Robot con control remoto y cámara de vídeo integrada
5. HOST DE CONTROL REMOTO Este host se encarga de controlar a la unidad móvil, recibiendo por una parte los datos que recopile ésta, y por otra parte, mandándole las órdenes pertinentes para su funcionamiento en modo manual.
5.1. PLACA DE CONTROL CONTROL La comunicación se realiza a través de las tarjetas de radiofrecuencia de Auriel WIZ-434-SML-IA que se conectan al equipo vía puerto Serie. Estas tarjetas trabajan con señales TTL, mientras que los puertos Serie, típicamente, ‘COM’, de los ordenadores trabajan con señales en RS232. Para llevar a cabo la adaptación de niveles se hace uso de la siguiente placa que dispone de un conversor MAX232 de Maxim.
Figura 37 Placa de control del host
Este circuito integrado dispone de dos entradas TTL con sus correspondientes salidas en RS232 y dos entradas RS232 y sus salidas convertidas en TTL. En la placa adaptadora se ha hecho uso de únicamente un par de entradas, quedando el otro libre.
- 82 -
Robot con control remoto y cámara de vídeo integrada
Figura 38 Detalle del adaptador MAX232
La placa puede ser alimentada directamente con una pila de 9 voltios o bien usando una fuente de alimentación y los conectores hembra de tipo banana. El circuito dispone de un regulador de tensión de 5 voltios L7805 para poder usar distintas alimentaciones. La conexión con el PC se realiza mediante el conector DB9 hembra incorporado, y la tarjeta de radio frecuencia se conecta mediante un bus de 10 hilos al conector.
PIN 1
Figura 39 Detalle de la conexión con la tarjeta de radio frecuencia
Cuando el circuito está correctamente alimentado, el LED rojo de la placa y el LED POW de la placa de radiofrecuencia se encenderán. Al - 83 -
Robot con control remoto y cámara de vídeo integrada
abrirse el puerto por la aplicación de control, el LED Verde la placa se iluminará. Este LED corresponde a la señal DTR del puerto serie COM, y se alimenta de la propia señal que recibe desde el equipo PC, por lo que puede estar perfectamente encendido sin tener el circuito alimentado, en cuyo caso el enlace RF no funcionará. Cuando se transmiten o reciben datos por la radiofrecuencia, el led RTX se encenderá.
DTR POWER
POWER RTX
Figura 40 LEDs de la placa de control
De los nueve pines de la conexión DB9 serie sólo se emplean los cinco primeros: •
Pin 1 DCD, Data Carrier Detect, activo a nivel bajo, se pone a
cero cuando se detecta portadora. Está conectado al pin 6 de la tarjeta de radio frecuencia (XTR Carrier Detect.) •
Pin 2 TXD, Transmitted Data, los datos a transmitir por radio
enlace. •
Pin 3 RXD, Received Data, los datos recibidos desde el radio
enlace.
- 84 -
Robot con control remoto y cámara de vídeo integrada
•
Pin 4 DTR, Data Terminal Ready, se activa cuando el equipo
terminal, es decir, el PC está listo, que se produce cuando se abre el puerto de comunicaciones. •
Pin 5 GND, Signal Ground, la tierra del PC y que se usa en toda
la placa como tierra. Está conectada internamente a los pines 3 y 4 de la tarjeta de radiofrecuencia. Los pines usados de la tarjeta de radio frecuencia están marcados en rojo en la siguiente ilustración:
Figura 41 Pines de contacto de la tarjeta de radiofrecuencia WIZ-434-SML-IA WIZ-434-SML- IA
5.2. EL SOFTWARE El software del equipo de control está escrito en el lenguaje Java de Sun Microsystems, concretamente, para su versión de JSDK 1.4.1_02. La elección de este lenguaje se ha debido a su práctica independencia de la plataforma en que se ejecute la máquina virtual de Java. Asimismo, para poder compilar el proyecto entero, se ha usado la herramienta ANT del grupo Jakarta de la Apache Foundation. Para más información acerca de la instalación de ANT, vea el apéndice A ‘Instalación del Software.’ El acceso a los puertos de comunicaciones serie se realiza a través del paquete javax.comm que Sun Microsystems distribuye de forma separada al JSDK. Nuevamente, para su descarga e instalación, vea el apéndice A. El software de control se compone básicamente de tres módulos o paquetes de Java:
- 85 -
Robot con control remoto y cámara de vídeo integrada
Paquete com.theexbteam.comm, que proporciona las clases
•
necesarias para establecer una conexión serie a través de las tarjetas de radio frecuencia. Paquete com.theexbteam.robots, que incluye las clases de
•
gestión y control del robot. Paquete com.theexbteam.robots.ui, que reúne las clases de la
•
interface de usuario, tanto en línea de comandos como las gráficas. El último paquete precisa del segundo, y el segundo paquete hace uso de las clases del primero. No obstante, el paquete de comunicaciones se puede utilizar para desarrollar cualquier otra aplicación que precise de acceso a los puertos de comunicaciones serie o paralelo. Para un mayor detalle de la API de cada paquete, vea la documentación generada por la herramienta javadoc que que incluye precisas descripciones de los métodos más importantes de cada clase.
5.3. PAQUETE COM.THEEXBTEAM.COMM COM.THEEXBTEAM.COMM Como ya se indicó, este paquete de clases permite transmitir datos a través de un puerto de comunicaciones del equipo PC. Sus clases hacen uso de las clases de javax.comm para abrir primeramente los puertos, activar los eventos pertinentes de aviso de llegada de datos y resolver los posibles conflictos que puedan surgir entre dos aplicaciones que intenten acceder al mismo puerto. La clase AurielWiz434SerialConnection, que deriva de la
SerialConnection, es la encargada de gestionar el uso del canal half que proporcionan las tarjetas de radio frecuencia Auriel WIZ-434duplex que SML-IA. Permite a las aplicaciones que la usen mandar y recibir de forma transparente datos, sin tener que preocuparse éstas por el acceso al canal, la fragmentación de paquetes de 96 bytes que imponen las tarjetas, o de guardar los tiempos especificados en las hojas del fabricante. Internamente esta clase lo que hace es almacenar en un buffer secundario los datos a enviar y proceder a su transmisión a la tarjeta de radio frecuencia transcurrido los tiempos de guarda, fragmentando
- 86 -
Robot con control remoto y cámara de vídeo integrada
además el buffer en segmentos de 96 bytes. Finalmente, y mientras está recibiendo datos, la salida de datos hacia la radio frecuencia se inhabilita para evitar colisiones al estar los dos extremos usando el canal de forma simultánea. La clase AurielWiz434SerialConnection , por defecto, y a diferencia de su padre, SerialConnection, no atiende los eventos ‘Output Buffer Empty’ , Buffer de Salida Vacío. En caso de que se desee recibir notificaciones
de
este
tipo,
se
debe
usar
la
función
setPortEventOutputEmptyEnabled(true).. setPortEventOutputEmptyEnabled(true)
Figura 42 Diagrama UML del paquete com.theexbteam.comm com.theexbt eam.comm
Este
paquete
incluye
además
un
subpaquete
llamado
com.theexbteam.comm.util, que implementa las funciones necesarias para la creación de los delimitadores de trama 01111110 usados en el nivel de enlace del protocolo de comunicaciones. Así, intercalará automáticamente a toda secuencia de datos de cinco unos seguidos un - 87 -
Robot con control remoto y cámara de vídeo integrada
cero, independientemente de que el siguiente bit sea uno o cero, para así evitar que los datos se confundan con los separadores de tramas. Cabe destacar
que
el
método
getFrameDecoded(byte) getFrameDecoded(byte) de
la
clase
puede devolver tres tipos de datos: FrameEncoder puede Un byte con el valor decodificado resultado de concatenar el
•
acumulador interno de la clase que contiene bytes incompletos con el último byte introducido, eliminando pertinentemente la sobrecarga de ceros introducida tras cinco unos consecutivos. En este caso, el método isDecodedValid() deberá isDecodedValid() deberá devolver true. •
Un objeto FrameSeparator, FrameSeparator, arrojado por el método, método, en cuyo caso
tanto isDecodedValid() devolverá isDecodedValid() devolverá false, que indica el comienzo de una nueva trama. Un byte no válido, al devolver isDecodedValid() false. Esto se
•
debe a que se ha eliminado una sobrecarga de ceros y no se ha llegado a completar los ocho bits del acumulador interno y por tanto no se puede procesar el byte recibido hasta que llegue el siguiente.
5.4. PAQUETE COM.THEEXBTEAM.ROBOTS COM.THEEXBTEAM.ROBOTS La misión de este paquete es controlar la unidad remota, recibir los datos que ésta le transmita y transmitir las órdenes pertinentes de movimiento, ajuste de cámara o de sistema. El siguiente diagrama UML muestra las clases principales del paquete así como su interrelación:
- 88 -
Robot con control remoto y cámara de vídeo integrada
Figura 43 Diagrama UML del paquete com.theexbteam.robots com.theexbt eam.robots
La clase Kernel es el núcleo del sistema de control. Ella alberga las clases
CommunicationsCore,
ImageCore,
StatusMonitor
y
CommandCore, encargadas de las tareas de comunicaciones, procesado de imágenes, monitor de estado del robot y control de órdenes del robot respectivamente: •
CommunicationsCore: implementa el nivel físico y de aplicación
de la pila de protocolos de comunicaciones y realiza las conexiones con los puertos de comunicaciones serie según los parámetros que se le pasen al crear una instancia de ella. Los bytes que recibe desde el nivel físico a través de las clases del paquete com.theexbteam.comm son decodificados, separando cada trama de la anterior, determinando si pertenecen al servicio de datos o al de comandos, y, en este último caso, enviando los paquetes de confirmaciones pertinentes. Una vez extraído el servicio al que pertenece la información recibida, propaga los eventos resultantes a las clases de gestión de datos y comandos: ImageCore y StatusMonitor por un lado y CommandCore por el otro.
- 89 -
Robot con control remoto y cámara de vídeo integrada
Además recoge estadísticas de uso del radio enlace que pueden ser consultadas a través de la función getStats() que getStats() que devuelve un objeto de la clase java.util.Map con diversos valores, como son los bytes enviados y recibidos, comandos y confirmaciones enviados y recibidos y estado de las ventanas de envío y recepción del protocolo confirmado de comandos. Los comandos de sistema PING no lanzan eventos CommandEvent de tipo COMMAND_RECEIVED o COMMAND_ ACKNOWLEDGE,
sino
que
se
generan
de
tipo
PING_ECHO_REQUESTED cuando se reciben en la unidad remota y PING_ECHO_RECEIVED cuando se recibe en la unidad que envió el comando original el ACK del mismo. •
ImageCore: atiende los eventos de datos de imagen que la
unidad remota transmite al host controlador así como mantiene la configuración de la cámara del robot. Así, permite variar los diversos modos de adquisición de la cámara, el tiempo de exposición o la ganancia de salida de la señal de la cámara. Las modificaciones en los registros de la cámara sólo se mandan a la unidad remota cuando se llama al método loadSettings(), loadSettings(), no cuando se modifican los valores. Para más información acerca de los valores que se pueden configurar, vea la documentación de la clase o bien el apartado dedicado a la cámara de la memoria. •
StatusMonitor se encarga de controlar el estado general del
robot. Toma los datos de tipo ‘status’ que se reciben desde el enlace de radio frecuencia. Actualmente sólo se mantiene el estado ‘hay línea’ que indica que la unidad remota en modo automático está siguiendo con éxito un camino marcado. •
CommandCore. Esta clase facilita a la interface con el usuario el
conjunto necesario de métodos para gobernar el robot en modo manual, enviando al CommunicationsCore las órdenes de comando necesarias para realizar los movimientos que se le indiquen. Para interactuar con el Kernel de la aplicación se dispone de la clase abstracta UserInterface, que se encarga de ejecutar los métodos
- 90 -
Robot con control remoto y cámara de vídeo integrada
pertinentes de Kernel y sus elementos de acuerdo con las acciones que realice el usuario o la aplicación final. Se disponen de dos clases que heredan de UserInterface: •
CommandLineInterface, interface de línea de comandos,
orientada a interpretar cadenas de comandos que se le pasen desde eventos de teclado. •
GraphicalUserInterface,
orientada
a
interfaces
gráficas,
proporciona los métodos de escucha de los eventos principales de java.awt como son los MouseEvents. MouseEvents. Figura 44 Aspecto de la interface gráfica de usuario
- 91 -
Robot con control remoto y cámara de vídeo integrada
6. APÉNDICE A: INSTALACIÓN DEL SOFTWARE El software ha sido desarrollado y probado con éxito en un entorno Windows NT5 (2000/Xp Home y Pro), usando para su edición JBuilder 8 Enterprise de Borland y compilando satisfactoriamente tanto con los compiladores de Borland como los del JSDK 1.4.1_2.
Figura 45 Logotipo del lenguaje de programación Java de Sun Microsystems
El entorno Jakarta-ANT proporciona una forma rápida de compilar y generar de forma automatizada la documentación de las librerías creadas, que es, además, y a diferencia de ‘make’ independiente independiente de la plataforma en que se ejecute. Jakarta-ANT pertenece al grupo de desarrollo Jakarta de la Apache Software Foundation.
Figura 46 Logotipo del proyecto APACHE ANT
A continuación se describe el procedimiento para instalar y ejecutar las clases compiladas distribuidas.
6.1. INSTALACIÓN DEL ENTORNO ENTORNO JAVA Si solamente desea ejecutar las clases previamente compiladas y no tiene intención de recompilar los fuentes, deberá contar con el entorno de ejecución de Java (JRE, Java Runtime Environment), en su versión, como mínimo 1.4.1_2, disponible gratuitamente en: http://java.sun.com/j2se/downloads.html Si por el contrario desea compilar los fuentes deberá instalar el entrono de desarrollo estándar de Java (J2SE-SDK, Java 2 Standar Edition Software Development Kit), en su versión, como mínimo, 1.4.1_2, también disponible desde el enlace anterior para su descarga gratuita. - 92 -
Robot con control remoto y cámara de vídeo integrada
Una vez descargado al equipo local la versión de Java, ejecute el archivo que iniciará el proceso automático de instalación del entorne elegido de Java.
6.2. INSTALACIÓN DE LAS LIBRERÍAS JAVAX.COMM Para instalar correctamente las librerías de comunicaciones de Sun Microsystem siga los siguientes pasos: Descargue de http://java.sun.com/products/javacomm/ la última
•
versión para la plataforma que use. Actualmente hay versiones disponibles para plataformas Microsoft Windows y Sun Solares, tanto para SPARC como para x86. •
Descomprima el contenido contenido del archivo comprimido a una carpeta carpeta
temporal si sólo va a ejecutar el programa o bien a una carpeta de desarrollo de su conveniencia para el caso de que prefiera compilar o modificar los fuentes. Revise antes de seguir los documentos README.HTML y
•
jdk1.2.html por si difiriera la instalación con el procedimiento aquí descrito para la versión 2.0 de la API de comunicaciones javax.comm. •
Localice el directorio de instalación instalación del Java Java Runtime Environment, Environment,
JRE en su equipo, por defecto instalado en la subcarpeta
\jre si instaló conjuntamente el JSDK y el JRE o en la carpeta \jre si instaló únicamente el JRE. En la subcarpeta \jre\lib\ext , copie el archivo comm.jar
•
que encontrará entre los archivos comprimidos. •
En
la
subcarpeta
javax.comm.properties.
\jre\lib,
copie
el
archivo
Si no va a compilar el proyecto, puede borrar
ya la carpeta temporal en la que descomprimió los archivos. Si va a compilar el proyecto deberá agregar a la variable de
•
entono CLASSPATH del sistema el archivo comm.jar, indicando tanto la ruta de acceso como el nombre del mismo. Para entornos Windows puede usar la directiva:
- 93 -
Robot con control remoto y cámara de vídeo integrada SET CLASSPATH=%CLASSPATH%;\comm.jar
6.3. INSTALACIÓN DE LA APLICACIÓN DE CONTROL Los archivos necesarios para ejecutar la aplicación de control así como toda la documentación y los archivos fuentes de la aplicación se encuentran disponibles para su descarga desde la URL http://www.theexbteam.com/robots Descomprima el archivo y agregue a la variable de entorno CLASSPATH la carpeta “classes” que contiene la distribución con todas las clases compiladas de la forma: SET CLASSPATH=%CLASSPATH%;\
Para ejecutar las distintas Interfaces de Usuario o programas de diagnóstico, refiérase al fichero README.TXT de la distribución, en la que encontrará detallada información acerca de los programas incluidos.
6.4. INSTALACIÓN DE JAKARTA-ANT JAKARTA-ANT La instalación del entorno Jakarta-ANT comprende los siguientes pasos: •
Descargue la última distribución de Jakarta-ANT Jakarta-ANT desde la página página
del proyecto http://ant.apache.org/. •
Descomprima el contenido de la distribución. distribución. Asumiremos aquí
como la ruta a la carpeta en la que descomprimió ANT. •
Agregue a la variable de entorno PATH en los sistemas Windows
o su equivalente para otras plataformas o sistemas operativos la carpeta \bin. Para sistemas Windows: SET PATH=%PATH%;\bin\ •
Cree la variable de entorno entorno ANT_HOME con con la ruta a la carpeta
de instalación de ANT: SET ANT_HOME= ANT_HOME= •
Opcionalmente, y si si tiene problemas para para ejecutar ANT, cree cree la
variable de entorno JAVA_HOME que debe apuntar a la carpeta de instalación del JSDK:
- 94 -
Robot con control remoto y cámara de vídeo integrada SET JAVA_HOME=\ •
Para poder ejecutar ejecutar correctamente los build.xml de los paquetes paquetes
de la aplicación, deberá crear además dos variables de entorno llamadas JAVA_LIBS y JAVA_DOC. La primera variable deberá contener la carpeta en la que se colocarán las clases compiladas y en la que se buscará a la hora de compilar el proyecto las clases dependientes (CLASSPATH) y la segunda indicará la ruta donde se copiará la documentación generada automáticamente por la tarea ‘documentar’ de que cuenta cada build.xml. •
Adicionalmente se disponen disponen de las tareas ‘compilar’ para para compilar
(tarea por defecto), ‘documentar’ ‘documentar’ para generar la documentación, ‘empaquetar’ para para generar un archivo comprimido .JAR con todas las clases, ‘limpiar’ ‘limpiar’ para eliminar las clases y la documentación y ‘limpiarDoc’ para para eliminar sólo la documentación generada.
- 95 -
Robot con control remoto y cámara de vídeo integrada
7. APÉNDICE B ESQUEMÁTICOS DE LAS PLACAS En las siguientes dos páginas se han recogido a gran tamaño los esquemáticos detallados de las dos placas de control de la unidad remota.
- 96 -
Robot con control remoto y cámara de vídeo integrada
1 O V R E S
4 J
2 O V R E S
5 J
1 2 3
1 2 3
1 V R S
T 1 E S W E S R
2 K 0 R 1
1 3 K R 1
V 5 +
2 V R S
V 5 +
2 v . e 1 R
T E S E R
V 5 +
f o
A R A M A C
7 J
1
1 2 3 4 5 6 7 8 9 0 1 2 1 1 1
F n 7 0 0 1 C
t e e h S
T V E T 5 + S D K R D T E N A L A A U R I O C T E O X S L X S R V
D E S L t o b o R a r a p l a p i c n i r P a t e j r a T
S N A P X E
7 1 J 4 3 2 1 1 2 3 4 0 1 2 3 M M M M P P P A A A A P X X X X C C C C E E E E
0 1 J 8 7 6 5 4 3 2 1
L R T C _ J R A T
0 1 2 3 4 5 6 7 M X I X I X I X I X I X I X I X A I P P P P P P P P C N I
0 1 2 3 6 7 8 9 1 1 1 1 4 8 F 6 1 C I P
E N 2 1 0 I 3 L C C C C E _ A A A A T T T T T D O O O O O O G M M M M M 3 U
T 1 2 3 4 5 6 7 B B B B B B N I B / R R R R R R R 0 B R T U I N I O K K K C L L C O C / T / 1 2 / 0 1 2 3 4 C C A A A A A S S R R R R R O O
4 5 6 7 8 2 3 4 5 1 1 1 1 9 1
R L C M
D N G
5 D D V
4 U
7 8 1 2 3 6 5 4 4 1 1 1 1 1 7 K R 1
N O _ R 1 W D P
T U O _ R 2 W 1 J P
V 5 +
1 2 C C S S O O
1 2 V V R R S S
T E S E R
4 e z A i S
e l t i T
0 1 2 3 4 5 6 7 T L D D D D D D D D N I F O
D N G
Y D + - E R / C F F D N R C E E O D S I V R R M R C W V
0 1
0 2 8 0 C D A
1 2 1 7 8 3 6 0 1 1 1 2 R T S C D A
T U O V
V 5 +
V 5 +
V 5 + 1 0 7 R 4
2 L A T X
z H M 8
1 Y 1 L A T X
2
F p 6 5 C 1
1 C S O 2 Y 2 C S O
F p 5 5 C 1
F p 9 5 C 1 K 2 . 1
z H M 0 2
2
F p 8 5 C 1
1
5 O U / T 5 . 2 5 8 3 M L
5 R V 5 +
4 C F n 0 0 1 +
3 F u C 0 R 0 2 O 1 D A L U 3 J 1 G E R 5 1 5 8 S 0 9 T A
0 3 2 2 O T T / 5 U 0 O D 8 V N 7 G L N 2 1 I V U F n 1 2 0 0 C 1
2 U
X T 2 1 0 E M R R X T T I E 3 N K R D C C C C D A T E S D N A L A A C S I A A A A O S E O C L T T T T M N C E L X T S R _ O O O I D R T O M M M M A X O G
V 5 +
1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 0 9 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 3 2
6 1 J
8 9 0 1 2 3 4 5 A / A 1 1 1 1 1 1 / A / A / A / A / A / A 0 1 / C C 2 3 4 5 6 7 P P C C C C C C P P P P P P
0 1 2 3 4 5 6 7 D D D D D D D D A / A / A / A / A / A / A / A / 0 1 2 3 4 5 6 7 A A A A A A A A P P P P P P P P
0 2 4 6 8 1
1 4 A R D E B D D 0 L 1 X X T T D 1 W R T N / A C R I N I P C / / / / 6 7 O O 0 1 2 / 3 / D D D D D 5 D P P P P P D P P 0 1 I S O K S N I N S O I C 0 1 I T T A A S / / / / / M / M / S / 0 1 2 3 4 5 6 7 B B B B B B B B P P P P P P P P
1 3 5 7 9 I S T K O O S C S I M R S M D N G
1 2 L L C A A P T T T C S C X X I R V
1 2 3 4 0 1 2 3 4 5 6 7 M M M M X I X I X I X I X I X I X I X I A A A A P P P P P P P P C C C C
I O S S K O I C M M S
1 2 L L A A T T X X
T E S E R
V 5 +
+
1
1 J N I _ R W P
2
4 1 P D E D
V 5 + 0 2 4 6 8 1 8 J
L E I R U A
02
9 8 7 6 5 4 3 2 1 2 3 4 5 6 7 8 9 8 1 9 0 3 3 3 3 3 3 3 3 1 1 3 4
F u 1 0 2 C 2
1 R O D A M A R G O R P
4 R 0 7 4
- 97 -
V 5 +
0 7 2 G 4 1 O D R P
K 0 1
1 2 R
2 2 R
3 1 T D S R _ O D O I D
T E S E R
1 3 5 7 9 X X T R
r e b m u N t n e m u c o D 1
3 0 0 2 , 9 1 y a M , y a d n o M
: e t a D
Robot con control remoto y cámara de vídeo integrada
F n 6 0 0 C 1
1 0 4 0 4 D N 1
5 D
6 D V 2 , 7 +
1 0 3 0 4 D N 1
1 0 0 4 N 1 1 0 0 4 N 1
V 2 , 7 + 6 K 1 0 R 1
1 0 9 0 4 D N 1
A H C R A M
V 2 , 7 1 + 0 0 4 N 1
V 1 2 0 , 8 0 7 D 4 + N 1 1 0 7 0 D 4 N 1
2 U
4 4 3 2 1 1 J
2 T 7 O 2 J M 1
F n 1 0 1 0 C 1
5 1 K R 1
V 5 +
2 1 J 4 3 2 1 T E S E R
F n 2 0 1 0 C 1
1 2 T T O O M M _ _ N N E E
1 2 C C C C V V
0 2 4 6 8 1 +
F V V 9 u 5 2 0 + , C 0 7 1 +
6 1 J 1 3 5 7 9
T U O _ R 4 W 1 J P
1 L A T X
R O D A M A R G O R P
2
1 D E S L t o b o R a r a p s e r o t o m e d l o r t n o c e d a t e j r a T
2 R E P M U B
3 1 J 4 3 2 1
K 2 0 1 R E P M 1 U 1 B R
A 4 U
B 4 U 2 3 4 7 3
2 3 4 7 6
9 J 3 0 4 3 2 1 1 2 R 2 V 5 +
F p 7 5 C 1
K 0 1
1 2 R
2 2 R
3 1 T D S R _ O D O I D
V 5 T + E S E R
C 4 U 1 4
K 4 7 Y 4 N C
5 R
9 R
7
8 C E M _ T N I
1 Y 0 N 1 C J 6 0 2 4 3 2 1 R 2
8 J 2 0 4 3 2 1 1 2 R 2 V 5 +
2
1 2 C S 1 3 4 P E A T P P 1 2 3 4 P X X D E R O X X R R R R 1 2 3 4 T M E E M E E O E E E _ _ _ Y Y Y Y E P P P M T P N N N N N P M M M M N M C C C C U U U U I U E B B B B B
2 C F n 0 0 1 +
V 5 +
1
5 J N I _ R W P
2 T O M _ N E
V 5 +
K 7 1 4 Y N C
K 7 3 4 Y N C
4 R
7 R
1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 0 9 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 3 2 5 1 5 8 S 0 9 T A
8 9 0 1 2 3 4 5 A / A 1 1 1 1 1 1 / A / A / A / A / A / A 0 1 / C C 2 3 4 5 6 7 P P C C C C C C P P P P P P
1 4 A R D E B D D 0 1 X X T T D 1 W R L T I N I N A C R / / / / 1 / / P C 6 7 O 0 2 3 O / D D D D D D 5 P P P P P D P P
0 1 2 3 4 5 6 7 D D D D D D D D A / A / A / A / A / A / A / A / 0 1 2 3 4 5 6 7 A A A A A A A A P P P P P P P P
0 1 I S O S K N I N S O I C 0 1 I T / T / A / A / S / M M S / / / 0 1 2 3 4 5 6 7 B B B B B B B B P P P P P P P P
3 R E P M U B
N A P X E
1 J 1 2 3 4
3 U
D N G
1 2 L L C A A P T T T C S C X X I R V
02
1 2 3 4 P P P P X X X X E E E E
4 R E P M U B 3 1
2 1
D 4 U
2 3 4 7
9 8 7 6 5 4 3 2 1 2 3 4 5 6 7 8 9 8 1 9 0 3 3 3 3 3 3 3 3 1 1 3 4 E A N I 3 2 1 0 L C C C C E H _ A A A A C T T T T T D R O O O O O O A G M M M M M M
+
: e t a D
0 1 0 1 R I R I R I R I D D D D _ _ _ _ 1 1 2 2 T T T T O O O O M M M M
I O S S K O I C M M S
1 2 L L A A T T X X
T E S E R
V 5 +
2
4 1 P D E D 1 Y 1 D D A E R
8 0 1 7 R 4
- 98 -
1 0 7 R 4
4 Y N C
V 5 +
K 2 7 Y 4 N C 2 3 4 7
V 5 +
4 F u 0 2 C 0 2 0 2 1 O T T / 5 U 0 O D 8 V N 7 G L 3 N 1 I V U F n 1 1 0 0 C 1 V 2 , 7 + F u 3 0 2 C 2
3 0 0 2 , 3 2 e n u J , y a d n o M
V 5 + V 5 +
0 1 9
0 7 2 G 4 1 O D R P
2 Y 1 N 1 C J 8 0 2 4 3 2 1 R 2
4
V 5 + V 5 +
r e b m u N t n e m u c o D 1 4 e z A i S
e l t i T
V 5 +
t e e h S
5
1
I S T K O O S C S I M R S M
z H M 8
1 Y 3 0 7 R 4
f o
V 5 +
F p 5 2 8 1 L C A T X
N O _ R 1 W D P
1 R E P M U B
V 5 +
2 7 0 5 1 9 6 8 1 1 1 0 1 0 1 R I R I R I R I D D D D _ _ _ _ 1 1 2 2 T T T T O O O O M M M M
1
K 4 0 1 R E P M U B 0 2 R V 5 +
K 1 0 1 R E P M 0 U 1 B R
Y Y Y Y 1 2 3 4
N N E E 2 / 4 A A A A / 1 2 3 4 1 3
0 v . e 4 R
4 R E P M U B
5 4 3 2 1 1 J
K 3 0 1 R E P M U B 9 1 R V 5 +
T 1 E S W E S R
4 K 1 0 R 1
1 4 3 6 1 1 3 9 2 L
7 1 K R 1
3 R E P M U B
V 5 +
F n 0 0 1 0 C 1
0 1 D
1 T 6 O 2 J M 1
A H C 2 R W A S M
3 J 8 7 6 5 4 3 2 1 E N 3 2 1 0 I L C C C C E _ A A A A T T T T T D O O O O O O G M M M M M
L A P P _ J R A T 3 2 K R 1
1 1 S A R T _ P M U B
3 Y N C
Robot con control remoto y cámara de vídeo integrada
8. APÉNDICE F: AVISOS LEGALES 8.1. PAQUETES COM.THEEXBTEAM.* COM.THEEXBTEAM.* Las librerías pertenecientes a los paquetes com.theexbteam.* se distribuyen bajo licencia de fuente abierta u open source. source. Esta licencia es la siguiente: Copyright © 2003 The EXB Team. Todos los derechos reservados. The EXB Team (‘EXB’) garantiza al usuario una licencia de uso, modificación y redistribución del software tanto en forma de código fuente o binario, no exclusiva y libre de royalties, royalties, siempre que se mantenga: i)
este aviso de copyright aparezca en todas las copias del software.
ii)
El código fuente de este software se incluya en la distribución o al menos se indique de dónde se pueda obtener dichos fuentes.
iii)
El usuario licenciado no utilice el software en manera alguna que perjudique a EXB
Este software se distribuye “tal cual”, sin garantía alguna de cualquier tipo. Toda condición explícita o implícita, representaciones y garantías, incluyendo aquellas que impliquen garantías comerciales están excluidas. EXB y sus usuarios licenciados no serán responsables por cual daño que sufran los usuarios licenciados como resultado del uso, modificación o distribución del software o sus derivados. En ningún caso EXB o sus usuarios licenciados serán responsables por cualquier pérdida de rédito, beneficio o datos derivados del uso de este software. El uso de este software implica la aceptación de estos términos de uso.
Esta licencia de uso puede cambiar en versiones futuras del software. En cualquier caso, revise la licencia que se incluya en las distribuciones.
8.2. LIBRERÍAS JAVAX.COMM JAVAX.COMM Las librerías javax.comm de la API de comunicaciones de Java proporcionadas por Sun Microsystems se licencian según el acuerdo de uso descrito en el formulario Form ID#011801/LFI#123979 disponible en el
paquete
de
las
librerías
y
desde
la
http://java.sun.com/products/javacomm/COMM2.0.3_license.txt.
- 99 -
URL
Robot con control remoto y cámara de vídeo integrada
Sun Microsystems no ofrece ningún tipo de garantía de funcionamiento del software, proveyéndo lo “tal cual” y su única responsabilidad se limita al reemplazo del Softw are.
8.3. TERCERAS PARTES Microsoft Windows es una marca registrada de Microsoft Corporation. Java, JSDK, JRE y J2SE son marcas registradas de Sun Microsystems. El logotipo de Java pertenece a Sun Microsystems. Apache, Jakarta-ANT y ANT son marcas registradas de la Apache Software Foundation. El paquete ANT se distribuye bajo licencia Apache Software
License,
Version
1.1,
disponible
desde
la
URL
http://ant.apache.org/manual/LICENSE. El logotipo de Apache-ANT y Apache pertenecen a la Apache Apache Software Foundation.
- 100 -
Robot con control remoto y cámara de vídeo integrada
9. BIBLIOGRAFÍA Para más información sobre este y otros proyectos, versiones actualizaciones del software y firmware del robot así como la API detallada de las librerías empleadas, consulte
http://www.theexbteam.com/robots
9.1. REFERENCIAS BIBLIOGRÁFICAS BIBLIOGRÁFICAS (POR HACER) •
[FRA88] Sergio Franco, “Operational Amplifiers and Analog Integrated Circuits”, McGraw-Hill International Editions, Electrical & Electronic Engineering Series. International edition 1988.
•
[FER et al. 2002] 2002] J. Ferreiros, J. J. Macías, Macías, et al. “Aspectos “Aspectos prácticos prácticos de diseño y medida en laboratorios de electrónica”, Servicio de publicaciones, E.T.S.I. Telecomunicación. UPM, 20 02.
•
[MAL98] N. R. R. Malik. “Circuitos electrónicos. Análisis, Análisis, diseño y simulación”, Prentice Hall, Madrid, 1998
•
[SAN01] Jesús Sanz Sanz Maudes et al. “Manual de prácticas de Laboratorios de Electrónica Básica y Componentes, 2ª Parte” (simulaciones
PSPICE),
Servicio
de
publicaciones,
E.T.S.I.
Telecomunicación UPM, 2001. •
[WAK01] John F. Wakerly. “Diseño digital”, Prentice Hall, México,01.
[TAN03] Andrew S. Tanenbaum, “Computer Networks”, fourth
•
international edition, Prentice Hall, Upper Saddle River (NJ), 2003. •
[HER97] Guillermo Herranz Acebo, Acebo, “Ingeniería Eléctrico”, Eléctrico”, 1997, Madrid,
Departamento
de
Publicaciones
de
la
E.T.S.I
Telecomunicación UPM.
9.2. HOJAS DE CARACTERÍSTICAS CARACTERÍSTICAS Y RECURSOS EN LA RED Se han empleado las siguientes hojas de características disponibles en Internet:
- 101 -
Robot con control remoto y cámara de vídeo integrada
•
Philips Semiconductors, http://semiconductors.philips.com, para los componen tes digitales.
•
Maxim, http://www.maxim-ic.com, para los conversores RS232 a TTL MAX232.
•
Atmel, http://www.atmel.com, para los microcontroladores.
•
Nacional Semiconductors, http://www.national.com, para el
ADC0820. •
Microchip, http://www.microchip.com, para el PIC16F84.
•
Timming tool, http://timingtool.com/, para los cronogramas.
9.3. DIRECCIONES DE FABRICANTES Y PROVEEDORES PROVEEDORES A continuación se facilitan las siguientes direcciones de los fabricantes y proveedores del material necesario par a fabricar el hardware del robot y el control remoto: •
AUR°EL S.p.A., Via Foro dei Tigli, 4 - 47015 Modigliana [FC] – ITALY, Tel.: (+39) 0546941124, Fax: +390546941660. Fabrica los enlaces radio frecuencia empleados. Para más información,
http://www.aurel.it. •
ENDRICH Bauelemente S.L., c/ Balmes 243. – 08006 BARCELONA, Tel. (+34) 93 217 31 44, Fax. (+34) 93 217 97 20 , e-Mail: [email protected], suministrador oficial de AUR°EL en España.
Para
más
información
y
http://www.endrich.net/. •
eBay, http://www.ebay.com, para la cámara digital.
- 102 -
pedido s,