Menyimpan data sensor Arduino ke file teks

34

Bagaimana saya bisa menyimpan data yang diambil dari sensor ke file teks di komputer?

desNotes
sumber

Jawaban:

30

Anda dapat menulis data sensor ke port serial menggunakan serial-lib dan menulis sebuah program pemrosesan kecil yang membaca data dari port serial dan menulisnya ke file.

dalam kode arduino, litali lib serial dalam metode pengaturan

Serial.begin(9600);

dan tulis nilai sensor Anda ke antarmuka serial menggunakan

Serial.println(value);

dalam metode loop Anda

di sisi pemrosesan gunakan PrintWriter untuk menulis data yang dibaca dari port serial ke 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
}
Nikolaus Gradwohl
sumber
Di mana kode "sisi pemrosesan" harus pergi - dalam kode arduino yang sama atau skrip c terpisah?
Ulad Kasach
1
Dalam skrip pemrosesan terpisah - pemrosesan tidak dikompilasi ke C tetapi ke java
Nikolaus Gradwohl
@UladKasach "Memproses" adalah lingkungan pemrograman multi-platform. Bahkan, itu adalah lingkungan pemrograman dengan nama paling bodoh di dunia.
Scott Seidman
9

Namun pilihan lain adalah menggunakan pembaca / penulis Kartu SD, dan menulis file Anda ke kartu SD. Setelah selesai mengumpulkan data, tukar kartu SD dengan komputer workstation Anda. Pendekatan ini akan memungkinkan Anda untuk menjalankan proyek Anda terputus dari komputer, dan akan menyediakan penyimpanan data dalam jumlah besar yang tidak mudah menguap.

Craig Trader
sumber
6

Program gobetwino akan mencatat nilai sensor dari Arduino ke file teks atau spreadsheet dengan upaya minimal. Itu juga dapat mengotomatiskan hal-hal di komputer, menambahkan stempel waktu (sehingga Anda tidak perlu memprogramnya ke arduino), dll.

teks alternatif

endolith
sumber
5

Metode paling sederhana adalah dengan menggunakan perpustakaan Serial dan output untuk itu. Anda kemudian dapat menangkap output ke file teks menggunakan program terminal. Hyperterminal tersedia di Windows, Teraterm di Linux dan Z Term di OS X.

Melanie

Cyberspice
sumber
4

Jika Anda ingin menulis data sensor langsung ke file di komputer Anda tanpa harus menyalin dan menempelkan output dari jendela monitor serial, maka cobalah membaca aliran data langsung dari port serial (yang memang dilakukan oleh monitor serial, saya tersangka). Di mac / linux, lakukan sesuatu seperti:

cat /dev/cu.usbmodem1d11 

Tuhan tahu apa yang setara di mesin windows.

garasiàtrois
sumber
1
Anda mungkin juga ingin menghubungkan cap waktu dengan setiap pembacaan sensor, dalam hal ini Anda mungkin perlu mengganti catperintah itu dengan semacam skrip.
garageàtrois
3

Anda dapat membuat skrip python untuk membaca port serial dan menulis hasilnya menjadi file teks:

##############
## 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
sumber
1

Saya menemukan lebih mudah dan lebih aman untuk menggunakan skrip Python. Saya biasanya menggunakan ini berdasarkan perpustakaan serial . Sangat umum untuk menggunakan juga modul datetime untuk menambahkan cap waktu:

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
sumber
0

Langkah selanjutnya adalah menggunakan perisai ethernet atau sesuatu seperti papan WIZ810MJ dan internet memungkinkan Arduino Anda. Anda kemudian dapat menulis data untuk itu dan mengirimkannya untuk mengatakan server web untuk menyusunnya. Saya melakukan ini di monitor suhu vivarium saya .

Cyberspice
sumber