Рейтинг:  5 / 5

Звезда активнаЗвезда активнаЗвезда активнаЗвезда активнаЗвезда активна
 

Содержание урока

Введение:

Наше третье занятие мы посвятим изучению вычислительных возможностей модуля EV3 и разберем примеры практических решений задач на вычисление траектории движения. Снова запускаем среду программирования Lego mindstorms EV3, загружаем наш проект lessons.ev3 и добавляем в проект новую программу - lesson-3-4. Добавлять новую программу в проект мы научились с вами на предыдущем уроке.

3.1. Красная палитра – операции с данными

Программные блоки, необходимые для выполнения различных операций над числовыми, логическими или текстовыми данными, сосредоточены в красной палитре среды программирования Lego mindstorms EV3. Красная палитра содержит 10 программных блоков. В отличие от зеленой палитры - с программными блоками красной палитры мы будем знакомиться постепенно, по мере продвижения по курсу программирования и возникновения необходимости в новых программных конструкциях. 

Красная палитра - операции с данными

Рис.1

3.2. Числовые значения. Блок "Константа", блок "Переменная"

Среда программирования Lego mindstorms EV3 позволяет нам обрабатывать в своих программах пять различных типов данных:"Текст", "Числовое значение", "Логическое значение", "Числовой массив", "Логический массив". В сегодняшнем уроке мы научимся оперировать с числовыми данными. Тип данных "Числовое значение" позволяет нам выполнять различные математические операции над числами. Числа в программе могут быть как положительными, так и отрицательными, быть целыми значениями или содержать десятичную дробь. Примеры: -15; 3,145; 8; -247,34.

Перед тем, как начать обрабатывать различные типы данных в наших программах, нам надо научиться их создавать и хранить. Для этих целей среда программирования Lego mindstorms EV3 предоставляет два вида программных блоков: "Переменная" и "Константа". Эти блоки позволяют создать в памяти робота специальные ячейки, позволяющие записывать, извлекать и редактировать различные типы данных. Программный блок "Константа" (Рис. 2) позволяет создавать ячейку памяти для хранения одного из пяти типов данных (Рис. 2 поз. 1). Требуемое значение записывается в ячейку на этапе создания программы (Рис. 2 поз. 2) и остается неизменным во время выполнения всей программы. Для получения значения, записанного в блок "Константа" используется "Вывод" (Рис. 2 поз. 3). Подробнее с извлечением данных из программных блоков мы познакомимся ниже при решении практической задачи Урока №3. 

Программный блок Константа

Рис. 2 

В отличие от программного блока "Константа" - в блоке "Переменная" присутствуют два режима "Считывание" и "Записать" (Рис. 3 поз. 1). Перед первым использованием необходимо задать имя переменной, выбрав параметр блока "Добавить переменную" (Рис. 3 поз. 2). Имя переменной может содержать только заглавные и строчные буквы латинского алфавита, цифры, а также символы _ и -. Задать значение переменной можно, записав или передав число в параметр "Значение" (Рис. 3 поз. 3).

Программный блок Переменная

Рис. 3

3.3. Блок математика, блок округление

Для выполнения математических вычислений служит программный блок "Математика". Он позволяет выполнить выбранную математическую операцию (Рис. 4 поз. 1) над двумя числами, заданными параметрами "a" и "b". В режимах "Абсолютная величина" и "Квадратный корень" для вычисления доступен только один параметр "a".

Программный блок Математика

Рис. 4

Отдельно следует остановиться на режиме "Дополнения". В этом режиме количество параметров для расчета увеличивается до четырех: "a""b""c" и "d". В параметр "Уравнение" (Рис. 5 поз. 1) можно вписать любую произвольную формулу, производящую вычисления с этими параметрами.

Программный блок Математика. Режим Дополнения.

Рис. 5

