Начало работы в TRIKStudio
методическая разработка по технологии (4 класс)
3 Движение вперед Движение вперед базовой тележки задается подачей на левый и правый мотор одинаковой скорости. В TRIK Studio для подачи мощности на мотор существует отдельный блок «Моторы вперед» . У этого блока два свойства: Порты Скорость.
4 Движение вперед
5 Подключение моторов У контроллера ТРИК четыре порта для подключения силовых моторов: M1 , M2 , M3 и M4 .
6 Подключение моторов Подключение моторов в 2D-модели по умолчанию: левый — к порту M3 правый — к порту M4 . Настройку подключения моторов можно изменить в режиме отладки на центральной панели в разделе «Моторы».
7 Подключение моторов
8 Движение назад Движение назад выполняется аналогично. Используем блок «Моторы назад» .
9 Движение назад
10 Движение назад Но! Диапазон подаваемой мощности: от -100 до 100 % . То есть для движения назад можно использовать и блок «Моторы вперед», подав мощность -100 % .
11 Движение назад Но! Диапазон подаваемой мощности: от -100 до 100 % . То есть для движения назад можно использовать и блок «Моторы вперед», подав мощность -100 % .
12 Повороты Повороты можно разделить на 3 типа: резкий поворот мощность подается только на одно колесо плавный поворот мощность подается на два колеса, но на одно больше поворот на месте одинаковая мощность с разными знаками на два колеса
13 Модели алгоритмов Представленные выше алгоритмы – тайм-модели . Движение осуществляется по таймеру. Это «плохой» подход, так как в этом случае выполняемое действие зависит от заряда аккумулятора. Правильно будет использовать ожидание значения энкодеров . В этом случае перед элементарным действием необходимо сбросить значения энкодеров. Остальные элементарные действия (движение назад, повороты) реализуются аналогично.
14 Точные перемещения Поставьте галочку «Сетка» . Теперь вы можете отслеживать точные перемещения модели. 1 клетка = 17,5 см Также, в режиме «отладка» всегда можно посмотреть параметры визуальной модели Для удобства длина и размер базы робота совпадают с размером клетки (17,5 см)
15 Переменные Переменная — поименованная область памяти. В TRIK Studio можно ввести свои переменные, используя блоки: «Инициализация переменной» «Выражение»
16 Нецелые числа пишутся через точку. Например: 1.75 Для перехода на новую строку используйте « Shift » + « Enter » Созданным переменным можно присваивать другие переменные, если последние были объявлены и инициализированы ранее. Например: u = 5* err В блоке «Выражение» можно как создавать новые переменные, так и записывать выражения. Переменные
17 Задача 2.1.1 Робот находится в синей зоне старта. Робот должен п роехать вперед, развернуться на 180°между зонами старта и финиша, проехать задом и остановиться в зеленой зоне финиша. Использовать энкодерную модель. Энкодеры. Задача
18 Задача 2.1.2 . Обогнуть угол. Робот должен проехать вперед со скоростью 60, повернуть на 90°, проехать вперед с максимальной скоростью и остановиться в зеленом круге . Использовать энкодерную модель. Энкодеры. Задача
19 Точные перемещения. Задача Задача 2.1.3 . Проехать вперед ровно на 1 метр и 5 сантиметров. Использовать энкодерную модель. Вам пригодятся следующие параметры: d = 5,6 см (диаметр колеса) CPR = 360 (полный оборот колеса)
20 Решение. Для решения этой задачи необходимо вспомнить элементарные формулы из курса школьной математики: расчет длины окружности и угла поворота. Введем следующие переменные: d — диаметр колеса робота dist — расстояние, которое необходимо проехать роботу cpr — один оборот колеса в градусах (количество сигналов на оборот) p — длина окружности en — количество энкодеров Точные перемещения. Решение
21 Точные перемещения. Решение
22 Точные перемещения. Задача Для решения вам понадобится дополнительный параметр: b = 17.5 см ( ширина колеи робота ) Задача 2.1.4. (самостоятельно) Развернуться на месте ровно на 90 градусов. Использовать энкодерную модель.
23 Алгоритм Алгоритм — набор инструкций, описывающих порядок действий исполнителя для достижения результата решения задачи за конечное число действий, при любом наборе исходных данных. Исполнитель: робот или любое другое устройство Инструкции: включить мотор, ждать 3 секунды, повернуть серводвигатель на 80 градусов, включить диод и т.д. Блок — схема — распространенный тип схем (графических моделей), описывающих алгоритмы или процессы, в которых отдельные шаги изображаются в виде блоков различной формы, соединенных между собой линиями, указывающими направление последовательности. Действие 1 Начало Действие 2 Действие 3 Конец
24 Алгоритмические структуры Следование (последовательность) — однократное выполнение операций в том порядке, в котором они записаны в тексте программы. Ветвление — однократное выполнение одной из двух или более операций, в зависимости от выполнения заданного условия. Цикл — многократное исполнение одной и той же операции до тех пор, пока выполняется заданное условие
Следование (последовательность) — однократное выполнение операций в том порядке, в котором они записаны в тексте программы. 25 Следование действие 1 Начало действие 2 Конец Блок-схема Псевдокод speed=-100; robot.motor.[M2].setPower(100); robot.motor.[M3].setPower(speed); robot.wait(1500) Пример в TRIK Studio Пример в TRIK Studio
Задача 2.1.5. (самостоятельно) Написать алгоритм движения модели «змейкой». Использовать энкодерную модель. 26 Следование. Задача
27 Ветвление Выполнение программы идет по одной из двух, нескольких или множества ветвей. Выбор ветви зависит от условия на входе ветвления и поступивших сюда данных. Существует две основные формы условной инструкции, встречающиеся в реальных языках программирования: условный оператор (оператор if ) оператор многозначного выбора (оператор switch )
28 Ветвление. Условный оператор Встречаются следующие формы условного оператора: Условный оператор с одной ветвью Условный оператор с двумя ветвями Условный оператор с несколькими условиями Условный оператор реализует выполнение одной последовательности (ветви) команд при условии, что некоторое логическое выражение (условие) принимает значение «истина», и другой последовательности (ветви), если выражение «ложно». Любая из этих последовательностей может быть «пустой», т.е. не выполнять никаких действий.
29 Условный оператор с 1 ветвью Пример в TRIK Studio if (encoder.[E2].read() sensorA1 > 50 меньше = sensorA3 >= 50 меньше или равно 20) && (sensorA1 70) Для задания различных условий роботу необходимы операторы сравнения и логические операторы. Логические операторы
38 Ветвление. Задача Инфракрасный датчик расстояния — аналоговый датчик для измерения расстояния. Рабочий диапазон: 10–80 см. sensorA1>50 Нарисовать веселый смайл Начало Нарисовать грустный смайл нет да подождать 3 секунды Конец Задача 2.1.6. вывести на экран грустный смайлик, если робот далеко от стены, и веселый, если близко, на 3 секунды или дольше. За границу считать значение 50 ИК датчика.
39 Ветвление. Задача Псевдокод if (robot.sensor.[A1].read() > 50) robot.sadSmile(); else robot.smile(); robot.wait(3000); Решение в TRIK Studio На связях, идущих от условия, указывается в свойствах истина и ложь для определения дальнейших действий, когда условие верно, и когда — нет. Задача 2.1.6. вывести на экран грустный смайлик, если робот далеко от стены, и веселый, если близко, на 3 секунды или дольше. За границу считать значение 50 ИК датчика.
40 Ветвление. Задача Для проверки задачи используйте 2 разных поля: на одном стена близко к роботу, на другом — далеко. Для проверки можно использовать поля 2.1.6 – field1.xml , 2.1.6 – field2.xml
41 Ветвление. Задача Задача 2.1.7 (самостоятельно) Вывести на экран: Веселый смайлик, если ИК датчик выдает до 40. Слово «неопределенность», если ИК датчик выдает от 40 до 60. Грустный смайлик — в противном случае.
42 Switch Представляет собой структуру, построенную по принципу меню, и содержит все возможные варианты условий и инструкции, которые следует выполнить в каждом конкретном случае. В TRIK Studio реализуется с помощью одноименного блока: Блок проверяет выражение. От блока отводятся связи, на которых указываются возможные значения этого выражения (например, переменной). Одна связь обязательно должна быть пустая (“default”) — по ней алгоритм будет двигаться, если не выполнено ни одно из условий.
43 Switch Данный пример демонстрирует случайный выбор одного из четырех состояний робота: «Я готов к роботе», «Улыбаюсь», «Грущу», «Отдыхаю…»
44 Switch В TRIK Studio имеется блок «Получить код кнопки» , который записывает код нажатой кнопки в переменную. Все коды кнопок представлены в кодировке ASCII. Зная коды кнопок, с помощью switch можно написать своё меню. Задача 2.1.8. Выводить в цикле с задержкой минимум в 100 мс на экран робота в 2D модели коды кнопок контроллера ТРИК, по нажатию на них .
TRIK Studio: программирование движения при помощи интерпретатора данных
Блоки программы в TRIK Studio выполняют определённые функциии и можно сказать, что та или иная программа состоит последовательности вызовов функций. Такой способ программирования движений является наглядным, но не обладает гибкостью, которую может предоставить интерпретатор данных..
На этом занятии мы рассмотрим вопрос, который обходят стороной в обучающих материалах по визуальному программированию робототехнических конструкторов. Он относится к текстовому программированию и может быть сложен для восприятия начинающими, но с другой стороны даёт в руки достаточно мощный и гибкий инструмент для программирования автоматического движения.
Попробуем при помощи тележки нарисовать прямоугольник. Для этого нужно чередовать прямолинейное движение с поворотами на 90 градусов. Определим экспериментальным путём время, за которое тележка совершит поворот на этот угол. В моём случае для этого требуется около 1050 мс. Для быстрого составления программы используйте операции копирования и вставки блоков.
После запуска программы тележка нарисует кривой незамкнутый прямоугольник. Необходимо точнее задать время поворота тележки, но не будем с этим спешить. Для изменения времени нам придётся исправить его в четырёх местах программы. Это сделать несложно, но представьте, если бы в программе было 20 поворотов! На это пришлось бы затратить очень много времени и сил, чего можно избежать при помощи подпрограмм. В нашем случае необходимо создать три подпрограммы:
- рисование длинной стороны
- рисование короткой стороны
- поворот на 90 градусов
Добавьте на поле диаграммы блок "Подпрограмма". После её добавления появится диалог, в котором нужно ввести имя подпрограммы "Поворот". Аналогичным образом создайте оставшиеся подпрограммы.

