Arduino: jak rysować rozbudowane wykresy na żywo?

Arduino: jak rysować rozbudowane wykresy na żywo?

Bardzo wygodnym dodatkiem do Arduino IDE jest narzędzie, która przedstawia dane wysyłane przez UART do PC w formie wykresów.

Istnieje jednak darmowy program, który pozwala tworzyć dużo lepsze wykresy na żywo w różnych konfiguracjach.

Niedawno opisałem 4 alternatywne terminale, które mogą zastąpić wbudowany w Arduino IDE Monitor Portu Szeregowego. Pora pójść krok dalej i znaleźć zamiennik dla Kreślarki, czyli narzędzia, które potrafi rysować proste wykresy (było ono opisane w kursie podstaw Arduino).

Kurs Arduino - wykresy, liczby losowe...
Kurs Arduino - wykresy, liczby losowe...

Pora na obiecaną, dodatkową część naszego kursu Arduino. Tym razem… Czytaj dalej »

Czym jest Telemetry Viewer?

Telemetry Viewer to darmowe oprogramowanie tworzone przez majsterkowicza podpisującego się pseudonimem farrellf. Aplikacja ta pozwala przedstawiać na wykresach (różnego typu) dane odebrane z portu COM. Za jej pomocą możliwe jest wizualizowanie wielu informacji równocześnie, a całość działa niezwykle płynnie i jest bardzo wygodna. Przykład w praktyce:

Przykładowe wykresy generowane przez Telemetry Viewer.

Tak rozbudowane wykresy są nieocenioną pomocą przy wszystkich projektach, które wykorzystują czujniki (np. akcelerometry i żyroskopy) oraz wszędzie tam, gdzie zachodzi konieczność pokazania wielu zmieniających się danych jednocześnie.

Odpowiednie przygotowanie programu na Arduino

Eksperymenty z wykresami należy rozpocząć od przygotowania programu, który będzie wysyłał dane do komputera. Telemetry Viewer nie wymaga udziwnionej składni, wystarczy wysłać kolejne dane "po przecinku". Czyli w praktyce, jeśli chcemy wizualizować trzy wartości musimy wysyłać coś takiego:

Można to zrealizować za pomocą standardowych funkcji print i println. Bardziej elegancko będzie jednak, gdy wykorzystamy funkcję srpintf, która potrafi sformatować ciąg znaków.

Do testu wykorzystałem elementy, które są częścią zestawów do kursu podstaw Arduino. Do wejść analogowych podłączyłem potencjometr oraz fotorezystor (analogicznie jak było to robione w kursie). Dodatkowo zadeklarowałem zmienną licznik, która jest zwiększa o 1 przy każdym obiegu pętli. Nigdzie jej nie zeruję, ponieważ jest to zmienna typu byte, czyli po przepełnieniu "sama wraca" do 0.

Wyjaśnienia może wymagać fragment z nową funkcją sprintf. W skrócie: zaczynamy od zadeklarowania tablicy 16 znaków nazwanej text. Dalej wywołujemy funkcję sprintf, która jako argumenty przyjmuje:

  • Tablicę text, do której zapisany zostanie sformatowany ciąg znaków.
  • Format danych wyjściowych, tutaj: "%d,%d,%d". Gdzie "%d" oznacza liczbę całkowitą. Inaczej mówiąc informujemy program, że w efekcie chcemy, aby wyjściową daną był tekst zawierający trzy liczby oddzielone od siebie przecinkami.
  • Następnie podajemy kolejne zmienne, które mają być wstawione w miejscach "%d".

Konstrukcja ta zastępuje takiego "potworka":

Lub (w najmniej wygodnym wydaniu):

Niezależnie od wybranej metody efekt powinien być taki sam (trzy wartości po przecinku):

Podgląd danych w terminalu.

Zamykamy Arduino i zabieramy się za nowe, lepsze wykresy...

Pierwsze kroki z Telemetry Viewer

Program pobieramy ze strony jego autora - możemy ściągnąć gotowy program (plik *.jar) lub źródła do samodzielnej komplikacji. Oczywiście najłatwiej pobrać skompilowany plik. Jego uruchomienie wymaga, aby nasz PC miał zainstalowaną Jave (jeśli jej nie macie to Google > Download Java).

Po uruchomieniu okno programu będzie wyglądało jak poniżej. Ważne, aby w tym kroku poprawnie wpisać dane w prawym dolnym rogu. Podajemy tam częstotliwość z jakąś wysyłamy dane (100 Hz), wybieramy format danych (CSV), ustawiamy port COM i wpisujemy prędkość komunikacji.

Konfiguracja programu.

