Program perencanaan data serial


36

Saya perlu memplot data serial dari Arduino.

Saya memerlukan dukungan untuk:

  1. Berbagai format data (misalnya ditandatangani, tidak ditandatangani, 8 bit, 16 bit);
  2. Plot beberapa data pada sumbu yang sama;
  3. Ekspor / Impor data file.

Karena memplot data serial dari Arduino adalah kebutuhan umum, pertanyaan saya adalah: Program / utilitas apa yang tersedia untuk memplot data serial dari Arduino yang memenuhi kebutuhan di atas?

Apa keuntungan / kerugian dari metode yang Anda sarankan?


Saya memutuskan untuk membuka kembali dengan suntingan terakhir Anda. Ketika pertanyaan ini muncul, tampaknya berada pada topik karena spesifik. Saya akan menjelaskan kepada siapa pun (karena tidak ada banyak jenis pertanyaan ini): jika ini terlalu berlebihan, saya mungkin harus melangkah masuk. Namun, kemungkinan hal itu jarang terjadi. :) @JRobert Jika GnuPlot memenuhi persyaratan dalam pertanyaan, kirimkan.
Penguin Anonim

1
Halaman "Interfacing with Other Software" di Arduino Playground menunjukkan banyak cara untuk memplot data serial dari Arduino ke iPhone, PC Windows, PC Linux, dll.
David Cary

Jawaban:


19

Ada beberapa aplikasi yang bagus untuk memvisualisasikan data serial, termasuk:

(Ini adalah wiki komunitas, Anda dapat memperluas daftar.)


Saya bingung. Saya memposting solusi saya sendiri di bawah ini tetapi sekarang saya tidak yakin apakah tidak akan lebih baik untuk mengedit posting Anda karena ini adalah wiki. Apa yang kamu pikirkan ?
Overdrivr

@Overdrivr Tentu, lanjutkan wiki ini demi orang lain!
niutech

8

GnuPlot

Keuntungan: Sangat fleksibel, dapat dituliskan, dan tersedia secara gratis.

Kekurangan: Agak rumit untuk dipelajari (tapi saya menemukan cara memulai dalam beberapa menit, dan cukup fungsional dalam satu atau dua jam), berjalan di jendela terminal (jika Anda menganggap itu sebagai kerugian).

Sesuatu yang saya temukan sangat berguna adalah untuk skrip untuk memuat ulang logfile program terminal saya secara berkala sehingga saya mendapat grafik dinamis ketika percobaan saya berlangsung.

Gambar dari GnuPlot



Sunting: Ini adalah skrip GnuPlot yang menggambarkannya:

#!/usr/local/bin/gnuplot -rv
# Note reverse video here ^^^   til I find a way to put it in the script

# gpFanCtl - Plots DiffThermo fan controller data (aloft, alow, Tdiff, fan-state).
# $Id: gpFanCtl,v 1.8 2014-04-28 09:40:51-04 jrobert Exp jrobert $

set terminal x11 1 noraise
set xtics 3600
set mxtics 4
set xdata time

set ytics 1 nomirror
set mytics 2

set y2range [0:3]
set y2tics 1
set my2tics 4

set grid
set ylabel 'Temperature, degC'
set y2label 'Tdiff, degC' textcolor rgb '#00CD63'

cd '/Users/jrobert/Desktop'
plot "Logfile.txt" using ($0*4):1 title "Aloft" with lines lc rgb "red",\
     "Logfile.txt" using ($0*4):2 title "Alow" with lines lc rgb "#3982FF",\
     "Logfile.txt" using ($0*4):3 title "Tdiff" with lines lc rgb "#00CD63" axis x1y2,\
     "Logfile.txt" using ($0*4):4 title "Fan" with lines lc rgb "orange" axis x1y2;
pause 4
refresh
reread

1
Ini terlihat hebat. Bisakah Anda menambahkan beberapa kode demo?
geometrikal

