· 

Открытая учебная робоплатформа нового поколения

Александр Григорьев. Публикация на Новаторе.

В мире образовательной робототехники всё шире начинают использоваться робоплатформы, созданные с опорой на открытые стандарты (Open Source и Open Hardware), при этом самые передовые разработки базируются на тридцатидвухразрядных микроконтроллерах. Некоторые продукты наконец-то достигли того уровня, который позволяет с успехом использовать их при обучении детей первых-пятых классов (а не только лишь старшеклассников), ведь именно в младшей и средней школе интерес к робототехнике является наиболее выраженным и массовым.

Я могу назвать двух производителей, продукция которых, на мой взгляд, наиболее близка к понятию «идеальная 32-хразрядная робоплатформа на базе открытых стандартов». Это компании Kittenbot и DFRobot. Взгляните, например, на робототехнический контроллер Robotbit, использующий плату BBC Micro:bit.

рис1

Рис.1

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

  1. Список базовых возможностей должен включать в себя «эталонный» набор, сложившийся к настоящему моменту: кнопка (старт или выбор программы), перемещение (управление двумя коллекторными двигателями), звуковые сигналы (проигрывание музыкальных нот), световые сигналы (два световых индикатора с возможностью выбора яркости и оттенка цвета), датчик освещённости, датчик линии (цифровой, с двумя сенсорами и встроенной светодиодной индикацией), дальномер (ультразвуковой или иной).
  2. Желательно, чтобы изначально присутствовали дополнительные средства помимо вышеописанных, а также была возможность дальнейшего наращивания базовой функциональности. В первую очередь, нужны сервомотор для управления поворотом головы и гироскоп для отслеживания поворотов корпуса. Кроме того, различные дополнительные сервомоторы, шаговые двигатели, энкодеры вращения колёс, датчики (звука, цвета и т.д.).
  3. Важным является удобство подключения дополнительных датчиков (в частности, без необходимости отключать уже существующие).
  4. Удобные для использования в условиях школьного класса средства беспроводной коммуникации робоплатформы с компьютером (например, изначально сопряжённые друг с другом модули Bluetooth или 2,4G).
  5. Возможность программирования визуальными средствами (подобными Scratch и Blockly) с использованием высокоуровневых команд (блоков «ждать нажатия кнопки», «двигаться вперед» и т.д.).
  6. Возможность создания как интерактивных проектов, работающих под управлением компьютера (подобных проектам S4A или Snap4arduino), так и автономных программ, которые робоплатформа исполняет самостоятельно.
  7. Возможность программирования «продвинутыми» средствами при углублённом изучении той или иной темы в средних и старших классах, в том числе возможность текстового программирования. Например, управление свечением RGB-светодиодов с использованием низкоуровневых команд прямого управления состоянием портов ввода/вывода микроконтроллера, управление работой ходовых двигателей аналогичным способом (при помощи команд digitalWrite и analogWrite).
  8. Поддержка перспективными визуальными программными средствами нового поколения, позволяющими запускать на микроконтроллере несколько параллельных процессов одновременно (Makecode, Microblocks).
  9. Качественная беспроблемная поддержка уже существующими и широко использующимися в настоящий момент программными средствами. В первую очередь это Scratch (а точнее, продукт на его основе - mBlock3), Snap4arduino и Arduino IDE.
  10. Немаловажным остаётся фактор итоговой совокупной стоимости полного учебного набора (включающего и коммуникационные модули, и аккумуляторы, и прочее). Цена набора не должна быть чрезмерно высокой.