После замены блоков диаграмма главной программы примет следующий вид.

Подпрограмма рисования сторон отличается только значением одного параметра. Для длинной стороны время задаётся значением 3000, а для короткой — 1000. Вместо этих двух подпрограмм (функций) создадим одну, которой при помощи параметра будем передавать в одном случае значение 3000, а в другом — 1000. Создайте новую подпрограмму и в её свойствах добавьте параметр Время, а на диаграмме вместо числового значения таймера укажите имя этого параметра. Добавим для контроля блок "Напечатать текст" для вывода значения параметра на дисплее контроллера. В его свойстве Текст укажите имя переменной, а на панели свойств установите свойство Вычислять = истина.

Недостатком этой подпрограммы является то, что она не является универсальной. Значение скорости задано числовой константой — 100%. Для исправления этого необходимо вместо данной числовой константы также использовать переменную, значение которой можно будет изменять из главной программы. Аналогично нужно заменить числовые констранты на переменные в подпрограмме Поворот.
В идеале подпрограмма должна представлять собой чёрный ящик, устройство которого нам неизвестно, но известно, какие параметры ему нужно передать для выполнения заложенных в него действий и какие параметры он может вернуть (если он возвращает параметры). Это как с телевизором. Мы не знаем, что у него внутри, но при помощи пульта управления (интерфейса) можем управлять его работой.
После введения параметра Время главная программа примет следующий вид.

Теперь можно вынести в главную программу все переменные из подпрограмм. Подождите, а нужно ли это делать? Наша главная программа имеет большой недостаток — она не универсальна и состоит из определённой последовательности действий, которая подойдёт для рисования только прямоугольников. Если же нам нужно нарисовать треугольник, то придётся создать новую программу. Получится так, что затратим много времени и сил на оптимизацию программы, которая на практике имеет крайне ограниченное применение. Как сделать программу универсальной? Для этого вместо последовательности действий следует использовать последовательность данных. В этом случае структура программы останется неизменной. Строку данных можно составить, например, в таком виде:
Для работы с такой строкой требуется две подпрограммы, одна — для прямолинейного движения, другая — для поворота. Но эти два действия можно реализовать при помощи одной подпрограммы, если обратить внимание на то, что для выполнения каждого из этих действий требуется три параметра — скорость правого мотора, скорость левого мотора и время работы моторов. Создадим строку данных в виде последовательности троек этих значений:
Эта строка данных сначала разбивается на шаги по символу точки с запятой, а затем по разделителю запятой на параметры, передаваемые соответствующим блокам. После выполнения первого шага он удаляется из массива. Программа выполняется до тех пор, пока в строке есть данные.
Общий алгоритм понятен, но блок "Функция" поддерживает только простые выражения и создать с его помощью универсальную программу не получится (в отличие от текстового программирования).


Программа стала более универсальной, но, если нам не нужно рисовать линию, то придётся изменить подпрограмму, убрав из неё блок "Опустить маркер". Для создания ещё более универсальной программы необходимо в программу добавить интерпретатор данных (команд), который будет разбирать данные и направлять их соответствующим отдельным блокам. Каждая команда должна состоять из идентификатора действия и параметров, например:
Получается JSON-подобный формат данных. Упрощённая программа такого интерпретатора показана ниже.