Tapi itu memplot data dari Logfile.txt, bukan data serial realtime. Bagaimana menghubungkannya ke port serial?
niutech

1
Tidak, skrip ini bukan "waktu nyata" - skalanya mungkin sekitar 4 detik. Logfile.txt adalah keluaran file capture dari program terminal. Dalam kasus saya, sampel sistem pengumpulan data dan log setiap 4 detik dan skrip GnuPlot mengganti file log setiap 4 detik. Ini cukup dinamis untuk apa yang saya lakukan dengannya (memonitor suhu ruangan).
JRobert

7

Saya menggunakan Matplotlib untuk merencanakan apa pun yang perlu saya lakukan.

Ini bukan arduino spesifik dalam hal apa pun, tetapi ini adalah toolkit merencanakan Python yang sangat bagus .

Saya telah membangun sejumlah aplikasi yang memplot data dari berbagai mikrokontroler secara real-time ke grafik, tetapi itu sebenarnya lebih dari proses dua langkah: 1. Dapatkan data dari perangkat ke komputer, 2. plot data realtime .

Sungguh, saya pikir Anda harus membagi pertanyaan Anda menjadi dua bagian:

  • Bagaimana Anda mendapatkan data dari perangkat seri Arduino / Apa saja ke komputer dengan mudah.
  • Apa perpustakaan petak yang bagus yang mudah digunakan.

+1. Apakah video "Arduino real time plot Matlab" [ youtube.com/watch?v=ntHZsLmNkgw] menggunakan teknik yang sama?
David Cary

Ya. Ia menggunakan panggilan yang membaca data Arduino menjadi variabel matlab, dan kemudian panggilan yang memperbarui plot matlab dengan variabel matlab.
Connor Wolf

Matplotlib adalah python, bukan matlab.
DaveP

Saya tidak setuju dengan Anda, pertanyaan ini tidak boleh dibagi dalam 2. Ada solusi (seperti yang saya posting di bawah) yang menangani keduanya, karena menjengkelkan untuk mengaktifkan kembali roda untuk pemantauan jarak jauh dan kontrol aplikasi Arduino, dan juga karena menulis kode python untuk plot waktu nyata sebenarnya sangat jauh dari sepele. Hal-hal dapat dilakukan dengan matplotlib tetapi jelas ada alternatif yang lebih baik untuk itu seperti pyqtgraph.
Overdrivr

Untuk bagian 1: mendapatkan data dari Arduino: github.com/ElectricRCAircraftGuy/eRCaGuy_PyTerm
Gabriel Staples

6

SerialPlot (gratis). Itu melakukan semua yang Anda butuhkan dan banyak lagi.

Fitur lainnya:

  • Memperbesar data
  • Klik pada titik data untuk melihat nilai
  • Kirim perintah kembali ke Arduino
  • Sesuaikan jumlah total poin yang diplot
  • Kemampuan untuk menampilkan setiap saluran dalam plot autoscal sendiri
  • Menafsirkan paket biner, ASCII dan kustom
  • Mode Demo memungkinkan Anda bermain dengan fitur

masukkan deskripsi gambar di sini


1
Jawaban yang bagus, saya suka serialplot, itu menemukan port COM saya & baud rate secara otomatis, saya hanya perlu mengubah dari biner ke CSV dan meningkat menjadi 3 saluran (untuk magnetometer) dan itu merencanakan dengan baik.
Hamish_Fernsby

Ini adalah yang paling rapi dan mudah digunakan - tapi saya berharap ada mac Binary :)
willwade

5

Menanggapi pertanyaan saya sendiri di sini .. Saya menggunakan Bridge Control Panel sebagaimana disebutkan.

Keuntungan: Banyak Fitur.

Kekurangan: Tricky to setup dan sintaks / kesalahan pelaporan sangat buruk.

Untuk menggunakan: Anda perlu menulis Data Arduino melalui Port Serial satu byte setiap kali. Untuk tipe data int yang akan terlihat sebagai berikut:

// RX8 [h=43] @1Key1 @0Key1
Serial.print("C");
Serial.write(data>>8);
Serial.write(data&0xff);

Di Bridge perintah untuk Membaca Data adalah:

RX8 [h=43] @1Key1 @0Key1

RX8 adalah perintah baca [h = 43] berarti byte yang valid berikutnya adalah "C" di ASCII kemudian Byte Tinggi dari Key1 kemudian Byte Rendah dari Key1

Ini terlihat seperti ini di Bridge:

masukkan deskripsi gambar di sini

masukkan deskripsi gambar di sini


5

Anda dapat mencoba serialchart . Ini program yang cukup maju. Itu tepat seperti yang Anda minta. Satu-satunya kelemahan adalah bahwa itu membutuhkan data dalam format CSV (tidak memenuhi poin pertama).

Tangkapan layar dari halaman proyek:

contoh


Saya mencoba ini & merasa sangat kikuk untuk bekerja, tidak ada konfigurasi default, tidak autoscale, setelah setengah jam bekerja dengan sintaks saya masih tidak memiliki plot hanya garis lurus, jadi saya menyerah & menggunakan SerialPlot yang bekerja dalam beberapa menit, cukup tentukan teks ascii & jumlah saluran.
Hamish_Fernsby

4

Anda mungkin tertarik dengan Telemetry See on Github . Ini adalah protokol komunikasi, sangat mudah digunakan, dengan antarmuka yang bersih, yang memungkinkan komunikasi dua arah dengan perangkat Arduino / Mbed.

Jika Anda tidak ingin membaca posting panjang ini, lihat Panduan dari semua fitur luar biasa di dalamnya

Kekuatan perpustakaan ini berasal dari antarmuka baris perintah desktop (yang tidak memerlukan keterampilan pemrograman dengan python).

Ia mampu membuka plot kinerja tinggi (jauh lebih tinggi dari apa yang dapat dilakukan dengan matplotlib) hanya dengan mengetikkan perintah .

Protokol mendukung struktur data yang kompleks . Untuk saat ini, array dan array yang jarang dapat dikirim dari board tertanam.

Plot yang dibuka dari antarmuka baris perintah memahami tipe data, dan untuk array, alih-alih memplot setiap sampel versus waktu, sampel akan diplot terhadap indeksnya sendiri.

Dalam waktu dekat, direncanakan untuk menambahkan dukungan untuk koordinat spasial (data xyz), yang akan memungkinkan Anda untuk segera merencanakan data spasial. Sekali lagi, plot akan mencari tahu semuanya, plot data Anda dalam ruang 2D atau 3D dan Anda dapat fokus pada pengembangan aplikasi Anda.

Saya percaya fitur-fitur itu hanya unik untuk proyek semacam itu.

Pytelemetry CLI Versi PyPI

Setelah diinstal dengan pip, baris perintah dapat dimulai dengan

pytlm

Kemudian Anda dapat connect, ls(daftar) topik yang diterima, printdata yang diterima pada suatu topik, pub(terbitkan) pada suatu topik, atau membuka plotsuatu topik untuk menampilkan data yang diterima secara real-time

masukkan deskripsi gambar di sini

masukkan deskripsi gambar di sini

Memulai

Wiki

PS: Saya pengarangnya.

Saya mengembangkannya karena saya tidak dapat menemukan solusi yang memungkinkan saya untuk:

  • menulis skrip PC dengan cepat untuk mengontrol Arduino
  • debug dengan cepat
  • plot data yang kompleks (bukan hanya nilai waktu yang bervariasi)

semua hal di atas tanpa menggunakan solusi eksklusif atau GUI gembung.

Menggunakan perpustakaan ini, waktu untuk mengatur komunikasi antara Arduino dan PC berlangsung dari biasanya setengah hari menjadi 5 menit.


