jueves, 31 de marzo de 2022

ESP32go

ESP32Go.

Es un desarrollo  basado  el módulo  microcontrolador ESP32 y un par de drivers de motores de pasos , los usados impresoras 3d ,para computerizar monturas ecuatoriales o alt-azimutales ya sean comerciales o autoconstruidas. e incluye control de enfocador.

Se puede usar para astrofotografía y tambien para automatizar  un dobson para visual.Es autónomo. no requiere ordenador basta con un Smartphone + la aplicación Sky Safari. y en modo minimal solo con el mando de la tele.

Es  conceptualmente muy  sencillo :código abierto  y open hardware ,fácil de construir y bastante asequible.A mí me lleva unos treinta minutos el montaje, un poco mas si incluye soldar IC de control de enfocador.

Básicamente está hecho para mí  uso  y para  algunos amigos de afición cercanos.No tengo especial interés en dar soporte,despues  de veinte años y más doce mil consultas  con proyecto PicGoto creo que he cumplido con la comunidad astronómica cacharera mundial .

Si me da por ahí sacare algunas placas pero las diez que encargué estan o ya  montadas , funcionando  o con el nombre puesto.

Soporta conexiones  concurrentes WIFI, BlueTooth y USB , implementa el protocolo LX200 de forma nativa por lo que puede controlarse desde cualquier software  astronómico en Windows con ASCOM (The Sky,CDC,Guide 9, PHD2 MaximDL etc).Aun así  he programado su propio driver  para facilitar la comunicación WIFI directa ,sin necesidad de ALPACA ni demás "maravillas". 

Con sistemas basados en  Linux como Ubuntu,Fedora,Raspberry Pi o mediante  INDI  ,con Kstars o EKOS.


Funciona tambien con la aplicación para smartphones Android e Iphone Sky Safari sin necesidad de otro hardware que el propio circuito (no se necesita el SkyFi que comercializa Sky Safari),

Como mando de control puede conectarsele un Nunchuk de WII (I2C) o el mando de la tele (IR).



El circuito esta diseñado usando el EDA de código abierto  con KICAD5.Con frecuencia las mejores cosas de la vida son "free" (prefiero la traducción libre a la de gratis) 

Aunque  la mayor parte del proyecto esta programado en C estándar (proviene de la implementación del server que hice para Linux),ya adapte el código  para el Core-ESP32 de Arduino,  se realiza desde el IDE de Arduino,por lo que se puede personalizar.

El código fuente del firmware está disponible en GitHub

https://github.com/masutokw/esp32go

y el código del driver ASCOM también:

https://github.com/masutokw/Esp32Go-ASCOM


Y nada más



miércoles, 15 de junio de 2016

Multifocus

Enfocador Doble, rueda de filtros y rotador de campo y controlador  anti rocio.

El MultiFocus ,es un dispositivo diseñado para  automatizar los elementos auxiliares más comunes  que se utilizan en fotografía astronómica:

  1. Enfocador  principal.
  2. Enfocador telescopio auxiliar o de guiado.
  3. Rueda de filtros automática .
  4. Rotador de campo (cambio de ángulo de la cámara)
  5. Control resistencia calentador anti - empañamiento.

Al estar todos los dispositivo integrados en un mismo controlador no es necesario el uso de una conexión física (serie o USB) dedicada para cada dispositivo ,todos utilizan el mismo canal común  y con la posibilidad de comunicación inalámbrica por BlueTooth.

El controlador dispositivo implementa su propio protocolo de comunicación, no emula ningún protocolo de marca conocida o desconocida ,ya que en el lado de ordenador de control, el software ejecuta su propio servidor , que a su vez implementa  un driver ASCOM para cada dispositivo. De esa forma puede ser usado desde cualquiera de las aplicaciones de adquisición de imágenes que soportan ASCOM. 

CIRCUITO

Para esta cosas no soy muy utilizar Arduinos ,Maples u Olimexes,principalmente porque me gusta diseñar ,fabricar construir mis  PCBs ,programar con las herramientas  a las que estoy habituado  y lo mas importante, fabricar dispositivos "reparables".
Para el MultiFocus he utilizado el software de código abierto  KICAD EDA (Electronic Design Automation) disponible en Windows, Linux y OSX.

