Speichern von Arduino-Sensordaten in eine Textdatei

34

Wie kann ich Daten, die von einem Sensor abgerufen wurden, in einer Textdatei auf dem Computer speichern?

desNotes
quelle

Antworten:

30

Sie können die Sensordaten mit serial-lib auf die serielle Schnittstelle schreiben und ein kleines Verarbeitungsprogramm schreiben, das die Daten von der seriellen Schnittstelle liest und in eine Datei schreibt.

im arduino code initialisiere die serial lib in der setup methode

Serial.begin(9600);

und schreiben Sie Ihre Sensorwerte mit auf die serielle Schnittstelle

Serial.println(value);

in Ihrer Loop-Methode

Verwenden Sie auf der Verarbeitungsseite einen PrintWriter, um die von der seriellen Schnittstelle gelesenen Daten in eine Datei zu schreiben

import processing.serial.*;
Serial mySerial;
PrintWriter output;
void setup() {
   mySerial = new Serial( this, Serial.list()[0], 9600 );
   output = createWriter( "data.txt" );
}
void draw() {
    if (mySerial.available() > 0 ) {
         String value = mySerial.readString();
         if ( value != null ) {
              output.println( value );
         }
    }
}

void keyPressed() {
    output.flush();  // Writes the remaining data to the file
    output.close();  // Finishes the file
    exit();  // Stops the program
}
Nikolaus Gradwohl
quelle
Wohin sollte der Code auf der "Verarbeitungsseite" gehen - in demselben Arduino-Code oder einem separaten C-Skript?
Ulad Kasach
1
In einem separaten Verarbeitungsskript wird die Verarbeitung nicht in C, sondern in Java kompiliert
Nikolaus Gradwohl
@UladKasach "Processing" ist eine plattformübergreifende Programmierumgebung. Tatsächlich ist es die Programmierumgebung mit dem dümmsten Namen der Welt.
Scott Seidman
9

Eine weitere Möglichkeit besteht darin, einen SD-Kartenleser / -schreiber zu verwenden und Ihre Datei auf eine SD-Karte zu schreiben. Wenn Sie mit dem Sammeln der Daten fertig sind, tauschen Sie die SD-Karten mit Ihrem Workstation-Computer aus. Mit diesem Ansatz können Sie Ihr Projekt unabhängig von einem Computer ausführen und große Datenmengen nichtflüchtig speichern.

Craig Trader
quelle
6

Das Programm gobetwino protokolliert Sensorwerte von einem Arduino mit minimalem Aufwand in eine Textdatei oder eine Tabelle. Es kann auch Dinge auf dem Computer automatisieren, Zeitstempel hinzufügen (so dass Sie sie nicht in das Arduino programmieren müssen) usw.

Alt-Text

Endolith
quelle
5

Die einfachste Methode besteht darin, die serielle Bibliothek zu verwenden und an diese auszugeben. Anschließend können Sie die Ausgabe mit einem Terminalprogramm in eine Textdatei umwandeln. Hyperterminal ist unter Windows, Teraterm unter Linux und Z Term unter OS X verfügbar.

Melanie

Cyberspice
quelle
4

Wenn Sie Sensordaten direkt in eine Datei auf Ihrem Computer schreiben möchten, ohne die Ausgabe aus dem Fenster des seriellen Monitors kopieren und einfügen zu müssen, versuchen Sie, den Datenstrom direkt von der seriellen Schnittstelle aus zu lesen (was der serielle Monitor sowieso tut) vermuten). Auf Mac / Linux machen Sie so etwas wie:

cat /dev/cu.usbmodem1d11 

Gott weiß, wie das bei Windows-Computern aussieht.

garageàtrois
quelle
1
Wahrscheinlich möchten Sie auch jedem Sensorwert Zeitstempel zuordnen. In diesem Fall müssen Sie diesen catBefehl wahrscheinlich durch eine Art Skript ersetzen .
Garageàtrois
3

Sie können ein Python-Skript erstellen, um die serielle Schnittstelle zu lesen und die Ergebnisse in eine Textdatei zu schreiben:

##############
## Script listens to serial port and writes contents into a file
##############
## requires pySerial to be installed 
import serial

serial_port = '/dev/ttyACM0';
baud_rate = 9600; #In arduino, Serial.begin(baud_rate)
write_to_file_path = "output.txt";

output_file = open(write_to_file_path, "w+");
ser = serial.Serial(serial_port, baud_rate)
while True:
    line = ser.readline();
    line = line.decode("utf-8") #ser.readline returns a binary, convert to string
    print(line);
    output_file.write(line);
Ulad Kasach
quelle
1

Ich fand es einfacher und sicherer, ein Python-Skript zu verwenden. Normalerweise benutze ich diese, die auf der seriellen Bibliothek basiert . Es ist sehr üblich, auch das datetime-Modul zu verwenden, um die Zeitstempel hinzuzufügen:

import serial
from datetime import datetime

sensor = "DH11"
serial_port = '/dev/ttyACM0'
baud_rate = 9600
path = "%s_LOG_%s.txt" % (str(datetime.now()), sensor)
ser = serial.Serial(serial_port, baud_rate)
with open(path, 'w+') as f:
    while True:
        line = ser.readline()
        f.writelines([line.strip(), " t = %s \n " % (datetime.now())])
GM
quelle
0

Der nächste Schritt besteht darin, entweder das Ethernet-Shield oder so etwas wie ein WIZ810MJ-Board zu verwenden und Ihr Arduino über das Internet zu aktivieren. Sie können dann Daten darauf schreiben und sie an einen Webserver senden, um sie zu sortieren. Das mache ich in meinem Vivarium-Temperaturmonitor .

Cyberspice
quelle