RPulse

Arduino-библиотека для отслеживания показаний датчиков в реальном времени.

Назначение

Arduino-библиотека RPulse предназначена для обмена информацией с микроконтроллером и мониторинга значений выбранных переменных и датчиков.

Общение с Arduino происходит через последовательный порт. Пользователь может запускать выполнение скетча по команде. Вместе с командой на старт, в микроконтроллер могут передаваться параметры в виде пары ключ-значение. В самом скетче можно запросить значение отправленного параметра.

Отправка параметров пригодится в ситуации, когда алгоритм действий устройства остаётся неизменным, а меняются лишь некоторые параметры. С помощью библиотеки пользователь получает значение параметров и применяет их в скетче, загружает программу в микроконтроллер. Каждый новый запуск устройства затем может сопровождаться отправкой новых значений параметров.

1) Отправка параметров на микроконтроллер 2) Микроконтроллер отправляет выбранные параметры на компьютер каждые 100 мс

1) Отправка параметров на микроконтроллер 2) Микроконтроллер отправляет выбранные параметры на компьютер каждые 100 мс

С таким подходом мы избегаем повторной загрузки скетча в память микроконтроллера. Пример задачи, в которой пригодится отправка параметров - изучение PID-регуляторов. Алгоритм вычисления составляющий регулятора будет неизменным, а коэффициенты при составляющих могут быть отправлены перед непосредственным выполнением вычислений.

После получения команды на старт, микроконтроллер начнёт каждые 100 мс отправлять значения отслеживаемых переменных и показания с выбранных пинов. Ниже приведён пример отправляемого сообщения:

p>pin:измерение:251|pin:кнопка:0|var:расстояние:23.7|var:диапазон:52|=103

Такое сообщение может быть обработано сторонним кодом для того, чтобы логировать данные. В конце каждого сообщения есть контрольная сумма (количество байт в строке включая символ =), чтобы фильтровать некорректные данные.

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

Основные функции

  • запуск скетча по команде;
  • отправка числовых параметров перед непосредственным запуском основного кода;
  • использование полученных значений в коде скетча;
  • отслеживание значений на пинах микроконтроллера;
  • отслеживание значений переменных

В следующем примере Arduino ждёт команды на запуск и затем каждые 100 мс отправляет через последовательный порт значение переменной dist:

#include <RPulse.h> // импорт библиотеки RPulse

#define TRIG 7 // пин выходного сигнала
#define ECHO 6 // пин входного сигнала

RPulse pulse; // создание объекта

float dist; // расстояние в сантиметрах

void setup()
{
  // настройка пинов
  pinMode(TRIG, OUTPUT);
  pinMode(ECHO, INPUT);

  // открытие последовательно порта со скоростью 9600 бод
  pulse.init(9600);
  // отслеживаем значение переменной dist
  pulse.watchVar(dist, "Расстояние");

  // приостанавливаем программу до получения команды
  pulse.wait();
}

void loop()
{
  digitalWrite(TRIG, HIGH);
  delayMicroseconds(10);
  digitalWrite(TRIG, LOW);

  dist = pulseIn(ECHO, HIGH) / 58.2;
  delay(10); // малая задержка для корректной отправки данных
}

Ссылки

Репозиторий библиотеки на GitHub c инструкцией по установке и подробной документацией к функциям.