Благодаря замене последовательности блоков (функций) на последовательность данных мы выигрываем в универсальности программы, но проигрываем в её наглядности. Команды типа Дв
Если мы хотим получить универсальную программу, то придётся в диаграмму включить все блоки, которые мы хотим использовать. Это сделать можно, но затем перед нами встанет препятствие в виде ограниченной функциональности блоков, для преодоления которого придётся перейти к текстовому программированию.
До сих пор мы рассматривали тайм-модели, преимуществом которых является простота реализации, а недостатком — зависимость пройденного расстояния от величины заряда питающей батареи. При разряде батареи тележка будет проходить за то же время меньшее расстояние и поворачивать на меньший угол относительно тех, которые были рассчитаны при полном заряде батареи. В результате получается непредсказуемое поведение устройства. Мы можем методом проб и ошибок создать программу для рисования прямоугольника, но при использовании реальных устройств и батарей с разным зарядом придётся вносить в программу поправки. Для устранения зависимости пройденного расстояния от заряда батареи применяют энкодеры — датчики числа поворотов вала двигателя.
Программирование датчика цвета
Кроме датчика касания и ультразвука можно подключить датчик цвета, который работает в трех режимах:
1. определения цвета;
2. яркость отраженного света;
3. яркость внешнего освещения.
В режиме «Цвет» датчик цвета может определить цвет находящегося рядом объекта или цвет поверхности, находящейся рядом с датчиком. При этом для обеспечения более точного определения цвета, объект или поверхность должны находиться очень близко к датчику, но не касаться его (0,1 – 1 см). Датчик может определять семь разных цветов: черный, синий, зеленый, желтый, красный, белый и коричневый, каждый из которых имеет свой код. В TRIK Studio код цвета можно увидеть на панели «Переменные» в режиме отладка 2D модели в строках sensor1, sensor2, sensor3 или sensor4, в зависимости от используемого порта.
Объект другого цвета может определяться как «Без цвета» или его цвет может определяться по ближайшему к нему цвету. Например, оранжевый цвет может определяться как красный или желтый в зависимости от содержания красного цвета в оранжевом, или как коричневый или черный, если оранжевый цвет очень темный или находится слишком далеко от датчика. При работе в данном режиме на передней панели датчика загораются красный, зеленый и синий светодиоды.
Если поверхность материала блестящая, то определение цвета может быть некорректным из-за бликов от подсветки датчика или яркого солнца. Поэтому, если нет возможности изменить материал, необходимо максимально снижать скорость робота при проезде цветного определяемого участка или закрывать поле от попадания прямых солнечных лучей. Ошибка при определении цвета может возникать и на матовых поверхностях при освещении помещения люминесцентными лампами. Белая поверхность может определяться красной, зеленой, синей, причем в одной и той же точке. Это связано с тем, что принцип работы ламп предполагает мерцание светового потока практически во всей области видимого спектра. Человек мерцание может не замечать, но датчик, работая с частотой 1 кГц, вместо правильного цвета может фиксировать отраженные цветовые лучи. Единственный способ выхода из данной ситуации – конструировать робота так, чтобы датчик цвета был закрыт сверху и с боков от прямого попадания света люминесцентных лампам. Например, можно надеть шину (рисунок 10.1).
Рис.10.1: Внешний вид шины, надетой на датчик, в двух проекциях.
В режиме «Яркость отраженного света» датчик цвета определяет яркость света, попадающего в датчик и измеряется в процентах от 0 до 100. Если от поверхности ничего не отражается, то значение датчика будет равно 0. Если 100% света, созданного датчиком, отражается, то датчик передаст значение 100.
Рис.10.2: Отражение светового потока при разном расположении датчика над поверхностью черной линии.
Так как датчик цвета в указанном режиме фиксирует процент отраженного света, то получаемые значения удобно сравнивать со шкалой градаций серого цвета, то есть можно сказать, что датчик различает 100 градаций серого цвета. Число на выходе будет зависеть не только от оттенка цвета, но и от внешнего освещения и поверхности.
Когда датчик цвета находится в режиме «Яркость отраженного света», на передней панели датчика загорается красный светодиод.
В режиме «Яркость внешнего освещения» датчик цвета определяет яркость света, попадающего в датчик и измеряется в процентах от 0 до 100, где 0 – очень темный, а 100 – очень яркий. Когда датчик цвета находится в данном режиме, на передней панели датчика загорается тусклый синий светодиод. Его можно использовать для определения яркости освещения комнаты или яркости других источников света, свет от которых попадает в датчик.
В среде TRIK Studio можно увидеть графическое представление датчиков при запуске программы в режиме интерпретации на роботе или в двумерной модели. Для просмотра необходимо открыть режим «Отладка», закладка «Графики» (рисунок 10.3).
Рис.10.3: Графическое представление сенсора света при движении по линии.
Из выпадающего списка снизу можно выбрать сенсор, значения с которого будут отображаться. Кнопками "Старт" и "Стоп" можно запустить или остановить снятие показаний, не прерывая работы программы. Можно регулировать масштаб графика вручную, кроме того, график автоматически масштабируется, чтобы кривая показаний помещалась по высоте целиком. При наведении курсора мыши на точку на графике отобразится значение в этой точке. Ниже кнопки "Очистить график" находится кнопка "Выгрузить показания в файл", которая позволяет экспортировать в формат.csv все показания выбранного датчика с начала их записи. Просмотреть показания затем можно, например, в программе MS Excel.
В TRIK Studio для работы с датчиком цвета используются блоки «Ждать цвет», «Ждать интенсивность цвета», «Ждать свет».
Задача 10.1. Робот едет прямо до тех пор, пока датчиком цвета не обнаружит линию зеленого цвета. При обнаружении цвета робот должен остановится и проиграть звук.
Для решения задачи понадобятся блоки «Моторы вперед», «Ждать цвет», «Гудок» или «Играть звук». В редакторе свойств блока «Ждать цвет» необходимо определить порт, к которому подключен датчик цвета и указать цвет.
Рис.10.4: Программа к задаче 10.1.
В режиме отладки 2D модели перед запуском программы необходимо нарисовать линию, используя инструмент «Линия», выбрать соответствующий цвет, в разделе «Порты» выбрать «Сенсор цвета (распознавание цветов)» у порта №1. Робот будет двигаться прямо, пока не обнаружит линию зеленого цвета, затем остановиться и произведет гудок.
Задача 10.2. Робот едет прямо до тех пор, пока датчиком цвета не обнаружит линию черного цвета. При обнаружении цвета робот должен остановится и проиграть звук.
Решим задачу с использованием блока «Ждать свет», то есть используя режим «Яркость отраженного света».
Заменим в предыдущей задача блок «Ждать цвет» на «Ждать свет». Блок имеет следующие свойства: «Порт», «Проценты» и «Считанное значение». В нашем случае датчик цвета подключен к порту 1. В окне «Проценты» установим значение, равное 50, так как темные поверхности имеют яркость отраженного света как правило меньше указанного значения. И в свойстве «Считанное значение» необходимо указать «меньше». Получим программу на рисунке 10.5. При запуске программы в разделе «Порты» нужно поменять «Сенсор цвета (распознавание цветов)» на значение «Сенсор света».
Рис.10.5: Программа к задаче 10.2.
Задача 10.3. Подключить к роботу два датчика цвета (рисунок 10.6) и вывести на экран их показания в режиме яркости отраженного света (один датчик расположен на белой поверхностью поля, второй – над черной линией).
Рис.10.6: Положение датчиков и робота.
При решении задачи воспользуемся блоками «Параллельные задачи» (подробнее см. раздел 13) и «Переменная» (подробнее см. раздел 14). В блоках «Переменная» будут записаны показания датчиков 1 и 2 и в дальнейшем выведены на экран, причем запись и вывод будет выполняться параллельно, с использованием блока «Параллельные задачи» (рисунок 10.7). Для вывода на экран числовых значений s 1 и s 2, а не текста, не забываем в редакторе свойств блока «Напечатать текст» ставить флажок «Вычислять».
Рис.10.7: Программа к задаче 10.3.
В режиме отладки 2D модели экран будет выглядеть как на рисунке 10.8. Левый датчик находился над белой поверхностью и его показания близки к 100%, а правый датчик – над черной линией и имеет показания, равные 10%. При запуске программы на реальном роботе показания могут отличаться, так как они будут зависеть от внешних факторов, о которых было сказано выше.
Рис.10.8: Вид контроллера во время запуска программы.
Задания для самостоятельного решения
1. Используя панель «Переменные» в режиме отладки 2D модели, определить коды следующих цветов: черный, синий, зеленый, желтый, красный, белый.
2. Составить программу объезда роботом синей лужи.
3. Нарисовано несколько цветных линий. Пересекая желтую линию, робот отпускает маркер красного цвета.
4. Составить программу вывода на экран названия цвета той линии, которую робот проезжает.
5. Задача «Кегельринг»: вытолкнуть все банки за пределы окружности диаметром 1 метр, при этом робот не должен покидать поле.

