Im September 2016 konnten wir wieder erfolgreich einen Wetterballon starten. Mit an Board war ein 70cm Sender, der die Wetterdaten per Sprachausgabe zur Erde funkte. Ein weiteres Funkgerät sendete den aktuellen Standort per APRS zum Boden. Der 70cm Sender hatte eine Leistung von 1 Watt. APRS sendete mit 5 Watt. Dementsprechend musste eine leistungsfähige Stromversorgung mitfliegen. So hatte die Nutzlast insgesamt ein Gewicht von 1,5 kg.
Im folgenden möchte ich eine Studie mit einem CW Telemetriesender beschreiben. Es kommen nur einfachste Baugruppen zum Einsatz, so dass das gesamte Equipment sehr leicht ist. Sollte es zu einem Flug mit einem Ballon kommen, so kann ein wesentlich kleinerer Ballon eingesetzt werden. Das verursacht weniger Kosten für den Ballon und natürlich auch für das Gas.
Basis des Equipments ist ein Arduino UNO. Auch ein Nano kann verwendet werden, der das Gewicht noch einmal um 20g verringern würde. Der Arduino wurde mit zwei Sensoren bestückt, die ich noch von ersten Experimenten für unser Ballonprojekt vorrätig hatte.
Zur Messung der Luftfeuchtigkeit und der Temperatur wird ein DHT 11 verwendet. Der Luftdruck wird mit einem BMP 180 gemessen. Beide Sensoren sind für Wetterballons natürlich ungeeignet. Der BMP 180 kann nur bis runter zu 300 hPa den Luftdruck messen. Der Einsatz wäre damit nur bis zu einer Höhe von etwa 9 km möglich. Der DHT 11 misst Temperaturen nur bis hinunter zu -40° Celsius. In der Stratosphäre sind aber Temperaturen von -55° Celsius und kälter zu erwarten. Wie gesagt, es geht hier nur um eine Studie. Bei einem realen Flug müssen daher andere Sensoren z.B. ein MS5611 zur Messung des Luftdruckes eingesetzt werden. Für die Temperaturmessung in der Stratosphäre eignet sich ein DS18S20.
Für die Funkseite kommt bei meiner Studie ein kleiner ISM-Sender zum Einsatz, wie er auch in Funk-Thermometern oder Funksteckdosen zum Einsatz kommt. Mein Sender arbeitet bei einer Frequenz von 433,910 MHz. Als Antenne habe ich einfach ein kurzes Stück Draht verwendet. Bei einem möglichen Ballonstart sollte sicherlich eine selbstgebaute Groundplane zum Einsatz kommen. Das Beitragsbild zeigt die Zusammenschaltung aller Komponenten und die Pin-Belegung am Arduino.
In Morsetelegrafie werden dann die Temperatur, die Luftfeuchtigkeit und der Luftdruck in folgendem Format ausgesendet:
t 13,2 f 85 d 1024 dl0mes
Dabei markiert t die Temperatur, f die Luftfeuchtigkeit und d den Luftdruck. Am Ende dann noch, wie sich für Funkamateure gehört das Rufzeichen. Hier Beispielhaft DL0MES.
Nachfolgend der Sketch dazu:
/*================================================================================ Programm zur Ausgabe der Temperatur, der Luftfeuchtigkeit und des Luftdruckes in Morsetegrafie mit einem kleinen ISM-Sender auf 433 MHz. Als Sensoren werden ein DHT11 für die Temperatur und die Luftfeuchtigkeit und ein BMP180 zu Messung des Luftdruckes eingesetzt. Programmautor Josef Sommer DL8DBN ==================================================================================*/ #include <Wire.h> // Library für den I2C Bus #include <string.h> // Library für die String-Bearbeitung #include <stdio.h> // Library für die Stndardfunktinen #include <DHT.h> // Library für den DHT11/22 Feuchtesensor #include <BMP180.h> // Library von Sparkfun für den BMP180 Luftdrucksensor #define DHTPIN 2 // Digitaler Pin an dem der DHT angeschlossen ist #define DHTTYPE DHT11 // Type des Sensors der angeschlossen ist hier: DHT11 DHT dht(DHTPIN, DHTTYPE); // Instanz des DHT-Sensors erzeugen BMP180 barometer; // Instanz des BMP180-Sensors erzeugen int laenge; int laenge1; int i; int x; int y; String h_text; String t_text; String l_text; char temp[1]; char charzeichen[1]; String temp1; String zeichen; String temp2; int SenderPin = 12; // Pin an dem der Sender angeschlossen ist int tempo = 100; // Zeichengeschwindigkeit float seaLevelPressure = 101325; // Aktueller Luftdruck bezogen auf NN am aktuellen Stndort String text = "t 13,2 f 85 d 1024 dl0mes"; // So wird der Text später beispielhaft aussehen char* woerterbuch[] = {"a", ".-", "b", "-...", "c", "-.-.", "d", "-..", "e", ".", "f", "..-.", "g", "--.", "h", "....", "i", "..", "j", ".---", "k", "-.-", "l", ".-..", "m", "--", "n", "-.", "o", "---", "p", ".--.", "q", "--.-", "r", ".-.", "s", "...", "t", "-", "u", "..-", "v", "...-", "w", ".--", "x", "-..-", "y", "-.--", "z", "--..", ".", ".-.-.-", ",", "--..--", "/", "-..-.", "-", "-....-", "0", "-----", "1", ".----", "2", "..---", "3", "...--", "4", "....-", "5", ".....", "6", "-....", "7", "--...", "8", "---..", "9", "----."}; void setup() { pinMode(SummerPin, OUTPUT); Serial.begin(9600); // Seriellen Port öffen um Ausgaben zu ermöglichen mit 9600 bps: dht.begin(); // initialisieren des DHT Wire.begin(); // initialisieren des I2C Busses für die Kommunikation mit BMP 180 barometer.Initialize(); // initialisieren des BMP 180 Sensors } void loop() { float h = dht.readHumidity(); // Einlesen der relativen Luftfeuchtigkeit in % float t = dht.readTemperature(); // Einlesen der Außen-Temperatur in °C float Luftdruck = barometer.GetPressure()/100; // aktuellen Luftdruck einlesen (Mess wert in Pa; /100 macht daraus hPa float Innentemp = barometer.GetTemperature(); // aktuelle Innentemperatur einlesen t_text = String(t, 1); // String(float, Nachkommastellen) Wandelt Meßwert in String um h_text = String(h, 0); l_text = String(Luftdruck, 0); text = "t " + t_text + " f " + h_text + " l " + l_text + " dl0mes"; // Messwerte werden zu einer Zeichenkette für Morseausgabe zusammengestellt laenge = text.length(); // Anzahl der Zeichen des auszugebdneden Textes char chartext[laenge + 1]; text.toCharArray(chartext, laenge+1); // Aus dem auszugebenden Text eine Array of Char erzeugen for (i=0; i<laenge+1; i++){ // Text Zeichen für Zeichen aufschlüsseln temp[1]= chartext[i]; // Aktuelles Zeichen aus dem Text der ausgegeben werden soll for (x=0; x<=80; x=x+2){ // Aktuelles Zeichen im Wörterbuch suchen temp2=woerterbuch[x]; // Das x-te Zeichen einer Zwischenvariablen zuweisen die ein String ist temp2.toCharArray(charzeichen, 2); // Aus der Zwischenvaiablen ein char machen if (chartext[i] == char(32)) // bei Leerzeichen eine Wortpause ausgeben { wortende(); break; } else { if (charzeichen[0] == chartext[i]){ // Wenn Zeichen im Wörterbuch gefunden temp1 = woerterbuch[x+1]; // dann ist nächster Eintrag das zugehörende Morsezeichen laenge1 = temp1.length(); // Zeichenlänge des Morsezeichens ermitteln char chartemp1[laenge1+1]; temp1.toCharArray(chartemp1, laenge1+1); // Aus dem Morsezeichen ein Array of Char erzeugen for(y=0; y<laenge1; y++){ switch (chartemp1[y]) { // Für jeden Punkt ein "dit" ausgeben case '.': // Für jeden Strich ein "dah" ausgeben dit(); break; case '-': dah(); break; } } zeichenende(); //Wenn das Zeichen ausgegeben wurde, dann eine Pause der Länge "dah" } } } } } void dit() { // einen Punkt (dit) ausgeben digitalWrite(SenderPin, HIGH); delay(tempo); digitalWrite(SenderPin, LOW); delay(tempo); } void dah() { // einen Strich (dah) ausgeben digitalWrite(SenderPin, HIGH); delay(3*tempo); digitalWrite(SenderPin, LOW); delay(tempo); } void wortende() { // Pause für Wortende digitalWrite(SenderPin, LOW); delay(6*tempo); digitalWrite(SenderPin, LOW); } void zeichenende() { // Pause für Zeichenende digitalWrite(SenderPin, LOW); delay(2*tempo); digitalWrite(SenderPin, LOW); }
Das nachfolgende Schaubild zeigt die Zusammenschaltung aller Komponenten:
Ich habe den Telemetriesender hier über einen 9V Block mit Strom versorgt. Die Alkaline Version der 9V Batterie hat eine Kapazität von 500…600 mAh. Die Stromaufnahme der gesamten Anordnung beträgt 60mA. Somit sollte der Sender mindestens 8 Stunden laufen.
Hallo Herr Sommer,
im Rahmen meiner Facharbeit an der BSZ Dresden soll ich ein Funktionsfähigen Wetterballon Bauen mit APRS und CW Sender.
Ich finde dieser CW Sender ist perfekt dafür.
Gesendet werden diese Daten mit dem Rufzeichen des Ortsverein von der Schule „DL0IKT“.
Ich habe es schon versucht nachzubauen mit dem Arduino UNO den ich noch hatte und die Sensoren habe ich bestellt aber leider war ich damit nicht so richtig erfolgreich.
Das Problem liegt an dem Programm, ich habe immer Fehler beim Hochladen (vermutlich falsche Library´s).
Könnten sie mir bitte mitteilen welche Library ich benötige oder wäre es möglich mir diese zu schicken?
Vielen Dank
Mfg
Claudio Rusvai