Create project Need help?
Show more (1)
scotty

Arduino-16-Bit-Low-Frequency-Datalogger [130485-I / 140035-I]

Status: Finished
14895
13
votes
November 28, 2013
PUBLISHED
in Elektor magazine | September 2014 | Find it here
datalogger_1.jpg

 

(English version see end of this text)

Fertig entwickelte Hard-und Software zum Speichern von Frequenzen von 0 bis 50 Hz inklusive FFT-vs-Time-Analyse und Anwendungsbeispiel (ELF-LF-Receiver / NRS-Nr. 140035-I)


Einleitung / Projektbeschreibung

Kommerzielle Software zum Speichern von Audiosignalen, die dem Eingang der PC-Soundkarte zugeführt werden, gibt es mehr als genug. Doch in fast allen Fällen hat der Anwender dabei unter anderem keinen individuellen Echtzeit-Zugriff auf die ankommenden Audiodaten: Er kann nicht mit selbst-programmierter Software direkt auf sie zugreifen und sie daher auch nicht als Zeitsignal oder FFT-vs-Time-Analyse auf dem Bildschirm darstellen.

Zur Lösung dieses Problems bietet sich das bekannte Arduino-Mikrocontroller-Board an. Wie sich mit dem „an Bord“ befindlichen AD-Wandler erste, einfache Ergebnisse erzielen lassen, wird unter anderem bereits in dem bei Elektor erschienenen Buch „Arduino“ von Günter Spanner beschrieben. Da ich zur Langzeitspeicherung niederfrequenter Signale unter 50 Hz seit langem eine zuverlässige Möglichkeit zur Verarbeitung von 16-Bit-Audiodaten suchte, reichte die Leistung des Arduino A/D-Wandlers für meine Zwecke einfach nicht aus. Nach einer Recherche im Internet bin ich bei "adafruit" fündig geworden. Die Firma bietet einen kostengünstigen 16-Bit A/D-Wandler für etwa 13 Euro an, der speziell für die Zusammenarbeit mit dem Arduino dokumentiert wird:

(http://learn.adafruit.com/adafruit-4-channel-adc-breakouts/assembly-and-wiring).

Nach einer etwa vierwöchigen Experimentier- und Programmierphase ist es mir gelungen, eine funktionstüchtige Hard- und Software zu entwickeln, die ich allen Interessierten mit diesem Projekt vorstellen möchte. Die einzige Beschränkung liegt darin, dass die Abtastrate von ca. 106 Hz dabei durch den adafruit-Wandler vorgegeben ist und das Projekt sich daher nur für die Speicherung von Signalen unter 50 Hz eignet.

Das hier beschriebene Projekt umfasst außerdem eine Beschreibung der wichtigsten Features der zugehörigen Software, die in der für erfahrene Programmierer einfach zu erlernenden Programmiersprache Processing geschrieben wurde (unter anderem eine Echtzeit-FFT-vs-Time-Analyse in Farbspektrumdarstellung).

Außerdem wird an dieser Stelle die Schaltung des Gerätes veröffentlicht werden, das den Grund für die Entwicklung des beschriebenen Dataloggers bildete: Eine kombinierte Filter-Verstärker-Einheit zum linearen Direktempfang niederfrequenter Signale zwischen 50 und (fast) 0 Hz. In diesem Frequenzbereich sind eine Reihe bisher noch nicht wissenschaftlich dokumentierter bzw. diskutierter, schwacher magnetischer Wellen zu empfangen, die auch als schwache Bodenströme messbar sind und zum Teil Charakteristiken eines ultra-langsamen, digitalen Datenaustausches (zum Teil unter 5 Hz) aufweisen. Diese Langzeitsignale können nur erkannt werden, wenn man sie über lange Zeit (mehrere Stunden) speichert und sich dann ihre FFT-versus-Time Analyse betrachtet.

Vielleicht wird der eine oder andere Leser durch das hier veröffentlichte Projekt sogar angeregt, sich mit dem Empfang dieser interessanten Signale zu beschäftigen, die sich nicht nur von Zeit zu Zeit, sondern auch von Ort zu Ort sehr stark ändern. Auch zur genauen Erfassung von Messdaten wie Raumtemperaturen, Wetterdaten oder anderer physikalischer Messwerte ist dieses Projekt geeignet.

 

Teil II (29.11.2013)
 
Hard- und Softwarevoraussetzungen, ungelöste Probleme

Die hier vorgestellte Hard- und Software wurde bisher auf einem Desktop-PC mit Windows 7 (64 Bit), einem Notebook mit Windows 7 (32 Bit), einem Netbook mit Windows 7 (32 Bit) und einem Notebook mit Windows Vista erfolgreich getestet. Auf einem älteren Notebook aus dem Jahre 2003 mit Windows XP ließ sich die Arduino-Software nicht starten. Den Grund dafür habe ich bis jetzt noch nicht herausgefunden.

Bei dem in diesem Projekt verwendeten Arduino handelt es sich um die „UNO“-Version. Beim Wandler handelt es sich um den Typ ADS 1115.

Auf dem Rechner, auf dem die hier vorgestellte Software laufen soll, müssen gleichzeitig die Arduino- und die Processing-Software sowie einige adafruit-Bibliotheken installiert sein. Wie die Installation genau vonstatten geht, wird an späterer Stelle erklärt. Die Arduino-Software kann von der Arduino-Webseite heruntergeladen werden, wobei eine Version für alle Windows-Systeme gilt. Das hier beschriebene Projekt benötigt die Version 1.0.5.

Download-Quelle:   http://arduino.cc/en/Main/Software

Die Processing-Software finden Sie unter:  http://processing.org/

und zu den adafruit libraries gelangen Sie über den im ersten Teil genannten Link.

Die komplette Software kann, wenn sie einmal heruntergeladen wurde, auch über USB-Stick auf andere Rechner übertragen und dann dort installiert werden. Ein individueller, zeitaufwändiger Download für jeden Rechner ist nicht erforderlich.

Das Einrichten der Software auf einem neuen Rechner mag etwas umständlich sein, aber, um ein alternatives Beispiel zu nennen: Bei der Anwendung von Visual Basic dauert der Download von .net framework und der VB-Software sogar noch wesentlich länger als das Kopieren und Installieren der hier beschriebenen Software.

 

Kleine Wermutstropfen

a) Software

Bevor sich jemand an den Nachbau wagt, sollten ein paar kleine Nachteile nicht verschwiegen werden:

Keine Exe
Leider ist es mir bisher nicht gelungen, das Processing-Programm, so wie im Menü angeboten, in eine unter Windows lauffähige exe-Datei zu konvertieren. Dies ist auf den von mir getesteten Rechnern nur möglich, wenn die Software nicht auf die serielle Schnittstelle zugreift. Hier wäre der Rat eines Experten auf diesem Gebiet gefragt. Aus diesem Grunde muss das Datalogger-Programm immer aus dem geöffneten Processing-Editor heraus gestartet werden, was (mich persönlich) jedoch nicht weiter stört.

