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