====== Strela: инструкция, примеры использования и документация ======
[[amp>product/strela|Strela]] — это Arduino-совместимая платформа, разработанная Амперкой и предназначенная для уменьшения времени на постройку роботов и упрощения работы с ними. Она выполнена на основе микроконтроллера ATMega32u4 и обладает большим количеством цифровых и аналоговых входов/выходов, выведенных на [[сенсоры:3-провода|трёхштырьковые контакты]]. Плата содержит DC-DC-преобразователь, позволяет управлять двумя коллекторными моторами постоянного тока до 2 А на один канал с напряжением до 24 В, подключать модули беспроводной связи и LCD-экран.
{{ :продукты:strela:strela.0.png?nolink& |}}
===== Краткое руководство по использованию =====
Плата программируется в [[articles:arduino-ide-install|Arduino IDE]]. Для начала работы с платой достаточно выбрать в меню //Инструменты → Плата → Arduino Leonardo// и соответствующий COM-порт.
==== Управление GPIO ====
{{ :продукты:strela:gpio.png?nolink& |}}
Часть контактов на платформе Strela относятся к основному микроконтроллеру, а часть — к I²C-расширителю портов ввода-вывода. На аппаратном уровне доступ к этим портам ввода-вывода очень сильно различается, но вы можете не переживать по этому поводу. Для облегчения работы с платой в среде Arduino IDE была создана библиотека [[https://github.com/amperka/Strela|Strela]].
Все примеры будут с этой библиотекой.
Простой пример управления этими контактами:
// Подключим библиотеку для работы с I2C-расширителем портов
#include
// Подключим библиотеку Strela
#include
void setup() {
uPinMode(P9, OUTPUT); // это Arduino GPIO. Мы настроим его на выход
uPinMode(P10, OUTPUT); // а это — I²C-GPIO. Его мы тоже настроим на выход
}
void loop() {
uDigitalWrite(P9, HIGH); // подадим на P9 высокий уровень
uDigitalWrite(P10, HIGH); // подадим на P10 высокий уровень
delay(1000);
uDigitalWrite(P9, LOW); // подадим на P9 низкий уровень
uDigitalWrite(P10, LOW); // подадим на P10 низкий уровень
delay(1000);
}
Легко можно обнаружить, что разница в управлении контактами Arduino и контактами I²C-расширителей портов отсутствует, если использовать функции ''uPinMode'', ''uDigitalWrite'' и ''uDigitalRead'' из библиотеки Strela вместо привычных ''pinMode'', ''digitalWrite'' и ''digitalRead''. Конечно, можно использовать и привычные функции управления цифровыми контактами, но они будут работать только с Arduino-контактами. Остальные функции для работы с контактами, такие как ''analogWrite'' или ''analogRead'' остаются без изменения и работают только с предназначенными для них Arduino-контактами.
Обратите внимание на обозначение пинов в коде. Вместо привычных цифр, которые используются в Arduino Leonardo, для обозначения номеров контактов используются значения P9 и P10. Это сделано для унификации доступа к контактам с различным способом управления, а также для упорядочивания пинов.
Давайте теперь считаем уровень с ножек:
// Подключим библиотеку для работы с I2C-расширителем портов
#include
// Подключим библиотеку Strela
#include
void setup() {
uPinMode(P9, INPUT); // это Arduino GPIO. Мы настроим его на вход
uPinMode(P10, INPUT); // а это — I²C-GPIO. Его мы тоже настроим на вход
Serial.begin(9600); //Подготовим к работе Serial-порт
while (!Serial) { // Так как Strela работает на том же контроллере, что и Arduino Leonardo,
; // необходимо дождаться подключения виртуального Serial-порта
}
}
void loop() {
Serial.print("P9 - ");
//Считаем значение с P9
// и отправим его в последовательный порт
Serial.println(uDigitalRead(P9));
Serial.print("P10 - ");
//Считаем значение с P10
// и отправим его в последовательный порт
Serial.println(uDigitalRead(P10));
delay(500);
}
Если посмотреть в терминал, можно увидеть первое отличие — порт P10 будет возвращать 1, а порт P9 — случайное значение. Это происходит потому, что I²C-расширитель портов на своих входах имеет встроенный подтягивающий резистор на 100 кОм. Обычно это нисколько не мешает.
==== Встроенные кнопки и светодиоды ====
Работать со встроенными кнопками и светодиодами можно при помощи тех же функций ''uDigitalRead'' и ''uDigitalWrite''. Так как заранее известно, что светодиоды должны управляться цифровым выходом, а считывать нажатие кнопки нужно с цифрового входа, функция ''uPinMode'' для этих контактов ни к чему не приводит. Их даже не нужно указывать в секции ''setup'', так как библиотека Strela инициализирует периферию автоматически.
// Подключим библиотеку для работы с I2C-расширителем портов
#include
// Подключим библиотеку Strela
#include
void setup() {
}
void loop() {
uDigitalWrite(L1, HIGH); // Зажгём перывый светодиод
delay(1000);
uDigitalWrite(L1, LOW); // И погасим его
delay(1000);
}
В следующем примере мы будем считывать значение с кнопок и зажигать светодиоды. Будем зажигать светодиод под тем же номером, что и нажатая кнопка.
// Подключим библиотеку для работы с I2C-расширителем портов
#include
// Подключим библиотеку Strela
#include
void setup() {
}
void loop() {
for (byte i = S1; i <= S4; ++i) // Будем проверять состояние кнопок по очереди
{
byte buttonNumber = i - S1; //Определим номер текущей кнопки
bool buttonState = uDigitalRead(i); //Считаем положение кнопки
//Подадим считанное значение с кнопки на светодиод с тем же номером
uDigitalWrite(L1 + buttonNumber, buttonState);
}
}
==== Пищалка ====
Добавим к предыдущему скетчу звуковое сопровождение:
// Подключим библиотеку для работы с I2C-расширителем портов
#include
// Подключим библиотеку Strela
#include
void setup() {
}
void loop() {
for (byte i = S1; i <= S4; ++i) // Будем проверять состояние кнопок по очереди
{
byte buttonNumber = i - S1; //Определим номер текущей кнопки
bool buttonState = uDigitalRead(i); //Считаем положение кнопки
if (buttonState) //Если она была нажата...
tone(BUZZER, 1000, 50); //...пикнем пищалкой с частотой 1000 Гц, 50 мс
//Подадим считанное значение с кнопки на светодиод с тем же номером
uDigitalWrite(L1 + buttonNumber, buttonState);
}
}
==== Управление коллекторными двигателями ====
{{ :продукты:strela:strela-motors.png?nolink& |}}
Теперь перейдём к работе с двигателями. О характеристиках рекомендуемых двигателей и источников питания можете прочитать в разделе [[продукты:strela?силовая_часть|«Силовая часть»]].
// Подключим библиотеку для работы с I2C-расширителем портов
#include
// Подключим библиотеку Strela
#include
void setup() {
motorConnection(1, 0);// Я неправильно прикрутил один мотор
//поэтому, чтобы их не перекручивать
//можно воспользоваться этой функцией.
//Направление вращения мотора 1 будет изменено.
}
void loop() {
//Моторы управляются функцией drive(int m1, int m2).
//m1 (m2) - это скорость вращения мотора 1 (2).
//Скорость регулируется в пределах от -255 до 255
//Если это число положительное - мотор будет вращаться вперёд,
//если отрицательное - назад.
//Фаза 1
uDigitalWrite(L1, HIGH); // Зажгли светодиод 1
drive(127, 127); //Средний ход вперёд
delay(2000); // в течении 2 секунд.
//Фаза 2
uDigitalWrite(L2, HIGH); // Зажгли светодиод 2
drive(127, 0); //Поворот на право
delay(1000); // в течении 1 секунды
//Фаза 3
uDigitalWrite(L3, HIGH); // Зажгли светодиод 3
drive(-255, -255); //Полный назад
delay(1000); // в течении 1 секунды
//Фаза 4
uDigitalWrite(L4, HIGH); // Зажгли светодиод 4
for (int i = 0; i <= 255; ++i)
{
drive(i, -i); //Разворот на месте с ускорением
delay(1);
}
//Фаза 5
drive(0, 0); //Стоп
for (int i = L1; i <= L4; i++)
{
uDigitalWrite(i, LOW); // Гасим все светодиоды
}
// Всё, приехали
while (true)
;
}
==== Управление шаговым двигателем ====
{{ :продукты:strela:strela_stepper.png?nolink& |}}
// Подключим библиотеку для работы с I2C-расширителем портов
#include
// Подключим библиотеку Strela
#include
void setup() {
}
void loop() {
// Шаговый двигатель управляется при помощи
// функции stepperMotor(int stepsToMove, int stepDelay);
// stepsToMove — это количество шагов которые должен
// сделать шаговый двигатель.
// Если это число положительное — мотор крутится в одну сторону,
// если отрицательное - в другую.
// stepDelay — это пауза между шагами в миллисекундах.
// От этой величины зависит скорость вращения мотора.
// Чем больше пауза, тем медленнее вращается мотор
// Функция stepperMotor() управляет врщением мотора только в
// полушаговом режиме. В этом режиме шаговый двигатель
// развивает наибольшую мощность и точность позиционирования.
// Быстро шагаем 200 раз вперёд
stepperMotor(200, 5);
// Медленно шагаем 200 раз назад.
// Мотор вернётся в исходное положение
stepperMotor(-200, 10);
}
==== Жидкокристаллический дисплей ====
{{ :продукты:strela:strela-lcd.png? |}}
Подключим к плате LCD-экран [[http://files.amperka.ru/datasheets/MT-08S2A.pdf|MT-08S2A]]. Управлять мы им будем при помощи библиотеки [[https://bitbucket.org/fmalpartida/new-liquidcrystal/downloads|LiquidCrystal_I2C]]. Мы уже добавили гарантированно работающую версию этой библиотеки в папку с библиотекой [[https://github.com/amperka/Strela|Strela]], поэтому отдельно её устанавливать не нужно.
// Подключим библиотеку для работы с I2C-расширителем портов
#include
// Подключим библиотеку Strela
#include
// Подключим библиотеку для работы с LCD-эраном через I2C
#include
// Создадим объект lcd, который будет выводить текст на экран
LiquidCrystal_I2C lcd(LC_ADDR, LCEN, LCRW, LCRS, LC4, LC5, LC6, LC7);
void setup()
{
//Инициализация экрана. У нашего экрана 8 символов 2 строки
lcd.begin(8, 2);
//Переместим курсор в начало первой стройки (символ 0, строка 0)
lcd.home();
//Печатаем строку
lcd.print("Hello");
//Переместим строку в начало второй строки (символ 0, строка 1)
lcd.setCursor(0, 1);
//Печатаем строку
lcd.print("World!");
//Пауза, чтобы успеть насладиться результатом
delay(2000);
}
void loop()
{
// Далее будем просто выводить время прошедшее со старта скетча
//Очищаем экран
lcd.clear();
// выставляем курсор в положение 0, 0
lcd.home();
// Пишем первую строку
lcd.print("Uptime:");
// переместим курсор в начало второй строки
lcd.setCursor(0, 1);
// узнаем время прошедшее со старта скетча в миллисекундах
unsigned long time = millis();
// и выведем его на экран
lcd.print(time);
//Пауза, чтобы успеть насладиться результатом
delay(500);
}
==== Управление через ИК приемник ====
Одним из самых простых способов управления роботом, является управление инфракрасный пультом.
Подключите [[amp>product/ir-receiver|ИК приемник]] в специальный разъем.
{{ :продукты:strela:strela_ireceiver.png?nolink |}}
Для работы С ИК приемником мы изменили библиотеку IRremote, скачать которую можно здесь
{{:продукты:strela:irremote.zip|}}
// бибилиотека для работы со стрелой
#include
// бибилиотека для ИК приёмника
#include
// даем имя пину подключения ИК приёмника
int RECV_PIN = P12;
// даем имя пину на котором расположен встроенный светодиод
int LED_PIN = L1;
// указываем к какому пину подключен ИК приёмник
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup()
{
// инициируем открытие сериал порта и указываем его скорость
Serial.begin(9600);
// запускаем работу ИК приемника
irrecv.enableIRIn();
}
void loop()
{
// принимаем данные с ИК пульта
if (irrecv.decode(&results)) {
// выводим данные в сериал монитор в 16-тиричной системе
Serial.println(results.value, HEX);
// код нашей кнопки "вкл" "1689D02F"
// У вас он будет дугой
// проверяем совпадают ли данные с пульта с данными,
// которые передает пульт при нажатии нашей кнопки
// перед строкой данных соответствующих кнопкам
// ставится 0х , что обозначает 16-тиричную систему исчислений
if (results.value == 0x1689D02F) {
// если совпадают- включаем светодиод
uDigitalWrite(LED_PIN, HIGH);
}
// если ИК приемник получает данные соответствующие
// нажатию другой нашей кнопки на пульте- выключаем светодиод
if (results.value == 0x1689E01F) {
uDigitalWrite(LED_PIN, LOW);
}
// ждем следующее значение
irrecv.resume();
}
//делаем задержку
delay(100);
}
==== Управление роботом с мобильного телефона через Bluetooth-модуль ====
{{ :продукты:strela:bluetoothandmotors.png?nolink& |}}
Подключим к плате [[amp>product/bluetooth-bee|Bluetooth Bee]]. Будем управлять нашим роботом дистанционно с помощью мобильного телефона на ОС Android.
Для Android существует огромное количество приложений, при помощи которых можно управлять Arduino при помощи Bluetooth. В данном случае для управления Strela мы использовали [[https://play.google.com/store/apps/details?id=braulio.calle.bluetoothRCcontroller|Arduino Bluetooth RC Car]].
//Arduino Bluetooth RC Car in Strela
//Original App:
//https://play.google.com/store/apps/details?id=braulio.calle.bluetoothRCcontroller
#include // Библиотека для работы с I2C
#include // Библиотека для работы со Стрелой
int velocity = 0; //Здесь будет храниться значение скорости
int defaultSpeed = 100; // это число мы будем использовать в логике поворотов
void setup()
{
Serial1.begin(9600); //Bluetooth Bee по умолчанию использует эту скорость
motorConnection(1, 0); // Я неправильно прикрутил один мотор
//поэтому, чтобы их не перекручивать
//можно воспользоваться этой функцией.
//Направление вращения мотора 1 будет изменено.
}
void loop()
{
if (Serial1.available() > 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 == 'L') //или если пришла команда "L"
drive(-velocity, velocity); //поворачиваем налево на месте
else if (dataIn == 'R') //или если пришла команда "R"
drive(velocity, -velocity); //поворачиваем направо на месте
else if (dataIn == 'I') //или если пришла команда "I", едем вперёд и направо
drive(defaultSpeed + velocity, defaultSpeed - velocity);
else if (dataIn == 'J') //или если пришла команда "J", едем назад и направо
drive(-defaultSpeed - velocity, -defaultSpeed + velocity);
else if (dataIn == 'G') //или если пришла команда "I", едем вперёд и налево
drive(defaultSpeed - velocity, defaultSpeed + velocity);
else if (dataIn == 'H') //или если пришла команда "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; //сохраняем новое значение скорости
else if (dataIn == 'q') //если "q" - полный газ!
velocity = 255;
}
Вот что из этого получилось:
{{youtube>WyJQ7y7ito0?large}}
===== Элементы платы =====
Теперь рассмотрим подробнее все компоненты и разъёмы, которые можно встретить
на плате с точки зрения схемотехники.
==== Микроконтроллер ATmega32u4====
{{ :продукты:strela:strela-elem-amega.png?nolink& |}}
В плате использован микроконтроллер **ATMega32u4** с прошитым загрузчиком Arduino Leonardo. Микроконтроллер программируется через USB-порт в [[arduino-быстрый-старт:start|Arduino IDE]]. Работая с платой в Arduino IDE, необходимо выбирать плату Arduino Leonardo.
== Контакты для управления мощной нагрузкой ==
Контакты питания пинов **P1–P4** соединены короткими и широкими контактными дорожками с DC–DC преобразователем. Это позволяет подключать к этим контактам достаточно мощную нагрузку, например [[робототехника:сервоприводы|сервоприводы]]. Так же они подходят для подключения [[сенсоры:цифровые|цифровых сенсоров]].
== Контакты для аналоговых датчиков ==
Пины **P4-P9**, а так же **P11** и **P12** могут быть использованы не только как цифровые входы/выходы. Они так же подходят для подключения [[сенсоры:аналоговые|сенсоров с аналоговым сигналом]].
== Соответствие контактов Strela и Arduino Leonardo ==
^ Strela ^ Arduino Leonardo ^ Доступные функции ^
| **P1** | 11 |Цифровой вход/выход, [[конспект-arduino:шим|ШИМ]].|
| **P2** | 13 |Цифровой вход/выход, [[конспект-arduino:шим|ШИМ]].|
| **P3** | 5 |Цифровой вход/выход, [[конспект-arduino:шим|ШИМ]].|
| **P4** | 6, A7 |Цифровой вход/выход, [[конспект-arduino:шим|ШИМ]], аналоговый вход.|
| **P5** | A3 |Цифровой вход/выход, аналоговый вход.|
| **P6** | A2 |Цифровой вход/выход, аналоговый вход.|
| **P7** | A1 |Цифровой вход/выход, аналоговый вход.|
| **P8** | A0 |Цифровой вход/выход, аналоговый вход.|
| **P9** | 8, A8 |Цифровой вход/выход, аналоговый вход.|
| **P11** | A4 |Цифровой вход/выход, аналоговый вход.|
| **P12 (IR)** | A5 |Цифровой вход/выход, аналоговый вход. Strela использует этот же контакт как **вход для ИК-приёмника**. Управление с бытового ИК-пульта управления возможно с помощью библиотеки [[https://github.com/shirriff/Arduino-IRremote|IRremote]].|
== Контакты специального назначения ==
Некоторые стандартные контакты имеют специальное назначение, поскольку именно они управляют установленным на Strela оборудованием, или отвечают за коммуникацию.
^ Контакты Arduino Leonardo ^ Конфигурация ^ Функция ^
| 12 | OUTPUT | Пищалка — встроенный [[конспект-arduino:пьезодинамик|пьезодинамик]], который воспроизвоидт звук с помощью стандартной функции [[конспект-arduino:терменвокс?s[]=tone|tone()]].|
| 7 | INPUT | Этот контакт подключён к I2С-расширителям портов, для обнаружения изменения напряжения на их входах. Этот контакт можно использовать для [[конспект-arduino:перетягивание-каната?s[]=attachinterrupt|прерывания основной программы по изменению уровня]].|
| 9 | OUTPUT |Подключён к драйверу двигателей. Используется для задания скорости вращения мотора М1 при помощи [[конспект-arduino:шим|ШИМ]].|
| 10 | OUTPUT |Подключён к драйверу двигателей. Используется для задания скорости вращения мотора М2 при помощи [[конспект-arduino:шим|ШИМ]].|
| 4 | OUTPUT |Подключён к драйверу двигателей. Используется для задания направления вращения мотора М1.|
| ~ (PE2) | OUTPUT |Подключён к драйверу двигателей. Используется для задания направления вращения мотора М2.|
== Коммуникация ==
^ Порт связи ^ Контакты Arduino Leonardo ^ Функция ^ Использование ^
| **Serial** | 0, 1 | RX, TX |Используется для связи по последовательному протоколу с модулем беспроводной связи, если он подключён, или с другими устройствами. Программно передача происходит с помощью [[http://arduino.cc/en/reference/serial|Serial1]]. Если в вашем проекте не используются устройства с последовательным протоколом, эти контакты могут быть использованы как обычные цифровые пины.|
| **SPI** | 14, 15, 16 | MISO, SCK, MOSI |SPI-порт доступен на колодке ICSP {{ :продукты:strela:icsp.png?nolink&100|}}. Используется для связи по протоколу SPI. Передача данных происходит с помощью библиотеки [[http://arduino.cc/en/Reference/SPI|SPI]]. Если в вашем проекте не используются периферийные устройства с подключением по SPI, эти контакты могут быть использованы как обычные цифровые пины. Контактная колодка ICSP может использоваться для программирования платы с помощью [[программирование:работа-с-attiny-через-stk500-и-чистый-си|программатора]].|
| **I2С(TWI)** | 2, 3 | SDA, SCL |Используются для коммуникации по шине I2С. По этим пинам управляются встроенные I2С-расширители портов, поэтому использовать их в других целях не получится. К ним может быть подключено и другое оборудование, управляемое по I2С. Передача данных происходит с помощью библиотеки [[http://arduino.cc/en/reference/wire|Wire]].|
| **USB** | USB-разъём тип B | Виртуальный Serial-порт |Используется для прошивки платы из Arduino IDE и связи по последовательному протоколу с компьютером. Программно передача происходит с помощью [[http://arduino.cc/en/reference/serial|Serial]].|
== Площадка для подключения модулей беспроводной связи ==
{{ :продукты:strela:bee.png?nolink&|}}
На плате присутствует площадка для подключения модулей беспроводной связи формата [[беспроводная-связь:настройка-xbee-series-2|XBee]]. Это могут быть модули для связи по протоколу XBee, Bluetooth или Wi-Fi.
На площадке установлен линейный регулятор напряжения на 3,3 В. Ведь именно это напряжение является традиционным для XBee-модулей. Общение между модулем беспроводной связи и платой происходит
через последовательный интерфейс. При написании кода этот последовательный интерфейс доступен через объект ''Serial1''.
При необходимости модули XBee могут перезагружать микроконтроллер ATmega32u4, выставляя на контакте 12 площадки логическую единицу.
== Сброс ==
На плате присутствует переключатель, который бывает полезен при отладке или при подготовке к старту на соревнованиях. В положении «RESET» контакт Reset микроконтроллера замыкается на землю. В таком положении на микроконтроллер подано напряжение, но он не работает. Чтобы запустить микроконтроллер необходимо перевести рычажок в положение «ON».
==== Силовая часть ====
{{ :продукты:strela:strela-elem-power.png?nolink& |}}
== Питание ==
Клеммники под винт для подключения питания на плате обозначены как **PWR**. К ним подключается источник питания, который будет использоваться для питания моторов. Напряжение питания должно быть в пределах 7–24 В постоянного тока.
{{:продукты:magic-fogg.png?nolink |}}**//Внимание!//**
При подключении питания соблюдайте полярность. Неправильное подключение может привести к непредсказуемому поведению или выходу из строя платы или источника питания.
На плате три контура питания.
* Первый — //силовой//, напряжение на который приходит с клеммника PWR. От этого контура запитана микросхема **H-моста L298P**, моторы и **DC-DC-преобразователь LM2596-5.0**.
{{:продукты:energy_attentions.png?nolink |}}**//Важно!//**
Не все источники питания подходят для работы с моторами.
Для корректной работы DC-DC преобразователя источники питания должны быть способны обеспечить напряжение выше 7 В при резких скачках нагрузки или при включении моторов на полную мощность. Если источник питания не рассчитан на мощность, необходимую двигателям, просадка напряжения при росте нагрузки ниже 7 В может привести к перезагрузке управляющего контроллера, и связанным с этим неадекватным поведением платы.
Этому требованию соответствуют только **литий-ионные** и **никель-металлгидридные** аккумуляторы, или блоки питания необходимой мощности.
Поэтому питать робота от обычной "Кроны" не стоит.
* Источником напряжения для второго контура питания может быть DC-DC преобразователь или USB. Это контур //управления//. Напряжение в этом контуре — 5 В. От него запитаны микроконтроллер, I2С-расширители, логика H-моста и преобразователь напряжения на 3,3 В для питания модулей беспроводной связи. Это же напряжение подано на все трёхштырьковые контакты. Напряжение в 5 В может быть подано как с USB, так и с клеммника PWR. При этом при подключении по USB будет работать только контур управления, напряжение на H-мосту будет недостаточным для работы двигателей. При одновременном подключении платы по USB и через колодки PWR питание будет подаваться только от PWR.
* Третий контур питания используется для питания модуля беспроводной связи и его обвязки через площадку для подключения модулей связи. Напряжение питания в этом контуре — 3,3 В.
== Клеммники для подключения двигателей ==
Клеммники под винт для подключения нагрузки на плате обозначены как **-М1+ -М2+**.
Нагрузка разделена на 2 канала. Первый канал на плате имеет обозначение «М1», второй канал имеет обозначение «М2».
Каждый канал управляется независимо.
Обозначения «+» и «-» показывают воображаемые начало и конец обмотки: если подключить два коллекторных двигателя таким образом, чтобы их одноимённые контакты щёточного узла соответствовали одному и тому же обозначению на плате, то, при подаче на H-мост L298P одинаковых управляющих импульсов, моторы будут вращаться в одну и ту же сторону.
== Характеристики драйвера двигателей L298p ==
^ Параметр ^ Мин. ^ Макс. ^ Ед. изм. ^
| Напряжение питания двигателей | 7 | 24 | В |
| Продолжительный ток на канал * | — | 2 | А |
| Пиковый прерывистый ток на канал (80% включение, до 10 мс) | — | 2,5 | А |
| Пиковый непрерывный ток на канал (до 100 мкс) | — | 3 | А |
* для достижения максимума необходимо дополнительное охлаждение чипа L298P
== Характеристики DC-DC преобразователя LM2596-5.0 ==
^ Параметр ^ Мин. ^ Номинал. ^ Макс. ^ Ед. изм. ^
| Напряжение питания силовой части | 7 | — | 24 | В |
| Выходное напряжение | 4,75 | 5 | 5,25 | В |
| Ток нагрузки | — | — | 3 | А |
==== Расширители портов ввода-вывода ====
{{ :продукты:strela:strela-elem-i2c.png?nolink& |}}
На плате установлены два I2С-расширителя портов ввода-вывода PCA9554.
^ Адрес ^ Функция ^
| 0×20 |Управление светодиодами L1-L4, получение информации о нажатии кнопок S1-S4.|
| 0×21 |Управление контактом P10 и LCD-экраном MT-08S2A при помощи библиотеки [[https://bitbucket.org/fmalpartida/new-liquidcrystal/downloads|LiquidCrystal_I2C]]. Если LCD-экран не используется, можно использовать свободные контакты как дополнительные порты ввода-вывода.|
== Характеристики I²С-расширителей портов ввода-вывода PCA9554 ==
^ Параметр ^ Номинал. ^ Ед. изм. ^
| Напряжение питания | 5 | В |
| Максимальный входной ток одного контакта | 20 | мА |
| Максимальный выходной ток одного контакта | 50 | мА |
| Максимальный ток через контакты питания | 85 | мА |
==== Индикация ====
{{ :продукты:strela:strela-elem-leds.png?nolink& |}}
== Индикация питания платы ==
При правильном подключении питания через клеммник PWR, загорается светодиод индикации питания. Если полярность питания перепутана, или питание по какой-то причине не подано, светодиод гореть не будет.
Из-за большой ёмкости фильтрующего конденсатора, установленного на плате, светодиод индикации питания в некоторых случаях может кратковременно продолжать гореть и после отключения питания. Этот светодиод может тускло гореть при питании платы от USB.
== Индикация питания микроконтроллера ==
Индикатор питания микроконтроллера горит, если на микроконтроллер ATmega32u4 подано напряжение.
== Индикация направления и скорости вращения двигателей ==
При высоком логическом уровне на пине управления направлением вращения, т.е. вращении вперёд, индикатор светится зелёным светом. При этом полярность напряжения на клеммниках для подключения двигателей соответствует обозначению «+» и «-» на плате. При низком уровне, т.е. при реверсе светодиод светится красным цветом.
Яркость свечения светодиодов зависит от скорости вращения соответствующих моторов — чем выше скорость, тем ярче светится светодиод.
== Индикатор передачи данных по USB ==
Светодиоды **RX** и **TX** светятся во время передачи данных через виртуальный последовательный интерфейс. При получении данных светится зелёный светодиод RX, при передаче — красный светодиод TX.
== Индикаторы передачи данных через беспроводной модуль ==
* **RSSI** — индикатор мощности сигнала XBee-модулей. Чем ярче горит индикатор, тем больше мощность сигнала принимаемого XBee-модулем. Этот светодиод выполняет свою функцию только с модулями XBee.
* **ASC** — индикатор подключения к сети XBee-модулей. Если модуль не подключён, светодиод постоянно горит. Светодиод мигает при подключении к сети. Частота мигания зависит от роли модуля. Подробнее можно узнать из [[https://www.sparkfun.com/datasheets/Wireless/Zigbee/XBee-Datasheet.pdf|технического описания XBee]].
===== Размеры платы =====
{{ :продукты:strela:размеры.png?direct&650 |}}
===== Ссылки =====
* [[amp>product/strela|Платформа Strela]] в магазине.
* [[http://www.youtube.com/watch?v=bF-vQtCNr0I|Видеообзор платформы Strela]]
* [[http://files.amperka.ru/schematics/strela-schematic.png|Принципиальная схема платформы Strela]]
* [[https://github.com/amperka/Strela|Библиотека Strela для удобства работы с платой]]
* [[http://files.amperka.ru/datasheets/ATMega32u4.pdf|Техническое описание ATmega32u4]]
* [[http://files.amperka.ru/datasheets/lm2596.pdf|Техническое описание DC-DC-преобразователя LM2596-5.0]]
* [[http://files.amperka.ru/datasheets/l298.pdf|Техническое описание H-моста L298P]]
* [[http://files.amperka.ru/datasheets/PCA9554_9554A.pdf|Техническое описание расширителя цифровых портов PCA9554]]
* [[http://files.amperka.ru/datasheets/MT-08S2A.pdf|Техническое описание LCD-экрана MT-08S2A-2YLG]]