Datenübertragung über große Strecken Stratosphärenballon

Übertragung der Messwerte an die Bodenstation

Baofeng UV5-R

Das Baofeng UV5-R ist ein kostengünstiges Dualband Amateurfunk Handgerät, welches im zwei Meter Band (136-174 MHz), sowie im 70 Zentimeter Band (400-480MHz) senden und empfangen kann und bis zu fünf Watt Ausgangsleistung liefert. Für die Übertragung der Bild- und Messdaten wurde dieses Gerät, im 70 Zentimeter Band mit einer Ausgangleistung von einem Watt, betrieben. 

Baofeng-UV5-R-Analoge-Ein-und-Ausgänge
Baofeng UV5-R – Analoge Ein- und Ausgänge

Zur Ansteuerung und Datenübertragung an das Baofeng UV5-R wurde zunächst die Verkleidung entfernt und anschließend die serielle Schnittstelle, bestehend aus TX-Audio (Transmitter) und RX-Audio (Receiver), sowie der PTT-Pin (Push-to-Talk) und Ground (Massepotential) auf der Platine lokalisiert. Zur Steuerung des Funkgerätes und Übermittelung der digitalen Daten von der Zentraleinheit wird die aus den Tx-Audio, Rx-Audio, PTT-Pin und Ground bestehende Schnittstelle verwendet. Wird der PTT-Pin auf Masse gezogen, wechselt das Funkgerät in den Sendebetrieb und funkt die an dem TX-Audio-Eingang anliegenden Daten. Die Daten müssen jedoch als Audiosignal anliegen.

Boafeng-UV5-R-Schnittstelle
Boafeng UV5-R – Schnittstelle

Kommunikation Raspberry Pi und Baofeng UV-5R

TNC-Pi

Als Schnittstelle zwischen der Zentraleinheit, einem Raspberry Pi B (plus), und dem Baofeng UV5-R dient das TNC-Pi, ein Terminal Node Controller, welcher auf dem Raspberry Pi verwendet werden kann. Über die serielle Schnittstelle des Raspberry Pi werden die zu sendenden Daten an das TNC-Pi übertragen und mittels Audio Frequenz Shift Keying (AFSK) in Audiosignale umgewandelt. Das TNC-Pi ist mit Tx-Audio, Rx-Audio, PTT-Pin und Ground des Baofeng UV-5R verbunden. Als Übertragungsprotokoll wird das AX25 Format verwendet.

Rasberry-PI-vervunden-mit-Boafeng-UV-5R-via-TNC-PI
Rasberry PI vervunden mit Boafeng UV-5R via TNC-PI

Installation TNC-Pi

Das TNC-Pi wird offiziell von Coastel Chip Works vertrieben und wird als Aufsteckmodul verwendet. Für die Verwendung des Moduls muss der Raspberry Pi zunächst konfiguriert werden.

Das TNC-Pi kommuniziert wahlweise über I2C oder die serielle Schnittstelle des Raspberry Pi. Die vorinstallierte Linux-Distribution Raspbian (Version Wheezy) verwendet die serielle Schnittstelle standardmäßig als serielle Konsole, diese muss, bei Verwendung der seriellen Schnittstelle, deaktiviert werden.

Unter /boot/cmdline.txt werden die dazugehörigen Einträge entfernt

console=ttyAMA0, 115200
kqdboc=ttyAMA0, 115200

zusätzlich muss in /etc/inittab folgende Zeile entfernt werden

T0:23:respawn: /sbin/getty –L ttyAMA0 115200 vt100

und der Raspberry Pi neugestartet werden. Für das Kompilieren des AX25 Protokolls werden die folgende Werkzeuge und Bibliotheken benötigt

sudo apt-get install build-essential libax25-dev libx11-dev zlib1g-dev libncurses5-dev

Die Installation kann direkt aus dem Raspbian Paketmanager erfolgen

sudo apt-get install ax25-tools
sudo apt-get install ax25-apps

jedoch sind diese Pakete veraltet und es empfiehlt sich die Dateien selbst zu kompilieren. Eine Anleitung hierfür ist unter k4gbb.us/docs/Raspberry.html vorhanden.

Nach erfolgreicher Installation wird die Konfiguration des AX25 Protokolls angepasst. Unter /etc/ax25/axport passen wir Rufzeichen, Baudrate und Paketlänge an

# Port    Callsign          Baud        PacLen       MaxFrame        Descripition
   0         DN4GB-1      19200       256             7                       Baofeng Sender

Das TNC-Pi kann nur mit 19200 Baud betrieben werden. Wichtig ist es Rufzeichen und Port auch in den dementsprechend die Einstellungen des AX25 Demon unter /etc/ax25/ax25d.conf zu übernehmen

