Обзор робототехнической платформы Strela или простой bluetooth-бот своими руками

в 10:17, , рубрики: arduino, bluetooth-бот, diy или сделай сам, Strela, Амперка, Блог компании MakeItLab, Программирование робототехники, Электроника для начинающих, метки: , ,

Недавно мы получили подарок для нашей мастерской от одного из ведущих производителей учебных наборов по электронике в России — от Амперки. Плата Strela — это новая разработка компании и они предложили нам попробовать применить ее в реальных условиях.
Основная идея платформы Strela — отказ от модульного принципа построения робототехнического Arduino-проекта. Вместо набора шилдов, Амперка предлагает использовать одну универсальную плату, в которой реализован функционал многих шилдов.
Обзор робототехнической платформы Strela или простой bluetooth-бот своими руками - 1
В статье я предлагаю вам свой взгляд на то, что из этого получилось, и расскажу, как мы построили своего робота, управляемого по bluetooth с Android-смартфона. Я постарался быть максимально беспристрастным, но определенная доля субъективности, конечно, присутствует.

Предыстория

Я преподаю специальные дисциплины в радиотехническом колледже и в свободное время занимаюсь со студентами проектной деятельностью. Это нельзя назвать кружком в привычном понимании этого слова. У меня просто есть группа молодых людей, которые индивидуально или в очень маленьких группах работают над тем что им нравится. Кто-то занимается 3D-печатью, кто-то коптерами, кто-то программированием и т.д. То есть я имею представление об обучении людей электронике на практике.
На основном месте работы я профессионально занимаюсь разработкой электроники и имею большой опыт работы над настоящими железными проектами. Я могу высказать свои впечатления не только как учитель, но и как инженер.
Когда мне предложили попробовать использовать в своей работе Стрелу и поделиться полученным опытом я, кончено, сразу согласился. Все, что Амперка нам подарила, я в полном комплекте передал одному из своих студентов, который заинтересовался задачей, и вот что он сделал:

Итак, перейдем к описанию комплектующих.

Strela

Платформа Strela — это Arduino-совместимая плата, полностью подготовленная для строительства роботов. Она разработана компанией Амперка и совмещает в себе практически все, что может понадобиться для быстрой постройки робота. Построена на основе контроллера Atmega32u4 и работать с ней надо, как с Arduino Leonrdo. Приехала она нам вот в такой коробочке:
Обзор робототехнической платформы Strela или простой bluetooth-бот своими руками - 2
Вообще, Амперка внимательно относится к упаковке. Все их продукты аккуратно упакованы в специально разработанные коробочки. Ориентируются они в первую очередь на довольно юную аудиторию и, я думаю, ребятам приятно получать свои покупки в таком виде, а не завернутые в пупырчатую пленку.
Обзор робототехнической платформы Strela или простой bluetooth-бот своими руками - 3
В коробке сама плата:
Обзор робототехнической платформы Strela или простой bluetooth-бот своими руками - 4
При первом взгляде я удивился, что в коробочке ничего кроме платы нет. Позже, начав работать с платой, я не раз возвращался к этой мысли, но так и не смог придумать, что бы еще могло в ней быть, но так ничего и не придумал. На плате уже установлено действительно много всего, но получать какие-то дешевые плюшки бонусом всегда очень приятно.
Сама плата с лицевой…
Обзор робототехнической платформы Strela или простой bluetooth-бот своими руками - 5
… и с обратной стороны:
Обзор робототехнической платформы Strela или простой bluetooth-бот своими руками - 6

Вот основные характеристики платы:
Питание

  1. Входное напряжение: 7-24В. От этого же напряжения питается драйвер двигателя
  2. Встроенный импульсный стабилизатор на 5В, 3А. Сама плата потребляет очень мало, то есть все это можно использовать для питания подключаемых элементов (датчиков, сервоприводов и т.д.)
  3. Линейный стабилизатор на 3,3В для питания модулей связи
  4. Питание от USB. На Стреле установлен компаратор, который при отключении основного питания автоматически переключается на питание от USB-порта. Нагрузочная способность по 5-ти вольтовому каналу при этом упадет до 500мА, а силовые выходы на двигатели перестанут работать

Периферия, установленная на плате

  1. Драйвер двигателей L298P
  2. Пьезоизлучатель без встроенного генератора. Может быть использован для воспроизведения произвольной мелодии
  3. Переключатель RESET. То есть именно переключатель. Он, по сути, служит выключателем платы. Можно отключить плату если поставить внешний тумблер на питание, а можно просто "выключить" микроконтроллер переключателем RESET
  4. Четыре пользовательских кнопки без фиксации
  5. Четыре пользовательских светодиода
  6. Десять индикаторных светодиодов состояния двигателей, питания и линий передачи