Организация ветвления
Все рассмотренные выше задачи относятся к типу алгоритма «Следование», когда команды выполняются в строгой последовательности друг за другом. Однако часто при решении задач требуется проверять некоторое условие, от которого будет зависеть дальнейшее поведение робота. В этом случае необходимо организовать алгоритм типа «Ветвление».
Ветвление (развилка) — такая форма организации действий, при которой в зависимости от выполнения или невыполнения конкретного условия, совершается либо одна, либо другая последовательность действий.
Условие – логическое выражение, принимающее истинное или ложное значение.
Существует полная форма ветвления (рисунок 11.1), в которой при выполнении условия будет выполняться команда, находящаяся в ветви «да», а если условие не выполняется, то выполняться команда, находящаяся в ветви «нет». Такой тип ветвления называют «Если-то-иначе».
| условие |
| Действие 1 |
| Действие 2 |
| да |
| нет |
| да |
| нет |
Рис. 11.1: Полная форма ветвления.
В неполной форме ветвления («Если-то») при выполнении условия будет выполняться команда, находящаяся в ветви «да», а если условие не выполняется, то выполнение передается команде, находящейся после ветвления (рисунок 11.2).
| условие |
| Действие 1 |
| Действие 2 |
| да |
| нет |
| да |
| нет |
Рис. 11.2: Неполная форма ветвления.
В ветвлениях «Если-то» и «Если-то-иначе» предлагается выбор из двух вариантов (да/нет), но есть задачи, где нужно выбрать один из трех, четырех и более вариантов. В данном случае следует использовать ветвление типа «Выбор» или «Выбор-иначе».
В TRIK Studio можно организовать все перечисленные типы ветвления:
Задача 11.1. Робот должен доехать до стены и остановиться на расстоянии 10 см от нее. Если справа от робота стена на расстоянии менее чем 15 см, то он должен повернуть налево. Решим задачу с помощью ветвления «Если-то».
Предварительно создадим обстановку, как на рисунке 11.3. Подключим к портам 1 и 2 сенсоры расстояния, повернув сенсор 1 на 90 о вправо.
Рис. 11.3: Начальное положение робота на виртуальной сцене.
В программе можно использовать ранее созданную подпрограмму «Left_90» (рисунок 11.4).
Рис. 11.4: Подпрограмма «Left_90».
Для организации ветвления вынесем на диаграмму блок «Условие».
При написании условий используются следующие операции:
· <, <=, >, >= – операции сравнения, применимы к целым и вещественным значениям, результат логический;
· == – операция проверки равенства, применима к значениям любых типов, результат логический;
=,!= – операция проверки неравенства, применима к значениям любых типов, результат логический;
· and или && – логическое "и", применим к целым, вещественным и логическим значениям, результат логический;
· or или || – логическое "или", применим к целым, вещественным и логическим значениям, результат логический.
Используя редактор свойств, введем условие sensor1<15. В данном случае мы используем зарезервированную переменную sensor1. Так как к роботу можно подключить 4 сенсора, то также можно использовать переменные sensor2, sensor3 sensor4. Названия переменных можно копировать с панели с одноименным названием.
Из блока «Условие» обязательно должны выходить две связи – «истина» и «ложь». Причем пометить достаточно одну связь. Для внесения метки на связи, достаточно щелкнуть правой кнопкой мыши по ней и в редакторе свойств выбрать «истина» или «ложь». Итак, на ветви «истина» размещаем подпрограмму поворот, а по ветви «ложь» завершаем программу. Общий вид программы показан на рисунке 11.5.
Рис. 11.5: Программа к задаче 11.1.
Задача 11.2. Вывести на экран робота квадрат, если случайное число больше 5, в противном случае окружность. Решим задачу с помощью ветвления «Если-то-иначе».
Вынесем на сцену блок «Случайное число». В его свойствах необходимо указать название переменной и указать диапазон чисел. Выберем диапазон от 1 до 10. В блоке «Условие» укажем x >5. В ветви «истина» расположим блок «Нарисовать прямоугольник», а ветви «ложь» – блок «Нарисовать круг». Предварительно необходимо выполнить очистку экрана с помощью соответствующего блока. Получим программу (рисунок 11.6).
Рис. 11.6: Программа к задаче 11.2.
Работает программа следующим образом: случайным образом выбирается число из указанного в блоке диапазона. Например, было выбрано число 4. Проверяется условие: 4>5? Условие принимает ложное значение, поэтому на экране робота будет выведен круг.
Разберем задачу, когда необходимо сделать выбор из нескольких вариантов.
Задача 11.3. Робот при движении вперед должен рисовать цветную линию. Выбор цвета зависит от числа, полученного случайным образом.
При решении задачи понадобиться блок «Выбор» (Switch). Значение выражения, указанного в свойстве «Выражение», сравнивается со значениями на исходящих связях. Если среди них найдено равное, то исполнение будет продолжено по этой ветке. В противном случае будет выбрана ветка без маркера (эта ветка всегда должна присутствовать в блоке). На рисунке 11.7 ветка без маркера идет на блок «Конец».
Таким образом, в задаче 11.3 (рисунок 11.7) сначала случайным образом определяется число х, например, х=2, затем выполнение программы идет по ветви с маркером 2 и будет нарисована линия желтого цвета при проезде робота вперед в течении 1-й секунды.
Рис. 11.7: Программа к задаче 11.3.
Задания для самостоятельного решения
1. Написать программу, имитирующую светофор:
· если горит красный индикатор, робот должен стоять в течении 2 сек,
· если горит оранжевый индикатор, робот стоит в течении 2 сек,
· если горит зеленый индикатор, робот движется в течении 2 сек.
2. На дороге до места назначения 4 светофора. Надо проехать, соблюдая правила дорожного движения.
3. На поле нарисованы разноцветные линии. Составить программу вывода на экран названия цвета той линии, которую робот проезжает, используя блок «Выбор».
4. На поле «Кегельринг» располагаются банки двух цветов (белые и черные), место их расположения заранее неизвестно. Необходимо вытолкнуть банки только черного цвета.

