POSICIONAMIENTO APRS ONLINE

viernes, 25 de febrero de 2011

Implementando el tracker APRS de EA4AQM



En esta nueva entrada y tal como indica el título, la idea es compartir la experiencia de la implementación del tracker APRS desarrollado por el colega EA4AQM Víctor.

Me puese en contacto con Victor para ver como podía implementar su tracker APRS que por cierto, fué publicado en la revista de URE de enero de 2011. Este proyecto, , está basado en plataforma PIC al contrario que el que acabo de publicar que está basado en arduino.
Victor amablemente me facilitó los ficheros .hex para grabarlos en los PIC´s, el esquema y las instrucciones necesarias para ponerme en marcha. Hice acopio de los componentes en la tienda de electrónica de rigor, en mi caso Viloga, que me pilla más cerca. Hago un paréntesis aquí para comentar lo triste que parecen hoy en día las tiendas de compontentes electrónicos, cada vez que entro en la tienda se me cae el alma al suelo, !quien las ha visto en los 90 y quien las ve ahora!. Esto es consecuencia del avance tecnológico.
Bueno "al turrón".... Los pics que utiliza el tracker son dos 16F84A y mi primera sorpresa es que no disponen de ellos pues son algo antiguos, total que me los piden para el día siguiente.

Dispongo de unas placas de prototipo que son muy indicadas para este tipo de montajes y sobre ellas empiezo a colocar todos los componentes y a cablearlos. Cuando está todo terminado, es la hora de grabar los PIC´s. Después de varios problemillas con el grabador finalmente consigo solucionarlo y realizo la grabación de los pic´s. El grabador es uno adquirido por ebay a los chinos muy económico (el JDM programmer) pero funciona muy bien. Lo único es que es por puerto serie y hay que tener algún PC con puerto serie pues no se lleva muy bien con los adaptadores USB-RS232. Como software de grabación de los PIC´s se puede usar el Winpic800 o bien el IC-RPOG, yo he usado éste último y es necesario posicionar el OSC: HT y No usar WDT.

Una vez todo montado en la placa, procedo a dar alimentación al circuito y veo que el circuito está vivo porque los leds se encienden, el rojo de TX por 1 segundo y el verde se mantiene encendido, ésto ya es buen síntoma. El funcionamiento del led verde debe ser el siguiente:
- Encendido mientras el gps no esta fijando la posición.
- Intermitente con una cadencia de 1sg cuando el gps ha fijado posición.
El led verde en su estado de intermitencia, nos sirve como herramienta indicadora de que el PIC 1 esta recibiendo datos, son válidos y también de que el gps está fijando posición.





Yo no conseguí que el led verde se pusiera intermitente, por lo que algo estaba pasando. Verifico niveles de tensión que está entregando el gps en su stream de datos y veo que entrega unos niveles TTL válidos. También verifico el pin RB0 del PIC1 para ver si recibe datos vía el MAX232 y detecto que no hay datos. Después de darle vueltas al tema concluyo que el gps al entregar niveles TTL no debe ir conectado al MAX232 (que trabaja con niveles RS232) sino que debe ir conectado directamente al PIC1 (entre RB0 y masa). Lo conecto directamente como acabo de comentar pero veo que el led sigue sin estar intermitente, posteriormente reparo en que el gps nunca logró fijar la posición porque estaba dentro de casa.
Tan pronto coloco el gps en la ventana para que logre posicionarse, veo que el led verde se pone intermitente..... bueno, pues ya hemos dado un paso importante, de momento sabemos que el sistema "parece" funcionar y que se estan recibiendo los datos del gps correctamente.
Procedo con la configuración del tracker para introducirle el indicativo etc. Ésto se realiza por el puerto serie usando el Hiperterminal de windows y pasando a modo programación al tracker manteniendo pulsado el pulsador y aplicándole alimentación (los dos led deben permanecer apagados). Para enviar la configuración al tracker se debe seguir escrupulosamente las instrucciones que Victor me facilita ya que son un poco "especiales".
Una vez grabada la configuración en el PIC, detecto que el led de TX no luce en ningún momento y Victor me aclara que en función del indicativo (SSID) utilizado se activa una lógica diferente para hacer la TX. Existen cuatro modos predefinidos, el "9" (coche), el ":" moto, el "4" bici y el "7" Jogger. En modo coche y moto el funcionamiento es aplicando lógica de cambio de rumbo y velocidad, el resto es por tiempo y se aplica una velocidad mínima.
Entonces entendí porqué nunca hacía TX independientemente del SSID utilizado y es que el gps estaba estático y nunca se cumple la lógica que activa la TX.
En ese momento caí en que la segunda funcionalidad del pulsador es forzar el envío de una baliza, lo pruebo y veo que pasa a TX... eureka!. Parece que esta todo funcionando correctamente. Fuerzo el envío de unas cuantas balizas y monitorizo en aprs.fi la que la trama ha entrado en la red, pero lamentablemente por algúnmotivo con el que ahora mismo estoy liado, la trama no es reconocida por la red.

