Seri veri çizim programları


36

Seri verileri Arduino'dan almam gerekiyor.

Desteğe ihtiyacım var:

  1. Çeşitli veri formatları (örneğin imzalı, imzasız, 8 bit, 16 bit);
  2. Aynı eksende birkaç veri çizer;
  3. Dosya verilerini verir / alır.

Seri verileri Arduino'dan çizmek yaygın bir ihtiyaç olduğu için sorum şu: Arduino'dan gelen seri verileri yukarıdaki gereksinimleri karşılayan şekilde çizmek için hangi programlar / araçlar mevcut?

Önerdiğiniz yöntemin avantajları / dezavantajları nelerdir?


Son düzenlemenle yeniden açmaya karar verdim. Bu soru olduğu gibi konuya açık gibi görünmektedir çünkü kendine özgüdür. Kimseye açık olacağım (bu tür soruların pek çoğunun olmadığı için): bu çok fazla konu olmazsa, adım atmak zorunda kalabilirim. Ancak, bunun olma olasılığı nadirdir. :) @JRobert GnuPlot sorudaki gereklilikleri karşılıyorsa, postalayın.
Anonim Penguen

1
"Diğer Yazılım ile Etkileşim" Arduino içinde oyun alanı sayfa vb bir iPhone, Windows PC, Linux PC, bir Arduino seri verileri çizmek için yolları bir grup gösterir
David Cary

Yanıtlar:


19

Aşağıdakiler de dahil olmak üzere seri verileri görselleştirmek için iyi uygulamalar vardır:

(Bu bir topluluk wiki, listeyi genişletebilirsiniz.)


Kafam karıştı. Aşağıda kendi çözümümü yolladım ama şimdi bir wiki olduğu için yayınınızı düzenlemenin daha iyi olmayacağından emin değilim. Ne düşünüyorsun ?
Overdrivr

@Overdrivr Tabii, git bu wiki'yi başkalarının iyiliği için uzat!
niutech

8

gnuplot

Avantajları: Çok esnek, yazılanabilir ve serbestçe kullanılabilir.

Dezavantajları: Öğrenmesi biraz karmaşık (ancak birkaç dakika içinde nasıl başlayacağımı ve bir ya da iki saat içinde oldukça işlevsel bir şekilde nasıl başlayacağımı düşündüm) bir terminal penceresinde çalışıyor (bir dezavantaj olduğunu düşünüyorsanız).

Çok yararlı bulduğum bir şey, terminal programımın logfile dosyasını periyodik olarak yeniden yüklemek için komut dosyası yazmaktı, böylece denemem ilerledikçe dinamik bir grafik elde ettim.

GnuPlot'un görüntüsü



Düzenleme: İşte onu çizen GnuPlot betiği:

#!/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
Bu harika görünüyor. Biraz demo kodu ekler misiniz?
geometrikal

Ancak gerçek zamanlı seri verileri değil, Logfile.txt dosyasındaki verileri çizer. Seri portuna nasıl bağlanır?
niutech

1
Hayır, bu senaryo "gerçek zamanlı" değil - yaklaşık 4 saniye geride olabilir. Logfile.txt, bir terminal programından alınan yakalama dosyası çıktısıdır. Benim durumumda, veri toplama sistemi her 4 saniyede bir örneklemekte ve kayıt etmektedir ve GnuPlot betiği günlük dosyasını her 4 saniyede bir tekrarlamaktadır. Bu onunla ne yapıyorum için yeterince dinamik (oda sıcaklıklarının izlenmesi).
JRobert

7

Yapmam gereken herhangi bir komplo için Matplotlib kullanıyorum .

Herhangi bir şekilde arduino'ya özgü değildir, ancak çok mükemmel bir Python çizim aracıdır.

Verileri çeşitli mikrodenetleyicilerden gerçek zamanlı olarak bir grafiğe çizen birkaç uygulama yaptım, ancak bu gerçekten iki aşamalı bir işlemdi: 1. Aygıttan bilgisayara veri al, 2. Gerçek zamanlı veriyi oluştur .

Gerçekten, sorunuzu iki bölüme ayırmanız gerektiğini düşünüyorum:

  • Bir Arduino / Any seri cihazdan kolayca bilgisayara nasıl veri alırsınız.
  • Kullanımı kolay olan iyi bir çizim kütüphanesi nedir.

+1. "Arduino gerçek zamanlı arsa Matlab" [ youtube.com/watch?v=ntHZsLmNkgw] video aynı tekniği kullanıyor mu?
David Cary

Evet. Arduino verilerini bir matlab değişkenine okuyan bir çağrıyı ve ardından matlab grafiğini matlab değişkeniyle güncelleyen bir çağrı kullanır.
Connor Wolf

