Serial Plotter - Vizualizácia údajov

Zápisník experimentátora

Arduino IDE už viac rokov obsahuje program Serial Monitor, pomocou ktorého je možné sledovať odosielané údaje z Arduina. Vizualizácia týchto údajov ale doteraz chýbala. Od verzie IDE 1.6.6 už táto možnosť nechýba.

IDE 1.6.6

Princíp vizualizácie údajov je jednoduchý. Program číta každý riadok, ktorý Arduino vypíše na sériový port a snaží sa nazbierané údaje interpretovať pomocou grafu. Odosielané údaje by mali dodržiavať jednoduchú formu a vtedy sa automaticky vypočítajú maximá a minimá na údajoch a podľa nich sa natiahne celý graf podľa veľkosti okna. Údaje by mali vyzerať napríklad takto.

1.0
1.1
1.2
1.3
1.2
1.1
1.0

Toto IDE vie vykresliť iba jedinú čiaru grafu. Výsledný graf môže potom vyzerať napríklad takto.

IDE 1.6.7

Vizualizácia údajov okamžite podnietila veľkú diskusiu k tomu, či by sa nedalo zobraziť aj viac údajov. Nasledovné údaje vychádzajú z Nightly Buildu Arduina, ale je veľký predpoklad, že sa už nijako mimoriadne nezmenia a že to bude fungovať rovnako aj vo finálnej verzii.

Aby sa zobrazilo viac grafov, údaje by mali vyzerať takto.

1.0,2.0
1.1,2.1
1.2,2.2
1.3,2.3
1.2,2.2
1.1,2.1
1.0,2.0

Výsledok Serial Plotter interpretuje napríklad takto.

Program

Bez vzorového programu by to nešlo a na experimenty môžeme využiť program na generovanie údajov pre funkciu sínus. Zo vzorového programu sa dá ľahko rozoznať, ako sa údaje majú vytvárať v Arduine a podľa toho si robiť vlastné úpravy.

Niekoľko poznámok ku kódu. V jednom programe sa dá skompilovať aj verzia pre IDE 1.6.6 aj 1.6.7. Treba len správne odpoznámkovať príslušné define. Goniometrické funkcie v c++ používajú ako parameter hodnotu v radiánoch, preto mám v cykle použité trošku záhadné porovnávanie s hodnotou 2*M_PI. Tak je v matematickej knižnici definované .

#include "math.h"

#define IDE_166
//#define IDE_167

void setup() {
  // Enable Serial Output
  Serial.begin(9600);
  while (!Serial);
}

void loop() {
for (double i = 0; i <= 2*M_PI; i +=2*M_PI/360) {

#if defined(IDE_166)
  Serial.println(sin(i));
#endif

#if defined(IDE_167)
  Serial.print(sin(i));
  Serial.print(",");
  Serial.println(cos(i));
#endif

  delay(10);
  }
}


Download

10.12.2015


Menu