Frente EAGLE o ALTIUM tiene la ventaja de ser gratuito,no tener limitaciones en cuanto a dimensiones ni capas y la posibilidad de crear y editar cualquier componente que no este en sus librerías.
Genera los ficheros GERBER necesarios para que cualquier empresa te fabrique los sin ningún problema o ficheros de tipo vectorial para imprimir uno mismo los fotolitos si la fabricación va ser personal.


El dispositivo en cuestión es un circuito basado en el controlador ATMEGA128 de ATMEL esta programado para  controlar cuatro motores de pasos y otros sensores,
  • Motores en modo micropaso (enfocadores),dos.
  • Motores en modo  medio paso: rueda de filtros y rotador de campo.
  • Sensor de  temperatura y humedad para calcular punto de rocío,
  • Driver HEXFET para controlar resistencia calefactora por PWM.
  • Doble conector I2C Opcionalmente display OLED  o LED.
  • Ocho entradas análogicas para futuros sensores
  • El dispositivo se puede comunicar de forma inalámbrica por Bluetooth y USB.
  • Doce entradas/salidas digitales de propósito general (fines de carrera,botones de control manual etc)


PCBNew. Editor de Pcb de KICAD

FIRMWARE

Para que el circuito haga "algo", no queda mas remedio escribir código y programarlo.En este caso el el código está escrito en C.

Como herramientas de programación:
  • CODE::BLOCKS Entorno de programación  OpenSource y disponible para cualquier plataforma, se puede usar  Eclipse   que  está  bien (si te gustan los elefantes blancos).
  • AVR-GCC,el archiconocido port de GNU-C para microcontroladores  AVR.
  • RAGEL compilador de máquinas de estado finito para implementar sin errores el protocolo de comunicaciones, genera el código en C,C++,JAVA o RUBY  totalmente libre de dependencias mejor que el que uno mismo pueda escribir "a pelo".

CODE:BLOCKS y FSM RAGEL

SOFTWARE

En la parte del PC ,he escrito una aplicación/Automation server en Delphi para el control y configuración de los dispositivos,con la implementación de su driver  ASCOM .Así puede utilizarse sin necesidad incluirlas en un HUB de ASCOM.
La captura muestra el uso  con el conocido software de captura y procesado de imágenes MAXIM DL.




viernes, 4 de abril de 2014

Implementación ligera de método alineación 2-3 estrellas (Algoritmo de Taki ) para microcontroladores(2)

Datos de entrada


 Coordenadas ecuatoriales
Mini-STM32 
Empezamos creando una mini-base de datos con las coordenadas de las estrellas mas destacadas del cielo para que puedan seleccionarse como referencia para la alineación.Se pueden extraer de cualquier catálogo. En el caso de un microcontrolador ,si no se quiere desperdiciar recursos se pueden almacenar, en una tabla en  memoria de programa en Flash  las 20 ó 30 más brillantes de firmamento:

Diphda (Bet Cet) 00:43.6 -17:59
Achenar (Alp Eri) 01:37.7 -57:14
Hamal (Alp Ari) 02:07.2 +23:28
Polaris(Alp Umi) 02:14.7 +89:17
...
...
....
Deneb     (Alp Cyg) 20:41.5 +45:17   
Enif      (Eps Peg) 21:44.2 +09:53   
Fomalhaut (Alp Psa) 22:57.7 -29:38   
Markab    (Alp Peg) 23:04.8 +15:12  

Coordenadas instrumentales (alt-azimutales).
Para  clarificar, cuando mencionemos altitud y azimut en este contexto NO nos  estamos refiriendo a las posición aparente  de la estrella , la que mediríamos con una brújula y sextante, estaría determinada por la coordenadas geográficas ,fecha y hora. Nos referimos a las coordenadas instrumentales

Definimos coordenadas instrumentales a los valores que resultan de medir la posición de los ejes de la montura ,como ejemplos

  • Los valores leídos en unos círculos graduados .
  • Unos codificadores de ángulos  acoplados a los ejes.(hay varios tipos óptico,resistivos, sensores Hall...)
  • Los  registros de contador de unos motores  de pasos.
  • Otros dispositivos  mas exóticos.: Encoder Laser,giroscopio electrónico..


