Ускоренное построение прототипов с помощью Arduino, mikroBUS и Processing

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

Мы живем в эпоху, когда благодаря различным готовым решениям от таких компаний, как MikroElektronika, Adafruit и Arduino, процесс разработки и прототипирования электронных устройств максимально ускоряется.

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

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

Благодаря таким компаниям, как Arduino, MikroElektronika и Adafruit, мы живем в мире, в котором процесс разработки и прототипирования может быть очень быстрым. Я все время использую решения этих компаний при создании учебных проектов и для оценки новых продуктов. К счастью, когда я начинал работу над новым демонстрационным стендом, Microchip совместно с MikroElektronika запустили рекламную кампанию с платами семейства Click boards. Я быстро заполучил несколько таких плат. В частности на плате 10DOF Click присутствует сразу два по-настоящему полезных датчика от Bosch: 9-осевой инерционный модуль (IMU) BNO055 и цифровой датчик давления BMP180.

Живя в Сан-Хосе, мы находимся примерно на уровне моря, к тому же пол конференц-центра довольно ровный, в результате поток данных с датчика давления оказывается довольно скучным. Но благодаря наличию 9-осевого инерционного модуля все становится значительно интереснее. В запасе у меня было несколько плат Arduino Uno click shield, которые пригодились при создании этого демонстрационного стенда. Плата Arduino Uno click shield, как следует из ее названия, используется для подключения плат расширения, в том числе и 10DOF Click от MikroElektronika, к стеку Arduino.

Последним элементом аппаратной части стала мини-плата ATmega328P Xplained Mini (рис. 1). На этой плате есть отверстия для штырей стандартного сокета Arduino. Таким образом, значительных усилий по доработке не потребовалось, так как распайка штыревых разъемов стала делом нескольких минут.

Плата 10DOF Click (справа) подключается к модулю ATmega328P Xplained Mini (слева)

Рис. 1. Плата 10DOF Click (справа) подключается к модулю ATmega328P Xplained Mini (слева)

В итоге три платы без каких-либо проблем оказались подключены друг к другу (рис. 2). Я знал, что плата 10DOF Click будет направлять сигналы I2C-интерфейса от датчиков BNO055 на нужные контакты сокета Arduino. Тем не менее, была еще одна важная проблема, с которой предстояло разобраться. Для работы плата 10DOF Click требует напряжения 3,3 В, в то время как для питания 328P Xplained Mini по умолчанию используется напряжение 5 В, получаемое от USB-порта. К счастью, команда Microchip уже позаботилась об этой проблеме и разместила на плате 328P Xplained Mini LDO-стабилизатор, который можно активировать с помощью нескольких перемычек.

Вот так выглядит полный стек с MikroElektronika 10DOF Click, Arduino Uno click shield и ATmega328P Xplained Mini board

Рис. 2. Вот так выглядит полный стек с MikroElektronika 10DOF Click, Arduino Uno click shield и ATmega328P Xplained Mini board

При включении питания аварии не произошло и никакого «загадочного» дымления обнаружено не было. Таким образом, у меня на столе оказался рабочий стек, объединяющий инерционный модуль и микроконтроллер.

Демонстрационное приложение

После того как подключение аппаратной части было закончено, можно было перейти к самой сложной задаче – созданию демонстрационного приложения.

В предыдущих проектах мне приходилось работать с 9-осевым инерционным модулем BNO055 от Bosch, поэтому у меня был тестовый код от Adafruit для получения потока данных со всех трех датчиков движения. Adafruit также предоставляет обширную библиотеку для BNO055, которую я использовал.

BNO055 – это довольно мощный инерционный модуль, способный предоставлять не только сырые данные от акселерометра, гироскопа и магнитометра, но и результаты, полученные при цифровой обработке исходных сигналов (sensor fusion), например, углы положения в формате кватернионов. Как уже было сказано выше, тестовый код для BNO055 был предоставлен Adafruit. Adafruit – один из моих любимых источников информации, к которым я обращаюсь за примерами и демонстрационными проектами. Решения, предлагаемые Adafruit, отличаются надежной аппаратной реализацией и качественно выполненной документацией, включая руководство по подключению и эксплуатации.