Nur 15 Bit
Bei den vom Wandler ausgegebenen Zahlen handelt es sich um Integer-Variablen zwischen 0 und 32767 und damit nur um eine 15-Bit Wandlung, was in der Praxis jedoch nicht weiter stört.

b) Hardware

Bei längeren Aufnahmen über mehrere Stunden, bei denen Arduino und PC "ungestört arbeiten" konnten, war bisher noch kein Absturz der seriellen Verbindung zu verzeichnen.Wenn beim Experimentieren in unmittelbarer Umgebung des Arduino jedoch ein Gerät ein- bzw. ausgeschaltet oder ein Stecker an einem benachbarten Gerät auf dem Labortisch eingesteckt oder herausgezogen wird, kann die Schnittstellenverbindung unter Umständen abreißen. Sie  kann jedoch wieder zum Leben erweckt werden, wenn man die USB-Verbindung zum Arduino kurzzeitig unterbricht und dann das Programm neu startet. Nur in ganz seltenen Fällen musste sogar der komplette Computer dazu neu gestartet werden.

 

Teil III (29.11.2013)
Verbindung zwischen Arduino- und Wandler-Platine

Versorgungs-Anschlüsse

Die Anschlüsse des externen A/D-Wandlers sind in einer Reihe angeordnet. Blickt man auf die Bestückungsseite der Mini-Platine und dreht diese so, dass sich die Anschlüsse am unteren Rand befinden, so handelt es sich beim ersten Kontakt um den Anschluss der positiven Spannungsversorgung (VDD). An den Pin, der sich rechts daneben befindet, wird der Masseanschluss der Versorgung angelötet (GND). Die Versorgungsspannung (5 V) kann direkt vom Arduino bezogen werden. Die entsprechenden Anschlüsse auf der Arduino-Platine sind mit „GND“ und „5 V“ bezeichnet (siehe Bild 5: „Verbindung zum A/D-Wandler“).

 

Zwei zusätzliche Verbindungen

Außer der Spannungsversorgung müssen noch die beiden Anschlüsse, die sich direkt neben den beiden Versorgungsanschlüssen auf der A/D-Wandler-Platine befinden, mit der Arduino-Einheit verbunden werden. Auf der Wandler-Platine sind diese Anschlüsse mit „SCL“ und „SCA“ bezeichnet. Auf meiner Arduino-Uno-Platine sind die äquivalenten Anschlüsse allerdings nicht gekennzeichnet.

Verbinden Sie daher, so wie im Bild 5 gezeigt, den SCL-Anschluss mit dem Kontakt, der sich ganz außen auf der Anschlussleite des Arduino befindet (die Leiste, auf der sich auch die digitalen Ausgänge befinden). Der mit „SDA“ bezeichnete Kontakt wird mit dem daneben liegenden Anschluss verbunden.

Es gibt, wie die Webseite des A/D-Wandler-Herstellers zeigt, noch andere Verbin­dungs­möglichkeiten, die ich aus Zeitgründen bisher jedoch nicht weiter überprüft habe, so dass ich dazu an dieser Stelle keine Angaben machen kann.

 

Test-Poti

Um die Anordnung zu testen, wird eine Testspannung an einem der Eingangskanäle des A/D-Wandlers benötigt. Im Projekt wird dazu grundsätzlich Kanal 1 verwendet. Die restlichen Eingänge bleiben unbenutzt.

Achtung: Diese Testspannung darf die maximale Versorgungsspannung von 5 V nicht überschreiten, da dies zur Zerstörung des A/D-Wandlers führen kann (genaue Angaben siehe adafruit-Link in Teil 1). Aus diesem Grunde ist es ratsam, sie direkt aus der 5-V-Arduino-Versorgungsspannung abzuleiten: Der Schleifer eines an die Versorgungsspannung angeschlossenen Potis zwischen ca. 10 und 100 k kann in diesem Falle direkt mit dem Eingang eines Kanals (hier Kanal 1) verbunden werden.

Ein Betätigen des am Poti montierten Drehknopfes bewirkt eine Änderung der auf dem Bildschirm grafisch dargestellten Spannung (Oszilloskop-Funktion), nachdem die Software gestartet wurde.

 

Test per Funktionsgenerator

Aus den genannten Bedingungen für die Eingangsspannung muss im Falle des Anschlusses eines Funktionsgenerators zuerst die im nächsten Teil beschriebene Offsetkompensations- und Begrenzerschaltung eingesetzt werden.

 

Teil IV (29.11.2013)

Offsetschaltung mit Spannungsbegrenzung

Da der A/D-Wandler nur mit positiven Eingangsspannungen bis maximal 5 V funktioniert und viele Signale als nullsymmetrische Wechselspannungen vorliegen, ist es erforderlich, die Eingangsspannung am A/D-Wandler um 2,5 V in den positiven Bereich zu verschieben.

Dies geschieht am einfachsten mit einem Operationsverstärker, der als invertierender Addierer geschaltet ist (Bild 6). Poti P1 wird so abgeglichen, dass am Ausgang eine Gleichspannung von 2,5 V gemessen wird. Die Werte der Widerstände sind von untergeordneter Bedeutung und können zwischen 22 k und 220 k variieren. Wichtig ist, dass alle Widerstände ungefähr gleich sind. Je größer R3 bzw. je kleiner R1 bzw. R2, desto höher die Verstärkung, die im gezeigten Falle den Wert 1 besitzt. Für P1 kann ein Spindeltrimmer verwendet werden. Ich tendiere übrigens inzwischen wieder zu qualitativ hochwertigen „normalen“ Trimmpotis, da man beim Spindeltrimmer nie weiß, wo der Schleifer gerade steht und dann sehr oft den Schraubendreher so lange drehen muss, bis man einen Krampf in die Hand bekommt oder mit dem diesem oft abrutscht, wenn man gleichzeitig ein Messgerät im Auge behalten muss.

Als OpAmp kann jeder gängige Typ verwendet werden. Ich habe in letzter Zeit mit dem OP07 recht gute Erfahrungen gemacht, der anscheinend gut erhältlich und preisgünstig ist.

Damit der Eingang des A/D-Wandlers nicht durch Überspannungen zerstört wird, sorgen sechs in Serie geschaltete Dioden zwischen Ausgang und Masse für eine Begrenzung der Ausgangsspannung auf etwa 4,2 V. Auf diese Weise ergibt sich eine gewisse Sicherheitsreserve. Die in Serie geschaltete Diode D7 verhindert, dass die Spannung negativ wird. Auch dies könnte den A/D-Wandler beschädigen.

 

Spannungsversorgung der Offsetschaltung:

Bild 7: Im Hinblick auf einen mobilen Einsatz ist die Versorgung zwischen einem 6-V-DC-Netzadapter und einer Akkuversorgung umschaltbar. Auch vier vollgeladene NiMH-Akkus liefern eine Spannung bis zu 6 V. Der Stabilisator 7805 (IC1) begrenzt diese Spannung auf die für den Wandler erforderliche Eingangsspannung von 5 V. Aus diesen 5 V erzeugt der Wandler die für den OpAmp notwendige zwei mal 12 V Gleichspannung.