# /etc/ax25/ax25.conf
[DN4GB-1 via 0]
NOCALL * * * * * * L
Default * * * * * * -rmsgw /usr/local/bin/rmsgw rmsgw –P 0 %U

Mit beendeter Konfiguration kann das AX25 Protokoll gestartet werden

sudo ax25 start

Das Baofeng UV5-R kann nun über einen AX25 Socket gesteuert werden.

Programmablauf

Auf dem Raspberry Pi laufen während des Fluges zwei Programme parallel ab, im folgenden Baofeng Steuerprogramm und Radiometrix Steuerprogramm genannt. Das Radiometrix Steuerprogramm nimmt mit Hilfe der Raspberry Kamera Bilder während des Fluges auf und sendet diese mit 10mW an die Bodenstation. Parallel dazu dient das Baofeng Steuerprogramm zur sequentiellen Übertragung der Mess- und Bilddaten über das Baofeng UV5-R. Das Programm steuert über I2C den Microcontroller und ruft die ermittelten Messdaten ab. Nach Sicherung der Messwerte in einer SQL Datenbank werden diese über die AFSK des TNC-Pi an das Bafeng übermittelt und per FM an die Bodenstation gefunkt. Das Baofeng Steuerprogramm greift nicht aktiv auf die Raspberry Kamera zu, sondern arbeitet mit einer Kopie des akutellen Bildes.

Blockschaltbild-Programmablauf
Blockschaltbild Programmablauf

Kommunikation über AX25 Socket

Die Programmierung zur Steuerung des Baofeng UV-5R erfolgt mit eines in C geschrieben Programmes. Das Programm startet den Messvorgang, sichert die Messdaten innerhalb einer SQL Datenbank und sendet Bild- und Messdaten an die Bodenstation.

Die Übertragung der Bild- und Messdaten erfolgt über einen AX25 Socket. Für die Initialisierung des Sockets werden die netax25 Bibliotheken verwendet und basiert auf dem AX25 Beacon.

Quellcode - Steuerung des Baofeng UV-5R

Das Senden der Daten erfolgt ähnlich der Verwendung eines einfachen TCP/IP Sockets.

Quellcode - Daten senden

Das Senden der Daten erfolgt als Broadcast und benötigt keine vorherige Etablierung einer Verbindung. Der Zeiger send_data zeigt hierbei auf ein uint8_t Array und sendet data_len-viele Werte. Über die wait_time wird in Millisekunden definiert, welche Pause nach dem Sende der Daten erfolgen soll.

Das Schließen des Sockets erfolgt über die close-Anweisung

//  AX25 Socket schließen 
void ax25_close()
{
	close(ax25_Socket);
	printf("AX25: Socket geschlossen \n");
}

Programmablauf Baofeng UV5-R

Das Steuerprogramm für das Baofeng UV5-R ist für die Übermittelung von sowohl Bild- als auch Messdaten verantwortlich. Nach Übermittelung der Daten per I2C von dem MPS430 Microcontroller an den Raspberry Pi, liegen diese Daten in einem unit8_t Array vor und können mittels des AX25 Sockets gesendet werden. Die Übermittelung der Bilddaten erfordert zunächst eine Konvertierung in ein geeignetes Format, wir verwenden das SSDV Format.

Slow Scan Digital Video (SSDV)

Slow Scan Digital Video (SSDV) ist eine paketorientierte Übertragungsmethode für Standbild über Funkverbindungen, welches derzeit auf die RTTY Übertragungsform limitiert ist. Entwickelt und programmiert wurde diese Codierungsmethode von Philip Heron und steht als OpenSource Code zur Verfügung. https://github.com/fsphil/ssdv

Das SSDV Format besteht aus je 256 Bytes bzw. Zeichen (chars), welche sich aus Header (15 Bytes), Payload (205 Bytes) und Prüfbytes (36 Bytes) zusammensetzt. Die Payload beinhaltet die Tatsächlichen Bilddaten, während der Header für Erkennung und Dekodierung notwendig ist.

Nach der Konvertierung liegen die Daten als Textformat vor und werden in Paketen von je 128 Zeichen versendet. Für die Unterscheidung der einzelnen Bildpakete werden diese um einen zusätzlichen Header ergänzt, welcher sich aus dem Erkennungsstring SSD, dem Bildzeichen A bzw B, sowie der Paketnummer im Hex-Format zusammensetzt.

Die Konvertierung des Bildes erfolgt in der Routine ssdv_encode_picture()

Quellcode - Bildkonvertierung

