Unter der Bezeichnung "GY-Openlog Cleanflight Naze32 F3 Blackbox Recorder-Modul" wird eine kleine
Platine verkauft, die man als Datenlogger verwenden kann, z.B. im Modellbau oder auch in verschienen Projekten
mit dem Arduino, ESP32 oder Raspberry Pi.
"OpenLog" ist ein Open-Source-Datenlogger, der über eine einfache, serielle Verbindung arbeitet.
Es verwendet einen ATmega328, der mit einer Taktung von 16MHz betrieben wird. Alle aufgezeichneten Daten
werden auf einer (nicht enthaltenen) Micro-SD-Karte gespeichert.
Verwendeter Microcontroller (onboard): | ATmega328P (vorprogrammiert) |
---|---|
Betriebsspannung: | 3,3V bis 5V |
Datenspeicherung: | Micro-SD-Karte (64MB bis 32GB; FAT16/32) |
Unterstützte Datenformate: | ASCII-Text, CSV, binär |
Schnittstelle: | UART (seriell) |
Baud-Raten: | 300bps bis 115200bps (default: 9600bps) |
Stromaufnahme: |
Leerlauf: 2-3mA Betrieb: 10-20mA |
Abmessungen: | 23,1mm × 27,6mm |
Gewicht: | 2,5g |
Primäre Schnittstelle (zum Logger von Daten) ist eine serielle UART-Schnittstelle mit 6 Anschlüssen. Dazu kommt noch eine SPI-Schnittstelle mit 4 Anschlüssen, die verwendet werden können, um den Bootloader des OpenLog neu zuprogrammieren.
Es gibt zwei Status-LEDs auf dem OpenLog:
Orange
: Zeigt an, ob Daten empfangen werden oder bei der seriellen Kommunikation Fehler auftreten.
Grün
: Diese LED blinkt, wenn die SPI-Schnittstelle aktiv ist. Sie blinkt, wenn
OpenLog 512 Bytes auf der microSD-Karte aufzeichnet.
OpenLog kann direkt über die SD-Karte konfiguriert werden. Dazu wird auf der Hauptebene der Dateistruktur
der SD-Karte eine Datei mit dem Namen config.txt
benötigt. Diese kann entweder manuell erstellt
werden, oder liegt bereits vor, wenn OpenLog auf die SD-Karte zuvor geschrieben hat. Über diese Datei können
die folgenden Einstellungen gemacht werden (es gibt keine nicht sichtbaren oder binären Werte und jeder Wert
ist durch ein Komma getrennt):
baud
: Die Baudrate für die Kommunikation (default: 9600bps). Kompatible Werte mit der
Arduino-IDE sind 2400, 4800, 9600, 19200, 38400, 57600 und 115200. Es können andere Baudraten verwendet
werden, können dann aber nicht über den seriellen Monitor der Arduino-IDE mit OpenLog kommunizieren.
escape
: Der ASCII-Wert (im Dezimalformat) des Escape-Zeichens. 26 ist STRG+z
und der Standardwert. 36 ist $
und ein häufig verwendetes Escape-Zeichen.
esc#
: Die Anzahl der erforderlichen Escape-Zeichen. Der Standardwert ist 3, es muss also
das Escape-Zeichen 3× gedrückt werden, um in den Befehlsmodus zu wechseln. Akzeptable Werte sind
0 bis 254. Wird 0 gesetzt, wird die Überprüfung auf Escape-Zeichen vollständig deaktiviert.
mode
: Systemmodus. OpenLog startet standardmäßig im Modus "Neues Protokoll" (=0).
Akzeptable Werte sind 0 = Neues Protokoll, 1 = Sequentielles Protokoll, 2 = Befehlsmodus.
verb
: Ausführlicher (verbose) Modus. (default: 1, d.h. aktiviert)
echo
: Echomodus (default: 1, d.h. aktiviert). Im Befehlsmodus werden Zeichen standardmäßig
angezeigt. Das Deaktivieren ist praktisch, wenn Fehler behandelt werden müssen und verhindert werden
soll, dass gesendete Befehle an OpenLog zurückgegeben werden.
ignoreRX
: Notfallübersteuerung. Normalerweise führt OpenLog einen Notfallreset durch, wenn
der RX-Pin während des Einschaltens auf LOW gezogen wird. Wird dieser Wert auf 1 gesetzt, wird die
Überprüfung des RX-Pins während des Einschaltens deaktiviert. Dies kann für Systeme hilfreich sein, die
die RX-Leitung aus verschiedenen Gründen auf LOW ziehen. Wenn die Notfallübersteuerung deaktiviert ist,
kann das Gerät nicht auf auf 9600bps zurückgesetzt werden und die Konfigurationsdatei ist die
einzige Möglichkeit, die Baudrate zu ändern.
Bei der Auslieferung werden folgende Werte in die config.txt
geschrieben:
9600,26,3,0,1,1,0
baud,escape,esc#,mode,verb,echo,ignoreRX
Wie im folgenden Bild zu sehen, schreibt OpenLog -nebst der config.txt
- seine Log-Dateien
in die Hauptebene der SD-Karte. Dabei entstehen standardmäßig Dateien mit den Namen LOGxxxxx.txt.
Um Daten direkt vom PC zu protokollieren, kann mit einem USB-TTL-Konverter eine Verbindung hergestellt werden.
Openlog | CP2104-Konverter |
---|---|
BLK | GND |
VCC | 3V3 |
TXO | RXD |
RXI | TXD |
GRN | DTR |
Sobald der USB-TTL-Konverter per USB-Kabel angeschlossen wird, sollte der PC (Windows) automatisch ein neues serielles Gerät erkennen. Dies kann im Geräte-Manager überprüft werden:
Nun kann man entweder über ein Terminal-Programm (hier: PuTTY) eine Verbindung zum entsprechenden seriellen Port gemacht werden. Alle geschriebenen Zeichen werden dann protokolliert und auf der SD-Karte des OpenLog gespeichert:
Alternativ kann auch über die PowerShell von Windows der serielle Port angesprochen werden:
Will man Daten über den Arduino an OpenLog senden, so ist dies einfach über die serielle Schnittstelle des Arduino möglich. Für das folgende Experiment wird ein Arduino Nano dazu verwenden, die Daten von dem Luftdruck-Sensor HX710B und dem Temperatur- und Luftfeuchtigkeitsensor DHT22 an OpenLog zu senden.
Wie HX710B und DHT22 mit dem Arduino verbunden werden, kann aus den entsprechenden Artikeln entnommen werden. Die Anschlüsse zwischen Arduino und OpenLog sind wiefolgt:
Openlog | Arduino Nano |
---|---|
BLK | GND |
VCC | 3V3 |
TXO | RXD |
RXI | TXD |
GRN | DTR |
#include <Wire.h>
#include "DHT.h"
#define DHTTYPE DHT22
#define PIN_DHT22 7
#define PIN_OUT 2
#define PIN_SCK 3
DHT dht(PIN_DHT22, DHTTYPE);
void setup()
{
dht.begin();
pinMode(PIN_OUT, INPUT);
pinMode(PIN_SCK, OUTPUT);
Serial.begin(9600);
Serial.println("Pressure;Humidity;Temperature");
}
void loop()
{
static float humidity, temperature;
// wait for the current reading to finish
while (digitalRead(PIN_OUT)) {}
// read 24 bits
long result = 0;
for (int i = 0; i < 24; i++) {
digitalWrite(PIN_SCK, HIGH);
digitalWrite(PIN_SCK, LOW);
result = result << 1;
if (digitalRead(PIN_OUT)) {
result++;
}
}
result = result ^ 0x800000; // get the 2s compliment
// pulse the clock line 3 times to start the next pressure reading
for (byte i = 0; i < 3; i++) {
digitalWrite(PIN_SCK, HIGH);
digitalWrite(PIN_SCK, LOW);
}
humidity = dht.readHumidity();
temperature = dht.readTemperature();
Serial.println(String(result) + ";" + String(humidity) + ";" + String(temperature));
delay(1000);
}
Pressure;Humidity;Temperature
7762590;59.30;23.20
7763721;59.30;23.20
7764297;59.40;23.20
7765583;59.40;23.20
7763130;59.40;23.20
7760916;59.40;23.20
7762534;68.60;23.30
7762964;68.60;23.30
7765287;99.70;23.90
7764167;99.70;23.90
7765315;99.90;23.90
7766009;99.90;23.90
7765996;99.90;23.80
7766569;99.90;23.80
7766955;99.90;23.70
7766084;99.90;23.70
7765939;99.90;23.60