Для связи роботов друг с другом, с компьютерами и другими устройствами (смартфон, планшет) используется радиосвязь. Существует много видов беспроводной связи (например, часто используется Wi-Fi), но мы используем самый простой в реализации вариант — связь с роботом по Bluetooth.
В этом занятии изучим Bluetooth модуль, который выглядит так:
Технология Bluetooth используется для передачи данных между двумя устройствами, которые находятся в непосредственной близости друг с другом, причем не обязательна прямая видимость.
Модуль предназначен для передачи информации с помощью радиосигнала. Дальность передачи на открытой местности порядка 10 — 15 метров. Его можно использовать для дистанционного управления Вашим роботом.
Для занятия потребуются три расширения:
Примечание: первые два расширения добавляются во вкладке Устройства, третье — во вкладке Персонажи.
2. Найдите в результатах поиска Bluetooth HC-05 PCM. Если справа сверху на расширении находится символ “+” — сначала нажмите его и дождитесь установки расширения.
3. Нажмите кнопку + Добавить внизу под расширением Bluetooth HC-05 PCM.
4. Снова войдите в Центр расширений, удалите поисковый запрос. В верхней строке должно находится расширение для связи с компьютером в режиме Загрузка – Upload Mode Broadcast. Добавьте его в проект.
5. Перейдите во вкладку Персонажи. Нажмите +расширение, чтобы попасть в Центр расширений.
6. Найдите и добавьте в проект расширение Трансляция режима передачи (находится во второй строке всех расширений):
Bluetooth модуль работает только в режиме Загрузки, поэтому, в отличие от ранее использованной передачи в режиме Онлайн просто через общие для Arduino и персонажа переменные, требуется дополнительные два расширения. Одно будет выполнять передачу данных с Arduino, второе — прием их компьютером. Схема передачи:
Переключитесь на режим Загрузка во вкладке Устройства:
Обратите внимание, что теперь команда Начало в разделе События выполняет не блок При нажатии флажка (он стал неактивным), а блок При запуске Arduino Uno. Подсоединённые к нему блоки начинают выполняться когда подключается питание робота. Блок При запуске Arduino Uno быть только один, при наличии в программе двух и более таких блоков контроллер, скорее всего, будет выполнять только одну из запускаемых блоком программ.
В качестве сигналов используем просто счёт секунд (для него создайте переменную Счёт), который будет делать контроллер Arduino в роботе и отправлять его на компьютер. Алгоритм передачи сигнала для Arduino:
1. Начало
2. Повторять всегда:
Алгоритм приёма полученного сигнала компьютером, записи в переменную Показать (должна быть создана) и вывода его персонажем на экран с помощью команды Сказать:
1. При получении сообщения message в режиме загрузки
2. Задать для Показать значение сообщение в режиме загрузки message значение
1. Начало
2. Повторять всегда:
Загрузив в контроллер его программу и запустив программу персонажа, можно увидеть, что персонаж говорит полученное с контроллера значение, но с двумя знаками после запятой (не 87, а 87.00).
Примечание: у автора программа корректно работала только когда была включена вкладка Устройства
Уберём знаки после запятой, использовав блок округлить из раздела Оператор. Исправим программу для получения сообщения:
При получении сообщения message в режиме загрузки:
Переименуйте переменную Счёт в Приём
Алгоритм приема команд с Bluetooth модуля для Arduino и передачи их на компьютер:
Программа, реализующая данный алгоритм:
<
Примечание: у автора, чтобы загрузить код, приходилось отсоединять Bluetooth модуль от робота. Для используемых в программе пинов 10 и 11 — Bluetooth модуль подсоединен на контроллере к разъёму номер 1 (находится над USB разъемом)
2. Приём сообщения персонажем – код аналогичен реализованному ранее.
3. Для передачи сообщения на Bluetooth модуль робота используем смартфон или планшет под Android (система Apple не взаимодействует с Bluetooth модулями HC, используемыми в роботе). Можно использовать любое приложение (есть даже приложения, обеспечивающее голосовое управление), но для удобства управления роботом лучше найти приложение, обеспечивающее движения вперёд, назад, вправо, влево и диагональные движения:
Данному требованию удовлетворяет, например, приложение Arduino car, его можно найти в Google Play по этому названию, логотип приложения:
Если данное приложение еще не установлено на Ваш смартфон или планшет — установите его.
4. Подключите Bluetooth модуль робота к телефону. Для этого включите питание робота (Bluetooth модуль должен быть подключен), зайдите в настройки телефона, зайдите в настройки Bluetooth и включите Bluetooth. В доступных устройствах должно появиться устройство HC-06. Нажмите на это устройство и введите PIN-код 1234, установите сопряжение.
Примечание: если включено несколько роботов с Bluetooth модулями одновременно, все они появятся в списке, поэтому, чтобы “подружить” с телефоном именно своего робота, лучше попросить коллег выключить их роботов и подсоединять роботов к телефонам по очереди.
5. Запустите приложение Arduino car. Вы увидите на экране смартфона/планшете что-то подобное:
6. Нажмите на кнопку BLUETOOTH CONNECTED слева сверху.
Примечание: на случай, если к телефону подключалось несколько роботов, чтобы различать их модули, рекомендуется на модуле написать их отличительные цифры, которые Вы увидите после нажатия на джойстик — индивидуальное имя данного модуля, например, 00:23:09:01:10:01. Первые четыре символа часто повторяются, поэтому автор для отличия Bluetooth модулей друг от друга пишет на модуле последние 4 символа, например, для модуля из примера это 10:01
7. Нажмите на имя Bluetooth модуля Вашего робота и дождитесь его подсоединения. Вы услышите на телефоне голосовое сообщение “Bluetooth connected” (звук на телефоне должен быть включен)
Примечание: если Вы не услышали данного сообщения, попробуйте отключить и снова подключить Bluetooth модуль к роботу и повторить попытку подключения к приложению.
8. Запустите на компьютере в mBlock ранее написанную программу
Примечание: напоминание, что для корректной передачи данных Вы должны находиться на вкладке Устройства. Персонаж на экране должен говорить коды при нажатии на кнопки на экране телефона
9. Составим таблицу кодов, полученных по Bluetooth для базовых кнопок управления направлениями:
↑ Вперёд 70 | ||
← Влево 76 | Стоп 83 | → Вправо 82 |
↓ Назад 66 |
Примечание: Данные числа — коды передаваемых приложением букв F, B, L, R, S в таблице символов ASCII
Мы можем написать программу, аналогичную ранее написанной программе управления с компьютера, просто поменяв коды — вместо 1, 2, 3, 4 и 5 используем те числа, которые передает роботу Bluetooth приложение. Также в начале программы зададим пины для управления моторами и опрос Bluetooth модуля:
Код по данному алгоритму:
Алгоритмы для функций такие же, как использовали ранее:
Испытайте написанную программу, попробовав управлять движениями робота с помощью приложения на смартфоне/планшете. Если робот движется слишком быстро — уменьшите левую и правую скорость, если едет не по прямой, а забирает в сторону – уменьшите скорость стороны, противоположной той, в которую поворачивается робот, после чего загрузите программу снова.
Для повышения перемещения мы часто используем не движение с поворотом вокруг своей оси (например, автомашина, когда поворачивает). Робот, который имеет возможность двигаться не только вперед, назад и разворачиваться на месте, но и двигаться по дуге, будет более маневренным, за счет этого лучше выполнять свои задачи.
↶ Вперёд Влево 71 | ↑ Вперёд 70 | ↷ Вперёд Вправо 73 |
← Влево 76 | Стоп 83 | → Вправо 82 |
⤸ Назад Влево 72 | ↓ Назад 66 | ⤹ Назад Вправо 74 |
2. Очевидно, что нужно добавить еще 4 функции направлений движения, которые будут запускаться при получении роботом соответствующих сообщений (71, 72, 73 или 74). Через раздел Мои блоки сделайте еще 4 функции:
Вперёд Влево
Вперёд Вправо
Назад Влево
Назад Вправо
3. Доработаем алгоритм управления, добавив запуск еще 4 “диагональных” направления при получении соответствующих кодов с Bluetooth модуля:
Программа получилась достаточно сложная, но в соревнованиях управляемых роботов, таких как Футбол и Гонки, такое управление даёт преимущество за счёт лучшей управляемости роботов.
4. Как реализуется движение по “диагональным” направлениям? Ниже приведена таблица и диаграммы с пояснениями.
Направление | Скорость левого мотора | Скорость правого мотора | Объяснение |
---|---|---|---|
Вперёд Влево/Назад Влево | медленнее | быстрее | правая сторона робота “обгоняет” левую, заставляя робота сдвигаться влево |
Вперёд Вправо/Назад Вправо | быстрее | медленнее | левая сторона робота “обгоняет” левую, заставляя робота сдвигаться вправо |
Графическое представление скоростей (большая и малая стрелки) для наглядности:
Движение Вперёд Влево:
Движение Вперёд Вправо:
Запомните принцип: уменьшаем скорость той стороны, в которую робот должен повернуть.
5. Таким образом, движения Вперёд Влево и Вперёд Вправо — это движения вперёд (то есть направления обоих моторов — вперёд), но на моторы подаётся разная скорость. Чтобы не создавать еще две новые переменные, просто делим скорости мотора, который должен крутится медленнее, на определённое число (от него зависит крутизна поворота):
Определить Вперёд Влево:
Определить Вперёд Вправо:
Создадим эти две функции в mBlock:
6. Аналогично сделаем алгоритмы и программы для направлений Назад Влево и Назад Вправо:
Определить Назад Влево:
Определить Назад Вправо:
7. Загрузите программу в робота, запустите его и убедитесь, что робот двигается по всем 8 направлениям.
8. По возможности проведите испытания роботов в соревновании Гонки, Футбол или тому подобных (можно даже устроить небольшую битву роботов).
8 (495) 150-18-32