Matplotlib matt değil python'dur.
DaveP

Sizinle aynı fikirde değilim, bu soru 2'ye bölünmemelidir. Arduino uygulamalarının uzaktan izlenmesi ve kontrolü için tekerleği yeniden canlandırmak can sıkıcı olduğundan, her ikisini de ilgilendiren çözümler var (aşağıda yayınladığım gibi), ve aynı zamanda gerçek zamanlı grafikler için python kodu yazmak aslında önemsiz olmaktan uzak. Matplotlib ile işler yapılabilir fakat açıkça pyqtgraph gibi alternatifler var.
Overdrivr

1. bölüm için: Arduino'dan
Gabriel Staples

6

SerialPlot (ücretsiz). İhtiyacınız olan her şeyi yapar ve çok daha fazlası.

Diğer özellikler:

  • Verileri yakınlaştır
  • Değerleri görmek için veri noktalarına tıklayın
  • Arduino'ya komutları geri gönder
  • Çizilen toplam puan sayısını ayarlayın
  • Her kanalı kendi otomatik ölçeklendirilmiş arsalarında gösterme yeteneği
  • İkili, ASCII ve özel paketleri yorumlar
  • Demo modu, özelliklerle oynamanıza izin veriyor

görüntü tanımını buraya girin


1
İyi cevap, seriplottan hoşlandım, COM port'umu ve baud hızımı otomatik olarak buldu, sadece ikiliden CSV'ye değiştirmek ve 3 kanala (bir manyetometre için) artırmak zorunda kaldım ve güzel bir şekilde komplo oluşturuyordu.
Hamish_Fernsby

Bu en zarif ve kullanımı kolay - ama bir mac İkili olsaydı :)
olacak

5

Burada kendi soruma cevap veriyorum. Belirtildiği gibi Köprü Kontrol Panelini kullanıyorum.

Avantajları: Birçok özellik.

Dezavantajları: Kurulumu zor ve çok kötü sözdizimi / hata raporları.

Kullanmak için: Arduino Verilerini Seri Port üzerinden birer birer bayt yazmanız gerekir. Aşağıdaki gibi görünen bir int veri türü için:

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

Bridge'de Veri Okuma komutu:

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

RX8 okuma komutudur [h = 43], ASCII'de bir sonraki geçerli baytın, "Anahtar" 1'in yüksek Bayt'ından sonra "Key1" in düşük bayttan "C" olduğu anlamına gelir.

Bridge'de şöyle görünüyor:

görüntü tanımını buraya girin

görüntü tanımını buraya girin


5

Seri çizelgeyi deneyebilirsiniz . Oldukça boğazı ileri programı. Tam olarak istediğini yapar. Tek dezavantajı, CSV formatında veri gerektirmesidir (ilk noktaya uymuyor).

Proje sayfasından ekran görüntüsü:

örnek


Bunu denedim ve çalışmak için çok tıkalıymış, varsayılan yapılandırma yok, otomatik ölçeklendirme yok, sözdizimi ile yarım saat geçtikten sonra hala düz bir çizgiye sahip değildim, bu yüzden vazgeçtim ve kullandım Birkaç dakika içinde çalıştı, sadece ascii metni ve kanal sayısını belirtmek zorunda kaldı.
Hamish_Fernsby

4

Telemetry Github'a bakınız ilginizi çekebilir . Arduino / Mbed cihazlarıyla çift yönlü iletişim sağlayan temiz bir arayüze sahip, kullanımı oldukça basit bir iletişim protokolüdür.

Bu uzun yazıyı okumak istemiyorsanız, bkz. İçindeki tüm harika özelliklerin bir özeti

Bu kütüphanenin güç masaüstü komut satırı arayüzünden (gerektirir gelen hiçbir Python programlama becerileri).

Sadece bir komut yazarak yüksek performanslı grafikler (matplotlib ile yapılabileceklerden çok daha yüksek) açabilir .

Protokol karmaşık veri yapılarını destekler . Şimdilik diziler ve seyrek diziler gömülü panelden gönderilebilir.

Komut satırı arayüzünden açılan grafikler veri tipini anlar ve diziler için zamana karşı her bir numuneyi çizmek yerine, numune kendi indeksine karşı çizilir.

Yakın bir gelecekte, hemen uzamsal verileri çizmenize izin verecek uzamsal koordinatlara (xyz verileri) destek eklenmesi planlanmaktadır . Bir kez, yine grafikler her şeyi çözecek, verilerinizi 2B veya 3B alanda göstererek uygulamanızı geliştirmeye odaklanabilirsiniz.

Bu özelliklerin böyle bir proje için benzersiz olduğuna inanıyorum .