Организация циклов
Роботы часто выполняют одну и туже задачу многократно. В данном случае можно говорить об организации циклического алгоритма (цикла).
Циклический алгоритм – алгоритм, в котором группа команд выполняется несколько раз в зависимости от выполнения или невыполнения условия цикла. Группа повторяющихся команд называется телом цикла.
Различают два типа циклов: с известным числом повторений и с неизвестным числом повторений. Существует 3 типа циклических структур:
· цикл с предусловием;
· цикл с постусловием;
· цикл с параметром;
Иначе данные структуры называют циклами типа «Пока», «До», «Для» соответственно.
На рисунке 12.1 представлены блок-схемы циклов с предусловием и с постусловием.
| да |
| условие |
| Серия команд |
| нет |
| да |
| Серия команд |
| нет |
| условие |
Рис. 12.1: Циклы с предусловием и с постусловием.
В цикле с предусловием серия команд выполняется до тех пор, пока выполняется условие. Цикл может не выполнится ни разу, если значение условия сразу же оказывается ложным.
В цикле с постусловием сначала выполняется серия команд, а затем проверяется условие: если оно ложно, то цикл продолжается, если истинно – завершается.
На рисунке 12.2 представлена блок-схема цикла с параметром.
| счетчик |
| Серия команд |
Рис. 12.2: Циклы с параметром.
В данном цикле серия команд выполняется определенное количество раз и до тех пор, пока счетчик принимает значения от начального до конечного, например, от 1 до 10.
В TRIK Studio кроме цикла с итерациями (цикл с параметром), цикла с условием (с постусловием, с предусловием) можно организовать и бесконечный (безусловный) цикл.
Рассмотрим пример с использование бесконечного цикла.
Задача 12.1. Нарисоватьтрехцветную линию, красно-желто-зеленую, бесконечно чередующуюся.
В разделе 11 подобная задача была рассмотрена для случайного числа. В данном примере воспользуемся блоком «Функция» (подробнее о блоке см. в разделе 14), в которую запишем значение величины х, равной 1. Блок «Выбор» будет содержать три ветви, так как необходимо нарисовать трехцветную линию. В каждой ветви будем задавать новое значение для х (2, 3 или 1). Для бесконечного выполнения из блока «Таймер» нужно протянуть ветвь к блоку «Выбор», как показано на рисунке 12.3.
Программа будет выполняться, пока пользователь не нажмет кнопку «Стоп».
Рис. 12.3: Программа к задаче 12.1 использованием бесконечного цикла.
Чтобы программа выполнялась определенное количество раз, необходимо организовать цикл с параметром. Для этого в задаче необходимо использовать блок «Цикл». Данный блок имеет две исходящие линии: одна направлена на начало цикла (в свойствах линии указать «Тело цикла»), другая отправляет на команды, расположенные после цикла. В свойствах блока также нужно указать количество повторений (итераций).
Внесем изменения в предыдущей программе, указав 5 повторений (рисунок 12.4).
Рис. 12.4: Программа к задаче 12.1 с использованием цикла с параметром.
Задача 12.2. Составить программудвижения робота до стены, не касаясь которой, отъехать назад на заданное расстояние.
Решим эту задачу с использованием цикла с условием. Добавим блок «Условие» и внесем условие завершения цикла sensor1<15 (ультразвуковой датчик подключен к порту 1). Ветвь со значением «ложь» направлена на блок «Моторы вперед» (тело цикла), а ветвь «истина» – на выход из цикла. Таким образом, робот будет двигаться до стены тех пор, пока указанное условие принимает ложное значение. Как только условие примет истинной значение, робот начинает движение назад (рисунок 12.5).
Рис. 12.5: Программа к задаче 12.2 с использованием цикла с постусловием.
В данном примере был применен цикл с постусловием, в котором условие расположено после команды. То есть сначала выполняется движение вперед, затем проверяется условие. Если оно не выполняется, то продолжается движение вперед.
Можно поменять в условии знак неравенства (sensor1>15), но в этом случае необходимо поменять значения ветвей (рисунок 12.6). Теперь тело цикла будет повторяться, если условие выполняется, то есть робот движется пока расстояние до стены больше 15. Это также пример использования цикла с постусловием.
Рис. 12.6: Программа к задаче 12.2 с использованием цикла с постусловием.
Рис. 12.7: Программа к задаче 12.2 с использованием цикла с предусловием.
На рисунке 12.7 представлен пример программы с использованием цикла с предусловием. В данном цикле сначала проверяется условие. Если условие принимает ложное значение, то организуется проезд вперед. Если условие принимает истинное значение, происходит выход из цикла.
Задания для самостоятельного решения
1. Используя цикл, организовать объезд вокруг квадратного объекта.
2. Нарисовать 4 ряда по 4 одинаковых квадрата в 2D модели.
3. Подняться по лестнице, у которой 5 ступенек, без датчиков.