A ésto ya le queda muy pero que muy poquito para que esté 100% operativo.

Seguimos....

Después de una larga charla en la frecuencia habitual con Victor EA4AQM y Jesús EA4EP, por cierto muy instructiva, llegamos a la conclusión de que el PIC no estaba configurado puesto que estando en modo programación desde el hiperterminal con tan solo pulsar una tecla, el tracker debe responder siempre son su configuración.
Estaba teniendo problemas en la comunicación serie con el tracker, por lo que decidimos pasar al método alternativo de configuración grabando directamente los datos de configuración en el código del programa (en la parte de memoria eeprom del pic). Utiliza los 16 primeros bytes de memoria. Para ello utilizamos el ic-prog y una vez terminado grabamos el código en el pic.
Lo ponemos en marcha y voilá!!!! todo funciona correctamente, las tramas ahora si entran en la red aprs.

Finalmente, he montado el circuito sobre una placa universal taladrada y sólo queda meterlo todo en una caja. Uso este tipo de placas porque el tema de taladrar como que me aburre un montón.

Un par de fotos....




Detalle del montaje sobre la placa de nodos taladrada.





Un saludo
Ernesto.

jueves, 24 de febrero de 2011

Tracker APRS con Arduino -- Trackuino --

Hace tiempo que hice acopio de material de arduino y componentes electrónicos asociados, con el objetivo de emprender posibles proyectos en el entorno de la radio.
Ha sido a raíz de haber comentado con el colega EA4AQM sobre el desarrollo de su tracker APRS (publicado en la revista de URE de Enero de 2011) que me he animado a ponerme un poco más en serio con el tema de la programación y el entorno de Arduino para dar uso a las placas que tengo por casa.
Por cierto, para los que no sepan que es arduino, les remito a la siguientes dirección:

http://www.arduino.cc/
http://www.youtube.com/watch?v=qhy5UtIzZfo
http://www.youtube.com/watch?v=-KXBZZO6IgQ&feature=fvw

Como ya sabéis, se trata de un entorno de desarrollo con hardware y software libre, que está basado en un microprocesador AVR. Para mí tiene una serie de ventajas que enumero a continuación:

- Hardware y código libre, con una amplia comunidad de desarrolladores.
- Amplia documentación (manuales y proyectos) disponible en la red.
- Entorno de programación sencillo en lenguaje C, con editor, compilador y grabador incluídos.
- Uso del puerto usb para una grabación inmediata del micro. (el micro incorpora un bootloader para esta funcionalidad).
- Funcionamiento en Windows, Linux y Mac.

He buscado por la red si ya existía codigo desarrollado para un tracker APRS y efectivamente existe. Después de probar alguna solución me he quedado con el desarrollado por un colega español EZ5HAV Javier, con el que no he podido contactar por el momento para contrastar impresiones.

Se trata del proyecto Trackuino, del que podéis ver la información original en el siguiente enlace:
http://code.google.com/p/trackuino/

Pues bien, esta nueva entrada del blog trata de la implementación del proyecto Trackuino adaptado a mi caso concreto con el fin de compartir la experiencia con los colegas que pudieran estar interesados.
Trackuino, es un proyecto principalmente pensado para hacer seguimiento vía APRS de un globo sonda por lo que además de incorporar todo lo necesario para el protocolo APRS, incluye soporte para un sensor. El proyecto lo tiene todo para funcionar como un tracker aprs, decodificando las tramas NMEA proporcionadas por un GPS externo y trasmitiéndolas bajo el protocolo AX25 de APRS. Además incorpora soporte para un sensor externo de temperatura, ésta parte es la que no necesito y hay que adaptar.

Lo primero de todo es tener el entorno de programación arduino instalado en el ordenador y recomiendo siempre bajar la última versión de la página oficial. Actualmente está la ver. 022. A continuación tener a mano todo el hardware necesario, placa arduino, componentes electrónicos, polímetro y si se dispone de un osciloscopio pues mejor. Aunque el polímetro y el osciloscopio no son 100% necesarios ayudan en el caso de que exista algún problema de funcionamiento. Una vez todo a mano, descargar el código de trackuino y descomprimir el fichero.

http://code.google.com/p/trackuino/downloads/detail?name=trackuino-ide-1.1.zip&can=2&q=
La carpeta que resulta debereis guardarla colgando de la carpeta "examples" del entorno arduino, de esta forma la tendréis disponible rápidamente en el menú "examples" del entorno de programación.

Para los ya iniciados, los detalles seguro que sobran, pero para los que decidáis acometer el proyecto sin mucha idea, os recomiendo tirar de la documentación existente en la web de arduino o bién la propia ayuda del programa. La idea es que estéis familiarizados con el entorno, aunque ya os digo que lo atractivo de arduino es lo sencillito que resulta todo.

Arrancais arduino y os vais a cargar el código de trackuino, para ello File/examples/trackuino

En la ventana que se abre ya tenéis el codigo. Podéis ver que teneis varias pestañas, deberéis seleccionar config.h y modificarla con vuestros datos, indicativo etc.

En el código principal yo he comentado varias lineas de código relacionadas con la parte del sensor. Por otro lado, os habréis dado cuenta que el codigo contempla dos modulos de radio, el mx146 y el hx1. Se tratan de modulos trasmisores compactos que se podrían utilizar en un globo sonda, como éste no es nuetro caso ya que vamos a utilizar un transceptor externo, usaremos el hx1 que viene por defecto en el config.h. Se trata del módulo más sencillo y que podemos compatibilizar con el uso de un equipo externo de forma fácil.

Os sugiero comentar en el código todo lo relacionado con el sensor y con el módulo mx146.
Para esta tarea, os dejo que os familiaricéis con el entorno practicando con la compilación del código (boton Play) hasta que no tengáis ningun error. Una vez hecho todo eso, tendríais el codigo listo y configurado con vuestros datos para ser grabado en el micro.
Conectar la placa arduino via USB al PC. En el programa seleccionar vuestra placa en Tools/Board y el puerto serie en Tools/Serial port.

Ya está todo listo para grabar el programa en el micro, sólo tendréis que hacer click en el icono de Upload indicado con una flecha hacia la derecha y veréis que el código se graba en vuestro arduino. No debiérais tener ningun error, en caso contrario a investigar...

Esto no es todo, ahora falta la parte externa de hardware que hará de interface con nuestra radio y el GPS. Yo lo he implementado en una placa de prototipos ya que son pocos componentes. Mas adelante usaré una placa taladrada con nodos de cobre.

Si no lo habéis descubierto aún, os recuerdo que en el proyecto se usan los siguientes pines:

Pin3: Señal de audio AFSK para TX.
Pin4: PTT
Pin0: RX Recepción de datos del gps.

Para el audio TX conviene filtrar la señan proveniente del pin 3 a través del siguiente circuito:



Para el PTT se puede implementar el siguiente circuito:




Os dejo en el aire el tema de la configuración del GPS.... deberéis investigar el código para ver dónde se configura la velocidad del puerto serie para que coincida con la velocidad a la que entrega los datos vuestro gps. En mi caso estoy aprovechando un gps bluetooth al que le he sacado una salida TTL de datos que se conecta directamente al RX (Pin0) de la placa arduino y masa.



Con esto quedaría explicado lo más importante de la implementación del proyecto, espero os haya servido.