Si la montura fuera perfecta y estuviera perfectamente nivelada (no calcularemos el efecto refracción atmosférica por el momento) coincidirían , pero la razón de usar esta transformación es, precisamente. que no sea  imprescindible disponer de los datos geográficos, ni disponer una montura perfectamente nivelada con ejes perfectamente ortogonales.


Definimos una estructura de datos  para almacenar  las coordenadas de cada estrella de alineación con su  marca temporal.
La estructura c_star  incluye el valor de las coordenadas ecuatoriales,ascensión recta declinación, de la estrella y las coordenadas instrumentales ,azimut altitud y el valor contador de tiempo correspondiente a esa medida.

Todos los valores  coordenadas  se almacenan como radianes. Sólo se emplearán grados sexagesimales para la introducción y  presentación de datos al usuario.
También  nuestro propio  tipo de coma flotante, c_double, con el propósito de poder  modificarlo en cualquier momento  en tiempo de compilación para seleccionar mayor o menor precisión en el cálculo definiéndolo como float, double o long double .
Incluimos un procedimiento set_star para rellenar la estructura con la datos de entrada en formato sexagesimal

typedef  double c_double ;
#define GR (180.0/M_PI)//  57.2958
typedef struct
{
    c_double ra ;
    c_double dec ;
    c_double alt ;
    c_double  az ;
    c_double    timer_count ;
} c_star ;

void set_star(c_star *st,c_double ra,c_double dec,c_double az,c_double alt,c_double ticks)
{
    st->ra=ra/GR;
    st->dec=dec/GR;
    st->az=az/GR;
    st->alt=alt/GR;
    st->timer_count=ticks;

}
Inclinación ejes de la montura/ Errores Constructivos. 

Se modelan mediante la introducción de de tres parámetros  que se corresponden con los valores angulares de error.
  • Z1 angulo error de perpendicularidad entre el eje de altitud y azimut
  • Z2 error de paralelismo entre el eje óptico de telescopio  y el eje vertical (según el caso polar o azimutal) es lo que se denomina a veces error de cono.
  • Z3 error de offset en el eje de altitud.

Lo ideal es poder determinar los errores constructivos de nuestra montura e incluirlos.Existen diversos métodos de medición de errores que no voy describir aquí.
 En este caso vamos emplear la solución mas rápida que es aceptable  solo cuando  los valores  del angulo  de error Z1 y Z2 están por debajo de un grado.
Aún así ,sin incluir el cálculo de estos parámetros, si la montura esta razonablemente bien construida y el telescopio bien colimado, a efectos prácticos para la observación visual, la precisión es suficiente para colar los objetos dentro del ocular o la cámara y un seguimiento visual correcto.

Añadimos tres variables globales z1,z2 z3 para almacenar el valor de los errores y un procedimiento para almacenarlas y añadir otra booleana  (perfect_mount )para indicar en posteriores funciones si es necesario compensar  las correcciones de error .


static c_double z1, z2, z3; 
static char perfect_mount;

void init_errors(c_double az1,c_double az2,c_double az3)
{
    align_star_index = 0;
    z1 = az1;
    z2 = az2;
    z3 = az3;
    perfect_mount= (z1==0.0)&&(z2==0.0);
}

Cálculo de Matrices de trasformación

Tantos las coordenadas ecuatoriales como las instrumentales se pueden considerar como sistemas de coordenadas esféricas,si a la dupla de ángulos le añadimos una tercera componente que seria el módulo o radio.
Para simplificar los cálculos  establecemos la unidad como el radio del vector.

Disponemos de dos  sistemas de coordenadas esféricas:

  1. Celestes o ecuatoriales (ascensión recta,declinación,1).
  2. Instrumentales (azimut, altitud,1) 

Para calcular las matrices de transformación de un vector de un sistema a otro:

Convertimos las coordenadas de cada una  las estrellas de alineación  de esféricas a cartesianas.

En el caso de las coordenadas celestes hemos de considerar restar al valor de ángulo de ascensión recta  el valor del angulo proporcional al intervalo tiempo trascurrido desde el instante que consideramos inicial. Esto es cuando el contador de tiempo es cero.Además este intervalo lo multiplicamos por una  constante KTIME para convertir el intervalo  a tiempo sideral.