Я использовал функцию импорта Arduino в Atmel Studio 7 и в дальнейшем работал с этой программой. В результате прошивка загрузчика Arduino на плату mega328P Xplained Mini не потребовалась. Как и ожидалось, тестовый код из Adafruit, без проблем импортировался в Atmel Studio 7. Кроме возможности использования большого количества готовых программных наработок, присутствующих в открытом доступе, работа с Atmel Studio 7 давала два реальных преимущества при создании этого демонстрационного проекта.

Во-первых, наиболее важным преимуществом стала возможность отладки исходного кода с использованием точек останова и контролем памяти без необходимости использования функции Serial.print (). Улучшение качества проверки и отладки программы позволили мне быстро устранять ошибки, которые неизбежно появляются при создании кода «на скорую руку».

Во-вторых, поскольку поток данных с платы Xplained Mini передается через USB-порт CDC, то информация от инерционного модуля была отделена от отладочной информации. Единственной реальной проблемой, которую я заметил, было несоответствие адреса I2C, но это никак не влияло на работу устройства.

Я загрузил программу в микроконтроллер, запустил терминал на ноутбуке и с радостью обнаружил на экране поток данных в текстовом формате ACSII (рис. 3). 

Поток данных от датчика BNO055

Рис. 3. Поток данных от датчика BNO055

Помимо некоторых проблем с калибровкой самих датчиков, получаемые данные выглядели правдоподобно как по величине, так и по реакции на изменение положения платы 10DOF Click. Таким образом, я оказался на полпути к тому, чтобы обеспечить поток данных от 9-осевого инерционного модуля. К сожалению, символьный поток в формате ASCII оказывается не очень эффективным с точки зрения скорости передачи данных, но он хорошо подходит для демонстрации информации, поступающей от инерционного модуля.

Вместе с тем, на экране ПК мне хотелось представить что-то более эффектное, чем тестовый поток на черном фоне. Дело в том, что на выставках, на которых я присутствовал, не было большого количества бухгалтеров, поэтому бегущие столбцы цифр вряд ли привлекли большой интерес публики. Обычно в таких случаях используют графическое представление показаний датчиков либо в виде трехмерной диаграммы, либо в виде трех отдельных графиков. Это очень наглядная демонстрация, которая, впрочем, не вполне характеризует все возможности BNO055. Есть более эффектный способ продемонстрировать встроенные функции цифровой обработки, реализованные в данном инерционном модуле (технология sensor fusion).

И в этот раз мне на помощь пришел Adafruit. При посещении веб-страницы, посвященной отладочной плате для BNO055, появляется короткое видео, демонстрирующее трехмерного кролика, движущегося в соответствии с движением прототипа с беспроводным подключением. Код этого проекта стоит первым в списке примеров для BNO055 от Adafruit (рис. 4). Пример с кроликом связан с другим приложением – Processing.

Пример с кроликом стоит первым в списке примеров для BNO055 от Adafruit

Рис. 4. Пример с кроликом стоит первым в списке примеров для BNO055 от Adafruit

Ранее я уже был знаком с Processing. Это отличный язык для разработчиков встраиваемых систем. Он помогает преобразовывать поток данных в изображения на экране ПК, что оказывается гораздо более наглядным, чем поток текста в окне терминала. Processing также был основой для Wiring, а Wiring – базовый язык для Arduino. Как и ожидалось, импорт примера с кроликом из Arduino в Atmel Studio 7 прошел безупречно. После установки нескольких пакетов поддержки для Processing я решил еще раз проверить правильность работы устройства с помощью терминала (рис. 5).

Поток данных от датчика BNO055

Рис. 5. Поток данных от датчика BNO055

Формат потока данных подтвердил, что я работал с углами Эйлера, а не с кватернионами. Это было важно, потому что могло вызвать проблемы при повороте на 180 градусов из-за особенностей библиотеки.

Беглый взгляд на программный код трехмерного кролика в программе Processing показал, что размер окна объекта составляет 640 × 480 пикселей (рис. 6). Сложно получить качественную картинку с разрешением, пригодным для 20-дюймовых мониторов. ЭЛТ-мониторы давно устарели и вышли из употребления. Таких мониторов нет даже в моем гараже, в котором хранится куча винтажной электроники. Поэтому я увеличил разрешение до 1024 × 768 и соответствующим образом настроил смещения и масштабирование.

