Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Занятие 13 Коммуникация по Bluetooth

.doc
Скачиваний:
101
Добавлен:
11.03.2016
Размер:
59.9 Кб
Скачать

Курс «Основы робототехники». Занятие 13 Коммуникация по Bluetooth между контроллером Arduino и смартфоном, планшетом

Все становится лучше, когда в нем есть Bluetooth

Шелдон Купер, Теория Большого Взрыва

Bluetooth модуль установлен на роботе на самостоятельно сделанную соединительную плату с Arduino Nano. Для связи с модулем можно использовать стандартные пины Serial 0, 1 (RX, TX) и в роботах на готовой плате Zelectro так и сделано. Но при этом возможны проблемы с прошивкой контроллера (чтобы закачать программу в контроллер, иногда приходится извлекать модуль Bluetooth). Поэтому в самодельной плате используются два других пина – 5 и 7, а связь через них с Bluetooth модулем обеспечивается библиотекой Software Serial:

#include <SoftwareSerial.h> // подключаем библиотеку SoftwareSerial

SoftwareSerial mySerial(5, 7); // создаем объект mySerial – связь с Bluetooth через пины 5 и 7

char symbol = 'n'; // переменная для хранения принятого символа

void setup() {

// подключаемся к Bluetooth модулю, соединенному с Arduino по Software Serial:

mySerial.begin(9600);

// настройте тут пины, к которым подключены моторы роботов, как Output

}

Для робота на базе платы Zelectro в верхней части кода нет необходимости, используется следующий код:

void setup() {

// подключаемся к Bluetooth модулю, соединенному с Arduino по Serial:

Serial.begin(9600);

// настройте тут пины, к которым подключены моторы роботов, как Output

}

Для управления роботами на Arduino с планшета или смартфона имеется ряд приложений: как текстовые, передающие и принимающие буквы и числа на робота и с него (например, Bluetooth SPP), так и графические, с готовыми или создаваемыми пользователем кнопками, нажатие на каждую из которых передает на робота по Bluetooth какую-либо букву или цифру. Для получения этого символа на Arduino в блоке loop используется следующий код:

if (mySerial.available()) { //если есть принятый символ,

symbol = mySerial.read(); // то читаем его и сохраняем в symbol

}

else {

symbol = 'n'; // если ничего не принято, записываем символ "нет команды", чтобы робот не выполнял постоянно последнюю принятую команду

}

Примечание: для робота на базе платы Zelectro в данном коде нужно заменить mySerial на Serial

В клубе для управления роботами используется приложение Arduino Bluetooth RC Car (см. приложенный файл о его установке и подключении к роботу по Bluetooth). Данное приложение передает символы F (Forward, вперед), B(Backward, назад), R (Right, вправо), L (Left, влево)

Напишите программу, включающую моторы робота в зависимости от пришедшего символа. Можно использовать несколько if, но, учитывая, что в дальнейшем будут отрабатываться и остальные кнопки приложения, передающие свои буквы, более корректно будет использовать функцию switch-case:

switch (symbol) { // выполняем команду в соответствии с принятым символом (если он есть)

case 'F': // принят символ с кнопки Вперед

// команды для езды вперед

break;

case 'B': // принят символ с кнопки Назад

// команды для езды назад

break;

case 'L': // принят символ с кнопки Влево

// команды для езды влево

break;

case 'R': // принят символ с кнопки Вправо

// команды для езды вправо

break;

Одним из вариантов реализации команд для езды является просто включить моторы (например, digitalWrite (HIGH) на пины In1 и In3). В этом случае робот будет ехать в заданном направлении, пока не будет подана другая команда (в этом случае для кнопки Назад лучше реализовать команду Стоп – остановить моторы). Но более точное перемещение робота будет обеспечиваться при выполнении следующего алгоритма:

  • включить моторы для езды в заданном направлении

  • выполнить паузу (delay)

  • остановить моторы

В этом случае реализуется прерывистое перемещение робота – при нажатии на кнопку он проедет определенное расстояние (или повернет на определенный угол) и остановится. Расстояние и угол определяется скоростью робота и временем паузы

Практическое занятие 1. Напишите программу, реализующую движение робота по управлению с Bluetooth используя приведенные выше части кода

Практическое занятие 2: Добавим управление фарами робота (если они будут установлены, пока в качестве замены используем светодиод на Arduino Nano). Добавьте в код следующие участки:

int led_pin = 13; // в самом начале

pinMode(led_pin, OUTPUT); // в блоке setup

// внутри switch:

case 'W': // включение передних фар

digitalWrite(led_pin, HIGH);

break;

case 'w': // выключение передних фар

digitalWrite(led_pin, LOW);

break;

Домашнее задание: готовиться к внутриклубным соревнованиям, которые будут проводиться на занятии 15 и 16. Занятие 14 также будет посвящено подготовке к этим соревнованиям:

Соревнования на занятии 15

1. Движение по траектории (один, два или более датчиков освещенности на роботе, черная линия). Желательна более совершенная программа, чем рассмотренная на занятии 12 (обеспечивающая бОльшую скорость и точность). Соревнование индивидуальное – каждый участник клуба закачивает свою программу в робота и он едет по линии от старта до финиша. Три попытки. Засчитывается лучшее время

2. Робофутбол – несколько команд, каждый участник команды управляет своим роботом по Bluetooth со смартфона или планшета, программа в роботе – загруженная в робота самостоятельно (например, рассмотренная на занятии 13, ее можно модифицировать или написать свою). Задача – управляя роботом, забить мяч в ворота противника. Победит команда, забившая большее количество голов за отведенное время. Ориентировочно 2 на 2 робота

Соревнования на занятии 16

1. Конкурс проектов. Выполненные (или находящиеся в процессе выполнения) личные проекты слушателей курса. Можно выступить с несколькими проектами (если они есть). Желателен показ работы проекта и демонстрация презентации по нему (в лаборатории 417 есть проектор и экран). Обязательны рассказ о проекте (для чего применяется, из чего состоит, что было сделано участником (разработка схемы, сборка и т.д.)) и ответы на вопросы жюри

2. Робосумо. Автономные роботы. Выбрать клубного робота или использовать своего, установить на него датчики и загрузить самостоятельно написанную программу. Рекомендуется пара датчиков линии спереди и пара сзади для предотвращения падения с ринга и ультразвуковой датчик расстояния для нахождения противника. Правила – стандартные для робосумо (см. приложение). Первостепенная задача – постараться столкнуть с ринга робота противника и не упасть с него самому. Второстепенная задача – находиться по возможности ближе к центру ринга. Робот, не перемещающийся по рингу, считается проигравшим. Время каждого раунда 1-2 минуты, выигравшим считается робот, столкнувший противника или оказавшийся ближе к центру ринга, по окончании раунда.

После проведения соревнований победившим будут вручены призы (если они будут представлены ПГТУ) и всем закончившим курс «Основы робототехники» – сертификаты об окончании курса.