Speichern von Arduino-Sensordaten in einer Textdatei

Wie kann ich von einem Sensor abgerufene Daten in einer Textdatei auf dem Computer speichern?

Antworten (8)

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 initialisieren Sie die serielle Bibliothek 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
}
Wo sollte der Code auf der "Verarbeitungsseite" hingehen - im selben Arduino-Code oder in einem separaten C-Skript?
In einem separaten Verarbeitungsskript wird die Verarbeitung nicht in C, sondern in Java kompiliert
@UladKasach "Processing" ist eine plattformübergreifende Programmierumgebung. Tatsächlich ist es die Programmierumgebung mit dem dümmsten Namen der Welt.

Eine weitere Option besteht darin, einen SD-Kartenleser / -schreiber zu verwenden und Ihre Datei auf eine SD-Karte zu schreiben. Wenn Sie mit der Datenerfassung fertig sind, tauschen Sie SD-Karten mit Ihrem Arbeitsplatzrechner aus. Dieser Ansatz ermöglicht es Ihnen, Ihr Projekt getrennt von einem Computer auszuführen, und sorgt für die nichtflüchtige Speicherung großer Datenmengen.

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

Alt-Text

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

Melanie

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 zu lesen (was der serielle Monitor sowieso tut, ich Verdächtiger). Unter Mac/Linux machen Sie so etwas wie:

cat /dev/cu.usbmodem1d11 

Gott weiß, was das Äquivalent auf Windows-Rechnern ist.

Sie möchten wahrscheinlich auch jedem Sensormesswert Zeitstempel zuordnen, in diesem Fall müssen Sie diesen catBefehl wahrscheinlich durch eine Art Skript ersetzen.

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);

Ich fand es einfacher und sicherer, ein Python-Skript zu verwenden. Normalerweise verwende ich diese basierend auf der seriellen Bibliothek . 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())])

Der nächste Schritt besteht darin, entweder das Ethernet-Schild 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 beispielsweise an einen Webserver senden, um sie zu sortieren. Ich mache das in meinem Vivarium-Temperaturmonitor .