- PVSM.RU - https://www.pvsm.ru -
Недавно мы получили подарок для нашей мастерской от одного из ведущих производителей учебных наборов по электронике в России — от Амперки [1]. Плата Strela [2] — это новая разработка компании и они предложили нам попробовать применить ее в реальных условиях.
Основная идея платформы Strela — отказ от модульного принципа построения робототехнического Arduino-проекта. Вместо набора шилдов, Амперка предлагает использовать одну универсальную плату, в которой реализован функционал многих шилдов.
В статье я предлагаю вам свой взгляд на то, что из этого получилось, и расскажу, как мы построили своего робота, управляемого по bluetooth с Android-смартфона. Я постарался быть максимально беспристрастным, но определенная доля субъективности, конечно, присутствует.
Я преподаю специальные дисциплины в радиотехническом колледже и в свободное время занимаюсь со студентами проектной деятельностью. Это нельзя назвать кружком в привычном понимании этого слова. У меня просто есть группа молодых людей, которые индивидуально или в очень маленьких группах работают над тем что им нравится. Кто-то занимается 3D-печатью, кто-то коптерами, кто-то программированием и т.д. То есть я имею представление об обучении людей электронике на практике.
На основном месте работы я профессионально занимаюсь разработкой электроники и имею большой опыт работы над настоящими железными проектами. Я могу высказать свои впечатления не только как учитель, но и как инженер.
Когда мне предложили попробовать использовать в своей работе Стрелу и поделиться полученным опытом я, кончено, сразу согласился. Все, что Амперка нам подарила, я в полном комплекте передал одному из своих студентов, который заинтересовался задачей, и вот что он сделал:
Итак, перейдем к описанию комплектующих.
Платформа Strela [2] — это Arduino-совместимая плата, полностью подготовленная для строительства роботов. Она разработана компанией Амперка и совмещает в себе практически все, что может понадобиться для быстрой постройки робота. Построена на основе контроллера Atmega32u4 и работать с ней надо, как с Arduino Leonrdo. Приехала она нам вот в такой коробочке:
Вообще, Амперка внимательно относится к упаковке. Все их продукты аккуратно упакованы в специально разработанные коробочки. Ориентируются они в первую очередь на довольно юную аудиторию и, я думаю, ребятам приятно получать свои покупки в таком виде, а не завернутые в пупырчатую пленку.
В коробке сама плата:
При первом взгляде я удивился, что в коробочке ничего кроме платы нет. Позже, начав работать с платой, я не раз возвращался к этой мысли, но так и не смог придумать, что бы еще могло в ней быть, но так ничего и не придумал. На плате уже установлено действительно много всего, но получать какие-то дешевые плюшки бонусом всегда очень приятно.
Сама плата с лицевой…
… и с обратной стороны:
Вот основные характеристики платы:
Питание
Периферия, установленная на плате
Разъемы для подключения внешних элементов
Надеюсь, читатель простит меня за вольный пересказ. Все характеристики можно найти в вики [3].
На сегодняшний день роботостроители чаще всего используют модульный принцип. То есть им приходится покупать по отдельности практически все эти функции, а потом соединять их вместе.
Примерно так бы выглядел наш робот, сделанный на шилдах:
Strela включает в себя несколько устройств, которые обычно покупают отдельно — Arduino, шилд с драйвером двигателей, преобразователь напряжения и breadboard для прототипирования. Это основная идея платы и у нее есть две стороны.
С одной стороны, если попробовать все эти функции купить в виде раздельных шилдов, то получится намного дороже и больше по размеру. То есть если, к примеру, планировать закупку оборудования для класса робототехники, то Strela становится выгодна даже с экономической точки зрения.
С другой стороны, если есть конкретный проект, который задуман на Arduino и известны все составляющие системы заранее, то скорее всего можно будет обойтись одним-двумя шилдами и получить выигрыш и в стоимости и в размерах.
Мне кажется, что использование платформы будет оправдано в рамках кружка робототехники. Можно будет постоянно переставлять ее на разных роботов, быстро добавлять функции и т.д. В видеообзоре от Амперки они вообще построили робота, в котором реализовали одновременно чуть-ли не весь функционал. Также Стрела может заинтересовать людей, сведущих в программировании, которым в их проекте понадобилась относительно несложная аппаратная часть. Strela прекрасно впишется в качестве исполнителя команд робота телеприсутствия или поможет вдохнуть новую жизнь в сломанную RC-модель.
Подводя итоги этой части, хочется перечислить плюсы и минусы платы. Итак, вот то, что я считаю достоинствами:
А вот то, что лично мне не понравилось:
Вот столько [2] эта плата стоит сейчас. Трудно сказать много это или мало. Вполне может оказаться, что при строительстве робота с нуля это дешевле, чем собрать на шилдах. По моему опыту, цена честная. Именно столько и стоит электроника, если разрабатывать ее в России, продавать официально и организовывать масштабную техническую поддержку.
Также нам подарили удобную двухколесную платформу Turtle [4].
Она довольно крупная и подходит к Стреле с точки зрения мощности двигателей и количества элементов питания во встроенном держателе батарей. На ней уже есть крепления для популярных сенсоров и датчиков.
Помимо контроллера и колесной платформы нам подарили еще много полезных штук:
Для быстрой проверки возможностей системы мы решили собрать робота, управляемого через bluetooth. За основу мы взяли пример из вики по Стреле [3].
Для этого будет достаточно самой платформы Strela, как контроллера, модуля связи, колесной платформы и аккумулятора. Мы решили не использовать батарейный отсек. Вместо этого мы подключили LiPo-аккумулятор на 11,1В, 3А/ч. Дополнительно мы подключили еще и индикатор.
Вот, что у нас получилось в итоге:
Как видите, вся сборка сводится к тому, чтобы собрать шасси [11], прикрутить и соединить платы и подключить десяток проводов.
На этом вся сборка заканчивается и начинается программирование.
Внимательный читатель мог заметить, что количество «ног», которыми управляет Strela, значительно больше чем у Arduino Leonardo. Для одного только ЖК-индикатора их нужно восемь штук. Все это реализовано и работает одновременно благодаря использованию расширителей портов, управляемых через I2C. Использовать возможности этих расширителей было бы довольно трудно новичку, если бы не готовая библиотека Strela [12].
Разработчики электроники очень часто небрежно относятся к вопросам упаковки, документирования и программного обеспечения. Но это не относится к Амперке. Для платы Strela есть масса готовых примеров и отличная библиотека. В ней всего несколько функций для работы с цифровыми выводами, но без них заставить работать одновременно всю возможную периферию было бы очень трудно. Они такие же простые, как стандартные функции Arduino. Их использование позволяет не вдаваться в тонкости использования шины I2C, иначе для начала работы с ней потребовалось гораздо больше времени. На Стреле изменено обозначение выводов по отношению к Arduino, но путаницы в этом не возникает.
Если вы планируете использовать ЖК-дисплей, то лучше скачать гарантированно работающую библиотеку из вики по Стреле. И там же вы найдете примеры работы с ней.
Для управления с телефона, как и в примере, мы использовали готовое приложение Bluetooth RC car [13] из Play Market.
Мой студент уже имел небольшой опыт программирования микроконтроллеров на C и написания программ для операционных систем. С освоением Стрелы у него не возникло никаких проблем. Добавление индикатора было его инициативой, из чего я сделал вывод что ему действительно понравилось. На индикатор он вывел установленную в приложении скорость (а точнее относительную скважность ШИМ-сигнала)
Я выложу его код в первозданном виде, просто чтобы показать что он есть и что его писал человек с небольшим опытом. Вы можете заглянуть под спойлер, но вы не найдете там ни идеального кода, ни чего-то нового.
#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. Уверен, что на соревнованиях наша команда будет выглядеть достойно. Ребята уже начали работать над роботом:
Страница продукта на сайте Амперки [2]
Вики [3]
Схема [14]
Библиотека [12]
Официальный обзор от Амперки [15]
Я сам люблю программировать микроконтроллеры на C и изо всех сил продвигаю инструменты для прошивки Arduino-совместимого железа хорошим ПО, поэтому для продвинутых пользователей добавлю описание прошивки произвольного hex-файла в память Atmega32u4 при помощи бутлоадера. Со слов инженера Амперки:
Вариант 1:
Вариант 2 — использовать ino [16]
Автор: ssg1712
Источник [17]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/arduino/81761
Ссылки в тексте:
[1] Амперки: http://amperka.ru/
[2] Strela: http://amperka.ru/product/strela
[3] вики: http://wiki.amperka.ru/%D0%BF%D1%80%D0%BE%D0%B4%D1%83%D0%BA%D1%82%D1%8B:strela
[4] двухколесную платформу Turtle: http://amperka.ru/product/turtle-chassis
[5] Модуль Bluetooth Bee: http://amperka.ru/product/bluetooth-bee
[6] Текстовый экран 8х2: http://amperka.ru/product/text-lcd-8x2
[7] аналоговых датчика линии: http://amperka.ru/product/analog-line-sensor
[8] Инфракрасный дальномер 10-80см: http://amperka.ru/product/infrared-range-meter-80
[9] креплением: http://amperka.ru/product/irm-bracket
[10] инфракрасных датчика препятствий: http://amperka.ru/product/infrared-sensor-switch
[11] собрать шасси: http://wiki.amperka.ru/%D1%80%D0%BE%D0%B1%D0%BE%D1%82%D0%BE%D1%82%D0%B5%D1%85%D0%BD%D0%B8%D0%BA%D0%B0:%D0%B4%D0%B2%D1%83%D1%85%D0%BA%D0%BE%D0%BB%D1%91%D1%81%D0%BD%D0%B0%D1%8F-%D0%BF%D0%BB%D0%B0%D1%82%D1%84%D0%BE%D1%80%D0%BC%D0%B0-%D1%81%D0%B1%D0%BE%D1%80%D0%BA%D0%B0
[12] Strela: https://github.com/amperka/Strela
[13] Bluetooth RC car: https://play.google.com/store/apps/details?id=braulio.calle.bluetoothRCcontroller
[14] Схема: http://files.amperka.ru/schematics/strela-schematic.png
[15] Официальный обзор от Амперки: http://blog.amperka.ru/%D0%BD%D0%BE%D0%B2%D0%BE%D0%B5-%D0%B4%D0%B5%D1%82%D0%B8%D1%89%D0%B5-%D0%BA%D0%BE%D0%BC%D0%BF%D0%B0%D0%BD%D0%B8%D0%B8-%D0%B0%D0%BC%D0%BF%D0%B5%D1%80%D0%BA%D0%B0-%D1%80%D0%BE%D0%B1%D0%BE%D1%82
[16] ino: https://github.com/amperka/ino
[17] Источник: http://habrahabr.ru/post/249753/
Нажмите здесь для печати.