Wie kann ich von einem Sensor abgerufene Daten in einer Textdatei auf dem Computer speichern?
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
}
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.
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.
cat
Befehl 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 .
Ulad Kasach
Nikolaus Grad wohl
Scott Seidman