4. Используя цикл, составить программу вывода на экран контроллера цвета объекта, подносимого к датчику цвета.
5. Нарисовать окружность с более четко прорисованной нижней половиной, для этого нужно 3 раза проехать туда-обратно по нижней половине окружности, и только после этого дорисовать верхнюю дугу. Повторить это действие 5 раз.
6. Напишите программу, в которой робот рисует четырехцветную линию, цвета выбираются случайным образом.
7. Решить задачу «Кегельринг» с использованием цикла.
Параллельные задачи
Многие практические задачи требуется решать в реальном времени, для этого может потребоваться большой объем вычислений. Современные компьютеры могут выполнять несколько операции одновременно. Такой процесс называется параллельным вычислением, основная цель которых – уменьшение времени решения задачи. Контроллеры – не исключение, для организации параллельных процессов в TRIK Studio используются блоки «Параллельные задачи» и «Слияние задач».
Использовать параллельные задачи в цикле нельзя, так как процессы будут множиться до переполнения памяти контроллера. Кроме того, параллельные процессы должны быть независимы друг от друга, то есть решаемые задачи имеют разные цели, например, воспроизведение звука при движении по траектории.
Рассмотрим пример использования параллельных задач.
В задаче 12.2 (см. раздел 12) было организовано движение до стены с отъездом назад при ее обнаружении. Добавим в задаче постоянный вывод на экран информации о расстоянии до объекта. В этом случае нужно добавить блок «Параллельные задачи» и в одной из задач в бесконечном цикле организовать вывод показаний на экран (рисунок 13.1). При этом не забываем в редакторе свойств блока «Напечатать текст» в строке «Вычислять» поставить флажок «истина» для того, чтобы на экране в качестве текста выводилось значение величины sensor1.
Рис. 13.1: Вывод на экран информации о расстоянии до объекта.
Таким образом, в программе параллельно организовано два цикла. Цикл с условием отвечает за движение до стены и отъезд назад. Бесконечный цикл обеспечивает постоянный вывод на экран контроллера расстояния до стены.
Но в этой программе имеется существенный недостаток: задача, отвечающая за вывод информации на экран, не останавливается, соответственно программа также не завершит выполнение. Чтобы вовремя завершить выполнение этой задачи, можно поступить следующим образом.
Первый способ – необходимо добавить счетчик (i), который будет отвечать за подсчет итераций ветви, где организован вывод информации о расстоянии (рисунок 13.2).
Рис. 13.2: Завершение программы с использованием счетчика.
В условии выхода из цикла необходимо подобрать такое значение счетчика, при котором, будет выполнена параллельная ей задача (проезд до стены). Если условие принимает истинное значение, то выводим информацию на экран и увеличиваем значение счетчика на 1. Если условие ложно, то происходит завершение цикла.
Этот способ также имеет недостаток, так как в каждом конкретном случае необходимо подбирать предельное значение счётчика для выполнения главной задачи.
Рассмотрим второй способ. Он заключается в отправке сообщения из главного потока некоторого сообщения-маркера, а в параллельной ему задаче проверяется, пришло ли сообщение. По пришедшему маркеру происходит завершение цикла.
Но сначала параллельным задачам необходимо дать имена. Имя главного потока – main, вспомогательную задачу обозначим, например, a 1 (рисунок 13.3).
Рис. 13.3: Завершение программы с использованием сообщений.
Затем в главном потоке после выполнения всех действий добавляем блок «Отправить сообщение в задачу» и в свойствах указываем название задачи (в нашем случае a 1) и сообщение (в нашем примере 1). В задаче a 1 добавляем переменную m =0, затем блок «Получить сообщение из другой задачи», в свойствах которого указываем переменную m и в строке «Дождаться сообщения» выставляем «ложь», то есть значение переменной будет равно нулю. А далее в условии проверяем, пришло сообщение или нет. Если сообщение не пришло (m =0), то продолжаем выводить информацию на экран. Если сообщение пришло (m =1), то завершаем задачу и, следовательно, завершаем всю программу.
И наконец, третий способ, наиболее простой, – завершить вторую задачу из главной задачи с помощью блока «Завершить задачу». Для этого достаточно добавить данный блок и указать имя той задачи, которую необходимо завершить (рисунок 13.4).
Рис. 13.4: Завершение программы с использованием блока «Завершить задачу»
Примечание: Блоки «Слияние задач», «Завершить задачу», «Получить сообщение из другой задачи» недоступны для программирования в режиме EV 3.
Задания для самостоятельного решения
1. Воспроизводить звук при движении робота по какой-либо траектории.
2. Робот проигрывает музыку и управляет цветовым сопровождением (подсветка контроллера).
3. Робот едет по траектории, с включенной сиреной (звуком) и проблесковым маячком (подсветка контроллера).
4. Придумайте задачу, для решения которой потребуется 4 параллельных потока.
5. Проходя некоторую траекторию, робот выводит на экран контроллера показания своего секундомера.
Вычисления
При изучении явлений природы и общества мы постоянно сталкиваемся с различными величинами. Одни из них являются постоянными, неизменяющимися, а другие меняются в зависимости от условий среды. Первые величины называются константами, вторые – переменными. В программировании переменная – это объект, которому дано имя и определенное значение.
Для объявления переменных и задания им определенных значений в TRIK Studio используется блок «Инициализация переменной» (см. раздел 2). В свойствах блока указывается имя переменной и ее значение.
Переменные имеют определенный тип, который должен быть известен во время компиляции. При этом язык TRIK Studio не требует (и даже не позволяет!) явно писать типы переменных, так как используется автоматический вывод типов по использованию переменных. Например, по выражению a = 1 среда «поймёт», что тип a – целое.
Базовые типы языка таковы:
· Логический (булевый) тип, принимает значения true (истина) и false (ложь).
· Вещественное число, использующее 64-битное представление binary64 стандарта IEEE 754 (позволяет хранить значения до 1.7E+308).
· Целое число, использующее 32-битное знаковое представление (позволяет хранить значения от -2,147,483,648 до 2,147,483,647).
· Строка, позволяет хранить символьные строки произвольной длины в кодировке UTF-8.
· Нулевой тип, имеющий только одно значение nil и означающий отсутствие "настоящего" значения.
· Тип "Таблица" (или массив), позволяющий хранить произвольное количество значений произвольного (но для каждого значения в одной таблице одинакового) типа, в том числе и другие таблицы, и обращаться к значениям по индексу.
Все переменные, используемые в программе, являются глобальными, то есть их значения могут использоваться в любом блоке программы.
Задача 14.1. Составить программу бесконечного движения вперёд-назад.
Воспользуемся блоком «Инициализация переменной» для объявления переменной х. В задаче к переменной х идет обращение 11 раз, и на каждом шаге значение меняется на противоположное: либо 1, либо (-1). При этом мощность моторов также является величиной изменяемой: 100 или (-100), так как скорость умножаем на величину х. При мощности (-100) действие «Моторы вперед» становится действием «Моторы назад» (рисунок 14.1).
Рис. 14.1: Программа к задаче 14.1.
При объявлении сразу нескольких переменных или больших вычислений используется блок «Функция». Пример использования блока представлен на рисунке 14.2.
Рис. 14.2: Объявление нескольких переменных и вычисления.
В правой части выражения разрешено использовать круглые скобки, числа, базовые арифметические операции, ранее определенные переменные, зарезервированные переменные, список которых можно просмотреть на панели «Переменные» в правой части экрана.
Рассмотрим подробнее о доступных математических выражениях и операциях.
В арифметических выражениях доступны следующие операции:
· + – сложение, применимо к вещественным и целым значениям, результат целый, если оба аргумента целые, иначе вещественный.
· — – вычитание, применимо к вещественным и целым значениям, результат целый, если оба аргумента целые, иначе вещественный.
· * – умножение, применимо к вещественным и целым значениям, результат целый, если оба аргумента целые, иначе вещественный.
· / – деление, применимо к вещественным и целым значениям, результат вещественный.
· // – целочисленное деление, применимо к целым значениям, результат целый.
· ^ – возведение в степень, применимо к вещественным и целым значениям, результат вещественный.
· % – остаток от деления, применим к целым значениям, результат целый.
В математических выражениях можно использовать функции, доступные для любого конструктора:
· time – время в миллисекундах с начала работы программы;
· sin – синус, аргумент передаётся в градусах;
· cos – косинус, аргумент передаётся в градусах;
· ln – натуральный логарифм;
· exp – экспонента (e в степени аргумента);
· sgn – знак, возвращает 1, если аргумент положительный, -1, если отрицательный, и 0, если аргумент равен нулю;
· sqrt – квадратный корень аргумента, в случае, если аргумент отрицательный, переменной будет присвоено значение "nan" (Not A Number);
· abs – модуль аргумента;
· ceil – округляет переданный аргумент до целого в большую сторону;
· floor – округляет переданный аргумент до целого в меньшую сторону;
· random – случайное число в интервале от 0 до переданного аргумента.
Приведем пример использования встроенной функции.
Задача 14.2. Вывести на экран контроллера время, прошедшее с начала исполнения.
В данном случае необходимо использовать встроенную функцию time. Организуем цикл, а результатом будет являться постоянный вывод на экран времени выполнения программы (рисунок 14.3). Не забываем в редакторе свойств блока «Напечатать текст» ставить флажок «Вычислять».
Рис. 14.3: Программа к задаче 14.2.
Уточним, что такое зарезервированные переменные. Как мы уже знаем к контроллеру можно подключать четыре датчика и четыре мотора. В каждый момент времени датчики возвращают некоторое числовое значение на контроллер. Это и есть значение переменных sensor N и encoder N.
Например, к порту 1 подключен датчик ультразвука. Робот находится вплотную около стены. Значение переменной sensor1 равно 0. После перемещения робота на некоторое расстояние от стены значение изменится в большую сторону. Таким образом, значение переменной sensor1 – это то, что показывает датчик в данный момент времени.
Кроме переменных sensor N и encoder N имеются переменные, отвечающие за состояние кнопок на корпусе робота: кнопки "Назад", "Вниз", "Ввод", "Влево", "Вправо", "Вверх" соответствующие переменным buttonBack, buttonDown, buttonEnter, buttonLeft, buttonRight, buttonUp. Значение 0 будет соответствовать не нажатой кнопке, 1 – нажатой.
Список переменных можно просмотреть на панели «Переменные» как в режиме «Отладка» (рисунок 14.4), так и в режиме «Редактор» (рисунок 14.5).
Рис. 14.4: Панель «Переменные» в режиме «Отладка».
Рис. 14.5: Панель «Переменные» в режиме «Редактор»
Задача 14.3. Найти среднее значение серого, используя датчик цвета в режиме яркости отраженного света (калибровка датчика цвета).
Найти значение серого можно вручную и автоматически, то есть выполнить вычисления в программе.
Ручная калибровка заключается в следующем. Помещаем робота так, чтобы датчик цвета располагался над белой поверхностью, фиксируем показания на экране контроллера. Затем помещаем робота над черной поверхностью и снова фиксируем показания. Допустим, показания над белой поверхностью составило 75%, а над черной – 15%. Осталось вычислить среднее значение: (75+15)/2=45.
А теперь реализуем калибровку автоматически.
Для этого подключим датчик цвета, выбрав режим света. При старте робот находится над белой поверхностью, снимает показания с датчика и записывает в переменную white, используя блок «Функция». Затем движется до черной линии, останавливается, снимает показания с датчика и записывает в переменную black. В блоке «Функция» организуем вычисление gray =(white + black)/2 и выводим значения переменных white, black и gray на экран (рисунок 14.6).
Рис. 14.6: Программа к задаче 14.3.
В программе используется по два одинаковых блока «Напечатать текст» для того, чтобы в первом блоке выводился текст – название цвета, а во втором – его значение. При запуске программы, на экране получим изображение как на рисунке 14.7.