Der gut erhältliche Wandler des Typs 0512D hat sich bei mir seit langer Zeit im praktischen Einsatz bewährt. Vor allem bei der bipolaren Versorgung von OpAmps wäre es extrem lästig, mit direkter Akkuspeisungzu arbeiten, da die Anzahl der dazu erforderlichen, oft nachzuladenden Akkus dann sehr schnell Ausmaße annähme, die einen praktischen Betrieb kaum noch erlaubten.

Achten Sie bei Verwendung eines Netzteils darauf, dass es mindestens 220 mA liefert (die brauchen wir noch für die angekündigte Low-Frequency-Empfängerschaltung) und eine stabile und nicht pulsierende Gleichspannung erzeugt. Oft leisten ausgediente Steckernetzteile hier gute Dienste, aber viele dieser Geräte erzeugen ausschließlich eine ungesiebte Gleichspannung aus Halbwellen.

 

Teil V: Download und Installation des
Arduino-Upload-Programms  (02.12.2013)

Gehen Sie auf folgende Seite A/D-Wandler-Herstellers:

http://learn.adafruit.com/adafruit-4-channel-adc-breakouts/downloads

Klicken Sie auf:

ADS1x15 Library for Arduino

Laden Sie nun die Arduino-Software für den hier beschrieben A/D-Wandler herunter. Bitte beachten Sie dabei den unten aufgeführten Copyright-Hinweis.

Der für das Projekt benötigte Teil der Software besteht aus:

  • dem Verzeichnis „Examples“. Dort befindet sich die in den Arduino zu  übertragende Software, an der noch ein paar kleine Änderungen vorzunehmen sind.
  • der Bibliotheksdatei ADS1015.h (Achtung: Lassen Sie sich vom Namen der Dateien nicht verwirren: Obwohl nur die Bezeichnung ADS1015 existiert, gilt die Datei auch für die hier besprochene 16-Bit-Version 1115.)

Ablage der heruntergeladenen A/D-Wandler-Software

Alle Dateien, die von der adafruit-Webseite herunter geladen wurden, können zur Aufbewahrung zum Beispiel im „lib“-Verzeichnis des übergeordneten Arduino-Verzeichnisses gespeichert werden.

C:\Program Files (x86)\Arduino\lib\Adafruit_ADS1X15_master

(Bei meinem PC ist das Arduino-Verzeichnis unter dem Verzeichnis Program Files (x86) abgelegt). Folgender Ordner und folgende Dateien befinden sich im Verzeichnis Adafruit_ADS1X15_master:

  • Examples (Verzeichnis mit Arduino-Beispielprogrammen)
  • Adafruit_ADS1015.ccp
  • Adafruit_ADS1015.h
  • License.text
  • README.md (kann in .txt umbenannt werden)

Es muss nun zwischen dem auf den Arduino zu übertragenden Programm und den Bibliotheken unterschieden werden:

In den Arduino hochzuladende Software

Sicherheitskopie
Bei meinem Projekt habe ich das in „Examples“ enthaltene Programm „comparator“ zum Hochladen in den Arduino benutzt, obwohl ich die Komparatorfunktion dabei nicht verwende.

Erzeugen Sie zuerst eine Sicherheitskopie des Programms „comparator“, bevor Sie es nach unten beschriebenen Angaben anpassen und geben Sie dieser Kopie einen aussagekräftigen Namen. Beachten Sie bitte, dass Arduino-Programme immer in einem Verzeichnis eingebettet sein müssen, das den gleichen Namen (ohne Endung natürlich) wie das Programm besitzt. Speichern Sie diese Sicherheitskopie am besten in einem neuen Extra-Verzeichnis (zum Beispiel „Eigene Software“), das in das Hauptverzeichnis „Arduino“ (unter „Programme“ bzw. „Program Files“) eingebettet ist.

 

Anpassungen im Arduino-Programm

Mehrere Zeilen des Programms „comparator“ sind für verschiedene Versionen und Einstellungen voreingestellt, so dass eine individuelle Anpassung erforderlich ist:

Die nicht benötigten Programmzeilen (zum Beispiel die für die 1015-Versionen) müssen durch einen Doppelslash (//) deaktiviert werden.

  • Am Ende des Codes muss die eingebaute Delay-Funktion deaktiviert werden.
  • Der Serial.print-Befehl sorgt für die Überagung der Daten an den PC. Im Original ist außer den Daten noch Text enthalten. Dieser muss deaktiviert werden, so dass ausschließlich Daten an den PC übertragen werden: 

       // Serial.print("AIN0: ");

  • Aktivieren Sie innerhalb der  „setGain“-Programmzeilen die zweite Zeile:  ads.setGain(GAIN_ONE);

Das Programm hat die Endung „.pde“, was etwas verwirrend ist, da Processing-Programme normalerweise diese Endung besitzen. In der Tat lässt sich dieser Code auch in den Processing-Editor laden. Beim Ausführen des Programms erscheinen (wie nicht anders zu erwarten) jedoch Fehlermeldungen.

Nachdem Sie den Code in ein Arduino-Editor-Fenster geladen und dann wieder mit einem beliebigen, anderen Namen gespeichert haben, erhält er die Endung „ino“.

Sie können die herunter geladene Datei „comparator“ nun entweder nach obiger Anleitung selbst verändern oder den hier abgedruckten Text per Copy and Paste in einen leeren Arduino-Editor kopieren.

 

Copyright Hinweis
Bitte beachten Sie: Der folgende Code steht unter Copyright der:

(c) 2012, Adafruit Industries
All rights reserved.

Beachten Sie in diesem Zusammenhang bitte auch den Inhalt der Download-Datei mit den Copyright-Hinweisen (license.text).  

Programmcode:

#include
include
// Adafruit_ADS1115 ads;  /* Use this for the 16-bit version */
Adafruit_ADS1115 ads;     /* Use this for the 12-bit version */

void setup(void)

{
  Serial.begin(115200);
  Serial.println("Hello!");

  Serial.println("Single-ended readings from AIN0 with >3.0V comparator");
  Serial.println("ADC Range: +/- 6.144V (1 bit = 3mV/ADS1015, 0.1875mV/ADS1115)");
  Serial.println("Comparator Threshold: 1000 (3.000V)");

  // The ADC input range (or gain) can be changed via the following
  // functions, but be careful never to exceed VDD +0.3V max, or to
  // exceed the upper and lower limits if you adjust the input range!
  // Setting these values incorrectly may destroy your ADC!

   ads.setGain(GAIN_ONE);  // 1x gain   +/- 4.096V  1 bit = 2mV   0.125mV

   ads.begin();

  // Setup 3V comparator on channel 0
  // ads.startComparator_SingleEnded(0, 1000); ########################

}

void loop(void)
{
  int16_t adc0;
  // Comparator will only de-assert after a read
  adc0 = ads.getLastConversionResults();
  // Serial.print("AIN0: ");
  Serial.println(adc0);
  //delay(10);
}

 

Bibliotheks-Einbindung

Die Bibliotheksdatei „Adafruit_ADS1015.h“ muss sich bei der Übertragung der Software an den Arduino im selben Verzeichnis befinden, in dem auch das oben gezeigte, zu übertragende Arduiono-Programm vorhanden ist. Kopieren Sie daher die Datei „Adafruit_ADS1015.h“ aus der oben beschriebenen „Ablage“ an die betreffende Stelle.

 

Baudrate

Sowohl im Arduino-Programm als auch im (später beschriebenen) Processing-Programm muss die gleiche Baudrate für die Datenübertragung eingetragen sein. Im hier beschriebenen Projekt wurde der Wert 115200 verwendet.

 

Zur Erinnerung:

Das Arduino-Programm für den Datalogger muss nur ein Mal in den Arduino übertragen werden und bleibt dort für den weiteren Datalogger-Betrieb gespeichert. Trotzdem muss die komplette Arduino-Software auch weiter auf dem Rechner vorhanden sein, wenn der Datalogger auf ihm betrieben werden soll.

Wichtig: Wenn Sie den Arduino an einen anderen Rechner anschließen möchten, muss daher auch dort die komplette Arduino-Software auf der Festplatte vorhanden sein. Diese kann vom Ursprungsrechner (auf den die Software ein Mal aus dem Web heruntergeladen wurde) über USB-Stick kopiert werden.

Klicken Sie nach dem Übertragen der Software auf dem Zielrechner im Arduino-Vereichnis „Installationssoftware“ die Datei „setup“ an. Dadurch wird die für den Arduino benötigte Software auf dem Zielrechner installiert.

Bis jetzt können Sie mit dem auf den Arduino übertragenen Code noch nichts anfangen. Das wird sich nach dem nächsten Teil ändern. Dort wird zunächst ein einfaches, aber bereits brauchbares Testprogramm vorgestellt.

 

Teil VI (04.12. 2013)

A/D-Wandler Test-Software in Processing

Processing
Nach den langen Vorbereitungen ist es nun endlich an der Zeit, die A/D-Wandler-Platine einem ersten Test zu unterziehen und die ausgegebenen, digitalen Daten auf dem Bildschirm darzustellen. Dies geschieht mit einem kleinen Processing-Programm.

Für alle, die sich bisher noch nie mit der Programmiersprache beschäftigt haben: Sie ist eine Art Mischung aus C und Java. Da ich bereits Erfahrungen mit C habe, war es für mich relativ einfach, mich in Processing einzuarbeiten. Die Befehle und Funktionen sind in vielen Punkten mit Basic vergleichbar. Hinzugekommen sind die geschweiften Klammern für Bedingungen (if then, while), Funktionen und for-Schleifen sowie die Tatsache, dass jede Anweisung mit einem Semikolon abgeschlossen werden muss. Die Programmierumgebung ist sehr einfach: Editor öffnen und Quelltext schreiben. Dann den Startknopf anklicken und los geht’s.

Die Fehlermeldungen führen allerdings gelegentlich in die Irre, vor allem, wenn man einmal, was bei mir häufig vorkommt, ein Semikolon vergisst oder eine geschweifte Klammer zu viel oder zu wenig einsetzt.

Die Grafik-Anweisungen sind sehr einfach und leicht zu merken:
line (20,30, 100,280) ;
bedeutet zum Beispiel: Zeichne eine Linie zwischen den Punkten 20,30 und 100,280.

Kommentaren ist ein Doppelslash (//) vorangestellt. Processing ist vor allen in seinen Grafikbefehlen extrem schnell: Das Auslesen eines zweidimensionalen Arrays und die Darstellung der Werte als flächendeckende Farbpixel auf dem Bildschirm geschieht so schnell, dass es scheinbar ohne Zeitverlust (auf einen Schlag) erfolgt, und das ist bei vielen Anwendungen ein großer Vorteil.

 

Testsoftware
Doch nur zum Testprogramm selber. Es ist so kurz, dass es an dieser Stelle gezeigt werden kann. Es steht außerdem unter "Testprogramm" zum Download bereit:

// Variablendeklarationen

import processing.serial.*; 
int amplitude;
String daten;
String cut;
int n=1;
int[] array = new int[640];
Serial schnittstelle;

// Standardfunktion „setup“ zur Ausführung einmaliger Aufgaben
// vor dem Programmstart

void setup ()

{
  size(630,256);
  schnittstelle = new Serial(this, "COM3", 115200);
  // Standardausdruck - enthält Portnummer und Baudrate

  refresh_screen(); // Sprung zur Subroutine (Funktion)
}

// Endlosschleife ########################################

void draw()
{
  while (schnittstelle.available() > 0) 
 {
  daten = schnittstelle.readStringUntil(10);

   if (daten != null)

   {
     int amplitude=int(daten);
      cut = trim(daten);
      amplitude=int(cut);
      array[n] = amplitude;
      if (n>636) {n=1; refresh_screen();array[0] = 16000;}

      // Hier werden die Daten als Kurve auf dem Bildschirm dargestellt:

      line(n-1,array[n-1]/128,n,array[n]/128);
      n=n+1;
 
   
 }
}

// Zuvor wird der Hintergrund gelöscht und das Liniengitter
// neu gezeichnet.

void refresh_screen ()

{

  background (0,0,0); // Hintergundfarbe  
  stroke(255,0,0); // Linienfarbe (r,g,b)
  line(0,64,636,64);
  line(0,128,636,128);
  line(0,192,636,192);
  fill(0,255,0); // Füllfarbe (r,g,b)
  stroke (0,255,0);
}

 

Das Programm liest die von der Schnittstelle kommenden Sample-Daten innerhalb einer Endlosschleife. Die Geschwindigkeit ist lediglich durch die Ausgabegeschwindigkeit der Daten des A/D-Wandlers vorgegeben. Auch wenn man das Programm schneller machen würde, bliebe die Samplefrequenz konstant (ca. 106 Hz).

Das Auslesen der Daten geschieht jedoch so schnell, dass das später beschriebene, eigentliche Datalogger-Programm so viel Zeit hat, zwischen dem Einlesen der Sample-Werte unter anderem auch noch komplizierte FFT-Analysedaten zu berechnen.

Nach jedem Einlesen eines Samplewertes werden dieser und der davor, ebenfalls in der Hauptschleife draw, als Linie dargestellt. Der Startpunkt der Linie ist der (in einem Array gespeicherte) letzte Wert. Der Endpunkt der Linie ist der aktuelle Wert. Damit beim Zeichnen nicht auf negative Array-Adressen zugegriffen wird, muss der Arraypointer am Ende des Screens auf 1 und nicht auf 0 zurückgesetzt werden (n=1;). Sobald eine Funktion den Namen „draw“ besitzt, erkennt Processing automatisch, dass es sich hier um eine Endlosschleife handelt.

Umwandlung der Schnittstellendaten:
Die Daten liegen als Strings vor. Um sie als Amplitudenwerte auf dem Bildschirm darstellen zu können, müssen Sie in Integerwerte umgewandelt werden. Bevor dies geschieht, muss der String jedoch noch von überflüssigem Ballast befreit werden (davorstehende Nullen).

Die geschieht durch den trim-Befehl: 

cut = trim(daten);

Die Variable cut ist jedoch immer noch ein String. Die Umwandlung von String nach Integer erfolgt durch: 

amplitude=int(cut);

Da die Integerwerte von 0 bis 32767 reichen (sie lassen sich mit „println()" im Monitor unterhalb des Edit-Fensters anzeigen), sind sie natürlich zu groß, um direkt als Pixelkoordinaten für den Bildschirm zu dienen. Erst eine Division durch 128 (oder andere Werte – je nach gewünschter Fensterhöhe) bringt die richtigen Proportionen ins Spiel.

Ergebnis
Bild 8 zeigt einen Screenshot des laufenden Testprogramms. Die am A/D-Wandler anliegenden Daten werden, wenn alles richtig funktioniert, direkt nach dem Start des Programms in einem Zeitraum von 6 Sekunden von links nach rechts in das 636 Pixel breite Zeitsignalfenster gezeichnet. Danach beginnt der Prozess wieder von vorn.

Die in Bild 8 gezeigten Kurven wurden übrigens erzeugt, indem der später noch zu beschreibende Low-Frequency-Receiver an den Eingang des Wandlers angeschlossen wurde. Am Eingang des Receivers befindet sich eine Spule mit 4000 Windungen und einem Durchmesser von 40 cm. Beim leichten Bewegen eines kleinen Magneten per Hand in einem Abstand von mehreren Metern reagiert das Gerät, wie man sieht, immer noch sehr empfindlich. Durch Ändern der Einstellung des Potis an der bereits vorgestellten Offset-Schaltung lassen sich auch ohne receiver ähnliche Kurven wie im Bild erzeugen.

Wenn das Programm nicht funktioniert:

Haben Sie die richtige Schnittstellen-Nummer und übereinstimmende Baudraten eingegeben?
Ist der USB-Stecker im Arduino und im PC eingesteckt?
Wurde das richtige Programm in den Arduino hochgeladen?
Wird die Offsetkompensation mit Spannung versorgt?
USB-Verbindung kurzzeitig unterbrechen und Programm neu starten.

 

Teil VII  (07.12.2013)

Datalogger-Software-Quellcode, Bedienungshinweise

Die in Processing geschriebene Software des Dataloggers kann nun heruntergeladen werden. Nachdem die betreffende Zip-Datei dekomprimiert wurde, erhält man ein Verzeichnis mit dem Namen:

FFT_2013_11_25

Dieses Verzeichnis kann an einem beliebigen Ort auf der Festplatte gespeichert werden. Wenn Sie den Namen des Verzeichnisses ändern möchten, müssen Sie auch den Namen der pde-Datei im Verzeichnis anpassen: Beide Namen müssen, bis auf die Endung, übereinstimmen.

Das Verzeichnis enthält außerdem die bmp-Grafik für die Benutzeroberfläche des Programms. Diese Grafik muss sich immer in dem Verzeichnis befinden, in welchem sich auch die pde-Datei befindet. Der Name der Grafik darf nur geändert werden, wenn der Name auch im Quellcode des Programms angepasst wird.

Natürlich kann die Grafikdatei der Benutzeroberfläche in einem üblichen Grafikprogramm auch für spezielle Zwecke angepasst werden - zum Beispiel in den Farben. Die Position der Buttons und Kontroll-Lämpchen kann allerdings nur geändert werden, wenn gleichzeitig auch der Programmcode angepasst wird - was ziemlich mühsam sein dürfte.

 

Programm starten

Das Programm kann durch Doppelklick auf die pde-Datei gestartet werden. Nach einer Weile öffnet sich zunächst der Processing-Editor mit dem Programmcode.

Portnummer-Eingabe

Ermitteln Sie den für USB verwendeten, seriellen Port Ihres Rechners und tragen Sie die Nummer im Quellcode am Anfang der Funktion "void setup ()" ein. Die dort vorgegebene Standardnummer ist 3.

serport = new Serial(this, "COM3", 115200);

Der eigentliche Start des Programms erfolgt durch Anklicken des Pfeils links oben: Nach einigen Sekunden muss die im ersten Bild gezeigte Oberfläche erscheinen. Ist die Arduino-Hardware über USB angeschlossen und der richtige Port ausgewählt, so muss im oberen Zeitsignalfenster bereits, wie bei einem Oszilloskop, eine von links nach rechts innnerhalb von 6 Sekunden gezeichnte Linie erscheinen, die eventuell am A/D-Wandler anliegende Signale darstellt.


Programmcode

Ich habe versucht, den Code durch Kommentare so verständlich wie möglich zu gestalten. Dies gelingt bekanntlicherweise nur selten optimal, da ein Programmcode, der von einem anderen geschrieben wurde, grundsätzlich schwer nachvollziehbar ist. Ich muss außerdem zugeben, dass der Code noch nicht optimal strukturiert und gestrafft ist, da er bei der Entwicklung gewachsen ist und man erst hinterher immer weiß, wie man es hätte besser machen können. Nach dem Motto, niemals an einem funktionierenden Code "herum zu pfuschen" habe ich ihn deshalb auch nicht mehr geändert.

Ich habe jedoch das gleiche Programm noch einmal geschrieben, und zwar mit einer etwas mehr nach "Windows" aussehenden Oberfläche und einem etwas besser gegliederten Code. Bei entsprechendem Interesse werde ich diesen Code ebenfalls gerne zu Verfügung stellen.

Wer sich mit der Programmierung in C und in Visual Basic auskennt, wird auch keine große Mühe haben, in Processing geschriebene Programme zu verstehen.

Eine detaillierte Erläuterung des Programmcodes innerhalb dieses Textes würde zu weit führen und den Rahmen dieses Projektes überschreiten. Im Internet gibt es zahlreiche Seiten, die sich dem Thema "Processing" ausführlich widmen.

 

Programmbedienung

Mit dem Programm lassen sich Aufnahmen zwischen einer Minute (zu Testzwecken) und 24 Stunden vorprogrammieren (Button-Reihe direkt unter dem Zeitsignalfenster). Die Standardzeit ist auf 8 Stunden eingestellt.

Mit dem Startbutton (rechts, roter Punkt) kann eine Aufnahme gestartet werden. Sie stoppt automatisch nach Ablauf der voreingestellten Zeit.

In der zweiten Buttonreihe können verschiedene Zusatzfunktionen ausgewählt werden:

HIST ist voreingestellt und bedeutet "History". Hier wird nach jedem sechs Sekunden dauernden Bildschirmdurchlauf der Samplewert mit der größten Amplitude dargestellt, so dass man einen Überblick über die Aktivitäten der letzten Minuten gewinnt.

Mit BUF kann das aufgenommende Zeitsignal im unteren Fenster durchgescrollt werden.

Beim Anklicken von FFT öffnet sich ein etwas größeres Fenster, in dem nach einer festen Zahl von Samples (Standardwert = 512) eine senkrechte Linie gezeichnet wird, die mit einem Blick von oben auf eine FFT-Analyse verglichen werden kann. Die Intensität wird in diesem Falle durch Farben angezeigt: Blau-schwarz steht für niedrige Werte, und rot - gelb - weiß entspricht höheren Werten. Da sich diese Linien in regelmäßigen Zeitabständen aneinanderreihen, wächst im Laufe der Zeit das Bild einer FFT versus Time Analyse, das für geübte Anwender eine direkte Indentifizierung der empfangenen Signale erlaubt.

Im Feld FFT (rechts unten) können der Farbkontrast der Analyse und vier verschiedene Abtatsraten (nur gültig für die Analyse) eingestellt werden. Von links nach rechts sinkt die Zeitauflösung bei gleichzeitiger Steigerung der Frequenzauflösung.

Mit dem Button "Save" können jederzeit Zwischenspeicherungen gemacht werden.

Der Dateiname enthält Anfangs- und Schlusszeit der Aufnahme. Die Endung "wav" besagt in diesem Falle nur, dass es sich um 16-Bit Mono-Daten handelt (von denen das letzte Bit nicht ausgenutzt wurde). Ein wav-Header ist in der Datei nicht enthalten.

Solche Dateien lassen sich mit dem Programm Cool Edit jedoch problemlos öffnen. Erfahrene Programmierer können das weiter oben gezeigten Elemetar-Programm natürlich auch als Basis für eine speziell auf ihre Bedürfnisse abgestimmte Recorder-Software nutzen.

Wenn Sie mit der Suchfunktion folgende Zeile gefunden haben:

if (zwisp > 3600)  {saveBytes("safety.dat", array2); zwisp =0;}

können Sie die Intervalle zum automatischen Speichern aus Sicherheitsgründen von 3600 (Sekunden) auf einen anderen Wert ändern. Die Daten der Sicherheitskopie befinden sich in der Datei "safety.dat" und werden permanent überschrieben.

Alle vom Programm erezugten Dateien befinden sich im selben Verzeichnis wie das Programm selbst.

 

Teil VIII (letzter Teil) : Applikationsbeispiel
Kurzbeschreibung der Hardware des Low-Frequency-Receivers

Bild 9 zeigt den Schaltplan des Anwendungsbeispiels für den Datalogger. Es handelt sich im Prinzip um nichts weiter als um eine Kombination aus einem hochempfindlichen Spannungsverstärker und einem steilen (36 dB/Oktave) Sallen-Key-Tiefpassfilter mit einer Grenzfrequenz von ca. 25 Hz.

Der Empfänger hat die Aufgabe, extrem schwache, magnetische Wellen im Frequenzbereich unter 25 Hz bis (fast) 0 Hz zu verstärken und dabei den störenden Netzbrumm herauszufiltern.

Hintergrund
Es ist davon auszugehen, dass von den Versorgungstrafos in Wohngebieten extrem schwache, magnetische Wellen zwischen ca. 0,3 und 25 Hz ausgestrahlt werden, die bis zu 1000 Mal schwächer als die durch den 50 Hz Wechselstrom erzeugten Störfelder sind. Um diese Signale störungsfrei zu empfangen, muss der 50-Hz-Netzbrumm schon möglichst vor der Hauptverstärkung herausgefiltert werden, damit er den Empfänger nicht übersteuert. Außerdem benötigt man eine  empfindliche Empfangsspule mit etwa 2000 bis 4000 Windungen und einem möglichst großen Durchmesser (30 bis 50 cm). Die Spule muss ringförmig sein und beim Empfang möglichst flach auf dem (möglichst metallfreien) Boden liegen.

Die Empfindlichkeit der Spule wächst linear mit der Windungszahl und quadratisch mit dem Durchmesser.

IC1 dient als Vorverstärker, Vorfilter und Kompensationsglied für die dämpfende Wirkung der Empfangsspule zu niederigen Frequenzen hin.

Beim Aufbau sollte man zunächst die Signale am Ausgang von IC 2 überprüfen: Hier darf der (bisher nur vorgefilterte und überall zu empfangende) 50-Hz-Brumm die 50% Aussteurungsgrenze nicht überschreiten. Reichen die zur Verfügung stehenden Schalterpositionen dazu nicht aus (mit S1 wird die Verstärkung eingestellt), so muss der Wert von R3 erhöht werden.

Am Ausgang des Filters  (IC5) dürfte der Netzbrumm kaum noch messbar sein. Stellen Sie das zum Messen verwendete Oszilloskop auf ca. 1 V/Division ein und bewegen Sie einen Magneten (z.B. aus einem Lautsprecher) von Hand in einem Abstand von ca. 2 m von der Spule etwa 1 bis 2 Mal pro Sekunde hin und her. Es müssten nun deutliche Ausschläge bis zur Clippgrenze zu beobachten sein. Auch bei nicht bewegtem Magneten müsste nun eine leichte Welligkeit (wenn Ihr Heim nicht abseits von einem Wohngebiet liegt) zu verzeichnen sein. Wählen Sie den Widerstand R16 (eventuell Poti einsetzen) nun so, dass die Spitzenwerte dieser Welligkeit nicht größer als plus-minus 2,5 Volt betragen und damit unter der Begrenzung für den A/D-Wandler liegen.

Mit hoher Wahrscheinlichkeit handelt es sich hier um die vom benachbarten Versorgungstrafo Ihres Wohngebietes (bis über 100 m Entfernung) ausgehenden ELF-Wellen.

Schließen Sie den Ausgang des Empfängers an den beschriebenen Offsetkompensator an. Der Empfänger kann, wie bereits erwähnt, vom Netzteil des Kompensators mit versorgt werden, da es dafür ausgelegt wurde.

Prüfen Sie, ob am Ausgang des Kompensators ein Signal zwischen 0 und maximal 5 V erscheint. Schließen Sie nun die komplette Hardware über USB an den PC an und starten Sie das Datalogger-Programm. Dort müssten nun die zuvor im Oszilloskop beobachteten Signale erscheinen.

Nach einer Aufnahme von mindestens einer Stunde können Sie die gespeicherte Datei in ein Analyseprogramm laden oder mit ca. 150 bis 200-fach beschleunigtem Tempo abhören. In der FFT-Analyse sind, je nachdem, wo Sie wohnen, auffällige Muster erkennbar, die sehr unterschiedlich ausfallen und sich im Laufe eines Tages wiederholen können. Gelegentlich tauchen auch Muster auf, die einmalig sind und sich gar nicht oder erst Monate später wiederholen. Oft können diese selten erscheinenden Muster so stark sein, dass der voreingestellte Aussteuerungsbereich nicht ausreicht. In diesem Falle muss noch einmal nachjustiert werden. Auch wenn Sie nicht in der Nähe einer Bahnlinie wohnen, können an vielen Orten mehrmals am Tag unregelmäßig für mehrere Minuten sehr starke Sinuswellen von 16 2/3 Hz registriert werden.

Auch bei bis zu 6 km entfernter Bahnlinie sind die 16 2/3 Hz der Bahnversorgung als durchgehende Linei gut zu erkennen. In manchen Fällen zeigt sich auch die "Schumann Resonanz" im Spektrum, und natürlich sind auch die 50 Hz des Haushalts-Wechselstroms als schwache Linie am oberen Rand zu erkennen.

Da die oben beschriebenen Signale bzw. ihre Muster bisher nirgendwo dokumentiert sind und in der Fachwelt völlig unbekannt zu sein scheinen, ist ihre Beobachtung immer wieder spannend. Sie verstecken sich sozusagen "hinter" dem Nutzbrumm und außerdem "in der Zeit", da sie nur in gerafften Langzeitaufnahmen und nicht bei direkter Beobachtung erkennbar sind. Sie zeigen gelegentlich sogar Merkmale einer digitalen Kommunikation (sinusförmiger Träger mit regelmäßiegn Frequenzsprüngen), so wie bei der RTTY-Fernschreibübertragung auf Kurzwelle.
Anhand der extrem niedrigen Frequenz erscheint dies umso merkwürdiger. Die Signale müssen lokalen Ursprungs sein, da sie an jedem Trafo völlig unterschiedlicher Natur sind und der von vielen vermutete Empfang von Signalen für U-Boote daher ausscheidet.

Die Signale sind auch, mit Variationen, als schwache Erdströme zu empfangen. Stecken Sie dazu zwei ca. 20 cm lange Metallspieße in den Rasen Ihres Grundstücks. Als Abstand zwischen den Spießen (Elektroden) genügt 1 m.

Die Spieße werden über ein (nicht abgeschirmtes) Kabel mit einem 1:1 Übertrager verbunden, dessen Sekundärseite statt der Spule an den Empfängereingang angeschlossen wird. Diese Maßnahme (galvanische Trennung) ist notwendig, da es sonst zu unerwünschen oder gar gefährlichen Nebeneffekten durch Pozenzialdifferenzen (bis zu 230 V) zwischen Hausversorgung und äußerem Erdbereich kommen kann. Der verwendete Trafo muss jedoch einen linearen Frequenzgang bis unter 1 Hz aufweisen, wodurch er sehr teuer sein kann (beim Prototyp wurde ein Exemplar von Jensen mit guten Resultaten verwendet).

Ob die Erdströme durch die Trafos erzeugt werden, ober ob die Trafos diese Erdströme abstrahlen, ist bisher noch ungeklärt.

Bild 10 zeigt ein extrem starkes Elektroden-Signal aus dem Jahre 2011 (FFT versus Time), das aus wechselnden Sinustönen unter 6 Hz besteht und sich beim beschleunigten Abspielen wie Flötenspiel anhört. Das Signal erscheint bis heute im Garten des Projket-Autors, wobei sich der Signalpegel wesentlich abgeschwächt hat. Die Melodiefolge ändert sich von Stunde zu Stunde. In einigen hundert Metern Entfernung vom Grundstück das Autors ist das Signal nicht mehr nachweisbar.

Damit sind wir am Ende dieses Projektes angekommen. Die Beschreibung ist umfangreicher geworden, als ich ursprünglich dachte - aber schließlich handelt es sich ja um ein Projekt, und ein Projekt soll nicht zuletzt auch dazu dienen, Leser zur Weiterentwicklung vorgegebener Gedanken zu motivieren. Ich würde mich freuen, wenn mir dies gelungen wäre.

 

Nachtrag: Spektrum Analyzer

Damit man die mit dem Datalogger aufgenommenen Daten nachträglich in Ruhe anschauen und analysieren kann, folgt hier noch ein bescheidener Spektrum-Analyzer, den ich ebenfalls in Processing programmiert habe. VB wäre einfacher gewesen, aber Processing ist unschlagbar, was die Rechengeschwindigkeit und die Grafik angeht.

Hier eine kurze Bedienungsanleitung:

Nach einem Klick auf "Load file" erscheint ein Browserfenster im Windows Look, mit dem Sie die gewünschte 16-Bit-Mono-Wav-Datei laden können.

Nach dem Laden wird das komprimierte Zeitsignal der Datei im oberen Fenster dargestellt. Im unteren Fenster sehen Sie einen Ausschnitt, der der Stelle entspricht, an der sich der rote, per Maus verschiebbare Skalenstrich befindet.

Mit den Buttons "left-right" können Sie bis zu 4000 Sampels von dem per Skalenstrich gewählten Wert nach links und rechts shiften.

Mit "Zoom Timesignal" haben Sie die Möglichkeit, im unteren Fenster einen größeren Ausschnitt aus dem obigen Signal darzustellen. Die Ausschnittgröße ist vorerst noch nicht veränderbar. Mit "1:1 View" kehren Sie in den Modus "Pro Pixel ein Sample" zurück.

Mit den nächsten vier Buttons können Sie für das obere und untere Bildfenster unabhängig wählen, ob die FFT-versus-Time Analyse oder das Zeitsignal dargestellt wird.

Ist der Button "Total FFT" aktiviert, so erscheint im oberen Fenster das Spektrum, das teilweise von einem transparenten Zoom-Fenster überdeckt wird. Wenn Sie dieses Fenster per Maus verschieben und die Maustaste loslassen, wird der vom transparenten Rechteck bestimmte Ausschnitt im unteren Fenster im Zoom angezeigt. Der Zoombereich (Breite des transparenten Fensters) kann mit "Zoom Value" verändert werden. Dies wäre theoretisch auch per Maus möglich, ist aber mit Processing wesentlich komplizierter als mit VB (ehrlich gesagt bin ich froh, dass es so funktioniert wie es ist).

Achtung: Das im unteren Bildfenster gezeigte Analyse-Ergebnis wird jedesmal nach Loslassen der Maustaste neu berechnet. Dies kann, je nach Einstellung der Tasten weiter unten, zwischen 0,5 und 2 Sekunden dauern, so dass man das Rechteck (die Maustaste) erst loslassen sollte, wenn es sich an der endgültigen Position befindet.

Mit "Brightness" kann für die oben und unten gezeigten Analysen unabhängig voneinander die Helligkeit eingestellt werden. Dies ist notwendig, da man je nach Pegel der untersuchten Datei unterschiedliche Werte für die Analyse-Ergebnisse erhält.

Mit "Log Lin" wird im unteren Fenster zwischen logarithmischer und linearer Anzeige der Analyse-Ergebnisse umgeschaltet, was unter Umständen zu einem besseren Kontrast führen kann. Hier gibt es jedoch kein Patentrezept, so dass mit den Buttons "Log-Gain" und "Log-Offset" und mit viel Feingefühl die individuell optimale Einstellung gefunden werden muss.

Mit "Log-Gain" wird die Logarithmuskurve in Y-Richtung gedehnt; mit "Log-Offset" in die gleiche Richtung verschoben.

Zur Optimierung der Darstellung dienen auch die untersten Buttons: Hier kann man die Farbpalette zur Anzeige der Ergebnisse "rotieren" lassen, oder besser gesagt "zyklisch verschieben". Auch hier geht Probieren über Studieren.

Die restlichen Buttons dienen zur Veränderung der Analyseparameter. Ihre genaue Beschreibung würde hier zu weit führen. Vieles lässt sich für Programmierer unter den Lesern auch aus dem Code herauslesen.

SF bedeutet: "Sample Frequency". Mit diesen Tasten wird ein Downsampling berechnet und es werden jeweils nur der zweite, dritte, vierte oder achte Samplewert berücksichtigt. Dies fürht zur einer Dehnung der Anzeige in Y-Richtung.

Mit Resolution und SpecSize wird die in der FFT-Schleife berücksichtigte Datenmenge verändert. Resolution 4 und SpecSize 4 bringen die schärfsten Ergebnisse - aber die Berechnung dauert hier doppelt bis vier Mal so lange wir bei der niedrigsten Stufe.

Achtung: Das Programm ist noch nicht ausgereift und könnte unentdeckte Bugs enthalten, die bei ganz bestimmten, bisher noch nicht ausprobierten Konstellationen zum dessen Absturz führen können.

Zum Beispiel scheinen sich einige Dateien auf Grund ihrer internen Struktur einfach nicht Laden zu lassen: Es erscheint eine Fehlermeldung im Processing Ausgabefeld.

Geplant ist noch eine Möglichkeit zum Korrigieren von Offset-Anteilen in den geladenen Dateien und zum Vergößern der Amplituden durch Multiplikation der einzelnen Werte mit einem konstanten Wert. Auch eine (bereits in VB funktionierende) Anti-Scratch Routine gegen störende Spannungsspitzen in der Aufnahme ist geplant).

Was die Interpretationen der Analyse-Ergebnisse angeht: Hier wird die Erfahrung des Lesers auf diesem Gebiet vorausgesetzt, da eine Erläuterung an dieser Stelle zu weit führen würde.

Auf eine Fensterung wurde übrigens verzichtet, da die Ergebnisse in einer FFT versus Time Farbdarstellung kaum in Erscheinung treten.

Zugegeben: Der Quellcode des Programms ist "organisch" gewachsen und daher nicht optimal strukturiert. Ich hoffe, dass sich interessierte Leser dank meiner Kommentare trotzdem nicht darin verirren.

 

 

 

The publishing of the English translations depends on the available time of the author.

 

English version

Ready to use hard and software to save frequencies from zero up to 50 Hz with FFT-vs-Time analysis and application example (elf-vlf receiver).

Summary / project description

Commercial software to save audio signals from the input of your PC soundcard is available at low prices and in a great variety. In most of the cases however the user has no real time access to the entering audio data. He cannot influence it by self programmed software and so cannot display real time data e.g. as time signal or spectrum versus time analysis.

A solution may be the well known Arduiono microcontroller board. How to achieve first simple results with the on-board A/D-converter is among others already described by the Elektor-Arduino-book of Günter Spanner.

As I am looking since a long time for a solution to save and process real time 16 Bit audio data on my PC, the quality of the Arduino-Converter was not sufficient for my purposes.

After searching for a while in the web, I found a good solution at the “adafruit” website. This company offers a low cost 16-bit A/D-converter for approximately 13 Euro, which is documented especially for the cooperation with Arduino under the following webpage:

 (http://learn.adafruit.com/adafruit-4-channel-adc-breakouts/assembly-and-...).

After four weeks of experimenting and programming I succeeded in developing a reliable hard and software that I will introduce in the following weeks with this project.

The only limitation is the relatively low sample rate of 106 Hz determined by the adafruit converter, which reduces the frequency limit to a maximum of about, to be precisely, 53 Hz.

This project also includes a description of the most important features of the appropriate software, which was written in Processing, an easy to learn programming language for every experienced programmer. Among others, this software also contains a realtime spectrum analyzer which shows a color spectrum versus time.

In addition, I will publish the circuit diagram of a device which was the reason for the development of this data logger: A unit consisting of a high quality lowpass filter and a high gain amplifier which is capable to detect and separate signals from (nearly) zero to 25 Hz. In this frequency range, a number of signals of magnetic waves changing from place to place and from time to time can be received, which also are present as ground currents of extremely low level. These signals until now had neither been documented nor discussed scientifically and partly show characteristics of digital data transfer in a frequency range that normally is not used for this purpose (sometimes below 5 Hz). These signals can only be detected if they are saved over a long time (some hours at least) and then played back 200 times faster or analyzed by an FFT vs Time anlysis.

Maybe some readers will get interested in doing their own low frequency research by this project. This project may also be useful in all cases where room temperatures, weather data or other physical measurement data have to be saved and analyzed.

Pictures:

1. User interface with big signal display and history window

2. Front view of the wooden housing of the combination of datalogger and low-frequency receiver.

3. Top view of opened case with Arduino, adafruit converter, receiver- and power unit.

4. User interface with opened spectrum window, displaying a typical received squarewave signal of 1.6 Hz

 

Part II

Hard and Software Preconditions

The hard and software presented in this project has been checked until now on a Windows-7 Desktop-PC (64 Bits), a Windows-7 notebook (32 Bits), a Windows-7 netbook and a Windows-Vista notebook. On an old notebook from 2003 with Windows-XP, the Arduino software didn’t run. Until now I couldn’t find out the reason.

In this project I use the Arduino-version “UNO”.
The ADS 1115 from adafruit is used as A/D converter.

On the computer where this project should run, the complete Arduino and Processing software as well as an adafruit library file has to be installed additionally.

The process of the installation of the A/D library and the Arduino upload software will be explained in a later part (please wait for part V). The Arduino software can be downloaded from the Arduino website. There is one version for all Windows versions. This project is using the version with the number 1.0.5. Download-source:   http://arduino.cc/en/Main/Software

The Processing-Software is available under:  http://processing.org/

The adafruit libraries can be downloaded via the link in the first chapter .

The complete software, once downloaded, can also be copied to other computers via USB stick and then can be installed there without the need of an extra individual download.

Installing the software of this project may sound a little complicated at the first moment, but, as an example, the download of the complete .net framework software for Visual Basic users takes much more time than copying and installing all the files needed for this project.

To be continued.

Read the full post
Show less
Images
Grafische Benutzeroberbfläche mit großem Signaldisplay und History-Fenster
Frontansicht des kombinierten Receiver-Dataloggers
Top-Ansicht des geöffneten Gehäuses
Geöffnetes FFT-Analysefenster mit empfangenem 1,6 Hz Rechtecksignal
Bild 8: Zeitsignal im laufenden Testprogramm
Bild 10: Beispiel eines empfangenen Signals unter 6 Hz
Bild 11: Analyzer mit Anzeige: FFT-versus-Time Analyse
Bild 12: Analyzer mit Anzeige: Zeitsignal
Bild 13: Anschluss des Trenntrafos
Bild 14: Ringförmige Antennenspule
Schematics
Software
Other

Loading comments...