und liegt nach Abschluss der Konvertierung innerhalb der Datei SSDV_DATA_AX25 vor, aus welcher bei jedem Sendevorgang 128 Zeichen ausgelesen, um einen Header erweitert und anschließend versandt werden. Das Bereitstellen des Sendearrays erfolgt über ssdv_get_data()

Quellcode - Bereitstellung Sendearray

Radiometrix NTX2

Das Radiometrix NTX2 ist ein schmalbandiges Sendemodul im 70 Zentimeter Band mit einer Ausgangleistung von 10 Milliwatt. Das Modul ist in den drei Sendefrequenzen 434.075 MHz, 434.650 MHz und 458.700 MHz erhältlich. Durch das kleinen Abmaß und den geringen Verbrauch eignet sich dieses Modul besonders gut für mobile Anwendungen. Die Verwendung des Sendemoduls ist relativ unkompliziert und erfolgt über den EN-Pin (Enable) und den TxD-Pin (Transmitter). Wird der EN-Pin auf Versorgungsspannungspotential gezogen, so werden alle am TxD-Pin anliegenden Daten als FM-Signal gesendet. Die Verbindung zur Zentraleinheit erfolgt über ein USB-TTL Converter, der es ermöglicht den USB Port des Raspberry Pi als zusätzlichen seriellen Port zu verwenden, dies ist notwendig, da die UART Schnittstelle des Raspberry Pi durch das TNC-Pi belegt wird. Das Radiometrix NTX2 wird als redundantes Sendemodul für die Übertragung von Bilddaten verwendet. Hierfür werden zunächst die Bilddaten mittels SSDV in ein Textformat konvertiert und anschließend per RTTY im Upper Side Band gesendet. Bei der Übertragung per RTTY (RadioTeleType, Funkfernschreiben) werden die einzelnen Textzeichen als serieller Bitstrom übertragen. High (Bitwert 1) und Low (Bitwert 0) werden durch zwei definierte Töne übertragen, welche sich im Abstand von einigen Hundert Hertz voneinander befinden.

Sendemodul-Radiometrix-NTX2
Sendemodul Radiometrix NTX2

Die Verbindung von Radiometrix NTX2 und Raspberry Pi kann per UART Schnittstelle der GPIOs erfolgen oder über einen der USB-Ports stattfinden. In verwendeten Aufbau wurde die Verbindung über eine der USB-Schnittstellen realisiert, die Steuerung und Übertragung der Daten erfolgt durch ein in der Programmiersprache C erzeugtes Programm.

Für die Initialisierung eine USB Uart Schnittstelle wird für die Pegelanpassung ein USB-TTL-Converter benötigt, sowie die C Bibliothek termios.h,eine UNIX API für die Ein- und Ausgabe per Terminal.

Die USB-Ports des Raspberry Pi befinden sich im Linux System unter /dev/ttyUSBx.

//InitialisierungenUSBUART
#include<termios.h>
#include<fcntl.h>
char*ntx2_port="/dev/ttyUSB0";

Bei der Initalisierung werden die Protokolleigenschaften definiert, nur wenn beide Seiten (Sender und Empfänger) gleich konfiguriert sind, ist eine Kommunikation möglich. Wichtige Eigenschaften sind die Anzahl der übertragenden Symbole pro Zeiteinheit, die Anzahl der Datenbits und Stop-Bits sowie das Paritätsbit.

Quellcode - Ansteuerung USB-Port

Ist die Schnittstelle einmal konfiguriert, können nun Daten übertragen werden. Die Baudrate bestimmt dabei die Übertragungsgeschwindigkeit. Wir verwenden das Radiometrix NTX2 als Sendemodul für die Bilddaten. Die Bilddaten werden zunächst in das SSDV Format konvertiert und liegend anschließend als Textformat vor. Das Bild wird in n-Segmente zerlegt, wobei jedes Segment aus genau 256 Zeichen (chars) besteht. Diese einzelnen Segmente werden in zwei Teilpaketen mit je 128 Zeichen versendet. Hierfür wird ein Array usb_rtty mit 128 Zeichen gefüllt und anschließend in den Handler des USB-Ports geschrieben. In seltenen Fällen kann es beim Beschreiben des USB-Ports zu Fehlern kommen, in diesen Fällen wird der USB-Port geschlossen und anschließend neu initialisiert.

Quellcode - Senden per USB-Port

Die Deinitalisierung erfolgt einfach über das Schließen des Handlers ntx2_fd.

void ntx2_close()
{
	close(ntx2_fd);
	printf("NTX2: USB Uart Port geschlossen...\n");
}

