Занятие 2. Управление моторами робота - движение Вперед, Назад, Вправо, Влево

Робототехника на Hobot L в mBlock Scratch
Создание на компьютере папки со своей фамилией, сохранение туда программы командой Файл -> Сохранить на ваш компьютер
В режиме Онлайн сначала 1 (пин 5) мотор стрелками включение и стоп , потом вперёд и назад (пин 4 и 5)
Потом также второй мотор (вперёд и назад), потом добавляем переменные, потом создаем Функции

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

Рисунок. Наименование портов Hobot L

Функция

Функция - это записанный в отдельном месте код, который в программе повторяется несколько раз.

Функции в программировании нужны, чтобы упрощать и сокращать код и делать программу понятнее.


Функции в Scratch реализуются в разделе Мои блоки. Этот раздел позволяет создавать свои собственные блоки (функции) из комбинации нескольких уже имеющихся блоков (при этом одни функции могут входить в другие функции, реализуя весьма сложные алгоритмы).


создать собственную функцию:

Создание функций движения

  1. В разделе Мои блоки создайте две функции - Вперёд и Стоп
2. Обучите робота новым командам, добавив, что робот должен делать при выполнении этой функции

Определить Вперёд

  1. Задать на цифровой пин 5 значение “высокий”
  2. Задать на цифровой пин 6 значение “высокий”

Определить Стоп

  1. Задать на цифровой пин 5 значение “низкий”
  2. Задать на цифровой пин 6 значение “низкий”
3. Сделайте запуск исполнения функций по командам:

Когда нажата клавиша “стрелка вверх”:

  1. Вперёд

Когда нажата клавиша “пробел”:

  1. Стоп
4. Запустив робота, обнаружим, что после того, как Вы нажали клавишу Вверх, запускающую роботу команду Вперёд, он едет непрерывно, пока Вы не нажмете клавишу пробел, запускающую команду Стоп.
Примечание 1: Вариант, когда робот сам останавливается, когда Вы не нажимаете клавишу, сложнее, его реализуем на следующем занятии.
Примечание 2: передом робота считается край, на котором находятся датчики (как у человека передняя сторона та, где находятся его глаза и нос). Сейчас по команде Вперёд робот едет не в ту сторону, это исправим далее.
Примечание 3: также робот может ехать не совсем по прямой, а немного по дуге. Позже это будет исправлено калибровкой моторов.
Добавим роботу новую функцию - ехать Назад (а также исправим направление Вперёд):
Для изменения направления движения робота используются еще два пина - 4 и 7.
Каждый из них управляет своим мотором. Например, когда на пине 7 (направление М1) высокий уровень, при этом на пине 6 (скорость М1) высокий уровень - мотор М1 (левый в нашей конструкции) едет назад.

Рисунок. Оба мотора вращаются вперёд -> робот едет Вперёд

Рисунок. Оба мотора вращаются назад -> робот едет Назад

Используя полученную информацию, сделаем функцию для движения робота Назад:

Определить Назад

  1. Задать на цифровой пин 4 значение “низкий”
  2. Задать на цифровой пин 7 значение “низкий”
  3. Задать на цифровой пин 5 значение “высокий”
  4. Задать на цифровой пин 6 значение “высокий”
Сделаем выполнение команды Назад роботом при нажатии на клавиатуре стрелки Вниз:

Когда нажата клавиша “стрелка вниз”:

  1. Назад
Теперь, когда мы использовали пины 7 и 4 для направления, в функцию Вперёд тоже нужно внести изменения, иначе робот все время будет ехать Назад (так как мы задали ему это направление):

Определить Вперёд:

  1. Задать на цифровой пин 4 значение “высокий”
  2. Задать на цифровой пин 7 значение “высокий”
  3. Задать на цифровой пин 5 значение “высокий”
  4. Задать на цифровой пин 6 значение “высокий”

Переменные

Как видим, теперь нам надо помнить номера 4 пинов, которыми управляются моторы робота (4, 5, 6 и 7), при этом помнить, какие 2 из них управляют левым мотором, какие 2 - правым и какие ответственны за включение и скорость мотора, а какие - за направление вращения. Держать это в голове тяжело, особенно когда параллельно с этим разрабатывается достаточно сложная программа перемещения робота с использованием датчиков (пины подключения которых тоже нужно будет помнить). В связи с этим в дальнейшем для пинов будем использовать переменные с “говорящими именами” - названиями, которые сами говорят о том, что записано внутри этой переменной.


