Огляд робототехнічної платформи Strela або простий bluetooth-бот своїми руками

Нещодавно ми отримали подарунок для нашої майстерні від одного з провідних виробників навчальних наборів по електроніці в Росії — від Амперки. Плата Strela — це нова розробка компанії і вони запропонували нам спробувати застосувати її в реальних умовах.
Основна ідея платформи Strela — відмова від модульного принципу побудови робототехнического Arduino-проекту. Замість набору шилдов, Амперка пропонує використовувати одну універсальну плату, в якій реалізований функціонал багатьох шилдов.

У статті я пропоную вам свій погляд на те, що з цього вийшло, і розповім, як ми побудували свого робота, керованого по bluetooth з Android-смартфона. Я намагався бути максимально неупередженим, але певна частка суб'єктивності, звичайно, присутня.


Передісторія
Я викладаю спеціальні дисципліни в радіотехнічному коледжі та у вільний час займаюся із студентами проектною діяльністю. Це не можна назвати гуртком у звичному розумінні цього слова. У мене просто є група молодих людей, які індивідуально або в малих групах працюють над тим, що їм подобається. Хтось займається 3D печаткою, хтось коптерами, хтось програмуванням і т. д. тобто я маю уявлення про навчання людей електроніці на практиці.
На основному місці роботи я професійно займаюся розробкою електроніки і маю великий досвід роботи над цими залізними проектами. Я можу висловити свої враження не тільки вчитель, але і як інженер.
Коли мені запропонували спробувати використовувати у своїй роботі Стрілу і поділитися отриманим досвідом я, звісно, одразу погодився. Все, що Амперка нам подарувала, я в повному комплекті передав одному зі своїх студентів, який зацікавився завданням, і ось що він зробив:
Отже, перейдемо до опису комплектуючих.

Strela
Платформа Strela — це Arduino-сумісна плата, повністю підготовлена для будівництва роботів. Вона розроблена компанією Амперка і поєднує в собі практично все, що може знадобитися для швидкої побудови робота. Побудована на основі контролера Atmega32u4 і працювати з нею треба, як з Arduino Leonrdo. Приїхала вона нам ось в такій коробочці:

Взагалі, Амперка уважно ставиться до упаковки. Всі їх продукти акуратно упаковані в спеціально розроблені коробочки. Орієнтуються вони в першу чергу на досить юну аудиторію і, я думаю, хлопцям приємно отримувати свої покупки в такому вигляді, а не загорнуті в пухирчатою плівку.

У коробці сама плата:

При першому погляді я здивувався, що в коробочці нічого крім плати немає. Пізніше, почавши працювати з платою, я не раз повертався до цієї думки, але так і не зміг придумати, що б ще могло в ній бути, але так нічого і не придумав. На платі вже встановлено дійсно багато всього, але отримувати якісь дешеві плюшки бонусом завжди дуже приємно.
Сама плата з лицьової…

… і із зворотного боку:


Ось основні характеристики плати:
Харчування
  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 включає в себе кілька пристроїв, які зазвичай купують окремо — Arduino, шилд з драйвером двигунів, перетворювач напруги і breadboard для прототипування. Це основна ідея плати і у неї є дві сторони.
З одного боку, якщо спробувати всі ці функції купити у вигляді окремих шилдов, то вийде набагато дорожче і більше за розміром. Тобто якщо, наприклад, планувати закупівлю обладнання для класу робототехніки, то Strela стає вигідна навіть з економічної точки зору.
З іншого боку, якщо є конкретний проект, який задуманий на Arduino і відомі всі складові системи заздалегідь, то швидше за все можна буде обійтися одним-двома шилдами і отримати виграш у вартості і в розмірах.
Мені здається, що використання платформи буде виправдано в рамках гуртка робототехніки. Можна буде постійно переставляти її на різних роботів, швидко додавати функції і т. д. У відеоогляді від Амперки вони взагалі побудували робота, в якій реалізували одночасно мало не весь функціонал. Також Стріла може зацікавити людей, обізнаних у програмуванні, яким в їх проекті знадобилася відносно нескладна апаратна частина. Strela чудово впишеться в якості виконавця команд робота телеприсутності чи допоможе вдихнути нове життя в зламану RC-модель.
Підводячи підсумки цієї частини, хочеться перерахувати плюси і мінуси плати. Отже, ось те, що я вважаю переваги:
  • Зовні одна плата виглядає краще, ніж набір шилдов. Як мінімум, вона буде виділятися на тлі інших роботів
  • Менше з'єднань доведеться робити навісним монтажем. Простіше збірка, вище надійність
  • Кріпильні отвори на платі повторюють розташування отворів на Arduino Uno і є додаткові чотири отвори
  • Докладна документація з величезною кількістю прикладів (складу основні посилання в кінці статті)
  • Бібліотека для роботи з платою. Про неї ми пізніше поговоримо окремо
  • Коробочка
А ось те, що особисто мені не сподобалося:
  • Дуже часто схемотехніка зроблена без запасу міцності. Але чи потрібна в домашньому роботостроении екстремальна безвідмовність?
  • Я не люблю білу маску. Я розумію, що з нею плати виглядають цікавіше, а під нею нічого не видно!
  • 5-ти вольтова частина плати харчується від одного джерела живлення. Я б зробив роздільні стабілізатори для цифрової та силової частини
  • Все-таки плата за моїми мірками велика — 100х80мм. Велика і всі
  • Strela несумісна з шилдами для Arduino. Для цього немає стадартного посадкового місця
  • Про комплектації я вже казав
Ось стільки ця плата коштує зараз. Важко сказати багато це чи мало. Цілком може виявитися, що при будівництві робота з нуля це дешевше, ніж зібрати на шилдах. З мого досвіду, чесна ціна. Саме стільки і коштує електроніка, якщо розробляти її в Росії, офіційно продавати і організовувати масштабну технічну підтримку.

Шасі для робота
Також нам подарували зручну двоколісний платформу Turtle.

Вона досить велика і підходить до Стрілі з точки зору потужності двигунів і кількості елементів живлення у вбудованому тримачі батарей. На ній вже є кріплення для популярних сенсорів і датчиків.

Bluetooth-модуль, датчики і індикатор
Крім контролера і колісної платформи нам подарували ще багато корисних штук:

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


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

Як бачите, вся збірка зводиться до того, щоб зібрати шасі, прикрутити і з'єднати плати і підключити десяток проводів.
На цьому вся збірка закінчується і починається програмування.

Програмування Стріли
Уважний читач міг помітити, що кількість «ніг», якими управляє 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("Привіт");
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') //або якщо прийшла команда "І", їдемо вперед і направо
drive(defaultSpeed+velocity, defaultSpeed-velocity);

else if (dataIn == 'H') //або якщо прийшла команда "J", їдемо назад і направо
drive(-defaultSpeed-velocity, -defaultSpeed+velocity);

else if (dataIn == '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. Впевнений, що на змаганнях наша команда буде виглядати гідно. Хлопці вже почали працювати над роботом:


Джерела матеріалів
Сторінка продукту на сайті Амперки
Вікі
Схема
Бібліотека
Офіційний огляд від Амперки

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

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.