Код трехмерного кролика в программе Processing

Рис. 6. Код трехмерного кролика в программе Processing

Как и ожидалось, кролик вращался, когда я менял положение платы 10DOF Click с инерционным модулем BNO055 (рис. 7).

Как и ожидалось, кролик вращался в соответствии с положением платы 10DOF Click

Рис. 7. Как и ожидалось, кролик вращался в соответствии с положением платы 10DOF Click

Теперь у меня в руках был интерактивный демонстрационный проект, который соответствовал всем основным требованиям для предстоящей выставки:

  • Его легко повторить, легко настроить и он оказывается относительно недорогим;
  • Его можно разложить на отдельные составляющие;
  • Помимо распайки штырей и активации стабилизатора на плате Mega328P Xplained Mini, никаких аппаратных доработок не требуется.

Как и ожидалось при достижении граничных положений 90° или 180° кролик делал оборот, что является следствием особенностей библиотеки.

Сам демонстрационный проект был довольно прост. Однако меня по-настоящему удивила скорость, с которой удалось перейти от стопки отладочных плат к графическому отображению трехмерного вращения на моем ноутбуке. Лично мне потребовалось около часа, чтобы все закончить. Аппаратная реализация проекта основана на двух инструментах: Arduino Shield и mikroBUS. Для работы с программной частью использовались три среды: Arduino IDE, Atmel Studio 7 и Processing.

В аппаратном смысле предложенное решение оказывается максимально простым – достаточно соединить составные части и все работает. Несколько лет назад я был инженером по системным решениям в компании-гиганте, производящей МЭМС-датчики. В те времена создание подобной демонстрации обычно занимало около недели.

Ясно, что следующим шагом развития этого проекта станет добавление беспроводного соединения, тем более что у меня есть запасной сокет mikroBUS, давно ожидающий какой-либо беспроводной платы от MikroElektronika. Также нужно было рассмотреть вопрос с блокировкой при достижении граничных положений 90° или 180°. Однако уже в конце дня у меня было готовое решение, которое я мог без проблем унести в кармане кейса для ноутбука.

Очевидно, что эра быстрого прототипирования уже наступила. Такие компании, как MikroElektronika, Adafruit и, конечно, Microchip, прилагают большие усилия, чтобы помочь разработчикам достигать результата в максимально короткие сроки. Совместимость различных стандартов и аппаратных платформ приводит к тому, что разработчики меньше времени проводят с паяльником и больше внимания уделяют отладке и усовершенствованию устройств. При этом демонстрационные примеры подаются на блюдечке с голубой каемочкой – не бойтесь протянуть руку и взять их.