ar=ar-KTIME · t
EQ(ar,dec,1)=>(x1,x2,x3)=( cos(ar) · cos(dec) , cos(dec) · sen(ar) , sen(dec));

Para pasar de coordenadas instrumentales a cartesianas, antes de convertir el vector restamos de 360º el valor de azimut para  ser congruentes con sentido de azimuth que se emplea en astronomía ,y añadimos el error de offset al ángulo de altitud.
az=360º-az 
alt=alt+z3
IN(az,alt)=> (y0,y1,y2) = ( cos(az) · cos(alt) , cos(alt) · sen(az) , sen(alt) )

Si la montura no es perfecta calculamos la corrección mínima( y la sumamos al vector


y0 = y0 + sen (az) · cos(alt) · Z1- sen(az) · Z2
y1 = y1 + cos (az) · Z2 - cos(az) · sen (alt) · Z1


Almacenaremos los vectores resultantes en dos matrices 3x3,que emplearemos posteriormente para calcular las matrices de transformación.

typedef c_double MAT3x3 [3] [3];
typedef c_double VECT3 [3];

static MAT3x3
eq_trans_mat, //to equatorial transform matrix
altz_trans_mat, //to alt-az transform matrix
y,              //telescope
x;              //actual


static VECT3 vector ;
static char align_star_index;
void init_star(unsigned char index, const c_star *star)
{
    align_star_index=index--;
    c_double ra=star->ra - (KTIME*star->timer_count) ;
    c_double cosdec=cos(star->dec);
    x[0][index] = cos(ra) * cosdec;
    x[1][index] = cosdec * sin(ra);
    x[2][index] = sin(star->dec);


    spher_to_rect(star->az,star->alt);
    y[0][index] = vector[0];
    y[1][index] = vector[1];
    y[2][index] = vector[2];
}

void spher_to_rect(c_double az,c_double alt)
{
    az=M_2PI-az;
    alt+=z3;
    c_double cos_az=cos(az);
    c_double cos_alt=cos(alt);
    c_double sin_az=sin(az);
    c_double sin_alt=sin(alt);

    vector[0] = cos_az * cos_alt;
    vector[1] = sin_az * cos_alt;
    vector[2] = sin_alt;

    if (!perfect_mount)
    {
        vector[0] +=  sin_az * cos_alt * z1 - sin_az * z2;
        vector[1] +=  cos_az * z2  - cos_az * sin_alt * z1;
    }
}

(Continuará)


domingo, 16 de marzo de 2014

Implementación ligera de método alineación 2-3 estrellas (Algoritmo de Taki ) para microcontroladores(I)

Introducción. 

Target en ATMEGA128L ,3.3v 8Mhz,donde estoy probando 
el código 
En principio lo mas razonable hubiera sido simplemente subir el código y explicar como se utiliza por si alguien tuviera interés en usarlo en algún proyecto propio. Esto,aunque entra dentro de lo posible  cae mas del lado de lo improbable.

Así que por lo menos en la primera entrega intentaré introducir algunos conceptos  sobre monturas astronómicas.Mas adelante intentaré describir los fundamentos de algoritmo y como se implementa de una forma eficiente.

En el micro ,un ATMEGA128L, de la foto se puede ejecutar un bucle de control de posición velocidad  utilizando aritmética de de coma flotante de 32bit   con una frecuencia de hasta 30hz.

Teniendo en cuenta que es un micro de 8bits ,que carece de FPU y al mismo tiempo esta generando la excitación seno/ coseno para controlar un motor de pasos a 200 nano-pasos por paso y 20khz de PWM creo que va bien servido.
Lógicamente el mismo código doble un STM32 con nucleo ARM de 32bits y DSP  72Mhz  sí que va más que sobrado.

Una montura de telescopio  es un ingenio,(cultismo referido a  "cacharro")  que básicamente consta de  dos ejes  mecánicos   (azimut u horizontal y elevación o altitud)   de movimiento  en el  plano horizontal XY  y vertical YZ fijándose el telescopio en  extremo de eje vertical con su eje óptico paralelo al plano XY .
Ambos ejes deben ser razonablemente ortogonales  y no se encontrarse en el mismo plano.
Como  ejemplo  un simple trípode   de fotografía   cumple  con esta definición.

Alt-azimutal u horizontal 


Mi EQ6  para pruebas , en modo azimutal  ya que como puede
 apreciarse el eje polar está apuntando al cenit
El eje azimut se apunta al cenit (la vertical de lugar en la ubicación de observador).
Para contrarrestar la rotación terrestre la cosa se complica porque las velocidades angulares  en ambos ejes varían de forma continua en ambos ejes y su valor en cada instante depende de varios parámetros: coordenadas ecuatoriales , coordenadas geográficas, fecha,hora....

Además para mantener la orientación del campo visual en fotografía de larga exposición, requiere otro motor adicional capaz de rotar el plano focal y así  compensar la rotación de campo visual.

Ejemplos de este tipo de montura son el ya mencionado y común trípode fotográfico, la montura Dobson, el Leviatan de Lord Rose, el montaje mecánico del  Grantecan o mi EQ6 cuando la amarro a la baranda de la terraza para probar código.








Ecuatorial :

Refractor Yerkes sobre montura ecuatorial alemana
Se orienta con el eje horizontal en paralelo el eje de rotación  terrestre.
  • En el hemisferio norte apuntado el eje del telescopio al polo norte celeste que se encuentra cerca  medio grado de la estrella polar 
  • En el hemisferio Sur  al polo sur celeste que puede determinarse utilizando la dirección hacia que señala el segmento mayor de Cruz del Sur una distancia de cuatro  veces su longitud aparente.
Para contrarrestar el desplazamiento de los objetos celestes del campo de observación del instrumento se precisa  colocar un conjunto  motor /reductora que haga girar el eje horizontal  (que pasamos a llamar de polar o de ascensión recta  ) a una velocidad angular  constante unos 15,04 segundos de arco / segundo.
El eje de elevación  (que llamaremos de  declinación  permanece estacionario  con la montura en seguimiento)

Ecuatorial vs Alt-azimutal


La principal ventaja de la montura ecuatorial sobre la altazimutal  radica precisamente en que es mas fácil de implementar el seguimiento y control ya que solo requiere un motor capaz de girar velocidad constante.

Su punto débil radica en  el hecho de que la orientación de eje polar apunta a un posición arbitraria que varia en función de la latitud del observador y no coincide con la dirección de la gravedad ,lo que lo que implica el empleo  una mecánica mucho mas masiva y exigente en  razón tamaño y el peso del telescopio.

De hecho todos los telescopios "gigantes" modernos están construidos siguiendo  diseños  alt-azimutales porque  que la dificultad  construir  y controlar estructuras mecánicas estables y corrección de la  flexiones mecánicas  hace practicamente inviable  otro tipo de configuración para construcciones tan colosales. De hecho el telescopio Hale  de MT Wilson ,aunque hace décadas que dejo de ser mayor telescopio del mundo sigue siendo la mayor estructura ecuatorial que se ha construido jamás.

En el campo de los aficionados ocurre algo parecido.Mientras para pequeñas/medianas aperturas de hasta 250 o 310mm de apertura  la construcción o adquisición de monturas ecuatoriales  entra dentro de unos limites económicos razonables , para los telescopios 500 ó 600 mm que empiezan a ser habituales entre muchos aficionados simplemente se torna inarbordable desde en punto de vista económico y de transportabilidad.

Antecedentes


En 1989 ,el japonés Toshimi Taki ,ingeniero aeronáutico especializado en análisis de estructuras, publicó un pequeño articulo en la revista Sky and Telescope donde brevemente describía (acompañada con en código fuente de  pequeño programa en QBasic) un método de de conversión de coordenadas ecuatoriales (ascensión recta/declinación)  a coordenadas horizontales locales.

La novedad era que a diferencia de métodos clásicos de cálculos y fórmulas  puramente trigonométricas, que requieren incluir entre los datos iniciales  coordenadas geográficas del lugar,fecha  y hora,se emplean elementos de calculo vectorial y matricial que incluyen ademas la posibilidad de corrección de errores constructivos en la montura así como posibilita prescindir de datos geográficos y temporales para calcula las transformaciones entre coordenadas celestes y coordenadas instrumentales.
Se describirá con mas detalle en próximas entradas

miércoles, 11 de diciembre de 2013

Servidor empotrado Linux/Android de control de monturas astronómicas.(II)

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á)