Następnie klikamy Connect i wpisujemy informacje o danych, które są wysyłane przez Arduino. Musimy podać nazwę serii danych (tutaj potencjometr), wybrać kolor (tutaj czerwony) i wpisać jednostkę - tym razem jest to pogram demonstracyjny, więc jako jednostkę wpisałem "ADC". Pozostałe pola zostawiamy domyślnie wypełnione i klikamy przycisk Add.

Dodawanie informacji o pierwszej wartości.

Operacje powtarzamy dla pozostałych danych, okno programu powinno wyglądać jak poniżej:

Wszystkie informacje wpisane do programu.

Jak widać w dolnej części okna, program wygenerował dla nas szablon kodu Arduino, który moglibyśmy teraz użyć. Nasz kod napisaliśmy już wcześniej, więc nie musimy się nim interesować. Klikamy Done.

Pojawi się okno z siatką, na której możemy zaznaczyć pole naszego wykresu (robimy to z wciśniętym lewym przyciskiem myszy): 

Zaznaczanie pola wykresu.

W nowym oknie ustawiamy informacje o wykresie: do wyboru mamy różne wykresy np. zależny od czasu, częstotliwości, czy histogram. Na początek polecam wybrać zwykły wykres i ustawić skale tak jak na poniższym zrzucie ekranu:

Ustawienia typu wykresu.

Dzięki temu utworzymy wykres liniowy, na którym będą wyświetlane informacje o trzech wartościach wysyłanych przez Arduino. Poniżej widać stałą wartość z potencjometru, delikatne zmiany wartości odczytanych przez fotorezystor oraz rosnącą (i zerującą się) wartość zmiennej licznik.

Oczywiście jedne dane mogą pojawiać się na kilku wykresach, więc nic nie stoi na przeszkodzie, aby dorobić osobne wskaźniki (Dial Chart) dla każdej wartości oraz dodatkowy wykres liniowy dla licznika:

Więcej wykresów w Telemetry Viewer.

Wygodne triki

Program zawiera wiele funkcji, które znacznie ułatwiają pracę z wykresami:

  • Kręcąc scrollem w myszce możemy sprawdzać historię przebiegów.
  • CTRL+scroll odpowiada za przybliżanie i oddalanie wykresów.
  • SHIFT+scroll odpowiada za powiększania opisów.
  • Za pomocą Save/Open Layout można zapamiętać układy wykresów do późniejszego wczytania.
  • Wszystkie dane można wyeksportować później do CSV (Export CSV Log).
  • Można też bardzo łatwo przeliczać jednostki np. z ADC na wolty. Aby wykres przedstawiał napięcie zamiast "suchych wartości ADC" wystarczy skonfigurować daną wartość następująco (podajemy, że maksymalna wartość 1023.0 ma odpowiadać na wykresie 5V):

Konfiguracja jednostki w woltach.

Instrukcja wideo

Jeśli instrukcja z tego wpisu będzie dla Was mało dokładna to możecie podejrzeć jak program obsługiwany jest przez jego autora. Film z instrukcją trwa jednak 57 minut. Znajdziecie tam szczegółowe wyjaśnienia dlaczego nie trzeba podawać bardzo dokładnych informacji na temat częstotliwości wysyłania danych oraz więcej informacji o wszystkich typach wykresów:

Nowa wersja Telemetry Viewer

Tym razem wykorzystaliśmy podstawowe funkcje programu, które były w nim od dość dawna. Autor jednak cały czas rozwija swoje dzieło. W najnowszej wersji programu pojawiło się m.in.: wsparcie dla odbierania danych wysyłanych również przez TCP oraz UDP. Więcej informacji poniżej:

Podsumowanie

Oczywiście opisałem tutaj tylko podstawowe informacje, które podpowiedzą jak "uruchomić" pierwsze wykresy. Zachęcam do samodzielnych testów np. z innymi typami wykresów i ustawień. Według mnie jest to jeden z ciekawszych programów jaki powinien znać każdy fan Arduino (i nie tylko). Dane można przecież tak samo wysyłać do komputera np. z STM32.

Aplikacja jest naprawdę łatwa w konfiguracji, daje wiele możliwości i co najważniejsze działa bardzo płynnie. Jak podoba Wam się praca z Telemetry Viewer? Pokażcie swoje wykresy w komentarzach i dajcie znać jeśli korzystaliście z innych programów tego typu!

4 alternatywy dla monitora portu szeregowego Arduino
4 alternatywy dla monitora portu szeregowego Arduino

Komunikacja Arduino z komputer przez UART to jedna z częściej… Czytaj dalej »

Arduino, program, rysowanie, wykres

Komentarze

Komentarze do tego wpisu są dostępne na forum: