Sonntag, 28. Juni 2015

Radio astronomy with FDM-S2

FDM-S2 Support

Unfortunately the software supplied by ELAD for the FDM-S2 did not cover my need for radio astronomy. There is no option there for saving permanently scans, in for example csv files, therefore you are forced to work with wav file, what requires a great amount of storage. On the ELAD site http://sdr.eladit.com/FDM-S2%20Sampler/ you can find several DLLs for taking IQ samples, which you can posteriorly transform to frequency domain and finally save in csv files. This was the target of this software.

Block Diagramm of the software

Possible application

FMD-S2-Samples

This application controls the FDM-S2 and works as an interface for the Callback routine. Thanks to the document "SPECIFICATION FOR EXTERNAL USE of I/O DLLs TO COMMUNICATE TO FDM DEVICE" it was possible to implement a code for making all setting prior to calling the Callback function. This was compiled with Visual Studio Express VC10. Via config file and the option -c you can set following parameters:

Sampler  
Set the DLL for the sampling. Every DLL works with a fixed sampling rate. ELAD supplies six DLLs:
  • ExtIO_ELAD_FDMS2_192k_v3_04.dll for 192 k Sample output data rate.
  • ExtIO_ELAD_FDMS2_384k_v3_04.dll for 384 k Sample output data rate. 
  • ExtIO_ELAD_FDMS2_768k_v3_04.dll for 768 k Sample output data rate.
  • ExtIO_ELAD_FDMS2_1536k_v3_04.dll for 1536 k Sample output data rate. 
  • ExtIO_ELAD_FDMS2_3072k_v3_04.dll for 3072 k Sample output data rate. 
  • ExtIO_ELAD_FDMS2_6144k_v3_04.dll for 6144 k Sample output data rate.


Every DLL returns a fixed amount of samples:
  • For 192k DLL return value is 12288 complex samples.
  • For 384k DLL return value is 12288 complex samples.
  • For 768k DLL return value is 12288 complex samples.
  • For 1536k DLL return value is 12288 complex samples.
  • For 3072k DLL return value is 49152 complex samples.
  • For 6144k DLL return value is 49152 complex samples.

Scan Frequency
Initial sampling frequency. The bandwidth is determined by the chosen DLL and defines the end frequency.
Permanence
This value sets the amount of sets of complex samples we want to take for every scan. It means, for a value of 300 and DLL ExtIO_ELAD_FDMS2_6144k_v3_04.dll you get 300x49152=14.7 millions of samples.
Shift Counter
This parameter sets the amount of frequency shifting after having taken the required amount of samples for every given initial frequency (determined by permanence). The offset for shifting is just a part of the bandwidth and it is configurable in the file fdm-s2-samples.cpp under the struct fdm. All parameters associated with a DLL are defined in this structure.

Download






FFT of IQ Data: fdm_s2_fft.py

This application reads the IQ samples file/s, extracts all parameter set by fdb-s2-samples coded in a binary header and makes a DSP (Power Spectral Density, matlab), for getting finally the frequency spectrum. The FFT settings can be changed in the file fdm_s2_fft.py. After this, the spectrum will be plotted and all Frequency-Power pairs will be written in a csv file, for any posterior use.
The application was implemented with Python 2.7. Python supplies an easy way of installing packages by demand, so you just have to call the script and all needed modules not installed yet will print an information error. You can bit a bit get the required environment for this application.


Used variables are predefined but will be overwritten with the information found in the decoded binray header of the IQ samples file. Hier the variables:

FREQUENCY_DEFAULT = 30000000                            #30MHz
NFFT = 8192                                                                          # FFT Size
BLOCK = 12288                                                                   #FDM-S2
BANDBREITE_384K = 100000                                        #Hz
BANDBREITE_3M = 700000                                            #Hz
BANDBREITE_6M = 3000000                                         #Hz
PERMANENCE = 20                                                           # Permanence in fdm-s2-samples.cpp
SHIFT_CYCLE = 10                                                            # Shift Counter in fdm-s2-samples.cpp
BANDBREITE = BANDBREITE_6M          
SAMPLE_RATE = 384000                                                #With the FDM-S2 384K DLL for 32Bit
                                                                                                 # see "Sample output data rate" for every FDM-S2 DLL 
GAUSS_FILTER_FACTOR = 2                                        #Smoothing of Power Values. Factor 2 is very light.
PATH_OF_SAMPLING_FILES = ".\\RawFiles\\"          #Input Files
PATH_OF_OUTPUT_FILE = ".\\"                     
START_FREQ = 1419.6                                                    # Start Frequency for Output Data
END_FREQ = 1421.3                                                         # End Frequency for Output Data


Change the following code line. because this was implemented for taking into account the Down Converting shift on my own system
handle.write("{0},{1}\n".format((1392+freq/1000000), smooth_gauss[smooth_cnt]))


Download



Samstag, 27. Juni 2015

Radioastronomía con FDM-S2

FDM-S2 Support para Radioastronomía

El software suministrado por ELAD para el uso del receptor FDM-S2 no permite almacenar los espectros en forma de ficheros csv. Por lo tanto uno está limitado a trabajar con wav, lo que requiere mucho espacio de almacenamiento. En la página http://sdr.eladit.com/FDM-S2%20Sampler/ se encuentran diversas DLLs, con las que se puede utilizar el receptor para recoger muestras IQ, transformarlas al dominio de la frecuencia y finalmente almacenarlas en ficheros csv. Con este fin se implementó el software aquí descrito.

Diagrama de bloques del software para uso en Radioastronomía
Posible aplicación para los datos extraidos

FMD-S2-Samples

La aplicación controla el FDM-S2 y representa la interfaz para la función CallBack. Con ayuda del documento "SPECIFICATION FOR EXTERNAL USE of I/O DLLs TO COMMUNICATE TO FDM DEVICE" se pudo implementar un código que realiza las configuraciones previas a la llamada CallBack. El código ha sido compilado con Visual Studio Express VC10. El fichero de configuración se le pasa al ejecutable con la opción -c y proporciona configurabilidad para los siguientes parámetros:

Sampler  
Aquí indicamos qué DLL ha de emplearse para recoger las muestras IQ. Con el uso de una u otra DLL se decide la frecuencia de muestreo. ELAD proporciona las siguientes DLLs:

  • ExtIO_ELAD_FDMS2_192k_v3_04.dll for 192 k Sample output data rate.
  • ExtIO_ELAD_FDMS2_384k_v3_04.dll for 384 k Sample output data rate. 
  • ExtIO_ELAD_FDMS2_768k_v3_04.dll for 768 k Sample output data rate.
  • ExtIO_ELAD_FDMS2_1536k_v3_04.dll for 1536 k Sample output data rate. 
  • ExtIO_ELAD_FDMS2_3072k_v3_04.dll for 3072 k Sample output data rate. 
  • ExtIO_ELAD_FDMS2_6144k_v3_04.dll for 6144 k Sample output data rate.


La DLL escogida fija la cantidad de muestras extraibles:

  • For 192k DLL return value is 12288 complex samples.
  • For 384k DLL return value is 12288 complex samples.
  • For 768k DLL return value is 12288 complex samples.
  • For 1536k DLL return value is 12288 complex samples.
  • For 3072k DLL return value is 49152 complex samples.
  • For 6144k DLL return value is 49152 complex samples.

Scan Frequency
Frecuencia de muestreo inicial. El ancho de bada del muestreo está implicitamente determinado por la DLL escogida y determina así la frecuencia final.
Permanence
Este valor indica cuántos Sets completos de muestras IQ complejas queremos recoger por cada Scan. Por ejemplo un valor de 300 y la DLL ExtIO_ELAD_FDMS2_6144k_v3_04.dll resulta en 300x49152=14.7 millones de muestras.
Shift Counter
Este parámetro determina la cantidad de desplazamientos a partir de la frecuencia inicio tras finalizar un muestreo (determinado por Permanence). Cada desplazamiento se hará con un offset con respecto a la frecuencia inicial, que es una parte (configurable) del ancho de banda de la DLL escogida.
La definición completa de una DLL con todos los parametros previamente configurados pero editables se encuentra en el fichero fdm-s2-samples.cpp en la estructura fdm.

Download





FFT de muestras complejas: fdm_s2_fft.py

Esta aplicación lee el/los fichero/s Raw de muestras IQ, extrae los parámetros configurados y codificados en binario por fdb-s2-samples y realiza la DSP (Power Spectral Density, matlab), para generar finalmente el espectro de frecuencias, Los parámetros de la FFT se pueden cambiar en el archivo fdm_s2_fft.py. Después de esto se hace una representación gráfica del espectro y se guardan todos los pares Frecuencia-dB en un fichero csv para su uso posterior.
La aplicación da sido implementada con Python 2.7. Al ejecutar el script, todos los módulos requeridos que no hayan sido instalados previamente, producirán un mensaje de error. De esta forma es sencillo ir descubriendo poco a poco los paquetes necesarios para ejecutar el script.

Las variables empleadas tienen valores predefinidos, pero que se sobreescriben al leer la cabecera binaria de los ficheros de muestras complejas IQ. Los parámetros son los siguientes:

FREQUENCY_DEFAULT = 30000000                            #30MHz
NFFT = 8192                                                                          # FFT Size
BLOCK = 12288                                                                   #FDM-S2
BANDBREITE_384K = 100000                                        #Hz
BANDBREITE_3M = 700000                                            #Hz
BANDBREITE_6M = 3000000                                         #Hz
PERMANENCE = 20                                                           # Permanence in fdm-s2-samples.cpp
SHIFT_CYCLE = 10                                                            # Shift Counter in fdm-s2-samples.cpp
BANDBREITE = BANDBREITE_6M          
SAMPLE_RATE = 384000                                                #With the FDM-S2 384K DLL for 32Bit
                                                                                                 # see "Sample output data rate" for every FDM-S2 DLL 
GAUSS_FILTER_FACTOR = 2                                        #Smoothing of Power Values. Factor 2 is very light.
PATH_OF_SAMPLING_FILES = ".\\RawFiles\\"          #Input Files
PATH_OF_OUTPUT_FILE = ".\\"                     
START_FREQ = 1419.6                                                    # Start Frequency for Output Data
END_FREQ = 1421.3                                                         # End Frequency for Output Data


