Das Datenlogger-Programm

Ich stelle hier kein fertiges Programm vor, sondern den aktuellen Status, der bisher nur einige Grundfunktionen beinhaltet. Darauf möchte ich weiter aufbauen und sowohl die Funktionalität als auch die Bedienbarkeit erweitern und verbessern.


Zu den jetzigen Grundfunktionen gehören:

  • Übernehmen der Messwerte von bis zu 10 Messstellen vom Funkempfänger über I2C-Schnittstelle in einem definierten Zyklus
  • Visualisierung der aktuellen Messwerte am LCD-Display
  • Vorgabe des Speicherzykluses (Grundeinstellung 300 s)
  • Speicherung der vom Funkempfänger übernommenen Daten mit Zeitstempel auf SD-Karte
  • Auslesen aller gespeicherten Daten pro Messung von der SD-Karte und Ausgabe am Seriellen Monitor
  • Auslesen der letzten 101 Messwerte pro Messung von der SD-Karte und Anzeigen einer Trendkurve am LCD-Display
  • Abfragen der Trendkurvenwerte (Messwert, Datum, Uhrzeit) mit Hilfe eine Leselinie am LCD Display. Die Leselinie wird mit Hilfe eines Potentiometers am LCD-Display bewegt


Programmergänzungen beim Funk-Empfänger:

Da, wie gesagt, der Datenlogger die Messdaten per I2C-Schnittstelle vom Funk-Empfänger abholt, sind beim Funk-Empfangsprogramm Version 2.0 Programmänderungen erforderlich. In der neuen Version 2.1 (siehe Empfangsprogramm) sind diese Ergänzungen bereits enthalten, sowie auch eine Zeitüberwachung für die ankommenden Funk-Sendetelegramme. Durch diese Überwachung soll in Zukunft bei Ausbleiben von Sendetelegrammen der Datenlogger darauf reagieren können, z.B. durch Abspeichern eines Nichtverfügbarkeitsbits oder eines definierten Zahlenwertes (z.B. -9999,9999).


Verwendete Libraries:

Neben den Standard-Libraries (Wire und SPI) verwendet das Programm noch folgende Libraries:

SD: Im Gegensatz zur Standard-SD-Lib können hier bei der Initialisierung die für die SPI-Schnittstelle zu verwendenden Pins angegeben werden. Da der Mega standardmäßig die Pins 50 - 53 dafür nutzt, das Data Logging Shield aber die Uno-Pins 10 - 13, sieht daher die Initialisierung folgend aus:

const byte CS = 10;
pinMode(CS, OUTPUT);
SD.begin(CS, 11, 12, 13);

Da die neue SD-Library aber den gleichen Namen nutzt, wie die Standard-Lib, muss die Standard-Lib vorher deaktiviert werden. Zu finden ist die Standard-SD-Lib im Ordner "libraries" (nicht im Sketchbook-Ordner), dort, wo euer Arduino-System gespeichert ist. Auf meinem Rechner ist die Standard-SD-Lib z.B. unter "C:\Program Files (x86)\Arduino\libraries" gespeichert. Um sie zu deaktivieren, lösche ich sie nicht, sondern verschiebe sie dort in einen neu angelegten Ordner "SD_alt".

Werden anstelle eines Data Logging Shields z.B. Breakout Boards für SD-Karte und RTC verwendet, kann natürlich die SD-Standard-Lib verwenden werden. Die Verdrahtung des SD-Breakour Board muss dann aber auf die Mega-Pins 50 - 53 geändert werden.

Metro: Metro steuert die zyklische Wiederholung von Vorgängen durch vorzugebende Zykluszeiten. Metro unterbricht aber nicht nach Ablauf der Zykluszeit, wie bei einer Interruptanforderung, das laufende Programm um in ein Unterprogramm zu verzweigen. Ob die Zykluszeit abgelaufen ist, muss regelmäßig z.B. innerhalb der Loopschleife abgefragt werden. Metro ist daher nicht für "zeitkritische" Aufgaben geeignet, denn wenn das Programm gerade mit anderen Dingen beschäftigt ist, erfolgt keine Unterbrechung des laufenden Programms. Ich verwende Metro sehr gerne für zeitunkritische Programme, in Worten etwa so: "Mach diese Aufgabe alle 200 Millisekunden, falls du gerade Zeit dazu hast, sonst später ...".

RTClib: RTClib verwende ich zur Kommunikation mit der hier verwendeten "Real Time Clock" RTC DS1307.

U8glib: Diese Library verwende ich zur Ansteuerung meines 128x64 Graphik-LCD-Displays ST7920. Diese Library ist sehr umfangreich und sehr gut dokumentiert. Leider wird der erzeugte Programmcode sehr groß und auch die Übersetzungszeit des Sketch dauert ein bisschen länger als sonst.