martes, 3 de diciembre de 2013

Servidor empotrado Linux/Android de control de monturas astronomicas.(I)

En esta entrada se describe  el sistema PicGoTo++  en actual estado  , tal  y como lo están empleando un  par de centenares  usuarios, que se lo han autoconstruido por  todo el mundo.

El siguiente paso es  habilitar de un sistema de control de  montura  ultra portable utilizando el veterano PicGoTo++  como controlador  electrónico motores y dispositivos Linux de bajo coste como tablets( Android) o routers wifi(OpenWRT,dd-wrt) como controlador de "alto nivel" (por calificarlo de alguna manera).

PicGoTo++ en su  configuración clásica ,es adecuado para un observatorio fijo,astrofotografía o salir al observar al campo si se dispone de un pequeño Netbook con Windows.

Sin embargo para la observación ocasional ,  quizás seas mas sencillo prescindir del ordenador y usar un Tablet normalito , incluso un smartphone.Esta segunda opción se  mostrará en la siguiente entrada.Como adelanto ya funciona en conexión con Sky Safari en mi Tablet  chino de combate   cutre y viejuno.
El servidor está escrito en C,aunque la primera aproximación fue  en C++,que facilita mucho la programación ,el tener que usar  librerías adicionales en algunos de routers pequeñitos era una limitación importante.

