Zapisywanie danych czujnika Arduino w pliku tekstowym

34

Jak mogę zapisać dane pobrane z czujnika do pliku tekstowego na komputerze?

desNotes
źródło

Odpowiedzi:

30

możesz zapisać dane czujnika do portu szeregowego za pomocą serial-lib i napisać mały program przetwarzający, który odczytuje dane z portu szeregowego i zapisuje je w pliku.

w kodzie arduino zainicjuj lib seryjny w metodzie instalacji

Serial.begin(9600);

i zapisz wartości czujnika do interfejsu szeregowego za pomocą

Serial.println(value);

w metodzie pętli

po stronie przetwarzania użyj PrintWriter, aby zapisać dane odczytane z portu szeregowego do pliku

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
źródło
Gdzie powinien iść kod „strony przetwarzającej” - w tym samym kodzie arduino lub osobnym skrypcie c?
Ulad Kasach
1
W osobnym skrypcie przetwarzania - przetwarzanie nie jest kompilowane do C, ale do java
Nikolaus Gradwohl
@UladKasach „Processing” to wieloplatformowe środowisko programistyczne. W rzeczywistości jest to środowisko programistyczne o najgłupszej nazwie na świecie.
Scott Seidman
9

Jeszcze inną opcją jest użycie czytnika / zapisu kart SD i zapisanie pliku na karcie SD. Po zakończeniu zbierania danych wymień karty SD na komputerze stacji roboczej. Takie podejście pozwoli Ci uruchomić projekt odłączony od komputera i zapewni nieulotne przechowywanie dużej ilości danych.

Craig Trader
źródło
6

Program gobetwino przy minimalnym wysiłku rejestruje wartości czujników z Arduino do pliku tekstowego lub arkusza kalkulacyjnego. Może również automatyzować rzeczy na komputerze, dodawać znaczniki czasu (więc nie trzeba ich programować w Arduino) itp.

alternatywny tekst

endolit
źródło
5

Najprostszą metodą jest użycie biblioteki Serial i wyprowadzenie do niej. Następnie można przechwycić dane wyjściowe do pliku tekstowego za pomocą programu terminalowego. Hyperterminal jest dostępny na Windows, Teraterm na Linux i Z Term na OS X.

Melanie

Cyberprzestrzeń
źródło
4

Jeśli chcesz zapisać dane czujnika bezpośrednio do pliku na komputerze bez konieczności kopiowania i wklejania danych wyjściowych z okna monitora szeregowego, spróbuj odczytać strumień danych bezpośrednio z portu szeregowego (co zresztą robi monitor szeregowy, I posądzać). Na Mac / Linux zrób coś takiego:

cat /dev/cu.usbmodem1d11 

Bóg wie, co jest odpowiednikiem maszyn z systemem Windows.

garażtrois
źródło
1
Prawdopodobnie chciałbyś również powiązać znaczniki czasu z każdym odczytem czujnika, w takim przypadku prawdopodobnie będziesz musiał zastąpić to catpolecenie jakimś skryptem.
garageàtrois
3

Możesz utworzyć skrypt Pythona do odczytu portu szeregowego i zapisania wyników w pliku tekstowym:

##############
## 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
źródło
1

Łatwiej i bezpieczniej jest używać skryptu Python. Zwykle używam tego opartego na bibliotece szeregowej . Bardzo często używa się również modułu datetime do dodawania znaczników czasu:

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
źródło
0

Następnym krokiem jest użycie albo osłony ethernetowej, albo czegoś w rodzaju płyty WIZ810MJ i Internetu, aby włączyć arduino. Następnie możesz zapisać na nim dane i wysłać je, aby powiedział serwer sieciowy, aby je zestawił. Robię to w monitorze temperatury w warium .

Cyberprzestrzeń
źródło