Lưu dữ liệu cảm biến Arduino vào một tệp văn bản


34

Làm cách nào tôi có thể lưu dữ liệu được truy xuất từ ​​cảm biến vào tệp văn bản trên máy tính?

Câu trả lời:


30

bạn có thể ghi dữ liệu cảm biến vào cổng nối tiếp bằng serial-lib và viết một chương trình xử lý nhỏ đọc dữ liệu từ cổng nối tiếp và ghi nó vào một tệp.

trong mã arduino kích hoạt lib nối tiếp trong phương thức thiết lập

Serial.begin(9600);

và ghi giá trị cảm biến của bạn vào giao diện nối tiếp bằng cách sử dụng

Serial.println(value);

trong phương thức vòng lặp của bạn

về phía xử lý, sử dụng PrintWriter để ghi dữ liệu đọc từ cổng nối tiếp vào tệp

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
}

Mã "bên xử lý" nên đi đâu - trong cùng mã arduino hoặc tập lệnh c riêng?
Ulad Kasach

1
Trong một tập lệnh xử lý riêng - việc xử lý không được biên dịch thành C mà là java
Nikolaus Gradwohl

@UladKasach "Đang xử lý" là một môi trường lập trình đa nền tảng. Trên thực tế, đó là môi trường lập trình với cái tên ngu ngốc nhất thế giới.
Scott Seidman

9

Tuy nhiên, một lựa chọn khác là sử dụng đầu đọc / ghi thẻ SD và ghi tệp của bạn vào thẻ SD. Khi bạn hoàn tất việc thu thập dữ liệu, hãy trao đổi thẻ SD với máy tính của máy trạm. Cách tiếp cận này sẽ cho phép bạn chạy dự án của bạn bị ngắt kết nối với máy tính và sẽ cung cấp cho việc lưu trữ một lượng lớn dữ liệu không bay hơi.


6

Gobetwino chương trình sẽ ghi lại các giá trị cảm biến từ Arduino vào tệp văn bản hoặc bảng tính với nỗ lực tối thiểu. Nó cũng có thể tự động hóa mọi thứ trên máy tính, thêm dấu thời gian (vì vậy bạn không cần phải lập trình chúng vào arduino), v.v.

văn bản thay thế


5

Phương pháp đơn giản nhất là sử dụng thư viện Nối tiếp và xuất ra đó. Sau đó, bạn có thể chụp đầu ra thành tệp văn bản bằng chương trình đầu cuối. Hyperterminal có sẵn trên Windows, Teraterm trên Linux và Z Term trên OS X.

Melanie


4

Nếu bạn muốn ghi dữ liệu cảm biến trực tiếp vào một tệp trên máy tính của mình mà không phải sao chép và dán biểu mẫu đầu ra của cửa sổ màn hình nối tiếp, thì hãy thử đọc luồng dữ liệu trực tiếp từ cổng nối tiếp (dù sao đó cũng là màn hình nối tiếp nghi ngờ). Trên mac / linux, hãy làm một cái gì đó như:

cat /dev/cu.usbmodem1d11 

Chúa biết những gì tương đương trên máy tính windows.


1
Có lẽ bạn cũng muốn liên kết dấu thời gian với mỗi lần đọc cảm biến, trong trường hợp đó có lẽ bạn sẽ cần phải thay thế catlệnh đó bằng một số loại tập lệnh.
garaàtrois

3

Bạn có thể tạo tập lệnh python để đọc cổng nối tiếp và ghi kết quả vào tệp văn bản:

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

Tôi thấy dễ dàng hơn và an toàn hơn khi sử dụng tập lệnh Python. Tôi thường sử dụng cái này dựa trên thư viện nối tiếp . Cũng rất phổ biến khi sử dụng mô đun datetime để thêm dấu thời gian:

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

Bước tiếp theo là sử dụng tấm chắn ethernet hoặc thứ gì đó như bảng WIZ810MJ và internet cho phép arduino của bạn. Sau đó, bạn có thể viết dữ liệu vào đó và gửi nó để nói rằng một máy chủ web để đối chiếu nó. Tôi làm điều này trong màn hình nhiệt độ vivarium của tôi .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.