Sky Safari y Linux Android  Picgoto++ server

ANTECEDENTES

Circuito


Tanto  PicGoTo estándar como  PicGoTo++ son circuitos basados en el  microcontrolador PIC16F628A,  por si mismos no son suficientes  para el completocontrol automatizado de una  montura astronómica.
En principio solo acepta ordenes  para fijar la velocidades de giro y potencia en cada eje y devolver la posición registrada  en contador virtual de  cada motor  calculada en función la dirección y del numero de micropasos que los motores hayan completado En total acepta un juego de unas veinte ordenes, que permiten fijar distintos parámetros de la montura y preferencias, así como alterar y almacenar la tablas de micropasos en almacenados en EEPROM.

PicGoTo++  permite controlar hasta cuatro motores de pasos, dos para mover los ejes de la montura y otro  para el control automatizado del enfocador y un tercero que se puede usar para controlar una rueda de filtros o un rotador/desrotador de campo.


Picgoto Server :Servidor ASCOM/Windows.
La parte complementaria del proyecto es un servidor empotrado en una aplicación gráfica que se ejecuta en un PC con S.O. Windows,en el PC se realizan todos los cálculos necesarios para encontrar y mantener el seguimiento de los objetos celestes que se  indiquen. En la versión mas reciente permite el control de monturas ecuatoriales (aquellas cuyo eje vertical  es paralelo al eje de rotación terrestre) y monturas horizontales ó alt-azimutales cuyo eje vertical apunta a cénit).
En ambos tipos de montura son necesarios cálculos trigonométricos y/o matriciales que sobrepasan a la capacidades de un microcontrolador de 2Kb .

Sin embargo el microcontrolador es capaz de generar las señales de control y excitación de los motores con mayor precision  que un PC,ya que dispone dispositivosy temporizadores dedicados, con estas funciones y a diferencia de PC no ejecuta un sistema operativo que puede requerir y sustraer recursos y ciclos de programa para otras tareas.


Para poder interactuar con las aplicaciones de  software astrónomico mas populares,Cartas estelares/planetario,autoguiado captura de imágenes , ,implementa varios drivers ASCOM que es el estándar de facto para aplicaciones astronómicas que se ejecutan sobre  Windows.

El sistema en funcionamiento
Para ilustrar el funcionamiento de sistema clásico  ,de vez en cuando subo algún vídeo para que sirva de ejemplo a los compañeros que  usan el sistema. En este caso se muestra el sistema conectado al popular software astronómico Stellarium. El sistema se esta ejecutando en modo ecuatorial configurado para un par de motores de 400 pasos 1,2 Amperio que se van instalar en una montura de un telescopio de 600mm de apertura.


Yo también lo uso (a ver..)Mi Telescopio.
(continuará)