La linea del código donde se convierten los valores de la frecuencia, corrijen los desplazamientos de la senal procedentes del Down Converter y debe ser cambiada o eliminada según el uso. 
handle.write("{0},{1}\n".format((1392+freq/1000000), smooth_gauss[smooth_cnt]))


Download



Radioastronomie mit dem FDM-S2

FDM-S2 Support für Radioastronomie



Leider ist die mit der FDM-S2 mitgelieferte Software nicht für meine Radioastronomie Zwecke geeignet, da man kaum Daten sammeln kann, ohne einen riesigen Speicherplatz zur Verführung zu haben. Die auf der ELAD Seite zum herunterladen stehende DLLs (http://sdr.eladit.com/FDM-S2%20Sampler/lassen sich einfach nutzen und machen es möglich,Samples zu sammeln, zu transformieren und zu speichern in einer etwas günstigeren Variante. Die hier beschriebene Software macht das.
Blockdiagramm der Software


Mögliche Anwendung der CSV Files (hier gnuplot), nach dem Scan Falttener.


FMD-S2-Samples

Diese Applikation steuert den FDM-S2 und stellt die Schnittstelle für die CallBack Funktion dar. Mit Hilfe des Dokumentes "SPECIFICATION FOR EXTERNAL USE of I/O DLLs TO COMMUNICATE TO FDM DEVICE" wurde ein Code implementiert, mit dem die Voreinstellungen des Gerätes durchgeführt werden können, bevor die CallBack Funktion aufgerufen wird. Der Code wurde mit Visual Studio Express VC10 kompiliert. Ein Konfigurationsfile wird mit der Option -c eingegeben und stellt folgende Parameter zur Verführung:

Sampler  
Hier ist gemeint, welches DLL für die IQ Samples genommen werden soll . Mit der DLL legt man den Ausgang Sample Rate des FDM-S2 fest. ELAD stellt diese zur Verfügrung:

  • ExtIO_ELAD_FDMS2_192k_v3_04.dll for 192 k Sample output data rate.
  • ExtIO_ELAD_FDMS2_384k_v3_04.dll for 384 k Sample output data rate. 
  • ExtIO_ELAD_FDMS2_768k_v3_04.dll for 768 k Sample output data rate.
  • ExtIO_ELAD_FDMS2_1536k_v3_04.dll for 1536 k Sample output data rate. 
  • ExtIO_ELAD_FDMS2_3072k_v3_04.dll for 3072 k Sample output data rate. 
  • ExtIO_ELAD_FDMS2_6144k_v3_04.dll for 6144 k Sample output data rate.


Je nach dem welcher DLL genommen wird, ist die Menge Samples auch fest.

  • For 192k DLL return value is 12288 complex samples.
  • For 384k DLL return value is 12288 complex samples.
  • For 768k DLL return value is 12288 complex samples.
  • For 1536k DLL return value is 12288 complex samples.
  • For 3072k DLL return value is 49152 complex samples.
  • For 6144k DLL return value is 49152 complex samples.

Scan Frequency
Erste Frequenz, ab der das Signal abgetastet wird. Die Bandbreite ist vom jeder DLL abhängig und legt damit die letzte Frequenz fest.
Permanence
Der Wert sagt, wie viele komplette "Complex Samples" Sätze pro Scan gesammelt werden . Zum Beispiel, ein eingestellter Wert von 300 mit der ExtIO_ELAD_FDMS2_6144k_v3_04.dll entspricht 300x49152=14.7 Millionen Samples.
Shift Counter
Dieser Wert entspricht die Menge der Verschiebungen der Start Frequenz, nach dem Erreichen der gewünschten Anzahl von Samples. Der Offset bei jeder Verschiebung ist ein (einstellbarer) Prozentsatz der Bandbreite vom ausgewählten DLL. Die Eigenschaften jedes DLLs sind im File fdm-s2-samples.cpp mittels einer Struktur namens fdm definiert.

Download



FFT von IQ Data: fdm_s2_fft.py

Diese Applikation liest das/die Raw IQ-Data File/s, extrahiert daraus die binär codierten Einstellparameter und führt eine DSP (Power Spectral Density, matlab) durch, um aus den IQ Daten das Spektrum zu generieren, Die FFT Einstellungen können im File fdm_s2_fft.py geändert werden. Das Spektrum wird dann dargestellt und alle berechneten Frequenz-Leistung Paare werden in ein csv File geschrieben, für eine spätere Nutzung.
Die Applikation wurde mit Python 2.7 implementiert. Beim Ausführen des Python Skriptes, werden die benötigten und nicht vorinstallierten Module in Form von Fehlermeldungen angezeigt. Python bietet aber eine sehr bequeme Möglichkeit, um bei Bedarf Module online zu installieren.

Die im Skript verwendete Variablen haben voreingestellte Werte, die beim Lesen der IQ-Files je nach eingefügtem Binär Header (siehe oben fdm-s2-sampler) überschrieben werden.

FREQUENCY_DEFAULT = 30000000                            #30MHz
NFFT = 8192                                                                          # FFT Size
BLOCK = 12288                                                                   #FDM-S2
BANDBREITE_384K = 100000                                        #Hz
BANDBREITE_3M = 700000                                            #Hz
BANDBREITE_6M = 3000000                                         #Hz
PERMANENCE = 20                                                           # Permanence in fdm-s2-samples.cpp
SHIFT_CYCLE = 10                                                            # Shift Counter in fdm-s2-samples.cpp
BANDBREITE = BANDBREITE_6M          
SAMPLE_RATE = 384000                                                #With the FDM-S2 384K DLL for 32Bit
                                                                                                 # see "Sample output data rate" for every FDM-S2 DLL 
GAUSS_FILTER_FACTOR = 2                                        #Smoothing of Power Values. Factor 2 is very light.
PATH_OF_SAMPLING_FILES = ".\\RawFiles\\"          #Input Files
PATH_OF_OUTPUT_FILE = ".\\"                     
START_FREQ = 1419.6                                                    # Start Frequency for Output Data
END_FREQ = 1421.3                                                         # End Frequency for Output Data


* Die Korrektur der Frequenz Werten vor dem Speichern ins File, berücksichtigt die Frequenzverschiebung vom Down Converter und muss für jeden Anwender geändert oder ganz eliminiert werden
handle.write("{0},{1}\n".format((1392+freq/1000000), smooth_gauss[smooth_cnt]))


Download



Dienstag, 29. Juli 2014

Radiotelescopio sencillo para banda L con Arduino Mega2560

Radiotelescopio sencillo para banda L


La radioastronomía hace posible que todo aquel estusiasta de la astronomía disfrute su hobby también bajo la luz del sol o incluso en días nublados. Esta idea y la fascinación por el desarrollo de circuitos electrónicos es lo que nos llevó hace unos años a comenzar con la construcción de un radiotelescopio. A continuacion un diagrama general de nuestro radiotelescopio:

Imagen 1: Diagrama general del radiotelescopio para banda L

Aqui se aprecian dos partes relativamente diferenciadas por su funcionalidad. En primer lugar el receptor y en segundo lugar el elemento de control de la antena. Un Sketch intermedio en Processing permite la visualización de los datos recibidos así como control de la antena.

A continuación se expone un resumen del proyecto, descrito más exaustivamente en la página http://www.germersogorb.de/html/radiotelescopio_band_l.html.

1.  Receptor

En el foco de la antena dentro de una caja se encuentra el  LNA y el Down-Converter. La transmisión en banda L a la frecuencia de 1420MHz por una línea muy larga no es aconsejable debido a la baja relación señal-ruido SRN existente en estas señales tan débiles.  El Down-Converter baja el espectro de señales entre 1420 y 1422 MHz a 28-30 MHz. En el foco se encuentra también instalado un sensor de temperatura LM35. 

En el observatorio a unos 5m de distancia de la antena se encuentran el amplificador de frecuencia intermedia, el detector logarítmico conectado a la placa amplificadora DC y finalmente Arduino Mega2560, como interfaz entre radiotelescopio y ordenador. Paralelamente y a través de una splitter instalado tras el amplificador de IF se analiza la señal mediante una SDR. Una parte de los componentes es de fabricación propia. En la página http://www.germersogorb.de/html/circuitos_hf_.html se puede leer más detalles al respecto.

Con la incorporación de Arduino se nos ha abierto un espectro muy grande de posibilidades. Ahora podemos desarrollar nuestro propio software con arduino y processing para el registro y visualización de datos, ya que el único requisito es conocer C++.

Imagen 2: Diagrama de bloques del receptor. 

Software Defined Radio

La señal dividida y procedente del splitter se analiza con una SDR muy económica, un Stick USB para recepción de DVBT, que nos permite la visualización de la señal en el dominio de frecuencias de 1420 a 1422 MHz. Dado que la señal fue convertida al margen de 28 a 30MHz y el stick trabaja a partir de 62MHz, tenemos que volver a convertir la señal con un UpConverter a un margen de frecuencias detectable por el stick. Tras la conversión con un oscilador de 100MHz, encontramos nuestra señal entre 128 y 130 MHz. Tanto el stick como el UpConverter se pueden adquirir en Amazón o directamente en la página de NooElec.
 
   1420-1422MHz -> DownConverter 28-30MHz  -> Amplificador + Filtro 27-31MHz ->
 -> UpConverter 128-130MHz -> SDR Stick (62-1700MHz)

Visualización de datos

Con un Sketch en Processing podemos guardar los datos digitalizados y enviados por Arduino a través del puerto serie en ficheros de texto. Estos datos de visualizan utilizando para ello gnuplot:
Imagen 3: Representación gráfica de datos haciendo uso de gnuplot
Para visualizar los datos registrados por el Stick empleamos batch scripts y nuevamente gnuplot:
Imagen 4: Representación gráfica en 3D de un tránsito registrado con el DVBT-Stick.
X: Frecuencias 1420 - 1422 MHz
Z: Potencia (dB)
Y: Tiempo
Para más detalles y descarga de ficheros y código ver la página siguiente:
http://www.germersogorb.de/html/radiotelescopio_band_l.html.


Ejemplo de una observación diaria


https://www.youtube.com/watch?v=NL3YYqwJ0tA&feature=youtu.be

2.  Control de la antena con 10DOF-80GY

Sensor de aceleración ADXL345 (parte del 80GY)

El uso de este sensor es muy sencillo. A pesar de todo es indispensable llevar cuidado con la librería descargada para Arduino, puesto que contiene unos valores de Offset determinados que nosotros debemos de adaptar a nuestro sistema. Estos offsets corrigen los pequenos errores de posicionamiento del IC sobre la placa o de orientación de la platina con respecto a la caja. Es conveniente editar el archivo  ADXL345.cpp para visualizar el código. Hay métodos matemáticos que podemos emplear para calcular los valores exactos necesarios en nuestro aparato, pero jugando un poco con estos valores podemos quizá obtener en algunos minutos un resultado convincente.

Brújula digital HMC5883L (parte del 80GY)

Este y probablemente todos los sensores de campo magnético traen consigo mucho trabajo. La primera tarea a realizar es analizar la influencia ferromagnética a la que está sometido nuestro sensor, para así poder determindar la profundidad de nuestras compensaciones de Hard y Soft Iron. “Hard Iron Compenssation” es absolutamente indispensable cuando el sensor se encuentra certa de materiales ferrosos pero su posición con respecto a éstos no varía (tornillos en la platina o caja para la instalación, etc). Aquí se calcula un offset constante para cada uno de los ejes y los 3 offsets resultantes se consideran en todos los cálculos. “Soft Iron Compenssation” será necesaria cuando el entorno en el que se encuentra el aparato distorsiona el campo magnético y esto de forma variable dependiendo de la posición exacta del aparato. Esta compensación es más complicada, dado que aquí hemos de encontrar una matriz de offsets.
Finalmente determinamos las posible posiciones que puede tomar el sensor, puesto que en ciertos casos tendremos que realizar la compensacion de la inclinación. El motivo es que los headings (azimuth) calculados con el sensor de campo magnético solo son correctos cuando el chip está en posición exactamente horzontal.

Todas las calibraciones y compensaciones realizadas por nuestra parte están descritas en la página Calibración de HMC5883L.
Imagen 5: Datos de sensor no calibrado

Imagen 6: Sensor calibrado.

L298N Motor Drive

Con este componente y a través de Arduino podemos mover la antena por software. Tres pines son necesarios para determinar la dirección y velocidad con la que se controloará el motor. Un Sketch en Processing nos sirve de interfaz para realizar esto de forma gráfica y exacta (aunque no más exacta de lo que nos permite el sensor de aceleración, que es el nos proporcional el ángulo de altura).



Imagen : Sketch Processing para visualización de datos y control de la antena paralelamente. 

Código

Todo los Sketches de Arduino y Processing pueden descargarse de las páginas http://www.germersogorb.de/html/controlmotorconarduino.html y http://www.germersogorb.de/html/calibraciondesensores.html, donde además se encuentra una más amplia descripción del proyecto.

Freitag, 23. Mai 2014

Radiotelescopio Android en banda L

Radiotelescopio Android en banda L

                                                 

Descripción

Unas de la ventajas más importante que ha traido consigo el emplear Arduino en nuestro proyecto es la facilidad con la que podemos crear una conexión bluetooth entre un Smartphone Android y el radiotelescopio. Con poco esfuerzo hemos creado así una App para Android partiendo de la aplicación Processing que creamos para el PC. El entorno de trabajo sigue siendo Processing (versión 2.1.1) solo que ahora el sketch no lo ejecutamos en el ordenador sino en el Smartphone en forma de APP. 



El código para la decodificación y representación de los datos lo tomamos directamente del Processing Sketch arriba indicado http://www.germersogorb.de/ProcessingSketch9b.zip ). Solo tenemos que cambiar la interfaz de entrada de datos con el código para conexión por Bluetooth. El módulo bluetooth más utilizado con arduino es el HC-05. En internet hay suficiente información respecto a las conexiones y configuración pero aquí mostramos los enlaces principales, que más nos han ayudado:


En nuestro proyecto necesitamos dos HC-05 que actúan como Slave. El Smartphone hará de Master. Por lo tanto no necesitamos cambiar la configuración del módulo de forma excesiva. Lo único importante es que podamos diferenciar los dos módulos por su nombre, con lo que bastará configurar su marca de identificación. Con el siguiente Sketch y empleando el terminal en serie de arduino podemos hacer esto facilmente (instrucciones bajo el enlace 
http://www.instructables.com/id/Modify-The-HC-05-Bluetooth-Module-Defaults-Using-A/3/?lang=de

/***********************************************************/
/*   Arduino Sketch:  HC-05 in Command Mode                         */ 
/***********************************************************/
#include <SoftwareSerial.h>
SoftwareSerial BTSerial(51, 50); // RX | TX
void setup()
{
  pinMode(9, OUTPUT);  
            // this pin will pull the HC-05 pin 34 (key pin) HIGH to switch module to AT mode

  digitalWrite(9, HIGH);
  Serial.begin(9600);
  Serial.println("Enter AT commands:");
  BTSerial.begin(38400);  // HC-05 default speed in AT command more
}

void loop()
{
  // Keep reading from HC-05 and send to Arduino Serial Monitor
  if (BTSerial.available())
    Serial.write(BTSerial.read());

  // Keep reading from Arduino Serial Monitor and send to HC-05
  if (Serial.available())
    BTSerial.write(Serial.read());
}


De esta forma hemos cambiado el nombre del módulo HC-05 que conectamos al radiotelescopio, identificandose éste ahora con "RADIOTELESKOP". El otro módulo mantiene su nombre "HC-05".


El Sketch ha sido disenado para un Samsung Galaxy Note 2. Para adaptar este Sketch a cualquier otro Smartphone solo hay que cambiar la coordenadas gráficas de los objetos representados. 


En la ventana de la App se puede diferenciar gráficamente el origen de los datos representados. La parte superior indica la posición de la antena y ofrece la posibilidad de cambiarla a una velocidad determinda ajustable. Una altitud exacta se puede introducir con formato grados-minutos-segundos en los tres campos de entrada de texto. Después de rellenar los tres campos más "Enter", pulsamos el botón SEND se envía el valor a arduino. Este ajusta así la altitud deseada en la antena. 

La parte inferior de la App es un StripChart-Logger, para registrar los datos del detector logarítmico y del sensor de temperatura procedentes del radiotelescopio. La aplicación es muy útil para ajustar el foco de la antena haciendo uso del Sol como "radio source".


Downloads

Processing Sketch für Processing 2.1.1 in Adroid Mode
Arduino Sketch Radioteleskop
Arduino Sketch Antenne Seite
     

Auf deutsch

Android L-Band Radioteleskop

Android L-Band Radioteleskop

Projektbeschreibung

Einer der Vorteile, die die Benutzung vom Arduino in unserem Projekt mit sich gebracht hat, ist der einfache Bluetooth Verbindungsaufbau zwischen einem Smartphone und dem Radioteleskop und so war nur einer kleiner Schritt bis zu dieser Android Version. Die Entwicklungsumgebung bleibt hier Processing (jetzt Version 2.1.1), aber die Ausführung eines Sketches läuft nicht mehr am Computer sondern am Smartphone, auf einer Android APP.



Die Decodierung und Darstellung der Daten übernehmen wir direkt aus dem Computer Processing Sketch (Abschnitt 4.1 http://www.germersogorb.de/html/l-band_radioteleskop.html) und ausschließlich die Datenschnittstelle mit Bluetooth wird hier erweitert. Der am meisten verwendete BT-Modul für Arduino ist das HC-05. Es gibt im Internet ausreichende Informationen über Verkabelung, Konfiguration und Verbindung mit diesem Gerät. Hier einige Quellenlinks:

In unserem Projekt brauchen wir 2 Stück, die beide als Slave arbeiten. Das Smartphone arbeitet als Master. Es ist daher nicht nötig, die Default Konfiguration großartig zu ändern. Wichtig ist nur, dass man beide durch den Namen unterscheiden kann. Anbei ein kleiner Arduino Sketch, mit dem man schnell und einfach die Voreinstellungen verändern kann:


/***********************************************************/
/*   Arduino Sketch:  HC-05 in Command Mode                           */ 
/***********************************************************/
#include <SoftwareSerial.h>
SoftwareSerial BTSerial(51, 50); // RX | TX
void setup()
{
  pinMode(9, OUTPUT);  
            // this pin will pull the HC-05 pin 34 (key pin) HIGH to switch module to AT mode

  digitalWrite(9, HIGH);
  Serial.begin(9600);
  Serial.println("Enter AT commands:");
  BTSerial.begin(38400);  // HC-05 default speed in AT command more
}

void loop()
{
  // Keep reading from HC-05 and send to Arduino Serial Monitor
  if (BTSerial.available())
    Serial.write(BTSerial.read());

  // Keep reading from Arduino Serial Monitor and send to HC-05
  if (Serial.available())
    BTSerial.write(Serial.read());
}


Somit haben wir den HC-05 für die Steuerung der Antenne "HC-05" genannt, während das HC-05 am Radioteleskop angeschlossen in "RADIOTELESKOP" umbenannt wurde.

Der neue Processing Sketch wurde für ein Samsumg Galaxy Note 2 entwickelt. Die Anpassung für ein anderes Smartphone ist durch die Änderung der XY-Darstellungskoordinaten einfach möglich.




Im Fenster der App kann man die beiden Datenquellen grafisch gut unterscheiden. Der obere Teil zeigt die Position der Antenne und bietet die Möglichkeit, diese mit einstellbarer Geschwindigkeit zu ändern. Eine gewünschte ALTITUD kann man in "grad-min-sec" Format eingeben und bei Betätigen des Buttons SENDEN wird diese umgesetzt. Der untere Teil ist ein Stripchart-Logger, der die Daten des logarithmischen Detektors sowie des Temperatur-Sensors anzeigt. Für die Justierung der Antenne mit der Verwendung der Sonne als Signalquelle ist diese Applikation sehr nützlich.




Downloads

Processing Sketch für Processing 2.1.1 in Adroid Mode
Arduino Sketch Radioteleskop
Arduino Sketch Antenne Seite

en espanol


Dienstag, 3. Dezember 2013

Arduino L-Band Radioteleskop

Ein einfaches Amateur Radioteleskop mit dem MEGA2560

Die Radioastronomie ermöglicht jedem Astronomie begeisterten sein Hobby auch unter Sonnenlicht und vor allem mit schlechtem Wetter zu genießen. Mit diesem Hintergrund und bedingt durch eine unheimlich große Zuneigung für elektronische Bastelei haben wir den Bau unseres Radioteleskops vor einigen Jahren angefangen. Blockdiagramm: 
Bild 1: Blockdiagramm des Radioteleskops


Motorsteuerung                                                                           

Bild 2: Processing Sketch für die Steuerung des Motors

Diese besteht aus einem MEGA2560 verbunden mit einem Gy-80. Eine kurze Beschreibung über das komplette 10DOF System:

ADXL345 Accelerometer (Teil des Gy-80)

Die Benutzung ist absolut unkompliziert, allerdings ist zu beachten, dass die zu verwendende Library keine Offset-Werte beinhaltet, die für jemand anders gedacht waren. Also lieber ADXL345.cpp öffnen und schauen, wie der Code aussieht. Es gibt mathematische Verfahren, um die geeigneten Offset-Werte zu bestimmen aber ein wenig herumprobieren an diesen Werten kann in wenigen Minuten ein zufriedenstellendes Ergebnis liefern. Für die gedachte Anwendung hier als Neigungssensor war es ausreichend, die richtige Neigung bei 0°, 45° und 90° zu bekommen. An diesen Offset Werten wurde nach und nach angefangen mit (0,0,0) die verschiedene Achsen mit +1 oder -1 auszuprobieren. Jede Veränderung wurde wieder bei 0°, 45° und 90° ausprobiert und die besten Ergebnisse kamen mit (7,4,0).

HMC5883L Magnetometer  (Teil des Gy-80)

Dieser und vermutlich alle Magnetometer sind eine Wissenschaft für sich. Ohne Kalibrierung bekommt man nie richtige Ergebnisse und wie weit man mit der Kalibrierung geht, hängt von der vorgesehenen Anwendung ab. Es gibt genug Informationsquellen im Internet über Soft- und Hard Iron Calibration, dass es nicht sinnvoll ist, hier irgendwas zu erklären. Das erste, was man herausfinden muss, ist, unter welchem Einfluss das eigene Magnetometer steht und dann dementsprechend kalibrieren. Zusätzlich sind die verschiedenen möglichen Lagen und Ausrichtungen des Sensors  zu überlegen, wodurch eine Neigungskompensation erforderlich sein kann (die berechneten Headings sind nur im besten Fall bei einer liegenden Position des Chips richtig). Welche Kalibrierung- und Kompensierungsmethode für die Antenne benutzt wurden, ist auf der Seite Kalibrierung des HMC5883L beschrieben.
Bild 3: Nicht kalibrierte Magnetometer Daten

Bild 4: Kalibrierte Magnetometer Daten


Bedingt durch die Schwierigkeiten bei der Kalibrierung durfte der Sensor nicht an seiner ursprünglichen Position eingebaut werden (in der Mitte unter dem Parabolschüssel) . Das Gehäuse liegt am Rahmen der Antenne weit entfernt vom Mast. Der Neigung-Offset zwischen Antenne ALT und Sensor ALT wird berücksichtigt.

L298N Motor Drive

Die Bewegung der Antenne lässt sich damit per Software regeln. Der Motor wird an den dafür vorgesehenen Pins verbunden, die je nach eingestellter Richtung die entsprechende Spannung und Polarisation aus der ausreichend dimensionierten Spannungsquelle bekommen. Mit dem passenden Processing Sketch wird die Ausrichtung der Antenne grafisch und genau (aber nicht genauer als der Accelerometer Sensor ermöglicht) gemacht.

Info LED’s

Damit die Funktion des Gerätes nach Einbau zumindest grob überwacht werden kann, sind 4 LED’s eingebaut, die nach einem festgelegten Code je nach Aktivität unterschiedlich blinken bzw. leuchten. Mit der passenden Processing Applikation kann man Befehle senden, die zu der gewünschten Bewegung der Antenne führen.
Bild 5: Pitch und Roll Winkel

Als Unterstützung für den Einbau des Gerätes an der Antenne ist das Blinken der grünen LED programmiert. Beabsichtigt wurde hier, eine Information darüber zu geben, wie viel seitlich geneigt (roll Winkel) das Gerät ist. Unter optimalen  Bedingungen bei einer azimutalen Montierung ist bei der Veränderung der Altitude der Antenne nur eine Veränderung des Neigungswinkels (Pitch) zu erwarten, während der seitliche Neigungswinkel 0 bleibt (siehe Bild). Die Frequenz des grünen LEDs beim Blinken ist proportional zum Neigungswinkel.  Ist das Gerät 100% gerade, blinkt das LED nicht mehr und leuchtet ununterbrochen.

Infrarot Schnittstelle

Fast die gleichen Befehle, die in der Processing Applikation vorhanden sind, wurden für die Infrarot Fernbedienung implementiert. Hiermit ist zusätzlich möglich, eine Veränderung in dem konfigurierten Antennen- ALT Offset zu realisieren. Information über Tastenbelegung und Reaktion hier: Motorsteuerung.

Ciseco XRF Radio Xbee (Antenne Seite) + Ciseco URF Radio USB (PC Seite)

Das XRF Radio Übertragungsmodul wandelt ohne weiteres eine herkömmliche serielle Verbindung in eine kabellose Verbindung mit einer Reichweite von 3 km. Dieses wird auf der Seite „Antenne“ mit Arduino verbunden, bekommt wie gewöhnlich einen COM Port zugewiesen und dient dadurch als Sender sowie Empfänger. Das passende Teil auf der Seite „PC“ ist das UHF Modul, welches gleich arbeitet und direkt am PC per USB angeschlossen wird. Kaufen kann man beide bei http://shop.ciseco.co.uk/xrf-wireless-rf-radio-uart-rs232-serial-data-module-xbee-shape-arduino-pic-etc/ . Für eine OnAirProgramming ist die aktive Version erforderlich, wobei sich mit wenigen Widerständen, Kondensatoren und zwei kleinen LEDs einfach die passive in die aktive Version umwandeln lässt. Es scheint aber dieses nicht mit dem MEGA2560 möglich zu sein.

Code 

Arduino und Processing Sketches können am Ende der Seite Motorsteuerung heruntergeladen werden. 





Receiver                                                                                         

An einer gut 5m entfernten wettergeschützten Stelle befindet sich der Zwischenfrequenzverstärker,  der logarithmische Detektor (am unveränderten DC-Board - für Verstärkung und Integration - angeschlossen) und zum Schluss Arduino als Schnittstelle zwischen dem System und dem Rechner.

Die Entwicklung der eigenen Software ist mit Arduino und Processing für Datenbeschaffung sowie Darstellung sehr einfach, vorausgesetzt man kennt die C++ Programmiersprache. Jedes Arduino Board bietet einen AD Wandler, der im Grunde genommen für die Digitalisierung der Daten aus dem Detektor, Temperatursensor, usw. in gewissen Maßen ausreicht. Arduin Mega2560 besitzt einige analoge Inputs mit 8 Bit Auflösung. Die Frage ist immer, reicht die Auflösung oder will man mehr. Das System ist einfach erweiterbar mit einem externen AD Wandler, wie zum Beispiel MCP3428.

Externer AD-Wandler als Erweiterung für Arduino

Der MCP3428 hat 4 Kanäle und eine Auflösung von 16 Bit. MCP3424 hat aber eine Auflösung von 18 Bit, nur leider kam diese Erkenntnis zu spät, denn die ICs waren schon bestellt. Was aus meiner Sicht diesen Chip so interessant macht, ist, mit welcher Leichtigkeit man ihn einbauen kann. Mit dieser Erweiterung können Signale mit extrem kleinen Veränderungen an den externen ADC angeschlossen werden und der Rest an den Arduino analogen Eingängen.

In unserem System sind 4 unterschiedliche Datenquellen vorhanden (Siehe Link HF Elektronik für L-Band Radioteleskop):
  • Logarithmischer Detektor 
  • Ausgang vom DC Board für die DC Verstärkung und Integration des Ausgangs des logarithmischen Detektors
  • Spannungswert aus dem Temperatursensor
  • Platine für die Verstärkung der Temperatur

Externer DA-Wandler als Erweiterung für Arduino

Die ganze Arbeit, um das vorherige System durch Arduino zu ersetzen, hatte als Hauptgrund das Ziel, eine softwaregesteuerte Anpassung/Modifikation vom Signal des Detektors zu machen, um eine temperaturabhängige Kompensation zu realisieren. Die natürliche Veränderung der Signal Baseline ist klar, je kälter desto höher, da die Kälte für eine stärkere LNA Verstärkung sorgt. Einen entsprechender Offset kann per Software berechnet und mittel der analogen Ausgänge und einem Operationsverstärker-Addierer zu dem Detektor Signal  addiert werden. Die Auflösung der analogen Ausgänge ist leider auch etwas niedrig (8 Bit) und in der gleichen Art wie mit dem ADC ist das System hier mit einem externen DA Wandler erweiterbar. Ausgesucht haben wir den MCP4922 mit zwei Ausgängen, denn wer weiß, ob man einen zweiten gebrauchen kann. Arduino und Processing Code kann unten heruntergeladen werden.

Software Defined Radio

Das gesplittete Antennensignal wird mit der günstigen Software Defined Radio (SDR) DVBT Stick analysiert. Damit ist es möglich, den Frequenzbereich zwischen 1420 und 1422 MHz zu untersuchen. Da das ursprüngliches Signal von 1420-1422 MHz durch den Downconverter auf 28 bis 30 MHz runterkonvertiert wird und der Stick erst ab 62 MHz empfindlich wird, müssen wir dieses Signal einmal hochkonvertieren mit einem UpConverter. Nach der UpConversion findet man die gesuchten Frequenzen bei Freq+100 MHz, das heisst, was vorher bei 28-30 MHz war, ist jetzt bei 128-130 MHz. Beides, Stick und UpConverter, sind bei Amazon oder direkt auf der Seite von NooElec zu finden. 

Darstellung 

Processing dient uns als Mittel für die Datenaufzeichnung für alle mit Arduino digitalisierten und verarbeiteten Daten. Die Daten werden mit gnuplot dargestellt.
Bild 6: Beispiel einer Aufzeichnung mit Arduino

Die Darstellung der mit dem SDR-Stick aufgezeichnete Daten erfolgt durch Windows Batch Scripts und gnuplot. 
Bild 7: Beispiel einer Aufzeichnung mit dem SDR-Stick

Code

Alle notwendige Arduino und Processing Sketches, sowie windows batch scripts und programmierte gnuplot files können aus der Seite heruntergeladen werden: L-Band Radionteleskop

Beispiel von einer Beobachtung



Vielen Dank für Ihr Interesse.

M°Jesús Sogorb Amorós