Иногда возникает необходимость произвести округление результата вычисления. Например: при отладке программы, можно выводить на экран модуля EV3 округленные промежуточные расчеты, чтобы легче было визуально контролировать ход выполнения программы. Для этого предназначен программный блок "Округление" (Рис. 6). Режимы "До ближайшего", "Округлить к большему" и "Округлить к меньшему" производят округление до целого значения. В режиме "Отбросить дробную часть" можно задать количество остающихся знаков дробной части после запятой.

Программный блок Округление

Рис. 6

3.4. Примеры выполнения вычислений в программе

Настало время применить полученные знания на практике.

Задача №4: необходимо написать программу прямолинейного движения для проезда роботом расстояния в 1 метр.

Решение: 

За один полный оборот мотора робот проезжает расстояние, равное длине окружности колеса. Это расстояние можно найти, умножив число Пи (=3,14159) на диаметр колеса. Диаметр колеса из образовательного набора Lego mindstorms EV3 равен 56 мм, а - из домашнего набора Lego mindstorms EV3 равен 43,2 мм. Если переведем расстояние в 1 метр в миллиметры (1000 мм) и разделим на расстояние, которое робот проходит за один оборот мотора, то узнаем: сколько оборотов мотора необходимо для проезда всего заданного расстояния.

Расстояние, равное одному обороту колеса

Рис. 7

Приступим к созданию программы:

  1. Используя программный блок "Константа", заведем в программу постоянное число Пи, равное примерно 3,14159.Решение задачи. Блок Константа
  2. Используя программный блок "Переменная", создадим в программе переменную D и занесем в нее значение диаметра колеса в зависимости от используемого конструктора (если вы использовали другие колеса, то самостоятельно измерьте диаметр и внесите значение в программный блок).Решение задачи. Блок Переменная.
  3. Используя программный блок "Математика", умножим значение блока "Константа" на значение переменной D. Для передачи значения из переменной D в программный блок "Математика" используем второй программный блок "Переменная" в режиме "Считывание"! (Для передачи значений между программными блоками используются шины данных. Чтобы установить шину данных, необходимо "потянуть" выходной параметр одного программного блока и "присоединить" его к входному параметру другого программного блока)Решение задачи. Блок Математика.
  4. Используя программный блок "Математика", разделим значение пути (1000 мм) на значение, полученное в шаге 3.Решение задачи. Второй блок Математика.
  5. Полученное в шаге 4 значение. округлив до двух знаков после запятой, выведем на экран модуля EV3.Решение задачи. Вывод результата на экран.
  6. Полученное в шаге 4 значение подадим в параметр "Обороты" блока "Рулевое управление".Решение задачи. Блок рулевое управление.

Загрузим полученную программу в нашего робота. Поставим робота на ровную свободную площадку и запустим программу. Измерив расстояние, пройденное роботом, убедимся в правильности нашей программы!

Полное решение задачи №4.

Задача №5: необходимо написать программу, рассчитывающую значение параметра "Градусы" для разворота нашего робота (Урок №2, Задача №1)

Данная задача имеет сходство с предыдущей - нам только требуется найти расстояние, которое должны проехать колеса нашего робота. Для того, чтобы наш робот развернулся на 180 градусов - необходимо, чтобы правое и левое колеса, проехав определенный путь по окружности, поменялись местами. Как видим из Рис. 8 - каждое колесо при этом проедет ровно половину окружности с диаметром, равным расстоянию между центрами колес (красная линия на Рис. 8). Подходящей линейкой померяем расстояние между центрами колес. Для робота, собранного по инструкции small-robot-45544, это расстояние равно 120 мм. Следовательно, умножив это значение на число Пи (3,14159) и разделив на 2, мы найдем расстояние, которое должно проехать каждое из колес нашего робота. Как найти соответствующее этому расстоянию число оборотов мотора - мы разобрали в Задаче 4 данного урока. Для того, чтобы перевести полученное число оборотов в градусы - вспомним соотношение: 1 оборот мотора = 360 градусов. Следовательно, если мы, воспользовавшись программным блоком "Математика", умножим полученное значение оборотов на 360 и подадим результат в параметр "Градусы" программного блока "Независимое управление моторами" (Урок №2 Рис.7 поз. 2), то решим требуемую задачу.