Links zum Herunterladen der Libraries SD, Metro, RTCLib und U8glib findet ihr hier: Fremd-Libraries

MyKeypad_I2C: Das ist meine Library für die I2C-Ansteuerung von Matrixtastaturen bis 4x4 Tasten, wie ich sie hier vorgestellt habe: 16er-Tastatur mit I2C


Speicherung der Messdaten auf SD-Karte:

Die Messwerte der bis zu 10 Messstellen werden je in einer Datei mit der Bezeichnung MWERTx.TXT gespeichert (x ... Messstellennummer). Damit die Speicherung durch den Datenlogger erfolgt, müssen die Dateien zuerst mit einem Texteditor eingerichtet und die Kopfzeile gespeichert werden.

Die Kopfzeile muss dabei folgende Form haben: "Messstellenname;Einheit;Untergrenze;Obergrenze;",

also z.B. wie im nachfolgenden Bild für Messstelle 6: "Luftdruck;mbar;920;1000;". Die Unter- und Obergrenze definieren dabei den Anzeigebereich auf der y-Achse für die Trendanzeige der Messwerte am Display.

Ist die Datei für eine Messstelle auf der SD-Karte nicht eingerichtet erfolgt auch keine Messwertspeicherung. Der Datenlogger selbst legt keine Datei neu an, sondern speichert Messwerte nur in vorhandene Dateien.

Die Datenspeicherung durch den Datenlogger erfolgt dann zeilenweise in der Form "Tag.Monat.Jahr;Stunde:Minute:Sekunde;Messwert;"


  Messwertdatei MWERT6.TXT mit Kopfzeile und Messwerteinträge


Anzeigen am Graphik-Display:

Im Übersichtsbild werden die Messwerte der 10 Messstellen, die vom Funkempfänger über die I2C-Schnittstelle angefordert werden, angezeigt. Die Speicherung auf SD-Karte ist gerade ausgeschaltet und kann über die Tastatur eingeschaltet werden.



Die Trendkurve kann über die Tastatur für jeden der 10 Messstellen ausgewählt werden und zeigt in Kurvenform die letzten 101 Messwerte, die auf der SD-Karte gespeichert sind und als Digitalwert den letzten Messwert (Zeitpunkt t = 0) mit Datum und Uhrzeit der letzten Übertragung vom Funkempfänger. Der Messstellenname, die Einheit des Messwertes und die Skalierung der y-Achse (-10 bis +30 Gr. Celsius) wird aus der Kopfzeile der gespeicherten Datei entnommen.


Mit der Leselinie LL (im Bild befindet diese sich auf dem Wert -52) können der Messwert mit dazugehöriger Datums- und Uhrzeitangabe abgefragt werden. Zur Unterscheidung dieser Werte vom Letztwert werden diese nun in dunkler Schrift vor hellem Hintergrund dargestellt. Die Leselinie selbst kann mit dem Potentiometer über den Bereich vom Zeitpunkt 0 bis -100 bewegt werden. Welche Zeitspanne dieser Bereich darstellt, hängt davon ab, wie im Programm der Speicherzyklus vorgegeben worden ist. In Zukunft möchte ich den Speicherzyklus über die Tastatur einstellbar machen.


Hier kann das Programm DatenloggerMega in der Version 1.3 herunter geladen werden.

Leider kann ich hier keine "ino"-Files hochladen, daher zum Verwenden des Programms ".txt" aus den Dateinamen entfernen und in einem neuen Verzeichnis mit dem Namen "DatenloggerMega" speichern.

DatenloggerMega.ino.txt


Zur Bedienung des Programms verwende ich eine 16er-Tastatur mit nachfolgenden Rückgabewerten (siehe dazu 16er-Tastatur bzw. 16er-Tastatur mit I2C und ist derzeit mit folgenden Funktionen belegt:


16er-Tastatur       Rückgabewerte

  7   8   9   A             7    8    9  10

  4   5   6   B             4    5    6  11

  1   2   3   C             1    2    3  12

  0   F   E    D            0  15  14  13


Taste    Funktion

   A       Datenspeicherung EIN/AUS

   B n    Ausgabe aller Messwerte am Seriellen Monitor der Messstelle 1 bis 10 (n = 1,2,3,...0)

   C n    Auswahl der Messstelle zur Anzeige der Trendkurve 1 bis 10 (n = 1,2,3,...0)

   D       Enter und/oder Anzeige des Übersichtsbildes mit allen 10 Messstellen

   E n    Anzeige und Ändern des Speicherzyklus (n = Zykluszeit in Sekunden)

   F       Backspace bei Zahleneingabe


Zurück zum Datenlogger


Fortsetzung folgt ....