PS: logging dari data port serial dalam paket python (data mentah dan data yang didekodekan) juga didukung penuh. Saya bermaksud menggunakannya untuk mengimplementasikan fungsi replay offline (mensimulasikan aliran data serial)
Overdrivr

4

Tidak ada yang menyebutkan Pemrosesan yang super serbaguna. Anda dapat melakukan lebih dari sekadar merencanakan, tetapi jika hanya itu yang ingin Anda lakukan, Anda dapat menggunakan perpustakaan gwoptics; menghubungkan Arduino dan Pemrosesan seperti yang diarahkan di sini .


2

Saya membuat alat yang setara dengan python yang mencetak data waktu nyata dari accelerometer ADXL345. https://github.com/mba7/SerialPort-RealTime-Data-Plotter

Mungkin itu akan bermanfaat bagi seseorang

masukkan deskripsi gambar di sini

Cukup pilih serial com dan speed dan kirim data serial pada format berikut:

  • 3 input, setiap input adalah 2 byte (komplemen dua)
  • 6 byte dipisahkan oleh spasi
  • paket tersebut adalah string yang diakhiri oleh '\ n'

Bisa dengan mudah disesuaikan untuk mengubah format ini


Bisakah Anda menjelaskan cara menggunakan ini, dan apa kelebihan dan kekurangannya?
The Guy with The Hat

2

Anda dapat menggunakan MATLAB Student Edition , ini juga dapat menghemat waktu Anda untuk analisis lebih lanjut. Anda cukup membuka port COM di MATLAB dan memplot sinyal yang diterima dan / atau menyimpan sinyal di ruang kerja atau apa pun. MATLAB membuat semuanya mudah!


2
Selamat Datang di Arduino SE! Bisakah Anda mengedit jawaban Anda untuk menambahkan lebih banyak informasi yang menggambarkannya sesuai dengan kebutuhan OP dan mungkin sedikit informasi lain seperti tautan atau foto? Terima kasih!
Penguin Anonim

Jawaban yang bagus, tidak akan terpikir untuk menggunakan Matlab, ada utas SO di sini tentang hal itu stackoverflow.com/questions/19483098/…
Hamish_Fernsby

2

Format CSV paling serbaguna untuk data apa pun (masuk / tidak ditandatangani, berbagai ukuran dan presisi).

Alat lintas-platform (ditulis dalam Java / Scala) Scsvlog dapat menerima / mem-parsing string CSV dari port serial / soket, menunjukkan nilai-nilai dan menggambar grafik (hingga 8).


Sayangnya, alat tidak lagi dapat ditemukan sekarang - tautan aslinya sudah mati dan sepertinya saya tidak dapat menemukan salinannya.
Арсений Пичугин

2

Anda dapat mencoba perangkat lunak yang saya kembangkan untuk proposal itu. Ini bertujuan agar mudah digunakan. Lihat SerialGraphicator - Open Source Serial Port Client yang mampu nilai grafik yang diterima dalam format JSON.


1

Meskipun saya belum menggunakannya sendiri, "rqt_plot" yang berjalan di PC tampaknya menjadi cara yang populer untuk memplot data pada PC yang datang melalui port serial dari Arduino yang menjalankan sketsa yang mencakup perpustakaan rosserial_arduino atau perpustakaan ros_arduino_bridge .


1

Saya tahu ini adalah pertanyaan yang sangat lama, tetapi saya baru-baru ini membuat aplikasi mac yang memecahkan masalah ini dengan sangat baik. Anda dapat menemukan informasi lebih lanjut tentang itu di www.bloonapp.com. Ada beberapa video demo di situs web yang dapat Anda periksa.masukkan deskripsi gambar di sini


1
Pada 1 Agustus 18 situs web ini sudah mati.
Dan

1

Saya tahu Anda mungkin setelah keluaran GUI yang lebih maju, tapi saya berhasil mereplikasi tugas yang biasanya dilakukan dengan osiloskop: Keluaran Serial Plotter Arduino