Pytelemetry CLI PyPI sürümü

Kurulduktan sonra pipkomut satırı ile başlatılabilir.

pytlm

Daha sonra connect, lsalınan konuları gerçek zamanlı olarak görüntülemek için , alınan konuları (bir konu üzerinde alınmış olanları, bir konudaki alınanları listeleyebilir print, bir konudaki pubyayınlayabilir) veya bir konuyu açabilirsiniz.plot

görüntü tanımını buraya girin

görüntü tanımını buraya girin

Başlamak

wiki

Not: Ben yazarım.

Bunu geliştirdim çünkü bana izin verecek bir çözüm bulamadım:

  • Arduino'yu kontrol etmek için PC komut dosyalarını hızlı bir şekilde yazın
  • hızla hata ayıkla
  • karmaşık verileri çizmek (sadece bir zamana göre değişen değer değil)

yukarıda belirtilenlerin tümü özel çözümler veya şişirilmiş GUI'ler kullanılmadan.

Bu kütüphaneyi kullanarak, Arduino ve PC arasında bir iletişim kurma zamanı genellikle yarım günden 5 dakikaya çıktı.


Not: seri port verilerinin python paketlerinde (ham veri ve kod çözülmüş veri) kaydedilmesi de tam olarak desteklenir. Ben bir çevrimdışı tekrar fonksiyonunu (benzetmek seri veri akışı) uygulamak için kullanmak niyetinde
Overdrivr

4

Hiç kimse Süper çok yönlü işlemlerden bahsetmedi. Sadece komplo yapmaktan çok daha fazlasını yapabilirsiniz, fakat tek yapmak istediğiniz şey buysa gwoptics kütüphanesini kullanabilirsiniz; Arduino'yu ve İşleme'yi burada belirtildiği gibi bağla .


2

Python'da ADXL345 ivmeölçerden gerçek zamanlı veri basan eşdeğer bir araç yaptım. https://github.com/mba7/SerialPort-RealTime-Data-Plotter

birisi için yardımcı olabilir

görüntü tanımını buraya girin