Переменная - это область памяти компьютера, которая имеет название и хранит внутри себя какие-либо данные.

Переменную можно сравнить с коробкой, на которой написано название переменной, например “Скорость”, а внутри коробки лежит листок бумаги, на которой написано число. Условно говоря, когда компьютер видит переменную “Скорость”, он берет коробку с этой надписью, читает, что написано на бумаге в этой коробке и выводит в качестве значения переменной.

Таким образом, если мы запишем в переменную “Скорость” значение 120, то везде, где компьютер увидит эту переменную, он все равно что увидел число 120.

При этом, если мы перепишем значение переменной (листа бумаги в коробке “Скорость”) на 100, то везде, где компьютер видит переменную “Скорость”, он будет видеть число 100.


Работа с переменными осуществляется в разделе Переменные (оранжевый круг). Команды:

- создать новую переменную с определенным названием, которое нужно ввести. Переменная создаётся пустой, со значением 0.
После того, как хотя бы одна переменная создана, появляются команды работы с переменными:
Задать для переменной новое значение. То есть мы как бы выбрасываем тот лист бумаги, который был внутри коробки переменной, пишем на новом листе новое значение и кладём его в коробку переменной.
изменить уже имеющееся значение переменной. То есть если внутри переменной написано 5, то к значению прибавится 1 и станет 6. При этом значение может и уменьшаться, например, выполнение команда Изменить “переменная” на -2 вычтет из значения переменной (было 5, станет 3).
2. Создадим переменные, названия которых будут говорить о том, какой контакт управления моторов подключается:

Мотор левый Направление

Мотор правый Направление

Мотор левый Скорость

Мотор правый Скорость

Создадим алгоритм для программы, называющих говорящими именами значения всех пинов, к которым подключается управление моторов:
  1. Начало
  2. Задать для Мотор левый Направление значение 4
  3. Задать для Мотор правый Направление значение 7
  4. Задать для Мотор левый Скорость значение 5
  5. Задать для Мотор правый Скорость значение 6
Перепишем функции Вперёд, Назад и Стоп с использованием функций, теперь их легче понимать:

Определить Вперёд:

  1. Задать на Мотор левый Направление значение “высокий”
  2. Задать на Мотор правый Направление значение “высокий”
  3. Задать на Мотор левый Скорость значение “высокий”
  4. Задать на Мотор правый Скорость значение “высокий”

Определить Назад:

  1. Задать на Мотор левый Направление значение “низкий”
  2. Задать на Мотор правый Направление значение “низкий”
  3. Задать на Мотор левый Скорость значение “высокий”
  4. Задать на Мотор правый Скорость значение “высокий”
На команде Стоп нет необходимости определять направления - когда моторы стоят, направления нет.

Определить Стоп:

  1. Задать на Мотор левый Скорость значение “низкий”
  2. Задать на Мотор правый Скорость значение “низкий”

Движения Влево и Вправо

Разберем и добавим еще два направления - движения Влево и Вправо:

Рисунок. Левый мотор назад, правый мотор вперёд -> робот крутится Влево

Рисунок. Левый мотор вперёд, правый мотор назад -> робот крутится Вправо

Составим таблицу сочетаний пинов направлений (4 и 7) для всех направлений вращения робота:
Примечание: простое правило для данной конструкции робота: высокий уровень - мотор крутится вперед, низкий уровень - назад
Создадим функцию Влево:

Определить Влево:

  1. Задать на Мотор левый Направление значение “низкий”
  2. Задать на Мотор правый Направление значение “высокий”
  3. Задать на Мотор левый Скорость значение “высокий”
  4. Задать на Мотор правый Скорость значение “высокий”
Создадим функцию Вправо:

Определить Вправо:

  1. Задать на Мотор левый Направление значение “высокий”
  2. Задать на Мотор правый Направление значение “низкий”
  3. Задать на Мотор левый Скорость значение “высокий”
  4. Задать на Мотор правый Скорость значение “высокий”
Сделаем запуск этих функций по соответствующим стрелкам клавиатуры:

Когда нажата клавиша “стрелка влево”:

  1. Влево

Когда нажата клавиша “стрелка вправо”:

  1. Вправо
Подключите робота и испытайте его перемещение по клавишам клавиатуры - стрелки вверх, вниз, влево, вправо, пробел. Не запускайте робота на столе, лучше опустите его на пол (потребуется достаточно длинный провод для связи, но на последующих занятиях мы сделаем дистанционное управление роботом)
Made on
Tilda