lunes, 22 de abril de 2013

Chatarra:Circuito con microcontrolador sencillo.(2)

Diseñando el circuito.
El tipo de circuitos integrados que hemos visto en la entrada anterior, son una combinación de lógica secuencial, amplificación y regulación de potencia.
Como la intención inicial era mostrar como se puede implementar un control de este tipo de motores, en principio proponemos  un pequeña plataforma hardware sobre la que probar el desarrollo.
Vamos a implementar algo parecido utilizando un microcontrolador  PIC asequible (3€) un pequeño integrado amplificador de corriente  (500mA) de ocho canales (0,60 €) y algunos componentes pasivos : resistencias, condensadores,diodos ...

Dice la canción: sin entrar en pormenores ,yo sé hacer cosas mejores. Pero no iremos mas lejos; esto va ser un ejemplo básico.Aún así seria suficiente para implementar un control de enfoque.
De hecho el PicGoto mas básico es este mismo circuito + adaptador de niveles TTL-RS232.


Esquemático del Circuito básico Diseñado con KiCad.




El PCB con el visor 3-D de KiCad.
El circuito se ha compuesto  usando la aplicación  KiCad . Funciona bajo Linux,Windows y OSX es  gratuita y de código abierto,  posibilita tanto el diseño esquemático de circuito y el diseño físico de la placa. Incluye una librerías de componentes  no demasiado extensas, aunque se pueden encontrar un gran número librerías adicionales en la red.

Por lo demás, con un poco de práctica ,es sencillo diseñar uno mismo los elementos que no estén disponibles y se pueden  necesitar. En este caso el  motor stepper lo he tenido componer  por mi cuenta, no me habrá llevado más diez minutos.Trae un visor 3-D  que permite visualizar el prototipo PCB mientras se está diseñando.

Posiblemente, para quién no tenga experiencia, confeccionar un circuito impreso puede parecer una tarea muy compleja,en la realidad para circuitos sencillos como este, bastan c algunos aparatos caseros: una impresora láser,papel fotográfico para impresoras de chorro de tinta satinado,una plancha,un mini taladro  tipo  dremmel (no hace falta que sea de marca) y sustancias químicas de uso común: H20 (agua corriente),H2O2 (agua oxigenada),y HCl (ácido clorhídrico, conocido también  como agua fuerte o salfumán) todas ellas en el formato y grado de disolución con el que se encuentran  en el supermercado de la esquina. Hay tropecientos vídeos en youtube que  enseñan el proceso.

Las opciones para armar el circuito , sin tener que fabricar un PCB especifico (circuito impreso)  pasan por usar una placa de pruebas  (inserción) o placa prototipo perforada (soldadura).

Elementos.

Microcontrolador 
Usaremos el PIC16F628A de Microchip, es  un dispositivo de arquitectura HARVARD que se caracteriza en que la memoria de programa y almacenamiento  variables están separadas.El dispositivo tiene 2Kb de Flash, 224 bytes de RAM, 144bytes de EEPROM. Una USART para comunicación serie , dos TIMER de 8 bit  y otro de 16 bits.
Aunque este IC lleva un oscilador interno,para hacerlo funciona a su velocidad máxima de 20Mhz incluimos en el  circuito  un oscilador de cuarzo.

Etapa potencia.
Como amplificador/etapa de potencia  el ULN2803A es un pequeño array de transistores en configuración Darlintong. Para motores bipolares puede usarse el L293D.Estos integrados soportan un amperaje máximo de 500mA. Los  motores con consumo superior pueden  utilizarse con etapas de transistores discretas o integrados de potencia como el L298.

Compilador Lenguaje  C.
Para compilar los ejemplos se puede  utilizar  la versión gratuita del compilador HiTech C. La forma de obtener el máximo rendimiento de estos dispositivos pasa por programar directamente en ensamblador de código máquina(juego de instrucciones propio de cada microcontrolador ).La curva de aprendizaje y el nivel de dificultad que esto conlleva, hace que el uso de un compilador de Lenguaje C sea más adecuado en la mayoría de los casos.Para partes criticas de la aplicación  siempre queda la posibilidad de incluir código máquina en linea.

Empezaremos con el código en la próxima.