menggunakan plotter serial di Arduino IDE dan modul ADC yang bisa Anda dapatkan seharga $ 3 di eBay. Saya akui itu agak kasar, tetapi mungkin ada baiknya bermain dengan alat untuk sementara waktu, sebelum Anda berinvestasi dalam solusi tingkat Python / Matlab / dll. Itu sangat mudah digunakan. Tidak perlu banyak untuk menambahkan rekaman kartu SD ke proses.

Lihat: https://edwardmallon.wordpress.com/2016/08/15/using-the-arduino-uno-as-a-basic-data-acquis-system/


0

Penampil Telemetri

Keuntungan:

  1. Mudah digunakan
  2. UI intuitif dan fleksibel
  3. Sumber Terbuka dan gratis
  4. Berbagai jenis Grafik
  5. Tingkat pembaruan grafik yang sangat cepat

Kekurangan:

  1. Berhenti pengembangan
  2. Format data biner belum lengkap.
  3. Kontrol grafik primitif seperti zoom, tangkapan layar, dan ... masukkan deskripsi gambar di sini

0

Serial Plotter adalah program sederhana yang saya buat dengan Electron yang menerima data dalam format berikut: data1,data2,timestamp;dan mengubahnya menjadi bagan waktu nyata.

masukkan deskripsi gambar di sini


0

Hampir bermanfaat. Perlu:

  1. logging data serial ke file ATAU
  2. grafik dari file dan memperbarui setiap milidetik xxx.

Live Graph adalah pilihan yang lebih baik dan saya menggunakannya bersamaan dengan Tera Term yang mendapatkan data melalui USB / serial link (dan menyimpannya ke file log yang kemudian jajak pendapat Live Graph).

Grafik Langsung sedikit bermasalah ketika menyimpan data dan saya belum menemukan cara untuk mengatur jendela bergerak untuk menampilkan hasil. Selain itu, menampilkan banyak grafik memerlukan penskalaan manual, tetapi terlepas dari semua ini, masih sangat berguna. Ini ditulis dalam java sehingga Anda akan membutuhkan JRE. Saya lebih suka ini daripada harus menginstal python seperti beberapa program grafik lainnya. Kelemahan lain adalah bahwa ia membuka 4 jendela berbeda, yang merupakan rasa sakit ketika saya ingin beralih antara itu dan Tera Term.

Saya belum menemukan software itu

  1. Dapat dieksekusi (.EXE) sehingga tidak memiliki ketergantungan eksternal
  2. Termasuk emulator terminal atau pencatat data serial
  3. Mencatat data serial
  4. Grafik beberapa item dari CSV
  5. Memungkinkan untuk CSV DAN Data tab-delimited (yang merupakan cara mudah untuk dibaca karena Scrolls bersama sementara secara bersamaan memantau grafik.
  6. Mengizinkan pengaturan skala yang berbeda untuk setiap grafik overlay tanpa harus menskala segala sesuatu menjadi [0..1] atau mengatur pengganda, yaitu memungkinkan pengaturan rentang [y0..y1] untuk setiap item yang dibuat grafik.

1
Selamat Datang di Arduino SE! Jawaban Anda informatif tetapi bisakah Anda meningkatkan format jawaban menggunakan panduan penurunan harga yang dapat Anda lihat dengan menekan ?tombol di editor.
Avamander

0

Saya menggunakan processing.org untuk merencanakan serial dari Arduino. Itu adalah satu-satunya aplikasi yang dapat saya temukan yang memungkinkan saya membuat histogram nyata (mis. Sejuta peristiwa dalam seratus tong) dan menampilkan berbagai nomor info selain sigma rata-rata untuk setiap saluran. Dua masalah utama: A) ternyata didasarkan pada Java tanpa byte B unsigned unsigned) sync dengan input buffer yang diperlukan melingkar dan penanda dalam data. (kecepatan tinggi, tidak ada jabat tangan)


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.