Estructura
Fonera 2.0 OpenWrt |
La idea original de este mini proyecto parte de la posibilidad programar un servicio ligero para ejecutar en pequeños dispositivos de control , que sin saberlo , muchos tenemos en casa, olvidados en un cajón y que en el mejor de los casos terminan en un punto limpio o mas frecuentemente directamente en el cubo de la basura.
Me refiero al típico punto de acceso o router ADSL WIFI que nos "regala" el operador de turno.
La mayoría de de estos dispositivos funcionan o es posible hacerlos funcionar bajo alguna versión de sistema operativo GNU/Linux y disponen en la placa base de un conector serie o USB que puede usarse para comunicación con un microcontrolador.
Colateralmente ,ya que la base de funcionamiento de los dispositivos Android , es también Linux, este mismo servicio se pude reutilizar compilar y ejecutar en tablets y telefonos inteligentes,sin utilizar el framework Android ni la Dalvik como máquina Java virtual si no como código compilado nativo de procesador, en la mayor parte de los casos un procesador con arquitectura ARM.
En esta aplicación el control de excitación ,velocidad y posición los motores se confía al uso de microcontroladores PIC.
El calculo de coordenadas,aceleración desplazamientos y sincronización así como las comunicaciones (serie,bluetooth y TCP/IP ) y el procesamiento de protocolo de comunicación LX200 de los clientes ,es tarea del servidor.
El servidor implementa:
- Servidor TCP/IP multi hebra clásico.
- Interprete de protocolo LX200 ( implementado con FSMC RAGEL.)
- Control de protocolo de bajo nivel comunicación serie <->PicGoto.
- Control nivel intermedio velocidad aceleración, posición motores
- Control básico de tracking, sincronización y desplazamientos (Go To).
Arrancando el servicio
El servidor como tal carece de interfaz gráfico .Se ejecuta como un servicio del sistema en segundo plano.
No obstante estoy programando una app para Android que posibilita el arranque, parada y la configuración de los parámetros sin tener que iniciar un shell (terminal o interprete de comandos).
En la siguiente captura de terminal Android iniciamos el servidor bautizado andtelescope como una aplicación nativa a efectos de para capturar y mostrar el tráfico que se genera.
Se inicia con éxito el puerto serie /dev/telescope que es un enlace simbólico a /dev/rfcomm0 físicamente en este caso un dongle Bluetooth ,también podría ser un conversor usb-serie en ese caso /dev/ttyUSB0.
A continuación se inicia una primera hebra que sera la encargada calcular los parámetros del control de velocidad y aceleración de los motores (20ms).
El segundo hilo de ejecución solicita a los microcontroladores cada 200ms la posición de los motores y ejecuta un algoritmo de control posición/velocidad proporcional que gestiona el tracking y los desplazamientos.
El procedimiento principal es el servidor de conexiones.Lanza una hebra independiente por cada conexión entrante y le asocia un interprete de comandos LX200, esto permite que distinta aplicaciones( Sky Safari ,Cartes du ciel ,Skymap..) desde distintos dispositivo (tablet, telefono,PC..) puedan acceder simultáneamente la posición y controles del telescopio.
Conectando con Sky Safari
Para Sky Safari que no trabaja un conexión persistente , sino que abre y cierra un socket por cada petición la programación como servicio multihebra es casi obligada.
Como el servicio corre en el mismo Tablet configuramos Sky Safari para que escuche en la dirección local y el puerto 8888.
Elegimos el sistema Losmandy Gemini, que implementa una versión simplificada de LX200.
Sky Safari ,Menú Configuración Telescopio |
En esta captura vemos que la conexión entre la aplicación Sky Safari y el servidor ha tenido éxito y podemos alinear el telescopio que apunta a una estrella conocida.
Ponemos el tablet en visión nocturna y empezamos la sesión de observación.
(continuará)
No hay comentarios:
Publicar un comentario