Разъемы для подключения внешних элементов

  1. Две клеммные колодки для подключения двух моторов постоянного тока по 2А, либо одного мощного на 4А, либо одного шагового двигателя
  2. 12 стандартных трехконтактных PLS-разъемов (GND, 5V, SIG). К ним можно подключать разнообразные датчики, сервоприводы и т.д. Восемь из них могут работать, как аналоговые входы и 4 как PWM-выходы
  3. Разъем для установки модулей связи. Вся необходимая обвязка уже есть на плате — остается только установить нужный модуль формата XBee
  4. Разъем для подключения ИК-приемника для управления с пульта по оптическому каналу
  5. Разъем для подключения жидкокристаллических дисплеев
  6. Интерфейсы TWI/I2C, SPI, UART

Надеюсь, читатель простит меня за вольный пересказ. Все характеристики можно найти в вики.
На сегодняшний день роботостроители чаще всего используют модульный принцип. То есть им приходится покупать по отдельности практически все эти функции, а потом соединять их вместе.
Примерно так бы выглядел наш робот, сделанный на шилдах:
Обзор робототехнической платформы Strela или простой bluetooth-бот своими руками - 7
Strela включает в себя несколько устройств, которые обычно покупают отдельно — Arduino, шилд с драйвером двигателей, преобразователь напряжения и breadboard для прототипирования. Это основная идея платы и у нее есть две стороны.
С одной стороны, если попробовать все эти функции купить в виде раздельных шилдов, то получится намного дороже и больше по размеру. То есть если, к примеру, планировать закупку оборудования для класса робототехники, то Strela становится выгодна даже с экономической точки зрения.
С другой стороны, если есть конкретный проект, который задуман на Arduino и известны все составляющие системы заранее, то скорее всего можно будет обойтись одним-двумя шилдами и получить выигрыш и в стоимости и в размерах.
Мне кажется, что использование платформы будет оправдано в рамках кружка робототехники. Можно будет постоянно переставлять ее на разных роботов, быстро добавлять функции и т.д. В видеообзоре от Амперки они вообще построили робота, в котором реализовали одновременно чуть-ли не весь функционал. Также Стрела может заинтересовать людей, сведущих в программировании, которым в их проекте понадобилась относительно несложная аппаратная часть. Strela прекрасно впишется в качестве исполнителя команд робота телеприсутствия или поможет вдохнуть новую жизнь в сломанную RC-модель.
Подводя итоги этой части, хочется перечислить плюсы и минусы платы. Итак, вот то, что я считаю достоинствами:

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

А вот то, что лично мне не понравилось:

  • Очень часто схемотехника сделана без запаса прочности. Но нужна ли в домашнем роботостроении экстремальная безотказность?
  • Я не люблю белую маску. Я понимаю, что с ней платы выглядят интересней, но под ней же ничего не видно!
  • 5-ти вольтовая часть платы питается от одного источника питания. Я бы сделал раздельные стабилизаторы для цифровой и силовой части
  • Все-таки плата по моим меркам большая — 100х80мм. Большая и все
  • Strela несовместима с шилдами для Arduino. Для этого нет стадартного посадочного места
  • О комплектации я уже говорил

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

Шасси для робота

Также нам подарили удобную двухколесную платформу Turtle.
Обзор робототехнической платформы Strela или простой bluetooth-бот своими руками - 8
Она довольно крупная и подходит к Стреле с точки зрения мощности двигателей и количества элементов питания во встроенном держателе батарей. На ней уже есть крепления для популярных сенсоров и датчиков.

Bluetooth-модуль, датчики и индикатор

Помимо контроллера и колесной платформы нам подарили еще много полезных штук:
Обзор робототехнической платформы Strela или простой bluetooth-бот своими руками - 9

  1. Модуль Bluetooth Bee, совместимый с платформой и очень простой в использовании. К контроллеру он подключается через UART, а операционные системы видят его как COM-порт. Наверное, самый простой способ подключить что-то к ПК/смартфону без проводов
  2. Текстовый экран 8х2. Очень удобно, если робот может показывать какие-то статусные сообщения, тем более, что этот дисплей поддерживает еще и русский алфавит
  3. Два аналоговых датчика линии для постройки line-tracer'а. В комплекте с ними есть обычные трехжильные кабели для подключения
  4. Инфракрасный дальномер 10-80см с креплением. На выходе у него напряжение, величина которого зависит от измеренного расстояния
  5. Два инфракрасных датчика препятствий. На его выходе либо ноль, либо единица в зависимости от выставленного порога срабатывания и измеренного расстояния