Mit dem Schreiben der Daten an den USB Port gelangen diese über den USB-TTL Converter an das Radiometrix NTX2. Das Sendemodul wandelt die anliegenden Daten in ein frequenzmoduliertes Signal um und sendet dieses im 434.650 MHz Band.

Das Funksignal empfangen wird an der Bodenstation über den Kenwood TS-2000 Transceiver emfangen und per Audioausgang in einen Rechner gespeist. Die einst binären Daten liegen nun als zwei definierte Tonfrequenzen vor, dieses Verfahren wird als RTTY bezeichnet. Das Dekodieren dieser erfolgt mit Hilfe der Software Fldigi, eine Soundkarten Digimodeprogramm.

Zur Entschlüsselung der Audiodaten muss die Software, nach Auswahl der Soundkarte, konfiguriert werden. Entscheidend ist, dass die, bei der Initialisierung verwendeten Protokolleigenschaften, auch hier mit übernommen werden. Unter OP-Mode -> RTTY -> Custom übernehmen wir die vorher bestimmten Eigenschaften für Baudrate, Parity und Stop-Bit. Je nach eigensetztem Funkmodul ist die Shift-Frequenz, der Abstand der beiden Töne für das High Bit (1) und Low Bit (0) unterschiedlich. Zur Ermittelung der Shift-Frequenz wurde ein einfaches Programm verwendet, welches abwechselnd ein High und Low-Signal aussendet. 

Über die konfigurierte Software Fldigi werden die Audiopegel in binäre Muster und von diesen Bitmustern in Zeichen zurückgewandelt. Aus den Zeichen lässt sich nun das im SSDV codierte Bild zurückgewinnen, dies geschieht vollautomatisch, sobald ein vollständiger SSDV Datensatz übertragen wurde. Das dekodierte Bild lässt sich unter View -> SSDV RX betrachten.

Raspberry Pi Bilder

Während des Fluges dokumentiert der Raspberry Pi über die Raspberry Pi Kamera den Flug indem dieser kontinuierlich Bilder aufnimmt. Die aufgenommenen Bilder werden zunächst ausgewertet, verkleinert, in das SSDV Format überführt und anschließend per Funk an die Bodenstation übertragen. Um diese Aufgabe zu automatisieren wurde ein Programm geschrieben, welche auf den SSDV Quellcode von Philip Heron zugreift.

Das Programm nimmt im ersten Schritt drei Bilder mit den Namen ssdv1ssdv2 und ssdv3 in maximaler Auflösung auf und berechnet die Dateigröße der einzelnen Bilder. Da die Bilder in etwa die gleiche Umgebung betrachten, ist in der Theorie das Bild mit der größten Dateigröße auch das schärfste Bild. Die hängt damit zusammen, dass bei unscharfen oder verwackelten Bilder die Kontraste geringer ausfallen und eine Komprimierung in das JPG Format größere Bereiche zusammenfassen kann, hierbei lässt sich eine bessere Komprimierung durchführen und die Dateigröße verringern. Ein scharfes Bild besitzt mehr Kontraste und demnach auch eine geringere Kompression. Als Auswahlkriterium lässt sich dieses Verfahren jedoch nur verwenden, wenn der Bildausschnitt zwischen den drei Aufnahmen relativ ähnlich ist.

Quellcode - Auswahl der Bilder

Das beste Bild wird in einem Archivordner gesichert und auf einere geringere Auflösung skaliert. Die Skalierug ist notwendig um eine möglichst schnelle Bildrate zu erzielen. Die Sicherung im Archivordner erfolgt in voller Auflösung und ermöglicht eine Betrachtung nach der Landung.

Quellcode - Bildskalierung auf 320x240 Pixel

Das skalierte Bild kann nun in das SSDV Format konvertiert werden.

Quellcode - Skaliertes Bild in SSDV codieren

Die Datei ntx_picture enthält das skalierte Bild im SSDV Format und kann Zeichenweise ausgelesen und versendet werden. Das Versenden erfolgt ebenfalls automatisiert mittels des gleichen Programmes. Das Programm überprüft im Vorfeld ob bereits ein kodiertes Bild vorliegt und erzeugt eine Zeichenkette aus einem Header und 128 Zeichen des codierten Bildes. Innerhalb einer Schleife werden je 128 Zeichen des SSDV codierten Bildes ausgelesen und versendet, bis der gesamte Inhalt gelesen wurde.

Quellcode Versende des SSDV-Bilds

Sobald der gesamte Inhalt versendet wurde, werden alle Dateien gelöscht und der Raspberry für die Aufnahme der nächsten drei Bilder vorbereitet.

Seiten: 1 2 3 4