Arduino-библиотека для управления ROBBO Платформой

сделай сам
программирование
робототехника
Arduino
инструментарий
Дата публикации

5 июля 2023 г.

Некоторое время назад появилась возможность опробовать оборудование Robbo - Лабораторию и Платформу. Для программирования этих устройств используется модифицированная версия Scratch под название RobboScratch.

Само оборудование создано на основе платформы Arduino, поэтому поддерживается разработка на языке C++. Хотелось лучше понять как работает Платформа и, за одно, разобраться в разработке для Arduino, поэтому было решено написать собственную библиотеку для управления Robbo Платформой.

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

Вот пример программы для движения платформы по линии:

/*
Простейший алгоритм следования по линии.
Датчик линии подключён к первому слоту.
*/

#include <RPlatform.h>

// среднее значение между минимальным и максимальным показаниями датчика линии
#define BORDER 37

RPlatform robot; // создаём объект класса RPlatform

void setup()
{
  /*
     В условии цикла проверяем, нажата ли кнопка Start.
     Основная часть программы запуститься с паузой в 3 секунды
     только после нажатия на кнопку.
  */
  while (!robot.isStartPressed())
  {
  }
  delay(3000);

  robot.run(); // запускаем моторы
}

int lineSensor;

void loop()
{

  if (robot.readSensor(1) > BORDER)
  {
    robot.setPower(3, 20);
  }
  else
  {
    robot.setPower(20, 3);
  }
}

Исходный код библиотеки и документацию можно найти по ссылке на Github-репозиторий. Там же есть инструкция по установке библиотеки.

Теперь некоторые технические детали с которыми нужно было разобраться.

Требования к библиотеке

Недостаточно написать C++ код. В папке с библиотекой должны быть дополнительные файлы с информацией о версии, названием и описанием библиотеки. Все требования подробно описаны на странице документации Arduino CLI.

Руководств по разработке библиотек для Arduino довольно много. Я часто обращался к статье на сайте AlexGyver.

Публикация библиотеки

Чтобы библиотека была доступна в Менеджере библиотек Arduino IDE, нужно добавить ссылку на репозиторий с библиотекой в список, который находится в официальном репозитории Arduino под названием library-registry. Но перед публикацией библиотеку нужно проверить с помощью утилиты Arduino Lint.

Линтер - это программа, которая ищет проблемы в коде до его запуска. Например неправильные названия переменных, лишние отступы в коде и так далее.

В целом, Arduino-Lint - полезная программа, так как с её помощью можно проверить качество кода. Библиотеку не получится официально опубликовать, пока утилита будет сообщать о проблемах в оформлении.

Новое из Arduino

До работы над библиотекой не доводилось использовать прерывания. В случае с Платформой, прерывания используются для подсчёта оборотов, сделанных моторами робота1. На одном моменте застрял надолго. Оказалось, что переменная, которая меняется при срабатывании прерывания нужно объявлять с модификатором volatile. Например:

volatile int count = 0;

Это служебное слово указывает компилятору брать значение переменной напрямую из RAM. В таком случае значение всегда будет актуальным.

В заключение

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

Также были мысли разработать похожу библиотеку для Robbo Лаборатории, но думаю в этом пока нет необходимости.

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

Надеюсь библиотека будет полезна и другим людям.

Сноски

  1. Подробнее о прерываниях можно почитать тут и тут.↩︎