Сборка bluetooth-бота

Для быстрой проверки возможностей системы мы решили собрать робота, управляемого через bluetooth. За основу мы взяли пример из вики по Стреле.
Для этого будет достаточно самой платформы Strela, как контроллера, модуля связи, колесной платформы и аккумулятора. Мы решили не использовать батарейный отсек. Вместо этого мы подключили LiPo-аккумулятор на 11,1В, 3А/ч. Дополнительно мы подключили еще и индикатор.
Вот, что у нас получилось в итоге:
Обзор робототехнической платформы Strela или простой bluetooth-бот своими руками - 10
Как видите, вся сборка сводится к тому, чтобы собрать шасси, прикрутить и соединить платы и подключить десяток проводов.
На этом вся сборка заканчивается и начинается программирование.

Программирование Стрелы

Внимательный читатель мог заметить, что количество «ног», которыми управляет Strela, значительно больше чем у Arduino Leonardo. Для одного только ЖК-индикатора их нужно восемь штук. Все это реализовано и работает одновременно благодаря использованию расширителей портов, управляемых через I2C. Использовать возможности этих расширителей было бы довольно трудно новичку, если бы не готовая библиотека Strela.
Разработчики электроники очень часто небрежно относятся к вопросам упаковки, документирования и программного обеспечения. Но это не относится к Амперке. Для платы Strela есть масса готовых примеров и отличная библиотека. В ней всего несколько функций для работы с цифровыми выводами, но без них заставить работать одновременно всю возможную периферию было бы очень трудно. Они такие же простые, как стандартные функции Arduino. Их использование позволяет не вдаваться в тонкости использования шины I2C, иначе для начала работы с ней потребовалось гораздо больше времени. На Стреле изменено обозначение выводов по отношению к Arduino, но путаницы в этом не возникает.
Если вы планируете использовать ЖК-дисплей, то лучше скачать гарантированно работающую библиотеку из вики по Стреле. И там же вы найдете примеры работы с ней.
Для управления с телефона, как и в примере, мы использовали готовое приложение Bluetooth RC car из Play Market.
Мой студент уже имел небольшой опыт программирования микроконтроллеров на C и написания программ для операционных систем. С освоением Стрелы у него не возникло никаких проблем. Добавление индикатора было его инициативой, из чего я сделал вывод что ему действительно понравилось. На индикатор он вывел установленную в приложении скорость (а точнее относительную скважность ШИМ-сигнала)
Я выложу его код в первозданном виде, просто чтобы показать что он есть и что его писал человек с небольшим опытом. Вы можете заглянуть под спойлер, но вы не найдете там ни идеального кода, ни чего-то нового.

Программа bluetooth-бота

#include <Wire.h> // Библиотека для работы с I2C
#include <Strela.h> // Библиотека для работы со Стрелой
#include <LiquidCrystal_I2C.h>
 
int velocity = 0;  //Здесь будет храниться значение скорости
int defaultSpeed = 100; // это число мы будем использовать в логике поворотов
int start = 1;
LiquidCrystal_I2C lcd(LC_ADDR, LCEN, LCRW, LCRS, LC4, LC5, LC6, LC7);
 
void setup()
{
  Serial1.begin(9600);     //Bluetooth Bee по умолчанию использует эту скорость
  //motorConnection(1, 0);   // Я неправильно прикрутил один мотор
  //поэтому, чтобы их не перекручивать
  //можно воспользоваться этой функцией.
  //Направление вращения мотора 1 будет изменено.
  uDigitalWrite(L2, HIGH);
  uDigitalWrite(L3, HIGH);
  drive(0, 0);
  
  lcd.begin(8, 2);
  lcd.home();
  lcd.print("Hello");
  delay(2000);
  lcd.setCursor(0, 1);
  lcd.print("Load");
  delay(1000);
  lcd.print(".");
  delay(1000);
  lcd.print(".");
  delay(1000);
  lcd.print(".");
  delay(1000);
  lcd.clear();
  lcd.home();
  lcd.print("Connect");
  lcd.home();
}
 
void loop()
{
  
  if (Serial1.available() > 0)    //Если появились новые команды
  {
    if (start==1)
    {
      lcd.print("Conected");
      delay(1000);
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print("Speed");
      lcd.setCursor(0, 1);
      start = 0;
    }   //вызываем функцию управления
    control(); 
  }
  //Здесь можно написать ещё много своего кода
}
 
