miércoles, 2 de diciembre de 2015

Ardutrip (II)

En la anterior entrada mi plan era usar dos arduinos dado que la pantalla ocupaba aparentemente todos los pines disponibles.

Cuando me llegó la antena GPS la conecté a un Nano y empecé a probar la sensibilidad y ver las tramas que mandaba. Me sorprendió que segundos después de sacar el conjunto a la calle cogió satélites y ofrecía un flujo de tramas de aproximadamente una por segundo. De todas las tramas disponibles considero que voy a usar las que empiezan por $GPGGA y $GPGRA  con lo que consideré como válida esta etapa y pasé a la siguiente. (Más info sobre las tramas en http://www.gpsinformation.org/dale/nmea.htm)


Planteé la mejor forma de conectar los dos arduinos para que uno leyese del GPS y le mandase al otro las tramas adecuadas. He visto dos posibilidades: Por Serial (Usando los pines TX/RX) y con IC2.
Basándome en ejemplos como los que se pueden encontrar usando Google vi que no había problema pero no me quedaba convencido por lo que, en un principio renunciando a medir la temperatura ambiente y dado que la antena GPS se conecta también con los pines TX/RX lo que hice fue soldar al Arduino Uno unos cables a la masa, a 5v y a TX/RX conectándolos a la antena GPS. El resultado es el de la foto y funciona por lo que lo siguiente es empezar con la programación.

Es obvio que programar el Arduino, sobre todo cuando hay que manejar muchas líneas de código, resulta pesado por lo que pensé si habría algún tipo de emulador que me evitase tenerlo enchufado y cargar continuamente el sketch para probar y he encontrado facilmente esta dirección https://123d.circuits.io donde registrándose (gratis) tienes un emulador muy completo (hasta ahora, para lo que yo necesito).


Estoy por tanto en fase de programación (que es lo que más me gusta desde el punto de vista creativo) y cuando tenga una versión beta operativa, la mostraré.






lunes, 23 de noviembre de 2015

Ardutrip (I)

Aunque he seguido practicando con Arduino y he construido algún prototipo, lo cierto es que no había hecho ninguna entrada en el blog.

Ahora me voy a embarcar (nunca más con sentido) en un prototipo al que el verano que viene voy a sacar mucho partido. Voy a construir (o al menos intentarlo hasta desfallecer técnicamente) un módulo GPS que me indique la velocidad, el rumbo, la distancia recorrida, etc. para instalarlo en un pequeño barco y para ser original, voy a llamar Ardutrip.

En el barco hay uno ya instalado de la marca Bidata, un ST-40 pero no funciona nada salvo la temperatura del agua (aunque tampoco las tengo todas conmigo). En teoría marca la velocidad y la distancia recorrida así como la profundidad pero por lo que he investigado, los sensores (transductores en jerga marinera) fallan mucho porque se llenan de caracolillo (el verdín que hay en los barcos) y hay que limpiarlos continuamente. En el caso de la velocidad y distancia ( también llamado corredera) el transductor es como una pala que gira cuando circula el agua que debe hacer de interruptor y aunque vi que giraba, no queda claro si realmente está sucia o que la instalación eléctrica está mal (que también puede ser) pero de cualquier forma, lo que recibe el módulo central es una serie de impulsos según giran las palas. Dentro de mis objetivos (que ahora detallaré está generar esos impulsos para mandárselos.


Básicamente quiero disponer de la siguiente información:

  • Velocidad: Actual, media, máxima
  • Distancia: Recorrida desde inicio de medida y la total
  • Rumbo
  • Día y Hora
  • Posición GPS con historial desde inicio de medida y datos del GPS como satélites conectados
guardando en una tarjeta las sesiones por fecha/hora para luego poder explotarlas en el PC. Además poder generar una serie de impulsos para enviárselos al Bidata y ver si funciona.

Cuento, entre otras cosas, con los siguientes componentes básicos:
  • Arduino UNO
  • Pantalla de 2.4 pulgadas en Shield
  • Módulo GPS

Primera toma de contacto

Pedí la pantalla y el módulo GPS (entre otras cosas) a una tienda china pero desde el almacén europeo (con un pequeño sobrecoste) me mandaron previamente la pantalla (18 días naturales) y en cuanto la recibí, empecé a probar.

Es cierto que durante el tiempo de espera estuve navegando por internet porque el problema que nos podemos encontrar es con las librerías de manejo de la pantalla y aunque es un gusto la cantidad de información que hay, da un poco de miedo pensar que no encuentres la adecuada.

En la misma página china, en los comentarios dijeron que era la segunda versión de la pantalla y apuntaban a https://github.com/JoaoLopesF/SPFD5408 como lugar adecuado. Aunque descargué también otras localizaciones, fue la primera que probé y funcionó.

La pantalla viene en una placa que encaja en los pines del Arduino lo cual, ahora para probar me gusta pero que no me va a servir ya que entiendo que no usa todos los pines y yo tengo que conectar también el módulo GPS pero para empezar e ir cubriendo fases, me parece bien.

De todas formas, mi impresión es que será complicado tener en un sólo Arduino el control del GPS y manejar la pantalla por lo que probablemente tendré que tener uno para cada cosa y comunicarlos por serie dado que son los pines que me quedan.

Mi plan de programación es crear un menú en el que al menos haya estas opciones:
  • Nueva sesión
  • Sesiones anteriores
  • Detalles GPS
  • Opciones (Kn/Km, colores, ...)
para lo que también me va a facilitar el hecho de la pantalla es táctil (resistiva).

Como programador con experiencia en cortar y pegar, me he basado en un ejemplo para ir añadiendo funcionalidad.

Ahora mismo he llegado a iniciar la pantalla, entender sus dimensiones, la rotación, colores, ... y crear texto de inicio y que acepte lo de 'Pulsa una tecla para continuar'.



Cuando tenga algo de código decente, lo iré poniendo en Dropbox. Lo que si me pasó y tuve un momento incómodo es que en un fallo de programación el Arduino se debía quedar en un bucle (colgado como una paraguaya) y no había forma de que hiciese caso al Update. Separé el Shield y al arrancar, supongo que le daba error de pantalla y no avanzaba y pude cargar el sketch adecuado.

Atentos a siguientes entradas (por si me tenéis que echar una mano si me atasco)