Производитель: Bosch Gpoup
Наименование
Производитель
Описание Корпус/
Изображение
Цена, руб. Наличие
BMP180
BMP180
Bosch Gpoup
Арт.: 982764 ИНФО PDF
Доступно: 286 шт. 228,00
МЭМС барометр BMP180 Характеристики датчика давления: Диапазон измерения давления: от 300 гПа до 1100 гПа (от -500м от +9000м над уровнем моря); Напряжение питания: 1,8...3,6 В; Сила тока: 5 мкА при скорости опроса - 1 Герц; Уровень шума: 0.06 гПа (0.5м) в грубом режиме (ultra low power mode) и 0.02 гПа (0.17м) а режиме максимального разрешения (advanced resolution mode).…
BMP180 228,00 от 17 шт. 195,00 от 38 шт. 176,00 от 81 шт. 163,00 от 214 шт. 154,00
286 шт.
(на складе)
BNO055
BNO055
Bosch Gpoup
Арт.: 1928114 ИНФО PDF DT
Доступно: 92 шт. 703,00
9-ти осевой датчик положения со встроенным контроллером для обработки сырых данных гироскопов, акселерометров и магнитометров. Рабочие диапазоны акселерометра: ±2, ±4, ±8, ±16g; настраиваемая полоса ФНЧ акселерометра: 1 кГц – менее 8 Гц; рабочие диапазоны гироскопа: от ±125 до ±2000 °/с; настраиваемая полоса ФНЧ гироскопа: 523-12 Гц; рабочий диапазон магнетометра: ±1300 мкТл по осям х, у, ±2500 мкТл по оси z; разрешение магнетометра: ~0,3 мкТл; напряжение питания микросхемы: 2,4–3,6 В; корпус: 28-выводный LGA размером 3,8х5,2х1,13 мм; диапазон рабочих температур: от –40 до 85 °C.
BNO055 703,00 от 6 шт. 603,00 от 13 шт. 542,00 от 27 шт. 502,00 от 69 шт. 477,00
92 шт.
(на складе)
Производитель: DFRobot
Наименование
Производитель
Описание Корпус/
Изображение
Цена, руб. Наличие
Flymaple-A flight controller with 10 DOF IMU
Flymaple-A flight controller with 10 DOF IMU
DFRobot
Арт.: 1074616 ИНФО PDF
Доступно: 2 шт. 2840,00
Flymaple - A flight controller with 10 DOF IMU Многофункциональный контроллер для различных робототехнических проектов. Для обеспечения устойчивого полета или местоположения платформы робота необходим контроллер, главная задача которого состоит в том, чтобы управлять стабилизацией в пространстве путем подачи управляющих сигналов двигателям.…
Flymaple-A flight controller with 10 DOF IMU 2840,00
2 шт.
(на складе)
10 DOF Mems IMU Sensor
10 DOF Mems IMU Sensor
DFRobot
Арт.: 1109790 ИНФО PDF
Поиск
предложений
10 DOF Mems IMU Sensor В датчике интегрированы ADXL345 акселерометр, магнитометр HMC5883L, ITG-3205 гироскоп и BMP085 барометрический датчик давления.…
10 DOF Mems IMU Sensor
-
Поиск
предложений
Производитель: Waveshare Electronics Ltd.
Наименование
Производитель
Описание Корпус/
Изображение
Цена, руб. Наличие
10 DOF IMU Sensor [B]
10 DOF IMU Sensor [B]
Waveshare Electronics Ltd.
Арт.: 1868744 ИНФО PDF OBS
Доступно: 15 шт. 1290,00
10 DOF IMU Sensor [B] 1290,00 от 3 шт. 1110,00 от 7 шт. 995,00 от 15 шт. 921,00 от 38 шт. 875,00
15 шт.
(на складе)
10 DOF IMU Sensor [C]
10 DOF IMU Sensor [C]
Waveshare Electronics Ltd.
Арт.: 2275511 ИНФО PDF
Доступно: 18 шт. 1330,00
10 DOF IMU Sensor [C] 1330,00 от 3 шт. 1140,00 от 7 шт. 1030,00 от 14 шт. 951,00 от 37 шт. 903,00
18 шт.
(на складе)
Производитель: mikroElektronika
Наименование
Производитель
Описание Корпус/
Изображение
Цена, руб. Наличие
clicker 2 for PIC18FJ
clicker 2 for PIC18FJ
mikroElektronika
Арт.: 2236910 ИНФО PDF
Доступно: 3 шт. 1600,00
Clicker 2 for PIC18FJ – компактный отладочный набор на основе микроконтроллера  PIC18F87J50 с двумя сокетами mikroBUS™ для подключения к соответствующим платам расширения семейства click boards
clicker 2 for PIC18FJ 1600,00 от 3 шт. 1600,00 от 5 шт. 1600,00 от 12 шт. 1600,00 от 24 шт. 1600,00
3 шт.
(на складе)
Производитель: Microchip Technology Inc.
Наименование
Производитель
Описание Корпус/
Изображение
Цена, руб. Наличие
ATMEGA328PB-XMINI
ATMEGA328PB-XMINI
Microchip Technology Inc.
Арт.: 2399587 ИНФО PDF AN RD
Доступно: 62 шт. от 1 шт. от 1351,68
Выбрать
условия
поставки
Аппаратная платформа для оценки микроконтроллера ATMEGA328PB
ATMEGA328PB-XMINI от 1 шт. от 1351,68
62 шт.
(под заказ)
Выбрать
условия
поставки

Сравнение позиций

  • ()