Yalnızca seri com ve hızı seçin ve aşağıdaki formatta bir seri veri gönderdi:

  • 3 giriş, her giriş 2 bayttır (İki'in tamamlayıcısı)
  • Bir boşlukla ayrılmış 6 bayt
  • paket '\ n' ile sonlandırılan bir dizedir

Bu formatı değiştirmek için kolayca uyarlanabilir


Bunun nasıl kullanılacağını ve bunun avantaj ve dezavantajlarının neler olduğunu açıklayabilir misiniz?
Şapkalı Adam

2

MATLAB Öğrenci Sürümü’nü kullanabilirsiniz , bu da daha fazla analiz yapmak için zaman kazandırabilir. COM portunu MATLAB'da açabilir ve alınan sinyali çizebilir ve / veya sinyali çalışma alanında veya herhangi bir şekilde kaydedebilirsiniz. MATLAB her şeyi kolaylaştırıyor!


2
Arduino SE'ye hoş geldiniz! OP'nin ihtiyaçlarına nasıl uygun olduğunu ve belki de bir link veya fotoğraf gibi başka bir bilgiyi tanımlayan daha fazla bilgi eklemek için lütfen cevabınızı düzenleyebilir misiniz? Teşekkürler!
Anonymous Penguin

İyi cevap, Matlab kullanmayı düşünmezdim, burada bunun hakkında bir SO iplik var. Stackoverflow.com/questions/19483098/…
Hamish_Fernsby

2

CSV formatı herhangi bir veri için çok yönlüdür (imzalı / imzasız, çeşitli boyut ve hassasiyet).

Çapraz platform (Java / Scala'da yazılmıştır) aracı Scsvlog , seri port / soketten CSV dizelerini alabilir / ayrıştırabilir, değerleri gösterebilir ve çizelgeleri çizebilir (8'e kadar).


Artık araç maalesef bulunamıyor - orijinal bağlantı kesildi ve kopya bulamadım.
Арсений Пичугин

2

Bu teklif için geliştirdiğim yazılımı deneyebilirsiniz. Kullanımı kolay olması amaçlanmıştır. Bkz. SerialGraphicator - JSON formatında alınan grafik değerleri alabilen Açık Kaynak Ücretsiz Seri Port İstemcisi.


1

Kendim kullanmadıysanız da, "rqt_plot" PC'de çalışan içeren bir taslak çalışan bir Arduino seri bağlantı noktası üzerinden gelen bir PC'de arsa verilerine popüler bir yol olarak görünmektedir rosserial_arduino kitaplık veya ros_arduino_bridge kütüphanesi.


1

Bunun çok eski bir soru olduğunu biliyorum ama yakın zamanda bu sorunu çok iyi çözen bir mac uygulaması oluşturdum. Bununla ilgili daha fazla bilgiyi www.bloonapp.com adresinde bulabilirsiniz. Web sitesinde kontrol edebileceğiniz bazı demo videoları var.görüntü tanımını buraya girin


1
1 Ağustos 18'den itibaren bu web sitesi öldü.
Dan

1

Muhtemelen daha gelişmiş bir GUI çıktısından sonra olduğunuzu biliyorum, ancak normalde bir osiloskopla yapacağı bir görevi çoğaltmayı başardım: Arduino Seri Plotter çıkışı

Arduino IDE'deki seri çiziciyi ve bir ADC modülünü kullanarak eBay'de $ 3 kazanabilirsiniz. Biraz kaba olduğunu kabul ediyorum, ancak Python / Matlab / ect seviye çözümlerine yatırım yapmadan önce bir süre araçla oynamaya değer olabilir. Kullanımı son derece kolaydı. Sürece SD kart kaydı eklemek çok fazla zaman almayacaktı.

Bakınız: https://edwardmallon.wordpress.com/2016/08/15/using-the-arduino-uno-as-a-basic-data-acquisition-system/


0

Telemetri Görüntüleyici

Avantajları:

  1. Kullanımı kolay
  2. Sezgisel ve esnek kullanıcı arayüzü
  3. Açık Kaynak ve ücretsiz
  4. Farklı grafik türleri
  5. Çok hızlı grafik güncelleme oranı

Dezavantajları:

  1. Durdurulan gelişim
  2. İkili veri formatı henüz tamamlanmadı.
  3. Zum, ekran görüntüsü ve ... gibi ilkel grafik kontrolleri görüntü tanımını buraya girin

0

Seri Çizici , Electron ile yaptığım ve aşağıdaki formatta veri alan basit bir programdır: data1,data2,timestamp;ve onu gerçek zamanlı bir şemaya dönüştürür.

görüntü tanımını buraya girin


0

Neredeyse faydalı. İhtiyacı var:

  1. seri verileri bir dosyaya kaydetme VEYA
  2. bir dosyadan grafik çizme ve her xxx milisaniyede bir güncelleme.

Live Graph daha iyi bir seçenek ve veriyi USB / seri bağlantı üzerinden alan Tera Term ile birlikte kullanıyorum (ve bunu Live Graph'ın anket yaptığı bir günlük dosyasına kaydederim).

Canlı Grafik, verileri önbelleğe alırken biraz rahatsız edici ve sonuçları görüntülemek için hareketli bir pencere ayarlamanın bir yolunu bulamadım. Ayrıca, birden fazla grafik göstermek, manuel ölçeklendirme gerektirir, ancak tüm bunlara rağmen, yine de çok faydalıdır. Java ile yazılmıştır, böylece JRE'ye ihtiyacınız olacaktır. Bunu diğer grafik programlarının bazılarında olduğu gibi python kurmak yerine tercih ederim. Başka bir dezavantajı, 4 farklı pencereyi açmasıdır; ki bu, Tera Term ile arasında geçiş yapmak istediğimde acı vericidir.

Henüz bir yazılım bulamadım

  1. Bir çalıştırılabilir (.EXE) böylece dış güven yok
  2. Bir terminal emülatörü veya seri veri kaydedici içerir
  3. Seri verileri günlüğe kaydeder
  4. CSV’den birden fazla öğe grafikler
  5. CSV VE sekmeyle ayrılmış verilerin ( grafik eşzamanlı olarak izlenirken kaydırılırken okunması daha kolay) izin verir .
  6. Her şeyi [0..1] 'e ölçeklendirmek veya çarpan ayarlamak zorunda kalmadan, üzerine bindirilmiş her grafik için farklı ölçeklerin ayarlanmasına izin verir;

1
Arduino SE'ye hoş geldiniz! Cevabınız bilgilendiricidir, ancak ?editördeki düğmeye basarak görüntüleyebileceğiniz markdown rehberini kullanarak cevabın formatını iyileştirebilir misiniz ?
Avamander,

0

Arduino'dan seri çizim yapmak için processing.org kullanıyorum. Her kanal için ortalama sigmaya ek olarak gerçek histogramlar (örneğin yüz kutularındaki bir milyon olay) yapmamı ve çeşitli bilgi numaralarını göstermemi sağlayan tek uygulama buydu. İki büyük problem: A) Java'ya göre imzasız bayt içermeyen çıktılar B) veriye gerekli girdiler için dairesel tampon ve işaretçilerle senkronize edildi. (yüksek hız, el sıkışma yok)


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.