Занятие 2 Управление выходами контроллера командами с компьютера и внешних устройств
.docКурс «Основы робототехники. Продвинутый уровень». Занятие 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; |
На следующем занятии продемонстрируйте работу программы при управлении со смартфона или планшета на своем роботе или роботе клуба