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

Занятие 2 Управление выходами контроллера командами с компьютера и внешних устройств

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

Курс «Основы робототехники. Продвинутый уровень». Занятие 2 Управление выходами контроллера командами с компьютера и внешних устройств

2.1. Библиотека Serial

Информацию о библиотеке можно получить по адресу Справка / Содержание / Serial (находится в левом столбце в самом низу). В основном используются следующие функции:

Serial.begin(9600) – начать связь, скорость 9600 бит в секунду. Без выполнения этой команды в блоке setup все остальные команды работать не будут. 9600 – стандартная скорость для связи с компьютером и используемыми Bluetooth модулями. Если внешнее устройство работает на другой скорости (например, 57600) – необходимо указать эту скорость, иначе связь не будет установлена

Serial.available() – проверка, принят ли символ. Примеры использования даны в программах ниже

char command = Serial.read() – запись принятого символа в символьную переменную command

Serial.print("X=") – вывод символов. В кавычках – так, как написано, без кавычек – значение переменной

Serial.println(X) – выдать то, что в скобках и сделать перенос на следующую строку (аналогично нажатию Enter в текстовом редакторе)

2.2. Подключение внешних устройств

Компьютер подключается к Arduino через USB разъем. Для подключения других устройств (например, Bluetooth модуля, GPS модуля и т.д.) на Arduino используются пины:

0, RX, receiver, приемник (получает информацию)

1, TX, transmitter, передатчик (передает информацию)

При этом контакты должны быть включены крест-накрест: RX одного устройства к TX другого, TX первого устройства к RX второго:

Направления передачи информации показаны стрелками

2.2. Библиотека SoftwareSerial

Если нужно одновременно связываться сразу с несколькими устройствами (например, с компьютером, модулем Bluetooth и GPS модулем), используется библиотека SoftwareSerial, позволяющая использовать любые пины Arduino как RX и TX

Информацию о библиотеке можно получить по адресу Справка / Содержание / Libraries / SoftwareSerial

Пример использования приведен в Файл / Примеры / SoftwareSerial / SoftwareSerialExample

Команды аналогичны рассмотренным для Serial, с небольшими дополнениями:

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

SoftwareSerial mySerial (5, 7); // делаем пин 5 – RX, пин 7 – TX (можно поставить другие номера пинов)

mySerial.begin(9600); // в блоке setup начинаем связь с mySerial

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

symbol = mySerial.read(); // в переменную символ (тип char) записать принятый символ

2.3. Функция switch-case

Используется, когда для каждого из принятых символов нужно запрограммировать свое действие, причем вариантов достаточно много. В принципе, вместо switch-case можно воспользоваться if, но тогда программа получится достаточно громоздкой и трудно читаемой

Практическое занятие 1: сделаем управление светодиодом по командам с компьютера:

int led = 13; // переменная с номером пина светодиода

char command; // переменная для принятого символа

void setup(){

pinMode(led, OUTPUT); // сделать пин светодиода выходом

Serial.begin(9600); // начать связь с компьютером (или другом устройством, подключенным к контактам 0 RX и 1 TX Arduino), со скоростью 9600 бит в секунду

}

void loop(){

if (Serial.available()) // если принят сигнал

{

command = Serial.read(); // прочитать сигнал и записать в символьную переменную command

switch (command) // в зависимости от того, что находится в переменной command

{

case '1': // если 1 - включить светодиод

digitalWrite(led, HIGH);

break;

case '0': // если 0 - выключить светодиод

digitalWrite(led, LOW);

break;

case '*': // если * - помигать светодиодом

digitalWrite(led, HIGH);

delay (300);

digitalWrite(led, LOW);

delay (300);

digitalWrite(led, HIGH);

delay (300);

digitalWrite(led, LOW);

delay (300);

break;

}

}

}

Практическое занятие 2: подключите 5 светодиодов разных цветов к контроллеру и напишите программу: когда в Монитор порта передано число от 1 до 5, включается светодиод с этим номером, а остальные погасают

Примечание: если есть возможность (свободные пины) рекомендуется не подключать внешние устройства на пины 0 и 1, т.к. при программировании по ним идут сигналы (подключенный светодиод начинает мигать, двигатель – дергаться и т.д.)

Практическое занятие 3: модель управляемого робота (или реальный робот)

Подключите к контактам, поддерживающим аналоговый выход (3, 5, 6, 9, 10, 11) светодиоды (или моторы робота через драйвер) и сделайте управление яркостью светодиодов (скоростью вращения моторов) через Монитор порта:

  • передана цифра 1 – включить первый мотор в одну сторону

  • передана цифра 2 – включить первый мотор в другую сторону

  • передана цифра 3 – включить второй мотор в одну сторону

  • передана цифра 4 – включить второй мотор в другую сторону

  • передана цифра 0 – остановить моторы

  • передан символ + – увеличить скорость вращения моторов

  • передан символ - – уменьшить скорость вращения моторов

Так как нужно управлять уровнем, используйте команду analogWrite (In1, speed)

Увеличение/уменьшение скорости осуществляется следующим образом:

case '*+':

speed = speed + 10;

Чтобы скорость, передаваемая на мотор командой analogWrite не опускалась ниже уровня, при котором моторы перестают крутиться (например, 100) и не поднималась выше максимально допустимого (255), введите в программу следующую проверку и корректировку:

if (speed > 255 ) { speed = 255;}

if (speed < 100 ) { speed = 100;}

Домашнее задание: переделайте программу, написанную в практическом занятии 3 таким образом, чтобы она управляла роботом по Bluetooth с использованием библиотеки SoftwareSerial (чтобы не задействовать пины 0 и 1, которые используются для программирования) со смартфона или планшета с использованием приложения Arduino Bluetooth RC Car. Данное приложение передает по Bluetooth следующие сигналы:

Кнопка

Символ

Расшифровка

Стрелка 

F

Forward, вперед

Стрелка 

B

Backward, назад

Стрелка 

L

Left, влево

Стрелка 

R

Right, вправо

W

Включение передних фар

w

Выключение передних фар

U

Включение задних фар

u

Выключение задних фар

S

Звуковой сигнал

Сделайте так, чтобы при нажатии на стрелки (символы F, B, L, R) включались моторы робота (направление – в зависимости от нажатой стрелки), при нажатии на подачу звукового сигнала (символ S) – выключались, при передаче W или w – скорость уменьшалась, U или u – увеличивалась (с ограничениями максимума и минимума). Пример кода для передачи сигнала F (вперед):

case 'F':

analogWrite(In1, speed);

analogWrite(In2, 0);

analogWrite(In3, speed);

analogWrite(In4, 0);

break;

На следующем занятии продемонстрируйте работу программы при управлении со смартфона или планшета на своем роботе или роботе клуба