Salvataggio dei dati del sensore Arduino in un file di testo


34

Come posso salvare i dati recuperati da un sensore in un file di testo sul computer?

Risposte:


30

è possibile scrivere i dati del sensore sulla porta seriale usando serial-lib e scrivere un piccolo programma di elaborazione che legge i dati dalla porta seriale e li scrive in un file.

nel codice arduino initalizzare la libreria seriale nel metodo di installazione

Serial.begin(9600);

e scrivere i valori del sensore sull'interfaccia seriale utilizzando

Serial.println(value);

nel tuo metodo loop

sul lato elaborazione utilizzare un PrintWriter per scrivere i dati letti dalla porta seriale in un file

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
}

Dove dovrebbe andare il codice "lato elaborazione" - nello stesso codice arduino o in uno script c separato?
Ulad Kasach,

1
In uno script di elaborazione separato - l'elaborazione non è compilata in C ma in java
Nikolaus Gradwohl

@UladKasach "Processing" è un ambiente di programmazione multipiattaforma. In effetti, è l'ambiente di programmazione con il nome più stupido del mondo.
Scott Seidman,

9

Un'altra opzione è quella di utilizzare un lettore / scrittore di schede SD e scrivere il file su una scheda SD. Al termine della raccolta dei dati, sostituire le schede SD con il computer della workstation. Questo approccio ti consentirà di eseguire il progetto disconnesso da un computer e fornirà l'archiviazione non volatile di grandi quantità di dati.


6

Il programma gobetwino registra i valori del sensore da un Arduino in un file di testo o foglio di calcolo con il minimo sforzo. Può anche automatizzare le cose sul computer, aggiungere timestamp (quindi non è necessario programmarle nell'arduino), ecc.

testo alternativo


5

Il metodo più semplice consiste nell'utilizzare la libreria seriale e produrre l'output. È quindi possibile acquisire l'output in un file di testo utilizzando un programma terminale. Hyperterminal è disponibile su Windows, Teraterm su Linux e Z Term su OS X.

Melanie


4

Se vuoi scrivere i dati del sensore direttamente su un file sul tuo computer senza dover copiare e incollare l'output dalla finestra del monitor seriale, prova a leggere il flusso di dati direttamente dalla porta seriale (che è comunque ciò che fa il monitor seriale, I sospettare). Su mac / linux fai qualcosa del tipo:

cat /dev/cu.usbmodem1d11 

Dio sa qual è l'equivalente su macchine Windows.


1
Probabilmente vorrai anche associare i timestamp a ciascuna lettura del sensore, nel qual caso dovrai probabilmente sostituire quel catcomando con una sorta di script.
garageàtrois,

3

È possibile creare uno script Python per leggere la porta seriale e scrivere i risultati in un file di testo:

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

1

Ho trovato più facile e sicuro usare uno script Python. Di solito uso questo basato sulla libreria seriale . È molto comune utilizzare anche il modulo datetime per aggiungere i timestamp:

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())])

0

Il prossimo passo è usare lo scudo ethernet o qualcosa come una scheda WIZ810MJ e Internet per abilitare il tuo arduino. È quindi possibile scrivere i dati su di esso e inviarli per dire un server Web per fascicolarli. Lo faccio nel mio monitor della temperatura del vivarium .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.