void control()  // функция управления
{
  
  
  char dataIn = Serial1.read();  //Считаем значение пришедшей команды
 
  if (dataIn == 'F')         //Если пришла команда "F"
    drive(velocity, velocity);   //едем вперёд
 
  else if (dataIn == 'B')    //или если пришла команда "B"
    drive(-velocity, -velocity); //едем назад
 
  else if (dataIn == 'R')    //или если пришла команда "L"
    drive(-velocity, velocity);  //поворачиваем налево на месте
 
  else if (dataIn == 'L')    //или если пришла команда "R"
    drive(velocity, -velocity);  //поворачиваем направо на месте
 
  else if (dataIn == 'G')    //или если пришла команда "I", едем вперёд и направо
    drive(defaultSpeed+velocity, defaultSpeed-velocity);
 
  else if (dataIn == 'H')    //или если пришла команда "J", едем назад и направо
    drive(-defaultSpeed-velocity, -defaultSpeed+velocity);
 
  else if (dataIn == 'I')   //или если пришла команда "I", едем вперёд и налево
    drive(defaultSpeed-velocity, defaultSpeed+velocity);
 
  else if (dataIn == 'J')   //или если пришла команда "H", едем назад и налево
    drive(-defaultSpeed+velocity, -defaultSpeed-velocity);
 
  else if (dataIn == 'S')   //или если пришла команда "S", стоим
    drive(0, 0);
 
  else if (dataIn == 'U')   //или если "U", зажигаем "передние фары"
  {
    uDigitalWrite(L2, HIGH);
    uDigitalWrite(L3, HIGH);
  }
  else if (dataIn == 'u')   //или если "u", гасим "передние фары"
  {
    uDigitalWrite(L2, LOW);
    uDigitalWrite(L3, LOW);
  }
  else if (dataIn == 'W')   //или если "W", зажигаем "задние фары"
  {
    uDigitalWrite(L1, HIGH);
    uDigitalWrite(L4, HIGH);
  }
  else if (dataIn == 'w')   ////или если "w", гасим "задние фары"
  {
    uDigitalWrite(L1, LOW);
    uDigitalWrite(L4, LOW);
  }
 
  // если к нам пришло значение от 0 до 9
  else if (((dataIn - '0') >= 0) && ((dataIn - '0') <= 9))
  { 
    velocity = (dataIn - '0') * 25; //сохраняем новое значение скорости
    lcd.setCursor(0, 1);
    lcd.print("   ");
    lcd.setCursor(0, 1);
    lcd.print(velocity);
    lcd.setCursor(0, 1);
  }
 
  else if (dataIn == 'q') //если "q" - полный газ!
  {
    velocity = 255;
    lcd.print(velocity);
    lcd.setCursor(0, 1);
  }
}

Код почти целиком заимствован из готовых примеров.

Итоги

Strela — довольно удобная платформа для применения в различных робототехнических проектах. Мне кажется, при обучении или в проектах выходного дня, рутинная работа по накатыванию плат ЛУТом или навесному монтажу должна сводиться к минимуму. Иначе растерять энтузиазм очень легко.
У нас родилось много идей по использованию Стрелы. В ближайшее время мы хотим напечатать новую раму для него, установить датчик линии и сделать робота, двигающегося по линии, с возможностью ручного управления через bluetooth. Уверен, что на соревнованиях наша команда будет выглядеть достойно. Ребята уже начали работать над роботом:
Обзор робототехнической платформы Strela или простой bluetooth-бот своими руками - 11

Источники материалов

Страница продукта на сайте Амперки
Вики
Схема
Библиотека
Официальный обзор от Амперки

PS

Я сам люблю программировать микроконтроллеры на C и изо всех сил продвигаю инструменты для прошивки Arduino-совместимого железа хорошим ПО, поэтому для продвинутых пользователей добавлю описание прошивки произвольного hex-файла в память Atmega32u4 при помощи бутлоадера. Со слов инженера Амперки:
Вариант 1:

  1. Открываем терминал, пишем там: C:Program Files (x86)Arduino/hardware/tools/avr/bin/avrdude -CC:Program Files (x86)Arduino/hardware/tools/avr/etc/avrdude.conf -v -v -v -v -patmega32u4 -cavr109 -PCOM19 -b57600 -D -Uflash:w:C:Your_C_FIRMWA.hex:i, где C:Your_C_FIRMWA.hex — файл вашей прошивки, COM19 — вместо 19 — номер COM-порта Стрелы в режиме бутлоадера (отличается от обычного)
  2. Перезагружаем МК
  3. В течении 8 секунда успеваем выполнить на компьютере команду из пункта 1 (проще говоря — жмякаем Enter)
  4. Ждём когда загрузится

Вариант 2 — использовать ino

Автор: ssg1712

Источник

Поделиться

* - обязательные к заполнению поля