В своей прошлой публикации я писал о том, как важно было бы сохранить возможность использования всей массы наработанных учебных материалов (лишь одна из ссылок: http://education.makeblock.com/resource) при смене материально-технической базы. Именно для решения этой задачи мы попытаемся сейчас избрать аппаратную схему (и создать работающий прототип) собственной робоплатформы нового поколения.

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

Я внимательно присматривался к следующим отладочным платам:

  • ВВC Micro:bit
  • Wemos ESP32
  • RobotDyn SAMD21 M0
  • DFRobot M0 MainBoard
  • Iskra JS

рис2

Рис.2

Но всем этим вариантам присущ один и тот же недостаток: невысокое количество доступных портов ввода/вывода. Кроме того, качество поддержки при программировании в Arduino IDE и других средах разработки зачастую всё еще оставляет желать лучшего. Как следствие, будет достаточно сложно реализовать даже «эталоный» набор функций при нескольких разных сценариях использования: mBlock3 interactive mode, mBlock3 Arduino mode, Snap4arduino, Microblocks. Для управления одними лишь RGB-светодиодами придётся задействовать достаточно сложную аппаратную схему, иначе целых 6 портов с поддержкой PWM (широтно-импульсной модуляции) у нас оказываются занятыми. Ещё 4 порта нужны для управления двигателями (два из них с PWM). И по дидактическим соображениям, и по соображениям переносимости программ в другую среду очень желательно было бы применять для управления именно базовые команды работы с портами ввода/вывода (digitalWrite, analogWrite, а не протокол I2C, например).

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

  • 6 – RGB светодиоды;
  • 4 – моторы;
  • 1 – спикер (звук);
  • 1 – кнопка;
  • 1 – датчик освещённости;
  • 1 – сервомотор;
  • 2 – датчик линии;
  • 2 – ультразвуковой дальномер.

Итого 18 "обычных" портов (помимо особых –  RX,TX и SDA, SCL) у нас уже оказываются занятыми той периферией, что входит в "джентльменский набор". Сколько портов остаются свободными для дальнейшего расширения возможностей робоплатформы? Ни одного. Единственный способ при такой аппаратной конфигурации в будущем нарастить функциональность - всё-таки использовать протокол I2C (либо что-то аналогичное) для подключения любого (даже самого простого) периферийного оборудования. А значит, приобрести проблемы с поддержкой этого оборудования в новых разрабатываемых программных средах из-за отсутствия необходимых библиотек.

Можно, конечно, сразу поставить второй микроконтроллер для управления исключительно RGB-светодиодами. Либо использовать «умные» RGB-модули, принимающие сигналы по протоколу Onewire или I2C (собственно, так и сделали разработчики Makeblock, DFRobot и Kittenbot). Но, во-первых, опять возникнут проблемы с поддержкой работы в других программных средах. А во-вторых, тот, кто попытается собрать такую робоплатформу самостоятельно, будет вынужден использовать специальные RGB-модули, стоимость каждого из которых может оказаться сопоставима со стоимостью самого микроконтроллера.

http://ru.aliexpress.com/item/1312-RGB-Smart-NeoPixel-Pack-4-WS2812B-RGB/32952147131.html

https://ru.aliexpress.com/item/2226-NeoPixel-Jewel-7x5050-RGB/32947016099.html

 

Вариант совсем отказаться от RGB-светодиодов мы не рассматриваем. Таких робоплатформ полно, и они не годятся для того, чтобы использовать их с учебными материалами, разработанными для Makeblock mBot, который по праву можно считать эталонным учебным комплектом.

Разумное, на мой взгляд, решение, при этом самое очевидное и естественное с учётом вышеперечисленных требований - использовать для нашей робоплатформы 32-хразрядный микроконтроллер с большим количеством портов ввода/вывода. Такой вариант существует: это плата Arduino Due, имеющая тот же типоразмер, что Arduino Mega2560.

http://arduino.ru/Hardware/ArduinoDue

рис3

рис.3

И кстати, пожалуй, именно Arduino Due является самой "старой", то есть самой вычищенной от ошибок и отлаженной 32-хразрядной платой из присутствующих в настоящий момент, при этом абсолютно современной и передовой по своим возможностям.

Что мы приобретаем при использовании Arduino Due? Давайте попытаемся подвести итог. Ниже положительные качества избранного технического решения.

  • Высокая производительность и множество возможностей для дальнейшего расширения функциональности. 12 аналоговых портов, 12 портов с аппаратной поддержкой PWM (но при такой производительности без особых проблем можно реализовать программную поддержку PWM вообще на всех портах). Обработка аппаратных прерываний реализована на всех 66-ти портах.
  • При сопоставимой стоимости самой платы (по сути, при той же самой стоимости) возможность использования самых простых, распространённых и дешевых датчиков, любых драйверов двигателей и прочих компонентов. В результате совокупная стоимость набора оказывается достаточно низкой.
  • "Прозрачное" и естественное низкоуровневое управление работой всего периферийного оборудования (за исключением, разве что, компаса, гироскопа и прочих аналогичных вещей, с которыми "по-свойски" общаться и не получится). В очередной раз отмечу, что для учебной робоплатформы это крайне важно.
  • Стабильная работа в Arduino IDE, наличие необходимых библиотек.
  • Уже реализована поддержка в среде Snap4arduino.
  • Уже реализована поддержка в среде Microblocks.
  • Несложно модифицировать среду mBlock3 для поддержки работы с этой платой в режиме Arduino mode (проверено).
  • Возможно создание собственной прошивки и расширений для работы в mBlock3 в интерактивном режиме (проверено).
  • Практически все учебные материалы, наработанные для использования с образовательным комплектом mBot Educational Kit, легко адаптируются для использования с новой робоплатформой.

Какие недостатки бросаются в глаза?

  • Напряжение логики не 5 вольт, а 3,3 вольта. Но этот недостаток свойственен всем 32-хразрядным микроконтроллерам за исключением DFRobot M0 MainBoard (и ещё пользователи платы Iskra JS чуть меньше страдают от этого). Однако опыт показывает, что не так уж всё страшно, сложности возникли лишь с подключением ультразвукового дальномера HC SR04 (понадобился делитель напряжения, состоящий из двух резисторов). Но существуют и дальномеры, работающие от 3,3 вольт, проблем при их использовании не будет вовсе. Те компоненты, которые вызывали больше всего опасений, коммуникационный модуль 2,4G и гироскоп MPU6050, прекрасно заработали от 3,3 вольт.
  • Размер самой отладочной платы Arduino Due на первый взгляд великоват. Но если взять в руки не только её, но и робоплатформу mBot, которую мы используем в виде эталона, становится очевидно, что при должном старании вполне реально вписаться в размеры Эмботика. Разве что высота новой робоплатформы окажется больше, если не очень сильно стараться.

 Резюмируем. Построить на базе Arduino Due полнофункциональный аналог mBot, который, к тому же, будет значительно выше по возможностям, не только реально, но и очень просто. Фактически это самый лёгкий (и дешёвый!) способ решить данную задачу. Любой, кто захочет, может убедиться в этом самостоятельно, так же, как сделали это мы. На фотографии ниже готовая робоплатформа, собранная из того, что оказалось под рукой.

рис4

Рис.4

К каким именно портам подключать тот или иной датчик, особого значения не имеет. В отличие от Arduino Uno у нас чрезвычайно мало ограничений. Публиковать конкретные инструкции по сборке пока преждевременно (хотя есть планы со временем это сделать), прототип всё ещё далёк от совершенства, а ставить свой "копирайт" на данную аппаратную конфигурацию я не собираюсь. К счастью, ни у меня, ни у любого другого на это нет ни каких-либо прав, ни возможностей.

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

 

Продолжение следует.

 

P.S. Пока создавалась и публиковалась эта статья, вышло обновление среды программирования Microblocks, улучшающее поддержку работы внешних RGB-модулей NeoPixel (точнее, сразу два обновления подряд). Это является демонстрацией того, что вопрос управления RGB-светодиодами является крайне злободневным, и он будет в конце концов решён для разных программных сред и платформ. И тем не менее, управление свечением светодиодов непосредственно с помощью базовых команд микроконтроллера (analogWrite) является более предпочтительным для учебного робота.