Схема разворота робота

Рис. 8 

Попробуйте написать программу для решения задачи №5 самостоятельно, не подглядывая в решение! 

Решение Задачи №5

Решение задачи №5

Оптимизация решения Задачи №5

Одна из важнейших задач программиста, это не только решение поставленной задачи, а поиск оптимального решения, которое позволяет экономить память и вычислительные ресурсы. Давайте еще раз вернемся к решению Задачи №5.

Обозначим через D1 - диаметр колеса нашего робота, а через D2 - расстояние между центрами колес.

Тогда расстояние, пройденное каждым колесом при развороте может быть найдено по формуле: 017

Расстояние, которое проезжает робот за один оборот, выражается формулой: 018

Разделив первую формулу на вторую, вычислим значение оборотов двигателя для разворота робота: 019

Чтобы получить необходимое нам значение градусов, умножим предыдущую формулу на 360: 020

Итак: для того, чтобы развернуть нашего робота на 180 градусов, мы должны расстояние между центрами колес разделить на диаметр колеса и умножить на 180. Наша формула значительно упростилась и имеет замечательное следствие: если мы вместо 180 поставим в нашу формулу произвольное значение, то именно на этот угол в итоге повернет вокруг своей оси наш робот!

Решим нашу Задачу №5 с помощью программного блока "Математика" в режиме "Дополнения":

Решение Задачи 5

 

Комментарии   

+1 #1 Анна 04.01.2017 01:01
У нас с сыном сначала совсем неоптимально получилось =)))

Но и после того как переделали программу, он поворачивается не строго на 180, а градусов на 200. Это из-за числа пи?
Цитировать
+13 #2 Tutor 04.01.2017 09:17
Здравствуйте, Анна!

Скорее всего дело в том, что в реальном мире физика часто побеждает математику. :-)
Решение ваше - верное, но, может быть, вы запускаете робота на более скользкой поверхности, и он, по инерции, проворачивает еще немного после остановки. Попробуйте значительно уменьшить мощность моторов (например - до -10, 10) и посмотреть на поведение робота.
В реальности очень часто выбранные параметры для поворота робота приходится корректировать при изменении материала поверхности, на которой он запускается...

Удачи!
Цитировать
+4 #3 Игорь 16.02.2017 00:08
Здравствуйте

при использовании "операций над массивами" была необходимость произвести операцию выбора максимального или минимального значения элемента массива
"В лоб" операция не предусмотрена
Нет ли обходного пути?
Цитировать
+6 #4 Tutor 16.02.2017 05:38
Здравствуйте, Игорь!
Только обход в цикле всего массива, сравнение элементов и сохранение в переменных минимального или максимального значения.
Цитировать
+7 #5 Игорь 16.02.2017 13:23
Понял, будем заходить по кривому ;-)))
Спасибо за оперативный ответ
В разделе экспериментов предусмотрен расширенный перечень операций над массивами (в т.ч. поиск мин и макс), странно почему в программировании разработчики не предусмотрели
Цитировать
+3 #6 Tutor 16.02.2017 13:27
Цитирую Игорь:
Понял, будем заходить по кривому ;-)))
странно почему в программировании разработчики не предусмотрели

Ну, наверное, чтобы учились программированию. :-)
Цитировать
+1 #7 Alex Ivanov 30.08.2017 17:30
Здравствуйте! Я не могу составить программу. Хочу составить программу, которая считает сумму чисел от одного до любого заданного числа и выводит на экран. Помогите, пожалуйста :(
Цитировать

Добавить комментарий

Внимание!
Возрастная категория посетителей сайта - (10+).
Все комментарии перед публикацией проходят модерацию.


Защитный код
Обновить