Практическая работа «Программирование модели робота с двумя датчиками касания»
Модель машинки с двумя датчиками касания
Внимательно рассмотри модель робота. На передней части машины расположены два датчика касания. Если машина врезается в препятствие, датчики будут срабатывать по программе и запускать механизм поворота или движения назад.
Ответь на вопросы
Подключите к контроллеру моторы и датчики касания.
Возьмите моторы и два датчика касания.
Подключите моторы в порты В и С модуля EV3, а датчики касания в порты 1 и 2.
Теперь робот «видит» оба датчика.
Блок-схема алгоритма ориентации робота в пространстве
Это алгоритм работы робота для ориентации в пространстве.
Он представлен в виде схемы. Стрелка, которая ведет от конца алгоритма к его началу, говорит о том, что программа должна повторяться бесконечно.
Внутри алгоритма есть две ветви. С их помощью показывается ветвление программы (на информатике ты познакомишься с этим термином подробнее).
Блоки-схема алгоритма
Как в сказке: «Налево пойдешь — коня потеряешь, направо пойдешь — жизнь потеряешь, прямо пойдешь — жив будешь, но себя позабудешь», а герою надо выбрать путь.
Так и здесь одна ветвь выполняется, когда нажата хотя бы одна из двух кнопок, то есть условие выполняется; другая, наоборот, когда условие не выполняется.
Описание работы алгоритма:
Описать работу алгоритма можно следующим образом:
- Если хотя бы один из датчиков касания активирован, это означает, что перед роботом находится препятствие. В этом случае робот должен отъехать назад, повернуть в другую сторону и снова продолжить движение вперед.
- Если оба датчика столкновения не активированы, значит, путь перед роботом свободен, и он может продолжать двигаться вперед.
Выполни задание:
Рассмотри две ситуации:
- Охарактеризуй действия робота в случае, если нажат хотя бы один из датчиков.
- Охарактеризуй действия робота в случае, если не нажат ни один из датчиков.
Блок «Логические операции»
Для программирования сложных условий, в которых проверяется состояние нескольких датчиков, в визуальных средах программирования обычно используется блок «Логические операции». Он находится в красной палитре «Операции с данными»
Повторим! Логические операции: что это и зачем нужны?
Логические операции — это «слова» , которые помогают роботу принимать решения. Они отвечают на вопрос: «Что делать, если…?»
Основные операции для двух датчиков:
- И (AND) — робот реагирует, только если оба датчика нажаты одновременно. Пример: робот едет вперёд, пока не упрётся в угол (оба датчика коснулись стен).
- ИЛИ (OR) — робот реагирует, если нажат хотя бы один датчик. Пример: робот останавливается, если коснулся стены левой или правой кнопкой.
- исключающее ИЛИ (XOR) — робот реагирует, если нажат только один датчик. Пример: если робот коснулся стены левой кнопкой, то поворачивает направо, если коснулся правой кнопкой, то поворачивает налево, если конулся обоими кнопками или не коснулся ни одной - робот продолжает движение.
- НЕ (NOT) — робот делает что‑то, если датчик НЕ нажат. Пример: робот едет, пока ни один датчик не нажат.
Повторим! Логическая операция «И»
«Логическая операция И» необходима для проверки срабатывания сразу двух условий.
Пример из жизни: Чтобы включить телевизор, нужно: пульт в руках И батарейки в пульте. Если чего‑то нет — телевизор не включится.
Пример из робототехники: Если у робота есть два датчика касания, то условие может быть такое: «Если нажат датчик касания 1 И нажат датчик касания 2, то остановить моторы робота». Если хотя бы один датчик не будет нажат, то в таком случае робот не остановится.
Повторим! Логическая операция «ИЛИ»
Логическая операция «ИЛИ» не такая строгая: если условия два, то в этом случае необходимо, чтобы выполнилось хотя бы одно из них. При этом могут выполниться и оба условия.
Пример из жизни: Можно пойти в кино ИЛИ в парк — достаточно выбрать что‑то одно.
Пример из робототехники. «Если датчик касания 1 нажат ИЛИ датчик касания 2 нажат, то робот повернет направо». В этом случае достаточно касания хотя бы одного датчика, чтобы робот повернул направо.
Повторим! Логическая операция «Исключающее ИЛИ»
Логическая операция «исключающее ИЛИ» более строгая, чем логическая операция «ИЛИ» : если условий два, то в этом случае необходимо, чтобы выполнилось только одно из них: либо первое, либо второе.
Пример из жизни: На перекрёстке светофор показывает какой-то один цвет: либо зелёный, либо красный, оба цвета одновременно гореть не могут.
Пример из робототехники. Робот движется вперёд. При срабатывании только одного датчика он поворачивает в противоположную сторону, чтобы обойти препятствие. Если сработают оба датчика одновременно (робот упёрся в угол), он останавливается и ждёт дальнейших команд.
Повторим! Логическая операция «Исключение»
Логическая операция «Исключение (NOT)» позволяет проверить, что какое‑то событие не происходит или какое‑то состояние не выполняется.
Пример из жизни. Датчик движения в прихожей: свет в прихожей выключается, когда нет движения в течение 30 секунд (чтобы не гореть зря).
Пример из робототехники. Робот с кнопкой запуска: робот не начинает движение, пока не будет нажата кнопка запуска.
Познакомимся с новым блоком «Цикл»
«Цикл» это повторение одних и тех же действий несколько раз подряд. В программировании циклы позволяют не писать одну и ту же команду много раз, а просто указать, сколько раз или как долго её нужно повторять.
Блок «Цикл» – это контейнер, содержащий последовательность программных блоков.
Он заставляет последовательность блоков, находящихся внутри него, повторяться. Вы можете выбрать постоянное повторение блоков, определенное количество раз или до того, пока проверка датчика или другие условия не будут истиной.
Повторяются только блоки, находящиеся внутри цикла. После окончания цикла программа продолжит работу с блоками, находящимися за пределами цикла.
Циклы в жизни
Приготовление бутербродов для пикника
- Берём хлеб → намазываем масло → кладём колбасу → кладём сыр → кладём второй кусок хлеба.
- Цикл: «Повторить 10 раз» (для 10 бутербродов)
Утренняя зарядка
- Наклон вперёд → выпрямиться → наклон назад → выпрямиться.
- Цикл: «Повторить 5 раз» .
Стирка в стиральной машине
- Машина многократно повторяет: набрать воду → добавить порошок → вращать барабан → слить воду → отжать бельё.
- Цикл: «Пока стирка не закончится» .
Режимы блока «Цикл»
Режим « Установка подсчета »
Режим « Неограниченный »
В режиме «Установка подсчета» в выводе «Установка подсчета» указывается количество повторения блоков в цикле.
В режиме «Неограниченный» блоки внутри цикла повторяются постоянно. Любой блок, находящийся после цикла, использоваться не будет.
Примеры простых программ с двумя датчиками касания. Пример 1. Программа «Робот-угол». Логика «И».
Цель программы:
Робот движется вперёд, пока оба датчика касания не будут нажаты одновременно (например, когда робот упёрся в угол).
Тогда он отъезжает назад на небольшое расстояние.
Подключение датчиков
- Датчик 1 (левый) → порт 1.
- Датчик 2 (правый) → порт 2.
Как работает логика «И»
Логика «И» здесь реализуется последовательным ожиданием двух событий:
- Программа сначала ждёт, пока сработает датчик 1 ( true ).
- Только после этого она начинает ждать срабатывания датчика 2 ( true ).
- Если оба условия выполнены ( true AND true ), робот выполняет действия (отъезд назад)
Примеры работы робота:
Ситуация
Что происходит
Нажат только
левый датчик
Программа ждёт, пока нажмётся правый датчик. Робот стоит на месте.
Нажат только
правый датчик
Программа не реагирует — сначала должен сработать левый датчик.
Оба датчика
нажаты
Программа последовательно фиксирует оба нажатия и выполняет алгоритм (отъезд назад).
Ни один датчик
одновременно
не нажат
Робот продолжает ехать вперёд (цикл перезапускается).
Пошаговая схема программы
Блок «Начало» — старт программы.
Блок «Цикл» — режим «Бесконечный». Это нужно, чтобы робот постоянно проверял состояние датчиков и повторял алгоритм.
Внутри цикла:
- Блок «Рулевое управление» :
- Блок «Рулевое управление» :
- Режим: «Включить». Мощность: 40 %. Робот начинает ехать вперёд.
- Режим: «Включить». Мощность: 40 %. Робот начинает ехать вперёд.
- Режим: «Включить».
- Мощность: 40 %.
- Робот начинает ехать вперёд.
Внутри цикла:
- Блок «Ожидание» для датчика 1:
- Блок «Ожидание» для датчика 1:
- Тип: «Датчик касания». Порт: 1. Состояние: «Сравнение». Программа останавливается и ждёт, пока левый датчик будет нажат.
- Тип: «Датчик касания». Порт: 1. Состояние: «Сравнение». Программа останавливается и ждёт, пока левый датчик будет нажат.
- Тип: «Датчик касания».
- Порт: 1.
- Состояние: «Сравнение».
- Программа останавливается и ждёт, пока левый датчик будет нажат.
Внутри цикла:
- Блок «Ожидание» для датчика 2:
- Блок «Ожидание» для датчика 2:
- Тип: «Датчик касания». Порт: 2. Состояние: «Сравнение». Программа останавливается и ждёт, пока правый датчик будет нажат.
- Тип: «Датчик касания». Порт: 2. Состояние: «Сравнение». Программа останавливается и ждёт, пока правый датчик будет нажат.
- Тип: «Датчик касания».
- Порт: 2.
- Состояние: «Сравнение».
- Программа останавливается и ждёт, пока правый датчик будет нажат.
Внутри цикла:
- Блок «Рулевое управление» — отъезд назад:
- Блок «Рулевое управление» — отъезд назад:
- Режим: «Вперёд» (но с отрицательной мощностью). Мощность: −50 %. Длительность: 1 секунда. Конец цикла — программа возвращается к началу и повторяет всё заново.
- Режим: «Вперёд» (но с отрицательной мощностью). Мощность: −50 %. Длительность: 1 секунда.
- Режим: «Вперёд» (но с отрицательной мощностью).
- Мощность: −50 %.
- Длительность: 1 секунда.
- Конец цикла — программа возвращается к началу и повторяет всё заново.
Пример 2. Программа«Робот-отскок». Логика «ИЛИ».
Робот останавливается и отъезжает назад, если задет любой датчик - либо первый, либо второй, либо оба (логика «ИЛИ»)
Как на самом деле организовать логику «ИЛИ»
В среде Lego Mindstorms EV3 нельзя напрямую поместить два блока «Ожидание» внутрь одного логического переключателя — это приведёт к ошибке: программа будет ждать срабатывания первого датчика бесконечно, не проверяя второй.
Правильный способ реализовать логику «ИЛИ» — использовать логический блок для объединения сигналов от датчиков, а затем передать результат в следующий блок.
Пошаговая схема программы «Робот‑отскок»
Цель программы: робот едет вперёд, пока не сработает хотя бы один датчик касания. Затем он останавливается и отъезжает немного назад Подключение:
- Датчик 1 (левый) → порт 1
- Датчик 2 (правый) → порт 2
Шаги программы:
Блок «Начало» — старт программы.
Блок «Рулевое управление» :
- (режим «Включить»)
- мощность 30%
Блоки «Ожидание» для датчиков касания 1 и 2
- Блок «Ожидание» для Датчика касания 1» :
- Порт: 1. Режим: «Изменить» — «Состояние» .
- Порт: 1.
- Режим: «Изменить» — «Состояние» .
- Блок «Ожидание» для Датчика касания 2» : Порт: 2. Режим: «Изменить» — «Состояние».
- Порт: 2.
- Режим: «Изменить» — «Состояние».
Блок «Логические операции»
Блок «Логические операции»
- Режим «ИЛИ»
- Ввод «а» - вывод блока «Ожидание» для Датчика касания 1»
- Ввод «b» - блока «Ожидание» для Датчика касания 2
Блок «Рулевое управление» :
- Блок «Рулевое управление».
- Направление — назад (с отрицательной мощностью); мощность -30 %; время — 1 секунда.в конце Тормозить
- Направление — назад (с отрицательной мощностью);
- мощность -30 %;
- время — 1 секунда.в конце
- Тормозить
Закрепим. Вопрос 1.
Какой режим блока «Логические операции» нужно выбрать, чтобы робот отреагировал, если нажат хотя бы один из двух датчиков касания?
Закрепим. Вопрос 2.
Робот с двумя датчиками касания должен остановиться только в том случае, если оба датчика нажаты одновременно .
Какой режим блока «Логические операции» для этого подойдёт?