Освой Arduino играючи

Сайт Александра Климова

Шкодим

/* Моя кошка замечательно разбирается в программировании. Стоит мне объяснить проблему ей - и все становится ясно. */
John Robbins, Debugging Applications, Microsoft Press, 2000

Serial Plotter

В Arduino IDE есть интересный инструмент для визуализации данных - Tools | Serial Plotter.

В Plotter мы можем видеть графики данных, выводимых в последовательный порт Arduino в режиме реального времени. Инструмент принимает значения, поступающие из заданного последовательного порта, и отображает их на графике плоскости XY. Ось Y представляет значения из последовательного порта и автоматически настраивается при увеличении или уменьшении значения. Фактически ось X представляет собой момент времени. Каждая точка на оси X представляет выполнение оператора функции println() - когда вызывается функция, на графике записывается новая точка. Не забывайте заново запускать Serial Plotter после обновления скетча, чтобы избежать различных проблем с отображением данных.

В реальных примерах данные считываются с показаний датчиков. Для демонстрации можно создать несколько примеров без участия датчиков, используя математические формулы.

На экран можно выводить сразу несколько графиков, они будут выводиться разными цветами. При использовании двух и более графиков их можно подписать (смотри второй пример с двумя графиками).

Синусоида


void setup() {
  Serial.begin(9600);
}

void loop() {
  float angle = 0;

  for (angle = 0; angle <= 90; angle = angle + 0.1)
  {
    float sinSignal = sin(angle);
    Serial.print(sinSignal);
    Serial.println();
    delay(1);
  }
}
Plotter Sin

Два графика


void setup() {
  Serial.begin(9600);
  Serial.flush();
  Serial.println("SIN, COS");
}

void loop() {
  float angle = 0;

  for (angle = 0; angle <= 90; angle = angle + 0.1)
  {
    float sinSignal = sin(angle);
    float cosSignal = cos(angle);
    Serial.print(sinSignal);
    Serial.print(" ");
    Serial.println(cosSignal);
    delay(1);
  }
}
Plotter

Пила


void setup() {
  Serial.begin(9600);
}

void loop() {
  //Sawtooth Wave
  for (float i = 0; i <= 70; i = i + 1)
  {
    Serial.println(i);
    delay(1);
  }
}
Plotter

Квадратный график


void setup() {
  Serial.begin(9600);
}

void loop() {
  //Square Wave
  for (int a = 0; a <= 90; a++)
  {
    int b = 10;
    Serial.println(b);
    delay(1);
  }
  for (int a = 0; a <= 90; a++)
  {
    int b = 90;
    Serial.println(b);
    delay(1);
  }
}
Plotter

Треугольники


void setup() {
  Serial.begin(9600);
}

void loop() {
  //Triangular wave
  for (float i = 0; i <= 100; i = i + 1)
  {
    Serial.println(i);
    delay(1);
  }
  for (float i = 100; i >= 0; i = i - 1)
  {
    Serial.println(i);
    delay(1);
  }
}
Plotter

Уроки Ардуино. Графики в реальном времени - YouTube - видео про интересный инструмент

Дополнительные материалы

Отдельная программа с открытыми исходниками Serial Port Plotter. Имеет дополнительные возможности.

Реклама