Arduino sensörü verilerini bir metin dosyasına kaydetme


34

Sensörden alınan verileri bilgisayardaki bir metin dosyasına nasıl kaydedebilirim?

Yanıtlar:


30

seri-lib kullanarak sensör verilerini seri portuna yazabilir ve seri porttan verileri okuyan ve bir dosyaya yazan küçük bir işlem programı yazabilirsiniz.

Arduino kodunda, seri lib'i kurulum yönteminde başlatabilirsiniz

Serial.begin(9600);

ve kullanarak sensör değerlerinizi seri arabirime yazın.

Serial.println(value);

senin döngü yönteminde

İşlem tarafında seri porttan okunan verileri bir dosyaya yazmak için bir PrintWriter kullanın

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
}

"İşlem tarafı" kodu nereye gitmeli - aynı arduino kodunda veya ayrı bir c kodunda mı?
Ulad Kasach

1
Ayrı bir işlem komut dosyasında - işlem C'ye değil,
java'ya derlenir

@UladKasach "Processing", çok platformlu bir programlama ortamıdır. Aslında, dünyanın en aptal ismi olan programlama ortamı.
Scott Seidman

9

Diğer bir seçenek de bir SD Kart okuyucu / yazıcı kullanmak ve dosyanızı bir SD kartına yazmaktır. Veri toplamayı tamamladığınızda, iş istasyonunuzdaki bilgisayarınızla birlikte SD kartları çıkarın. Bu yaklaşım, projenizi bir bilgisayarla bağlantısı kesilmiş olarak çalıştırmanıza izin verecek ve büyük miktarda verinin uçucu olmayan bir şekilde depolanmasını sağlayacaktır.


6

Program gobetwino , bir Arduino'dan bir metin dosyasına veya elektronik tabloya sensör değerlerini minimum çabayla girecek. Ayrıca bilgisayardaki şeyleri otomatikleştirebilir, zaman damgası ekleyebilir (böylece bunları arduinoya programlamanıza gerek kalmaz), vb.

alt metin


5

En basit yöntem Seri kütüphaneyi kullanmak ve bunun çıktısını almaktır. Ardından bir terminal programını kullanarak çıktıyı bir metin dosyasına kaydedebilirsiniz. Hyperterminal, Windows'ta, Linux'ta Teraterm ve OS X'te Z Terimi ile kullanılabilir.

Melanie


4

Verileri seri monitör penceresinden çıktısını kopyalayıp yapıştırmak zorunda kalmadan doğrudan sensördeki verileri doğrudan bilgisayarınızdaki bir dosyaya yazmak istiyorsanız, veri akışını doğrudan seri bağlantı noktasından (seri monitörün yine de yaptığı gibi) okumayı deneyin. şüpheli). Mac / linux'ta şöyle bir şey yapın:

cat /dev/cu.usbmodem1d11 

Tanrı, pencere makinelerinde neyin eşdeğeri olduğunu bilir.


1
Muhtemelen zaman damgalarını her sensör okumasıyla ilişkilendirmek isteyeceksinizdir, bu durumda muhtemelen bu catkomutu bir tür komut dosyası ile değiştirmeniz gerekecektir .
garageàtrois 16:11

3

Seri portu okumak ve sonuçları bir metin dosyasına yazmak için bir python betiği oluşturabilirsiniz:

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

Bir Python betiği kullanmak daha kolay ve daha güvenli buldum. Bunu genellikle seri kütüphaneye dayanarak kullanırım . Zaman damgaları eklemek için datetime modülünü kullanmak da çok yaygındır:

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

Bir sonraki adım ethernet kalkanını kullanmak veya WIZ810MJ kartı gibi bir şey kullanmak ve internet arduino'nuzu mümkün kılmak. Daha sonra buna veri yazabilir ve harmanlamak üzere bir web sunucusu söylemek için gönderebilirsiniz. Bunu vivarium sıcaklık monitörümde yapıyorum .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.