Рис. 14.7: Результат выполнения программы.
Задача 14.4. На пол наклеены цветные линии. Робот проезжает над ними. Подсчитать количество красных линий и вывести на экран контроллера (рисунок 14.8).
Рис. 14.8: Внешний вид поля.
Подсчет организуем в бесконечном цикле. В переменной х будем хранить количество линий. Ее начальное значение равно нулю. При обнаружении линии нужного цвета значение переменной увеличивается на 1 и это значение выводим на экран (рис.14.9). Значение таймера нужно подбирать опытным путем, чтобы датчик цвета не подсчитывал одну линию несколько раз.
Рис. 14.9: Программа к задаче 14.4.
Задания для самостоятельного решения
1. Составить программу, в результате которой при нажатии на кнопки контроллера «Вправо» и «Влево» должна включится красная подсветка, а на кнопки «Вверх» и «Вниз» – оранжевая. Примечание: использовать зарезервированные переменные buttonUp, buttonDown, buttonLeft, buttonRight.
2. Робот движется в направлении к стене. Составить программу вывода на экран расстояния до стены.
Trik studio датчик освещенности
Предлагаем вашему вниманию четвёртую статью по программированию Lego Mindstorms Education EV3. В предыдущих статьях мы рассмотрели, как программировать робота в TRIK Studio, научили его двигаться, узнавать расстояние до препятствия.
В этой статье мы разберем что такое цикл, датчик света.
Цикл – это управляющая конструкция в языках программирования для организации многократного выполнения набора инструкций, дающая возможность многократного повторения определённых действий. Количество повторений зависит от условия цикла.
Существует 4 основных типа цикла:
• бесконечный (безусловный);
• с итерациями;
• с предусловием;
• с постусловием.
Виды циклов и их реализацию вы можете посмотреть в этом файле.
Задача для совместного решения
Определение цвета: выводить на экран слово «чёрный», если робот на чёрном поле, и белый, если на белом; за границу считать значение 50 датчика света.
Датчик цвета (сенсор света) – это цифровой датчик, который может определять цвет или яркость света. Этот датчик может работать в трёх разных режимах: в режиме «Цвет», в режиме «Яркость отражённого света» и в режиме «Яркость внешнего освещения».
В режиме «Цвет» датчик цвета распознает семь цветов: чёрный, синий, зелёный, жёлтый, красный, белый и коричневый, а также отсутствие цвета.
В режиме «Яркость отражённого света» датчик цвета определяет яркость света.
В режиме «Яркость внешнего освещения» датчик цвета определяет силу света.
Для циклов с условиями в TRIK Studio используется блок «Условие», а с итерациями – блок «Цикл». Бесконечные циклы реализуются путём соединения одного из блоков с каким-либо предыдущем.
Для нашей задачи в настройках робота поставьте на первый порт сенсор света. Также нам понадобится блок «Отчистить экран», для того чтобы значения не накладывались друг на друга.
Блок-схема алгоритма

Решение задачи «Настройка робота» в TRIK Studio.

В 2D-модели нужно будит нарисовать наше черное пятно. После запуска программы нам нужно будит таскать робота с чёрного пятна на белое. Результат будит виден на дисплее.
Результат работы программы на белом пятне:

Результат работы программы на чёрном пятне:

Задачи для самостоятельного решения:
1. Случайный въезд в бокс. Наш робот случайным образом доезжает до одного из боксов и поворачивает. Ваша задача – дописать программу таким образом, чтобы робот заезжал в бокс. Файл с заданием вы можете скачать здесь. Расположение моторов: B – левый, С – правый.
2. Светофор. На пути робота появился светофор. Ваша задача – при наезде на каждый сигнал светофора отображать следующие сигналы: красный сигнал-стоп (робот должен остановиться на 3 секунды; жёлтый сигнал – внимание (робот должен остановиться на 1 секунду); зёленый сигнал – свободно. После проезда последнего сигнала робот должен выключиться. Файл с заданием вы можете скачать здесь.
Регуляторы для движения по границе черного и белого в TRIK Studio

Описание презентации по отдельным слайдам:
Описание слайда:
Регуляторы для движения по границе черного и белого
в TRIK Studio
Президентский физико-математический лицей №239
Сергей Александрович Филиппов
Описание слайда:
План занятия
Регуляторы
Ветвление
Задача движения по границе
Значение серого
Релейные регуляторы
Двухпозиционный регулятор
Калибровка датчика
Корректировка скорости
Трехпозиционный регулятор
Описание слайда:
Регулятор
Регулятор – это совокупность устройств, обеспечивающих желаемое поведение системы.
Поплавковый регулятор Ползунова,
1765 г.
Центробежный регулятор Уатта,
1788 г.
Описание слайда:
Ветвление
Ветвление – часть алгоритма, в которой в зависимости от условия выполняется один или другой набор действий.
Описание слайда:
Движение вдоль границы черного и белого
Задача двигаться по границе черного и белого с помощью датчика освещенности
Значение серого находится на границе и вычисляется через среднее арифметическое:
grey=(white+black)/2
Для каждого робота свое значение серого, например
grey=25
Калибровка – определение пороговых показаний датчика
Описание слайда:
Тележка с одним датчиком освещенности
1
B
C
Описание слайда:
Двухпозиционный релейный регулятор
Двухпозиционный релейный регулятор имеет два состояния:
освещенность > серого,
освещенность ≤ серого.
Двухпозиционный регулятор строится на основе ветвления и выполняет одно из двух действий:
плавный поворот направо,
плавный поворот налево.
Миллисекунда нужна для отдыха контроллера
B
C
≤25
>25
Описание слайда:
Релейный регулятор: движение вдоль границы черного и белого
Движение на релейном регуляторе слишком неровное: робота заносит
Для стабилизации можно понизить скорость
Описание слайда:
Трехпозиционный релейный регулятор
Рассмотрим окрестность вокруг значения серого ±5 процентов
свет>30 | 30≥свет>20 | свет≤20
белый | серый | черный
Если показания датчика попадают в окрестность, робот движется прямолинейно – новое действие
25
30 | 20
Описание слайда:
Пропорциональный регулятор
В задачах автоматического регулирования управляющее воздействие u обычно является функцией динамической ошибки – отклонения e регулируемой величины x от ее заданного значения x0:
e =x0 – x
Пропорциональный регулятор – это устройство, оказывающее управляющее воздействие на объект пропорционально его отклонению от заданного состояния.
u = k·e
Здесь k – это коэффициент усиления регулятора.
Описание слайда:
Пропорциональный регулятор: движение по линии
Также как и в релейном регуляторе, необходимо определить среднее значение grey между черным и белым. Это будет то состояние датчика освещенности sensor1, к которому должна стремиться система.
e = grey — sensor1
Описание слайда:
Пропорциональный регулятор: калибровка датчика освещенности
Краткая калибровка с понижением, датчик над белым полем
grey=sensor1-(white-black)/2
Полная калибровка с определением белого и черного
Ожидание нажатия кнопки
Добавить сигнал с задержкой
Описание слайда:
Пропорциональный регулятор: калибровка датчика освещенности
Краткая калибровка с понижением, датчик над белым полем
grey=sensor1-(white-black)/2
Полная калибровка с определением белого и черного
Ожидание нажатия кнопки
Вывод результата на экран
Описание слайда:
Движение по линии с двумя датчиками освещенности
1
2
B
C
Описание слайда:
Релейный регулятор: движение с двумя датчиками освещенности
Оба на белом – движение прямо,
левый (sensor1) на черном, правый (sensor2) на белом – движение налево,
левый на белом, правый на черном – движение направо,
оба на черном – движение прямо.
Описание слайда:
Релейный четырехпозиционный регулятор: вложенное ветвление
На каждой ветви проверки первого датчика идет проверка второго датчика
Алгоритм выполняется только по одной из ветвей
Для каждого датчика требуется определить свое значение серого (например, 23 или 26)
Описание слайда:
Реакция на перекрестки
Издать звуковой сигнал на каждом перекрестке
При звуковом сигнале без ожидания один перекресток фиксируется несколько раз
При длительном ожидании робот может сойти с линии
Ожидание не должно превышать 200 мс
Описание слайда:
Подсчет перекрестков
Издать звуковой сигнал на каждом перекрестке
При звуковом сигнале без ожидания один перекресток фиксируется несколько раз
При длительном ожидании робот может сойти с линии
Ожидание не должно превышать 200 мс
Описание слайда:
Калибровка с понижением для двух датчиков
Краткая калибровка
Откуда взято вычитаемое число?
Оно определено заранее как половина разности крайних показаний датчика
grey1=sensor1-(white1-black1)/2
grey2=sensor2-(white2-black2)/2
Для точной калибровки желательно чистое одноцветное поле вне линии
Для надежности следует сделать паузу перед началом движения
Ожидание нажатия кнопки
Описание слайда:
Реакция на перекрестки
На старте обнулить счетчик перекрестков count=0
Построить цикл с условием по счетчику count
На каждом перекрестке увеличивать счетчик (один раз!)
Описание слайда:
Действия на перекрестках
На заданном перекрестке count==3 остановиться и издать звуковой сигнал
Для наглядности создать подпрограмму и вызвать ее после увеличения count=count+1
Для действия на другом перекрестке надо добавить в эту программу еще одну проверку условия
Описание слайда:
Действия на перекрестках
На 5 перекрестке сбить объект (после сигнала на 3 перекрестке)
Описание слайда:
Пропорциональный регулятор: движение по линии с двумя датчиками
Ошибка рассматривается как разность показаний датчиков
Нет зависимости от показаний на сером
e=sensor1-sensor2
Описание слайда:
Пропорциональный регулятор устранение статической ошибки
Датчики могут быть изготовлены с отклонениями
Разность показаний на однотонной поверхности — это статическая ошибка
До цикла
est=sensor1-sensor2
В цикле статическая ошибка устраняется:
e=sensor1-sensor2-est
Описание слайда:
Подпрограммы
Вытащите первый блок «Подпрограмма» на сцену
Назовите её. Блок подпрограммы появится в палитре
Двойным щелчком по подпрограмме перейдем к диаграмме её алгоритма
Описание слайда:
Реакция на перекрестки
Издать звуковой сигнал на перекрестке
Из-за задержки во время сигнала робот может сбиться с линии, поскольку он долго едет вслепую
Нужен сигнал без ожидания завершения
Описание слайда:
Пропорциональный регулятор: калибровка с ожиданием
Для точной калибровки желательно чистое одноцветное поле вне линии
Для надежности следует сделать паузу перед началом движения
Ожидание нажатия кнопки
Необходимо объявить все переменные в основной программе
Описание слайда:
Реакция на перекрестки
Сигнал без ожидания «пиликает» постоянно…
Почему?
Скорость робота – примерно 30 см/с
Ширина линии перекрестка – 3 см
На проезд линии робот тратит примерно 100 мс:
3 см / 30 см/с = 0.1 с
Значит, он успевает получить команду на сигнал около 100 раз
Установим время движения «вслепую» 200 мс – с запасом
Описание слайда:
Реакция на перекрестки
Вложенное ветвление – еще один способ проверки перекрестка
Описание слайда:
Полная калибровка для двух датчиков
Для точной калибровки отдельно считывается черное, отдельно белое поле
Ожидание нажатия кнопки
Описание слайда:
Подсчет перекрестков
П-регулятор поместить в отдельную подпрограмму
Обнуляем счетчик count и задаем все переменные до программы
Повторяем цикл, пока значение счетчика меньше 5
На каждом перекрестке добавляем в счетчик 1 count=count + 1
Описание слайда:
Увеличение счетчика
На каждом перекрестке добавляем в счетчик 1 count=count + 1
Описание слайда:
Усовершенствованный проезд перекрестка
В начале запоминаем время
На каждом перекрестке обновляем время
Засчитываем перекресток только через 200 мс
Описание слайда:
Действия на перекрестках
Подпрограмма «Действия» добавляется сразу после увеличения счетчика
Описание слайда:
Реакция на объект
Подпрограмма «Действия» сдвигает банки на каждом втором перекрестке
Условие четности перекрестка:
count % 2 == 0
Описание слайда:
Благодарю за внимание!
Сергей Александрович Филиппов
Президентский физико-математический лицей № 239
Санкт-Петербург
safilippov@gmail.com
Если Вы считаете, что материал нарушает авторские права либо по каким-то другим причинам должен быть удален с сайта, Вы можете оставить жалобу на материал.

Курс повышения квалификации
Дистанционное обучение как современный формат преподавания

Курс профессиональной переподготовки
Технология: теория и методика преподавания в образовательной организации

Курс профессиональной переподготовки
Методическая работа в онлайн-образовании
Ищем педагогов в команду «Инфоурок»
Найдите материал к любому уроку, указав свой предмет (категорию), класс, учебник и тему:
также Вы можете выбрать тип материала:
Общая информация
Похожие материалы
Презентация по технологии «Новогодний венок» 2 класс
Проектное решение противопучинные сваи СМОТ фундамент
Об организации работы по замене нестационарных торговых объектов и рекламных вывесок
Пример применения сваи СМОТ фундамент
Противопучинные мероприятия ОСПТ Reline для фундамента
Высотнический меч
Кабельные столбики
Воскресный бутерброт С.Н.
Воспользуйтесь поиском по нашей базе из
5357015 материалов.
Вам будут интересны эти курсы:
Оставьте свой комментарий
Безлимитный доступ к занятиям с онлайн-репетиторами
Выгоднее, чем оплачивать каждое занятие отдельно


Каждый третий российский школьник хотел бы стать разработчиком игр

Путин поручил не считать выплаты за классное руководство в средней зарплате

Для школьников к 1 сентября разработают короткие экскурсионные маршруты

Учителям предлагают 1,5 миллиона рублей за переезд в Златоуст

В Ленобласти педагоги призеров и победителей олимпиады получат денежные поощрения

Минобрнауки обновит перечень специальностей высшего образования
Подарочные сертификаты
Ответственность за разрешение любых спорных моментов, касающихся самих материалов и их содержания, берут на себя пользователи, разместившие материал на сайте. Однако администрация сайта готова оказать всяческую поддержку в решении любых вопросов, связанных с работой и содержанием сайта. Если Вы заметили, что на данном сайте незаконно используются материалы, сообщите об этом администрации сайта через форму обратной связи.
Все материалы, размещенные на сайте, созданы авторами сайта либо размещены пользователями сайта и представлены на сайте исключительно для ознакомления. Авторские права на материалы принадлежат их законным авторам. Частичное или полное копирование материалов сайта без письменного разрешения администрации сайта запрещено! Мнение администрации может не совпадать с точкой зрения авторов.
